]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Add CLAM.
[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 <input type="number" class="strength form-control" id="strength" value="12">
74 <span class="input-group-btn">
75 <button class="btn generate">Generate Random Mnemonic</button>
76 </span>
77 </div>
78 </div>
79 </div>
80 <div class="form-group">
81 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
82 <div class="col-sm-10">
83 <textarea id="passphrase" class="passphrase form-control"></textarea>
84 </div>
85 </div>
86 <div class="form-group">
87 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
88 <div class="col-sm-10">
89 <select id="network-phrase" class="network form-control">
90 <!-- populated by javascript -->
91 </select>
92 </div>
93 </div>
94 <div class="form-group">
95 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
96 <div class="col-sm-10">
97 <textarea id="root-key" class="root-key form-control" readonly="readonly"></textarea>
98 </div>
99 </div>
100 </form>
101 </div>
102 </div>
103
104 <hr>
105
106 <div class="row">
107 <div class="col-md-12">
108 <h2>Derivation Path</h2>
109 <ul class="derivation-type nav nav-tabs" role="tablist">
110 <li id="bip44-tab" class="active">
111 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
112 </li>
113 <li id="bip32-tab">
114 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
115 </li>
116 </ul>
117 <div class="derivation-type tab-content">
118 <div id="bip44" class="tab-pane active">
119 <form class="form-horizontal" role="form">
120 <br>
121 <div class="col-sm-2"></div>
122 <div class="col-sm-10">
123 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
124 </div>
125 <div class="form-group">
126 <label for="purpose" class="col-sm-2 control-label">
127 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
128 </label>
129 <div class="col-sm-10">
130 <input id="purpose" type="text" class="purpose form-control" value="44">
131 </div>
132 </div>
133 <div class="form-group">
134 <label for="coin" class="col-sm-2 control-label">
135 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
136 </label>
137 <div class="col-sm-10">
138 <input id="coin" type="text" class="coin form-control" value="0">
139 </div>
140 </div>
141 <div class="form-group">
142 <label for="account" class="col-sm-2 control-label">
143 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
144 </label>
145 <div class="col-sm-10">
146 <input id="account" type="text" class="account form-control" value="0">
147 </div>
148 </div>
149 <div class="form-group">
150 <label for="change" class="col-sm-2 control-label">
151 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
152 </label>
153 <div class="col-sm-10">
154 <input id="change" type="text" class="change form-control" value="0">
155 </div>
156 </div>
157 <div class="form-group">
158 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
159 <div class="col-sm-10">
160 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
161 </div>
162 </div>
163 </form>
164 </div>
165 <div id="bip32" class="tab-pane">
166 <form class="form-horizontal" role="form">
167 <br>
168 <div class="col-sm-2"></div>
169 <div class="col-sm-10">
170 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
171 </div>
172 <div class="form-group">
173 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
174 <div class="col-sm-10">
175 <input id="bip32-path" type="text" class="path form-control" value="m/0">
176 </div>
177 </div>
178 <div class="form-group">
179 <label class="col-sm-2 control-label">Hive Wallet</label>
180 <div class="col-sm-10">
181 <p class="form-control no-border">
182 Use path <code>m/0'/0</code>.
183 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
184 </p>
185 </div>
186 </div>
187 <div class="form-group">
188 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
189 <div class="col-sm-10">
190 <p class="form-control no-border">
191 Use path <code>m/44'/0'/0'/0</code>.
192 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
193 </p>
194 </div>
195 </div>
196 </form>
197 </div>
198 </div>
199 <form class="form-horizontal" role="form">
200 <div class="form-group">
201 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
202 <div class="col-sm-10">
203 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
204 </div>
205 </div>
206 <div class="form-group">
207 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
208 <div class="col-sm-10">
209 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
210 </div>
211 </div>
212 </form>
213 </div>
214 </div>
215
216 <hr>
217
218 <div class="row">
219 <div class="col-md-12">
220 <h2>Derived Addresses</h2>
221 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
222 <table class="table table-striped">
223 <thead>
224 <th>
225 <div class="input-group">
226 Path&nbsp;&nbsp;
227 <button class="index-toggle">Toggle</button>
228 </div>
229 </th>
230 <th>
231 <div class="input-group">
232 Address&nbsp;&nbsp;
233 <button class="address-toggle">Toggle</button>
234 </div>
235 </th>
236 <th>
237 <div class="input-group">
238 Private Key&nbsp;&nbsp;
239 <button class="private-key-toggle">Toggle</button>
240 </div>
241 </th>
242 </thead>
243 <tbody class="addresses">
244 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
245 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
246 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
247 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
248 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
249 </tbody>
250 </table>
251 </div>
252 </div>
253 <span>Show next </button>
254 <input type="number" class="rows-to-add" value="20">
255 <button class="more">Show</button>
256
257 <hr>
258
259 <div class="row">
260 <div class="col-md-12">
261 <h2>More info</h2>
262 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
263 <p>
264 Read more at the
265 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
266 </p>
267 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
268 <p>
269 Read more at the
270 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
271 and see the demo at
272 <a href="http://bip32.org/" target="_blank">bip32.org</a>
273 </p>
274 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
275 <p>
276 Read more at the
277 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
278 </p>
279 <h3>Private Keys</h3>
280 <p>
281 Use private keys at
282 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
283 but be careful - it can be easy to make mistakes if you
284 don't know what you're doing
285 </p>
286 </div>
287 </div>
288
289 <hr>
290
291 <div class="row">
292 <div class="col-md-12">
293
294 <h2>Offline Usage</h2>
295
296 <p>
297 You can use this tool without having to be online.
298 </p>
299 <p>
300 In your browser, select file save-as, and save this page
301 as a file.
302 </p>
303 <p>
304 Double-click that file to open it in a browser
305 on any offline computer.
306 </p>
307 <p>
308 Alternatively, download it from
309 <a href="https://github.com/dcpos/bip39">
310 https://github.com/dcpos/bip39
311 </a>
312
313 </div>
314 </div>
315
316 <hr>
317
318 <div class="row">
319 <div class="col-md-12">
320
321 <h2>This project is 100% open-source code</h2>
322
323 <p>
324 <span>Get the source code at - </span>
325 <a href="https://github.com/dcpos/bip39" target="_blank">
326 https://github.com/dcpos/bip39
327 </a>
328 </p>
329
330 <h3>Libraries</h3>
331
332 <p>
333 <span>BitcoinJS - </span>
334 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
335 https://github.com/bitcoinjs/bitcoinjs-lib
336 </a>
337 </p>
338
339 <p>
340 <span>jsBIP39 - </span>
341 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
342 https://github.com/iancoleman/jsbip39
343 </a>
344 </p>
345
346 <p>
347 <span>sjcl - </span>
348 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
349 https://github.com/bitwiseshiftleft/sjcl
350 </a>
351 </p>
352
353 <p>
354 <span>jQuery - </span>
355 <a href="https://jquery.com/" target="_blank">
356 https://jquery.com/
357 </a>
358 </p>
359
360 <p>
361 <span>Twitter Bootstrap - </span>
362 <a href="http://getbootstrap.com/" target="_blank">
363 http://getbootstrap.com/
364 </a>
365 </p>
366
367 </div>
368 </div>
369
370 </div>
371
372 <div class="feedback-container">
373 <div class="feedback">Loading...</div>
374 </div>
375
376 <script type="text/template" id="address-row-template">
377 <tr>
378 <td class="index"><span></span></td>
379 <td class="address"><span></span></td>
380 <td class="privkey"><span></span></td>
381 </tr>
382 </script>
383 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
384 !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)
385 },_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))
386 },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});
387 </script>
388 <script>/*!
389 * Bootstrap v3.2.0 (http://getbootstrap.com)
390 * Copyright 2011-2014 Twitter, Inc.
391 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
392 */
393 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>
394 <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){
395 // (public) Constructor
396 function BigInteger(a, b, c) {
397 if (!(this instanceof BigInteger))
398 return new BigInteger(a, b, c)
399
400 if (a != null) {
401 if ("number" == typeof a) this.fromNumber(a, b, c)
402 else if (b == null && "string" != typeof a) this.fromString(a, 256)
403 else this.fromString(a, b)
404 }
405 }
406
407 var proto = BigInteger.prototype
408
409 // duck-typed isBigInteger
410 proto.__bigi = require('../package.json').version
411 BigInteger.isBigInteger = function (obj, check_ver) {
412 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
413 }
414
415 // Bits per digit
416 var dbits
417
418 // am: Compute w_j += (x*this_i), propagate carries,
419 // c is initial carry, returns final carry.
420 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
421 // We need to select the fastest one that works in this environment.
422
423 // am1: use a single mult and divide to get the high bits,
424 // max digit bits should be 26 because
425 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
426 function am1(i, x, w, j, c, n) {
427 while (--n >= 0) {
428 var v = x * this[i++] + w[j] + c
429 c = Math.floor(v / 0x4000000)
430 w[j++] = v & 0x3ffffff
431 }
432 return c
433 }
434 // am2 avoids a big mult-and-extract completely.
435 // Max digit bits should be <= 30 because we do bitwise ops
436 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
437 function am2(i, x, w, j, c, n) {
438 var xl = x & 0x7fff,
439 xh = x >> 15
440 while (--n >= 0) {
441 var l = this[i] & 0x7fff
442 var h = this[i++] >> 15
443 var m = xh * l + h * xl
444 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
445 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
446 w[j++] = l & 0x3fffffff
447 }
448 return c
449 }
450 // Alternately, set max digit bits to 28 since some
451 // browsers slow down when dealing with 32-bit numbers.
452 function am3(i, x, w, j, c, n) {
453 var xl = x & 0x3fff,
454 xh = x >> 14
455 while (--n >= 0) {
456 var l = this[i] & 0x3fff
457 var h = this[i++] >> 14
458 var m = xh * l + h * xl
459 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
460 c = (l >> 28) + (m >> 14) + xh * h
461 w[j++] = l & 0xfffffff
462 }
463 return c
464 }
465
466 // wtf?
467 BigInteger.prototype.am = am1
468 dbits = 26
469
470 BigInteger.prototype.DB = dbits
471 BigInteger.prototype.DM = ((1 << dbits) - 1)
472 var DV = BigInteger.prototype.DV = (1 << dbits)
473
474 var BI_FP = 52
475 BigInteger.prototype.FV = Math.pow(2, BI_FP)
476 BigInteger.prototype.F1 = BI_FP - dbits
477 BigInteger.prototype.F2 = 2 * dbits - BI_FP
478
479 // Digit conversions
480 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
481 var BI_RC = new Array()
482 var rr, vv
483 rr = "0".charCodeAt(0)
484 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
485 rr = "a".charCodeAt(0)
486 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
487 rr = "A".charCodeAt(0)
488 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
489
490 function int2char(n) {
491 return BI_RM.charAt(n)
492 }
493
494 function intAt(s, i) {
495 var c = BI_RC[s.charCodeAt(i)]
496 return (c == null) ? -1 : c
497 }
498
499 // (protected) copy this to r
500 function bnpCopyTo(r) {
501 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
502 r.t = this.t
503 r.s = this.s
504 }
505
506 // (protected) set from integer value x, -DV <= x < DV
507 function bnpFromInt(x) {
508 this.t = 1
509 this.s = (x < 0) ? -1 : 0
510 if (x > 0) this[0] = x
511 else if (x < -1) this[0] = x + DV
512 else this.t = 0
513 }
514
515 // return bigint initialized to value
516 function nbv(i) {
517 var r = new BigInteger()
518 r.fromInt(i)
519 return r
520 }
521
522 // (protected) set from string and radix
523 function bnpFromString(s, b) {
524 var self = this
525
526 var k
527 if (b == 16) k = 4
528 else if (b == 8) k = 3
529 else if (b == 256) k = 8; // byte array
530 else if (b == 2) k = 1
531 else if (b == 32) k = 5
532 else if (b == 4) k = 2
533 else {
534 self.fromRadix(s, b)
535 return
536 }
537 self.t = 0
538 self.s = 0
539 var i = s.length,
540 mi = false,
541 sh = 0
542 while (--i >= 0) {
543 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
544 if (x < 0) {
545 if (s.charAt(i) == "-") mi = true
546 continue
547 }
548 mi = false
549 if (sh == 0)
550 self[self.t++] = x
551 else if (sh + k > self.DB) {
552 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
553 self[self.t++] = (x >> (self.DB - sh))
554 } else
555 self[self.t - 1] |= x << sh
556 sh += k
557 if (sh >= self.DB) sh -= self.DB
558 }
559 if (k == 8 && (s[0] & 0x80) != 0) {
560 self.s = -1
561 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
562 }
563 self.clamp()
564 if (mi) BigInteger.ZERO.subTo(self, self)
565 }
566
567 // (protected) clamp off excess high words
568 function bnpClamp() {
569 var c = this.s & this.DM
570 while (this.t > 0 && this[this.t - 1] == c)--this.t
571 }
572
573 // (public) return string representation in given radix
574 function bnToString(b) {
575 var self = this
576 if (self.s < 0) return "-" + self.negate()
577 .toString(b)
578 var k
579 if (b == 16) k = 4
580 else if (b == 8) k = 3
581 else if (b == 2) k = 1
582 else if (b == 32) k = 5
583 else if (b == 4) k = 2
584 else return self.toRadix(b)
585 var km = (1 << k) - 1,
586 d, m = false,
587 r = "",
588 i = self.t
589 var p = self.DB - (i * self.DB) % k
590 if (i-- > 0) {
591 if (p < self.DB && (d = self[i] >> p) > 0) {
592 m = true
593 r = int2char(d)
594 }
595 while (i >= 0) {
596 if (p < k) {
597 d = (self[i] & ((1 << p) - 1)) << (k - p)
598 d |= self[--i] >> (p += self.DB - k)
599 } else {
600 d = (self[i] >> (p -= k)) & km
601 if (p <= 0) {
602 p += self.DB
603 --i
604 }
605 }
606 if (d > 0) m = true
607 if (m) r += int2char(d)
608 }
609 }
610 return m ? r : "0"
611 }
612
613 // (public) -this
614 function bnNegate() {
615 var r = new BigInteger()
616 BigInteger.ZERO.subTo(this, r)
617 return r
618 }
619
620 // (public) |this|
621 function bnAbs() {
622 return (this.s < 0) ? this.negate() : this
623 }
624
625 // (public) return + if this > a, - if this < a, 0 if equal
626 function bnCompareTo(a) {
627 var r = this.s - a.s
628 if (r != 0) return r
629 var i = this.t
630 r = i - a.t
631 if (r != 0) return (this.s < 0) ? -r : r
632 while (--i >= 0)
633 if ((r = this[i] - a[i]) != 0) return r
634 return 0
635 }
636
637 // returns bit length of the integer x
638 function nbits(x) {
639 var r = 1,
640 t
641 if ((t = x >>> 16) != 0) {
642 x = t
643 r += 16
644 }
645 if ((t = x >> 8) != 0) {
646 x = t
647 r += 8
648 }
649 if ((t = x >> 4) != 0) {
650 x = t
651 r += 4
652 }
653 if ((t = x >> 2) != 0) {
654 x = t
655 r += 2
656 }
657 if ((t = x >> 1) != 0) {
658 x = t
659 r += 1
660 }
661 return r
662 }
663
664 // (public) return the number of bits in "this"
665 function bnBitLength() {
666 if (this.t <= 0) return 0
667 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
668 }
669
670 // (public) return the number of bytes in "this"
671 function bnByteLength() {
672 return this.bitLength() >> 3
673 }
674
675 // (protected) r = this << n*DB
676 function bnpDLShiftTo(n, r) {
677 var i
678 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
679 for (i = n - 1; i >= 0; --i) r[i] = 0
680 r.t = this.t + n
681 r.s = this.s
682 }
683
684 // (protected) r = this >> n*DB
685 function bnpDRShiftTo(n, r) {
686 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
687 r.t = Math.max(this.t - n, 0)
688 r.s = this.s
689 }
690
691 // (protected) r = this << n
692 function bnpLShiftTo(n, r) {
693 var self = this
694 var bs = n % self.DB
695 var cbs = self.DB - bs
696 var bm = (1 << cbs) - 1
697 var ds = Math.floor(n / self.DB),
698 c = (self.s << bs) & self.DM,
699 i
700 for (i = self.t - 1; i >= 0; --i) {
701 r[i + ds + 1] = (self[i] >> cbs) | c
702 c = (self[i] & bm) << bs
703 }
704 for (i = ds - 1; i >= 0; --i) r[i] = 0
705 r[ds] = c
706 r.t = self.t + ds + 1
707 r.s = self.s
708 r.clamp()
709 }
710
711 // (protected) r = this >> n
712 function bnpRShiftTo(n, r) {
713 var self = this
714 r.s = self.s
715 var ds = Math.floor(n / self.DB)
716 if (ds >= self.t) {
717 r.t = 0
718 return
719 }
720 var bs = n % self.DB
721 var cbs = self.DB - bs
722 var bm = (1 << bs) - 1
723 r[0] = self[ds] >> bs
724 for (var i = ds + 1; i < self.t; ++i) {
725 r[i - ds - 1] |= (self[i] & bm) << cbs
726 r[i - ds] = self[i] >> bs
727 }
728 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
729 r.t = self.t - ds
730 r.clamp()
731 }
732
733 // (protected) r = this - a
734 function bnpSubTo(a, r) {
735 var self = this
736 var i = 0,
737 c = 0,
738 m = Math.min(a.t, self.t)
739 while (i < m) {
740 c += self[i] - a[i]
741 r[i++] = c & self.DM
742 c >>= self.DB
743 }
744 if (a.t < self.t) {
745 c -= a.s
746 while (i < self.t) {
747 c += self[i]
748 r[i++] = c & self.DM
749 c >>= self.DB
750 }
751 c += self.s
752 } else {
753 c += self.s
754 while (i < a.t) {
755 c -= a[i]
756 r[i++] = c & self.DM
757 c >>= self.DB
758 }
759 c -= a.s
760 }
761 r.s = (c < 0) ? -1 : 0
762 if (c < -1) r[i++] = self.DV + c
763 else if (c > 0) r[i++] = c
764 r.t = i
765 r.clamp()
766 }
767
768 // (protected) r = this * a, r != this,a (HAC 14.12)
769 // "this" should be the larger one if appropriate.
770 function bnpMultiplyTo(a, r) {
771 var x = this.abs(),
772 y = a.abs()
773 var i = x.t
774 r.t = i + y.t
775 while (--i >= 0) r[i] = 0
776 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
777 r.s = 0
778 r.clamp()
779 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
780 }
781
782 // (protected) r = this^2, r != this (HAC 14.16)
783 function bnpSquareTo(r) {
784 var x = this.abs()
785 var i = r.t = 2 * x.t
786 while (--i >= 0) r[i] = 0
787 for (i = 0; i < x.t - 1; ++i) {
788 var c = x.am(i, x[i], r, 2 * i, 0, 1)
789 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
790 r[i + x.t] -= x.DV
791 r[i + x.t + 1] = 1
792 }
793 }
794 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
795 r.s = 0
796 r.clamp()
797 }
798
799 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
800 // r != q, this != m. q or r may be null.
801 function bnpDivRemTo(m, q, r) {
802 var self = this
803 var pm = m.abs()
804 if (pm.t <= 0) return
805 var pt = self.abs()
806 if (pt.t < pm.t) {
807 if (q != null) q.fromInt(0)
808 if (r != null) self.copyTo(r)
809 return
810 }
811 if (r == null) r = new BigInteger()
812 var y = new BigInteger(),
813 ts = self.s,
814 ms = m.s
815 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
816 if (nsh > 0) {
817 pm.lShiftTo(nsh, y)
818 pt.lShiftTo(nsh, r)
819 } else {
820 pm.copyTo(y)
821 pt.copyTo(r)
822 }
823 var ys = y.t
824 var y0 = y[ys - 1]
825 if (y0 == 0) return
826 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
827 var d1 = self.FV / yt,
828 d2 = (1 << self.F1) / yt,
829 e = 1 << self.F2
830 var i = r.t,
831 j = i - ys,
832 t = (q == null) ? new BigInteger() : q
833 y.dlShiftTo(j, t)
834 if (r.compareTo(t) >= 0) {
835 r[r.t++] = 1
836 r.subTo(t, r)
837 }
838 BigInteger.ONE.dlShiftTo(ys, t)
839 t.subTo(y, y); // "negative" y so we can replace sub with am later
840 while (y.t < ys) y[y.t++] = 0
841 while (--j >= 0) {
842 // Estimate quotient digit
843 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
844 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
845 y.dlShiftTo(j, t)
846 r.subTo(t, r)
847 while (r[i] < --qd) r.subTo(t, r)
848 }
849 }
850 if (q != null) {
851 r.drShiftTo(ys, q)
852 if (ts != ms) BigInteger.ZERO.subTo(q, q)
853 }
854 r.t = ys
855 r.clamp()
856 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
857 if (ts < 0) BigInteger.ZERO.subTo(r, r)
858 }
859
860 // (public) this mod a
861 function bnMod(a) {
862 var r = new BigInteger()
863 this.abs()
864 .divRemTo(a, null, r)
865 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
866 return r
867 }
868
869 // Modular reduction using "classic" algorithm
870 function Classic(m) {
871 this.m = m
872 }
873
874 function cConvert(x) {
875 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
876 else return x
877 }
878
879 function cRevert(x) {
880 return x
881 }
882
883 function cReduce(x) {
884 x.divRemTo(this.m, null, x)
885 }
886
887 function cMulTo(x, y, r) {
888 x.multiplyTo(y, r)
889 this.reduce(r)
890 }
891
892 function cSqrTo(x, r) {
893 x.squareTo(r)
894 this.reduce(r)
895 }
896
897 Classic.prototype.convert = cConvert
898 Classic.prototype.revert = cRevert
899 Classic.prototype.reduce = cReduce
900 Classic.prototype.mulTo = cMulTo
901 Classic.prototype.sqrTo = cSqrTo
902
903 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
904 // justification:
905 // xy == 1 (mod m)
906 // xy = 1+km
907 // xy(2-xy) = (1+km)(1-km)
908 // x[y(2-xy)] = 1-k^2m^2
909 // x[y(2-xy)] == 1 (mod m^2)
910 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
911 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
912 // JS multiply "overflows" differently from C/C++, so care is needed here.
913 function bnpInvDigit() {
914 if (this.t < 1) return 0
915 var x = this[0]
916 if ((x & 1) == 0) return 0
917 var y = x & 3; // y == 1/x mod 2^2
918 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
919 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
920 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
921 // last step - calculate inverse mod DV directly
922 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
923 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
924 // we really want the negative inverse, and -DV < y < DV
925 return (y > 0) ? this.DV - y : -y
926 }
927
928 // Montgomery reduction
929 function Montgomery(m) {
930 this.m = m
931 this.mp = m.invDigit()
932 this.mpl = this.mp & 0x7fff
933 this.mph = this.mp >> 15
934 this.um = (1 << (m.DB - 15)) - 1
935 this.mt2 = 2 * m.t
936 }
937
938 // xR mod m
939 function montConvert(x) {
940 var r = new BigInteger()
941 x.abs()
942 .dlShiftTo(this.m.t, r)
943 r.divRemTo(this.m, null, r)
944 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
945 return r
946 }
947
948 // x/R mod m
949 function montRevert(x) {
950 var r = new BigInteger()
951 x.copyTo(r)
952 this.reduce(r)
953 return r
954 }
955
956 // x = x/R mod m (HAC 14.32)
957 function montReduce(x) {
958 while (x.t <= this.mt2) // pad x so am has enough room later
959 x[x.t++] = 0
960 for (var i = 0; i < this.m.t; ++i) {
961 // faster way of calculating u0 = x[i]*mp mod DV
962 var j = x[i] & 0x7fff
963 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
964 // use am to combine the multiply-shift-add into one call
965 j = i + this.m.t
966 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
967 // propagate carry
968 while (x[j] >= x.DV) {
969 x[j] -= x.DV
970 x[++j]++
971 }
972 }
973 x.clamp()
974 x.drShiftTo(this.m.t, x)
975 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
976 }
977
978 // r = "x^2/R mod m"; x != r
979 function montSqrTo(x, r) {
980 x.squareTo(r)
981 this.reduce(r)
982 }
983
984 // r = "xy/R mod m"; x,y != r
985 function montMulTo(x, y, r) {
986 x.multiplyTo(y, r)
987 this.reduce(r)
988 }
989
990 Montgomery.prototype.convert = montConvert
991 Montgomery.prototype.revert = montRevert
992 Montgomery.prototype.reduce = montReduce
993 Montgomery.prototype.mulTo = montMulTo
994 Montgomery.prototype.sqrTo = montSqrTo
995
996 // (protected) true iff this is even
997 function bnpIsEven() {
998 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
999 }
1000
1001 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1002 function bnpExp(e, z) {
1003 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1004 var r = new BigInteger(),
1005 r2 = new BigInteger(),
1006 g = z.convert(this),
1007 i = nbits(e) - 1
1008 g.copyTo(r)
1009 while (--i >= 0) {
1010 z.sqrTo(r, r2)
1011 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1012 else {
1013 var t = r
1014 r = r2
1015 r2 = t
1016 }
1017 }
1018 return z.revert(r)
1019 }
1020
1021 // (public) this^e % m, 0 <= e < 2^32
1022 function bnModPowInt(e, m) {
1023 var z
1024 if (e < 256 || m.isEven()) z = new Classic(m)
1025 else z = new Montgomery(m)
1026 return this.exp(e, z)
1027 }
1028
1029 // protected
1030 proto.copyTo = bnpCopyTo
1031 proto.fromInt = bnpFromInt
1032 proto.fromString = bnpFromString
1033 proto.clamp = bnpClamp
1034 proto.dlShiftTo = bnpDLShiftTo
1035 proto.drShiftTo = bnpDRShiftTo
1036 proto.lShiftTo = bnpLShiftTo
1037 proto.rShiftTo = bnpRShiftTo
1038 proto.subTo = bnpSubTo
1039 proto.multiplyTo = bnpMultiplyTo
1040 proto.squareTo = bnpSquareTo
1041 proto.divRemTo = bnpDivRemTo
1042 proto.invDigit = bnpInvDigit
1043 proto.isEven = bnpIsEven
1044 proto.exp = bnpExp
1045
1046 // public
1047 proto.toString = bnToString
1048 proto.negate = bnNegate
1049 proto.abs = bnAbs
1050 proto.compareTo = bnCompareTo
1051 proto.bitLength = bnBitLength
1052 proto.byteLength = bnByteLength
1053 proto.mod = bnMod
1054 proto.modPowInt = bnModPowInt
1055
1056 // (public)
1057 function bnClone() {
1058 var r = new BigInteger()
1059 this.copyTo(r)
1060 return r
1061 }
1062
1063 // (public) return value as integer
1064 function bnIntValue() {
1065 if (this.s < 0) {
1066 if (this.t == 1) return this[0] - this.DV
1067 else if (this.t == 0) return -1
1068 } else if (this.t == 1) return this[0]
1069 else if (this.t == 0) return 0
1070 // assumes 16 < DB < 32
1071 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1072 }
1073
1074 // (public) return value as byte
1075 function bnByteValue() {
1076 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1077 }
1078
1079 // (public) return value as short (assumes DB>=16)
1080 function bnShortValue() {
1081 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1082 }
1083
1084 // (protected) return x s.t. r^x < DV
1085 function bnpChunkSize(r) {
1086 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1087 }
1088
1089 // (public) 0 if this == 0, 1 if this > 0
1090 function bnSigNum() {
1091 if (this.s < 0) return -1
1092 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1093 else return 1
1094 }
1095
1096 // (protected) convert to radix string
1097 function bnpToRadix(b) {
1098 if (b == null) b = 10
1099 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1100 var cs = this.chunkSize(b)
1101 var a = Math.pow(b, cs)
1102 var d = nbv(a),
1103 y = new BigInteger(),
1104 z = new BigInteger(),
1105 r = ""
1106 this.divRemTo(d, y, z)
1107 while (y.signum() > 0) {
1108 r = (a + z.intValue())
1109 .toString(b)
1110 .substr(1) + r
1111 y.divRemTo(d, y, z)
1112 }
1113 return z.intValue()
1114 .toString(b) + r
1115 }
1116
1117 // (protected) convert from radix string
1118 function bnpFromRadix(s, b) {
1119 var self = this
1120 self.fromInt(0)
1121 if (b == null) b = 10
1122 var cs = self.chunkSize(b)
1123 var d = Math.pow(b, cs),
1124 mi = false,
1125 j = 0,
1126 w = 0
1127 for (var i = 0; i < s.length; ++i) {
1128 var x = intAt(s, i)
1129 if (x < 0) {
1130 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1131 continue
1132 }
1133 w = b * w + x
1134 if (++j >= cs) {
1135 self.dMultiply(d)
1136 self.dAddOffset(w, 0)
1137 j = 0
1138 w = 0
1139 }
1140 }
1141 if (j > 0) {
1142 self.dMultiply(Math.pow(b, j))
1143 self.dAddOffset(w, 0)
1144 }
1145 if (mi) BigInteger.ZERO.subTo(self, self)
1146 }
1147
1148 // (protected) alternate constructor
1149 function bnpFromNumber(a, b, c) {
1150 var self = this
1151 if ("number" == typeof b) {
1152 // new BigInteger(int,int,RNG)
1153 if (a < 2) self.fromInt(1)
1154 else {
1155 self.fromNumber(a, c)
1156 if (!self.testBit(a - 1)) // force MSB set
1157 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1158 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1159 while (!self.isProbablePrime(b)) {
1160 self.dAddOffset(2, 0)
1161 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1162 }
1163 }
1164 } else {
1165 // new BigInteger(int,RNG)
1166 var x = new Array(),
1167 t = a & 7
1168 x.length = (a >> 3) + 1
1169 b.nextBytes(x)
1170 if (t > 0) x[0] &= ((1 << t) - 1)
1171 else x[0] = 0
1172 self.fromString(x, 256)
1173 }
1174 }
1175
1176 // (public) convert to bigendian byte array
1177 function bnToByteArray() {
1178 var self = this
1179 var i = self.t,
1180 r = new Array()
1181 r[0] = self.s
1182 var p = self.DB - (i * self.DB) % 8,
1183 d, k = 0
1184 if (i-- > 0) {
1185 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1186 r[k++] = d | (self.s << (self.DB - p))
1187 while (i >= 0) {
1188 if (p < 8) {
1189 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1190 d |= self[--i] >> (p += self.DB - 8)
1191 } else {
1192 d = (self[i] >> (p -= 8)) & 0xff
1193 if (p <= 0) {
1194 p += self.DB
1195 --i
1196 }
1197 }
1198 if ((d & 0x80) != 0) d |= -256
1199 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1200 if (k > 0 || d != self.s) r[k++] = d
1201 }
1202 }
1203 return r
1204 }
1205
1206 function bnEquals(a) {
1207 return (this.compareTo(a) == 0)
1208 }
1209
1210 function bnMin(a) {
1211 return (this.compareTo(a) < 0) ? this : a
1212 }
1213
1214 function bnMax(a) {
1215 return (this.compareTo(a) > 0) ? this : a
1216 }
1217
1218 // (protected) r = this op a (bitwise)
1219 function bnpBitwiseTo(a, op, r) {
1220 var self = this
1221 var i, f, m = Math.min(a.t, self.t)
1222 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1223 if (a.t < self.t) {
1224 f = a.s & self.DM
1225 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1226 r.t = self.t
1227 } else {
1228 f = self.s & self.DM
1229 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1230 r.t = a.t
1231 }
1232 r.s = op(self.s, a.s)
1233 r.clamp()
1234 }
1235
1236 // (public) this & a
1237 function op_and(x, y) {
1238 return x & y
1239 }
1240
1241 function bnAnd(a) {
1242 var r = new BigInteger()
1243 this.bitwiseTo(a, op_and, r)
1244 return r
1245 }
1246
1247 // (public) this | a
1248 function op_or(x, y) {
1249 return x | y
1250 }
1251
1252 function bnOr(a) {
1253 var r = new BigInteger()
1254 this.bitwiseTo(a, op_or, r)
1255 return r
1256 }
1257
1258 // (public) this ^ a
1259 function op_xor(x, y) {
1260 return x ^ y
1261 }
1262
1263 function bnXor(a) {
1264 var r = new BigInteger()
1265 this.bitwiseTo(a, op_xor, r)
1266 return r
1267 }
1268
1269 // (public) this & ~a
1270 function op_andnot(x, y) {
1271 return x & ~y
1272 }
1273
1274 function bnAndNot(a) {
1275 var r = new BigInteger()
1276 this.bitwiseTo(a, op_andnot, r)
1277 return r
1278 }
1279
1280 // (public) ~this
1281 function bnNot() {
1282 var r = new BigInteger()
1283 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1284 r.t = this.t
1285 r.s = ~this.s
1286 return r
1287 }
1288
1289 // (public) this << n
1290 function bnShiftLeft(n) {
1291 var r = new BigInteger()
1292 if (n < 0) this.rShiftTo(-n, r)
1293 else this.lShiftTo(n, r)
1294 return r
1295 }
1296
1297 // (public) this >> n
1298 function bnShiftRight(n) {
1299 var r = new BigInteger()
1300 if (n < 0) this.lShiftTo(-n, r)
1301 else this.rShiftTo(n, r)
1302 return r
1303 }
1304
1305 // return index of lowest 1-bit in x, x < 2^31
1306 function lbit(x) {
1307 if (x == 0) return -1
1308 var r = 0
1309 if ((x & 0xffff) == 0) {
1310 x >>= 16
1311 r += 16
1312 }
1313 if ((x & 0xff) == 0) {
1314 x >>= 8
1315 r += 8
1316 }
1317 if ((x & 0xf) == 0) {
1318 x >>= 4
1319 r += 4
1320 }
1321 if ((x & 3) == 0) {
1322 x >>= 2
1323 r += 2
1324 }
1325 if ((x & 1) == 0)++r
1326 return r
1327 }
1328
1329 // (public) returns index of lowest 1-bit (or -1 if none)
1330 function bnGetLowestSetBit() {
1331 for (var i = 0; i < this.t; ++i)
1332 if (this[i] != 0) return i * this.DB + lbit(this[i])
1333 if (this.s < 0) return this.t * this.DB
1334 return -1
1335 }
1336
1337 // return number of 1 bits in x
1338 function cbit(x) {
1339 var r = 0
1340 while (x != 0) {
1341 x &= x - 1
1342 ++r
1343 }
1344 return r
1345 }
1346
1347 // (public) return number of set bits
1348 function bnBitCount() {
1349 var r = 0,
1350 x = this.s & this.DM
1351 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1352 return r
1353 }
1354
1355 // (public) true iff nth bit is set
1356 function bnTestBit(n) {
1357 var j = Math.floor(n / this.DB)
1358 if (j >= this.t) return (this.s != 0)
1359 return ((this[j] & (1 << (n % this.DB))) != 0)
1360 }
1361
1362 // (protected) this op (1<<n)
1363 function bnpChangeBit(n, op) {
1364 var r = BigInteger.ONE.shiftLeft(n)
1365 this.bitwiseTo(r, op, r)
1366 return r
1367 }
1368
1369 // (public) this | (1<<n)
1370 function bnSetBit(n) {
1371 return this.changeBit(n, op_or)
1372 }
1373
1374 // (public) this & ~(1<<n)
1375 function bnClearBit(n) {
1376 return this.changeBit(n, op_andnot)
1377 }
1378
1379 // (public) this ^ (1<<n)
1380 function bnFlipBit(n) {
1381 return this.changeBit(n, op_xor)
1382 }
1383
1384 // (protected) r = this + a
1385 function bnpAddTo(a, r) {
1386 var self = this
1387
1388 var i = 0,
1389 c = 0,
1390 m = Math.min(a.t, self.t)
1391 while (i < m) {
1392 c += self[i] + a[i]
1393 r[i++] = c & self.DM
1394 c >>= self.DB
1395 }
1396 if (a.t < self.t) {
1397 c += a.s
1398 while (i < self.t) {
1399 c += self[i]
1400 r[i++] = c & self.DM
1401 c >>= self.DB
1402 }
1403 c += self.s
1404 } else {
1405 c += self.s
1406 while (i < a.t) {
1407 c += a[i]
1408 r[i++] = c & self.DM
1409 c >>= self.DB
1410 }
1411 c += a.s
1412 }
1413 r.s = (c < 0) ? -1 : 0
1414 if (c > 0) r[i++] = c
1415 else if (c < -1) r[i++] = self.DV + c
1416 r.t = i
1417 r.clamp()
1418 }
1419
1420 // (public) this + a
1421 function bnAdd(a) {
1422 var r = new BigInteger()
1423 this.addTo(a, r)
1424 return r
1425 }
1426
1427 // (public) this - a
1428 function bnSubtract(a) {
1429 var r = new BigInteger()
1430 this.subTo(a, r)
1431 return r
1432 }
1433
1434 // (public) this * a
1435 function bnMultiply(a) {
1436 var r = new BigInteger()
1437 this.multiplyTo(a, r)
1438 return r
1439 }
1440
1441 // (public) this^2
1442 function bnSquare() {
1443 var r = new BigInteger()
1444 this.squareTo(r)
1445 return r
1446 }
1447
1448 // (public) this / a
1449 function bnDivide(a) {
1450 var r = new BigInteger()
1451 this.divRemTo(a, r, null)
1452 return r
1453 }
1454
1455 // (public) this % a
1456 function bnRemainder(a) {
1457 var r = new BigInteger()
1458 this.divRemTo(a, null, r)
1459 return r
1460 }
1461
1462 // (public) [this/a,this%a]
1463 function bnDivideAndRemainder(a) {
1464 var q = new BigInteger(),
1465 r = new BigInteger()
1466 this.divRemTo(a, q, r)
1467 return new Array(q, r)
1468 }
1469
1470 // (protected) this *= n, this >= 0, 1 < n < DV
1471 function bnpDMultiply(n) {
1472 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1473 ++this.t
1474 this.clamp()
1475 }
1476
1477 // (protected) this += n << w words, this >= 0
1478 function bnpDAddOffset(n, w) {
1479 if (n == 0) return
1480 while (this.t <= w) this[this.t++] = 0
1481 this[w] += n
1482 while (this[w] >= this.DV) {
1483 this[w] -= this.DV
1484 if (++w >= this.t) this[this.t++] = 0
1485 ++this[w]
1486 }
1487 }
1488
1489 // A "null" reducer
1490 function NullExp() {}
1491
1492 function nNop(x) {
1493 return x
1494 }
1495
1496 function nMulTo(x, y, r) {
1497 x.multiplyTo(y, r)
1498 }
1499
1500 function nSqrTo(x, r) {
1501 x.squareTo(r)
1502 }
1503
1504 NullExp.prototype.convert = nNop
1505 NullExp.prototype.revert = nNop
1506 NullExp.prototype.mulTo = nMulTo
1507 NullExp.prototype.sqrTo = nSqrTo
1508
1509 // (public) this^e
1510 function bnPow(e) {
1511 return this.exp(e, new NullExp())
1512 }
1513
1514 // (protected) r = lower n words of "this * a", a.t <= n
1515 // "this" should be the larger one if appropriate.
1516 function bnpMultiplyLowerTo(a, n, r) {
1517 var i = Math.min(this.t + a.t, n)
1518 r.s = 0; // assumes a,this >= 0
1519 r.t = i
1520 while (i > 0) r[--i] = 0
1521 var j
1522 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1523 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1524 r.clamp()
1525 }
1526
1527 // (protected) r = "this * a" without lower n words, n > 0
1528 // "this" should be the larger one if appropriate.
1529 function bnpMultiplyUpperTo(a, n, r) {
1530 --n
1531 var i = r.t = this.t + a.t - n
1532 r.s = 0; // assumes a,this >= 0
1533 while (--i >= 0) r[i] = 0
1534 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1535 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1536 r.clamp()
1537 r.drShiftTo(1, r)
1538 }
1539
1540 // Barrett modular reduction
1541 function Barrett(m) {
1542 // setup Barrett
1543 this.r2 = new BigInteger()
1544 this.q3 = new BigInteger()
1545 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1546 this.mu = this.r2.divide(m)
1547 this.m = m
1548 }
1549
1550 function barrettConvert(x) {
1551 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1552 else if (x.compareTo(this.m) < 0) return x
1553 else {
1554 var r = new BigInteger()
1555 x.copyTo(r)
1556 this.reduce(r)
1557 return r
1558 }
1559 }
1560
1561 function barrettRevert(x) {
1562 return x
1563 }
1564
1565 // x = x mod m (HAC 14.42)
1566 function barrettReduce(x) {
1567 var self = this
1568 x.drShiftTo(self.m.t - 1, self.r2)
1569 if (x.t > self.m.t + 1) {
1570 x.t = self.m.t + 1
1571 x.clamp()
1572 }
1573 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1574 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1575 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1576 x.subTo(self.r2, x)
1577 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1578 }
1579
1580 // r = x^2 mod m; x != r
1581 function barrettSqrTo(x, r) {
1582 x.squareTo(r)
1583 this.reduce(r)
1584 }
1585
1586 // r = x*y mod m; x,y != r
1587 function barrettMulTo(x, y, r) {
1588 x.multiplyTo(y, r)
1589 this.reduce(r)
1590 }
1591
1592 Barrett.prototype.convert = barrettConvert
1593 Barrett.prototype.revert = barrettRevert
1594 Barrett.prototype.reduce = barrettReduce
1595 Barrett.prototype.mulTo = barrettMulTo
1596 Barrett.prototype.sqrTo = barrettSqrTo
1597
1598 // (public) this^e % m (HAC 14.85)
1599 function bnModPow(e, m) {
1600 var i = e.bitLength(),
1601 k, r = nbv(1),
1602 z
1603 if (i <= 0) return r
1604 else if (i < 18) k = 1
1605 else if (i < 48) k = 3
1606 else if (i < 144) k = 4
1607 else if (i < 768) k = 5
1608 else k = 6
1609 if (i < 8)
1610 z = new Classic(m)
1611 else if (m.isEven())
1612 z = new Barrett(m)
1613 else
1614 z = new Montgomery(m)
1615
1616 // precomputation
1617 var g = new Array(),
1618 n = 3,
1619 k1 = k - 1,
1620 km = (1 << k) - 1
1621 g[1] = z.convert(this)
1622 if (k > 1) {
1623 var g2 = new BigInteger()
1624 z.sqrTo(g[1], g2)
1625 while (n <= km) {
1626 g[n] = new BigInteger()
1627 z.mulTo(g2, g[n - 2], g[n])
1628 n += 2
1629 }
1630 }
1631
1632 var j = e.t - 1,
1633 w, is1 = true,
1634 r2 = new BigInteger(),
1635 t
1636 i = nbits(e[j]) - 1
1637 while (j >= 0) {
1638 if (i >= k1) w = (e[j] >> (i - k1)) & km
1639 else {
1640 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1641 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1642 }
1643
1644 n = k
1645 while ((w & 1) == 0) {
1646 w >>= 1
1647 --n
1648 }
1649 if ((i -= n) < 0) {
1650 i += this.DB
1651 --j
1652 }
1653 if (is1) { // ret == 1, don't bother squaring or multiplying it
1654 g[w].copyTo(r)
1655 is1 = false
1656 } else {
1657 while (n > 1) {
1658 z.sqrTo(r, r2)
1659 z.sqrTo(r2, r)
1660 n -= 2
1661 }
1662 if (n > 0) z.sqrTo(r, r2)
1663 else {
1664 t = r
1665 r = r2
1666 r2 = t
1667 }
1668 z.mulTo(r2, g[w], r)
1669 }
1670
1671 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1672 z.sqrTo(r, r2)
1673 t = r
1674 r = r2
1675 r2 = t
1676 if (--i < 0) {
1677 i = this.DB - 1
1678 --j
1679 }
1680 }
1681 }
1682 return z.revert(r)
1683 }
1684
1685 // (public) gcd(this,a) (HAC 14.54)
1686 function bnGCD(a) {
1687 var x = (this.s < 0) ? this.negate() : this.clone()
1688 var y = (a.s < 0) ? a.negate() : a.clone()
1689 if (x.compareTo(y) < 0) {
1690 var t = x
1691 x = y
1692 y = t
1693 }
1694 var i = x.getLowestSetBit(),
1695 g = y.getLowestSetBit()
1696 if (g < 0) return x
1697 if (i < g) g = i
1698 if (g > 0) {
1699 x.rShiftTo(g, x)
1700 y.rShiftTo(g, y)
1701 }
1702 while (x.signum() > 0) {
1703 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1704 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1705 if (x.compareTo(y) >= 0) {
1706 x.subTo(y, x)
1707 x.rShiftTo(1, x)
1708 } else {
1709 y.subTo(x, y)
1710 y.rShiftTo(1, y)
1711 }
1712 }
1713 if (g > 0) y.lShiftTo(g, y)
1714 return y
1715 }
1716
1717 // (protected) this % n, n < 2^26
1718 function bnpModInt(n) {
1719 if (n <= 0) return 0
1720 var d = this.DV % n,
1721 r = (this.s < 0) ? n - 1 : 0
1722 if (this.t > 0)
1723 if (d == 0) r = this[0] % n
1724 else
1725 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1726 return r
1727 }
1728
1729 // (public) 1/this % m (HAC 14.61)
1730 function bnModInverse(m) {
1731 var ac = m.isEven()
1732 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1733 var u = m.clone(),
1734 v = this.clone()
1735 var a = nbv(1),
1736 b = nbv(0),
1737 c = nbv(0),
1738 d = nbv(1)
1739 while (u.signum() != 0) {
1740 while (u.isEven()) {
1741 u.rShiftTo(1, u)
1742 if (ac) {
1743 if (!a.isEven() || !b.isEven()) {
1744 a.addTo(this, a)
1745 b.subTo(m, b)
1746 }
1747 a.rShiftTo(1, a)
1748 } else if (!b.isEven()) b.subTo(m, b)
1749 b.rShiftTo(1, b)
1750 }
1751 while (v.isEven()) {
1752 v.rShiftTo(1, v)
1753 if (ac) {
1754 if (!c.isEven() || !d.isEven()) {
1755 c.addTo(this, c)
1756 d.subTo(m, d)
1757 }
1758 c.rShiftTo(1, c)
1759 } else if (!d.isEven()) d.subTo(m, d)
1760 d.rShiftTo(1, d)
1761 }
1762 if (u.compareTo(v) >= 0) {
1763 u.subTo(v, u)
1764 if (ac) a.subTo(c, a)
1765 b.subTo(d, b)
1766 } else {
1767 v.subTo(u, v)
1768 if (ac) c.subTo(a, c)
1769 d.subTo(b, d)
1770 }
1771 }
1772 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
1773 if (d.compareTo(m) >= 0) return d.subtract(m)
1774 if (d.signum() < 0) d.addTo(m, d)
1775 else return d
1776 if (d.signum() < 0) return d.add(m)
1777 else return d
1778 }
1779
1780 var lowprimes = [
1781 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
1782 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
1783 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
1784 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
1785 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
1786 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
1787 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
1788 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
1789 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
1790 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
1791 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
1792 ]
1793
1794 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
1795
1796 // (public) test primality with certainty >= 1-.5^t
1797 function bnIsProbablePrime(t) {
1798 var i, x = this.abs()
1799 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
1800 for (i = 0; i < lowprimes.length; ++i)
1801 if (x[0] == lowprimes[i]) return true
1802 return false
1803 }
1804 if (x.isEven()) return false
1805 i = 1
1806 while (i < lowprimes.length) {
1807 var m = lowprimes[i],
1808 j = i + 1
1809 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
1810 m = x.modInt(m)
1811 while (i < j) if (m % lowprimes[i++] == 0) return false
1812 }
1813 return x.millerRabin(t)
1814 }
1815
1816 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
1817 function bnpMillerRabin(t) {
1818 var n1 = this.subtract(BigInteger.ONE)
1819 var k = n1.getLowestSetBit()
1820 if (k <= 0) return false
1821 var r = n1.shiftRight(k)
1822 t = (t + 1) >> 1
1823 if (t > lowprimes.length) t = lowprimes.length
1824 var a = new BigInteger(null)
1825 var j, bases = []
1826 for (var i = 0; i < t; ++i) {
1827 for (;;) {
1828 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
1829 if (bases.indexOf(j) == -1) break
1830 }
1831 bases.push(j)
1832 a.fromInt(j)
1833 var y = a.modPow(r, this)
1834 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
1835 var j = 1
1836 while (j++ < k && y.compareTo(n1) != 0) {
1837 y = y.modPowInt(2, this)
1838 if (y.compareTo(BigInteger.ONE) == 0) return false
1839 }
1840 if (y.compareTo(n1) != 0) return false
1841 }
1842 }
1843 return true
1844 }
1845
1846 // protected
1847 proto.chunkSize = bnpChunkSize
1848 proto.toRadix = bnpToRadix
1849 proto.fromRadix = bnpFromRadix
1850 proto.fromNumber = bnpFromNumber
1851 proto.bitwiseTo = bnpBitwiseTo
1852 proto.changeBit = bnpChangeBit
1853 proto.addTo = bnpAddTo
1854 proto.dMultiply = bnpDMultiply
1855 proto.dAddOffset = bnpDAddOffset
1856 proto.multiplyLowerTo = bnpMultiplyLowerTo
1857 proto.multiplyUpperTo = bnpMultiplyUpperTo
1858 proto.modInt = bnpModInt
1859 proto.millerRabin = bnpMillerRabin
1860
1861 // public
1862 proto.clone = bnClone
1863 proto.intValue = bnIntValue
1864 proto.byteValue = bnByteValue
1865 proto.shortValue = bnShortValue
1866 proto.signum = bnSigNum
1867 proto.toByteArray = bnToByteArray
1868 proto.equals = bnEquals
1869 proto.min = bnMin
1870 proto.max = bnMax
1871 proto.and = bnAnd
1872 proto.or = bnOr
1873 proto.xor = bnXor
1874 proto.andNot = bnAndNot
1875 proto.not = bnNot
1876 proto.shiftLeft = bnShiftLeft
1877 proto.shiftRight = bnShiftRight
1878 proto.getLowestSetBit = bnGetLowestSetBit
1879 proto.bitCount = bnBitCount
1880 proto.testBit = bnTestBit
1881 proto.setBit = bnSetBit
1882 proto.clearBit = bnClearBit
1883 proto.flipBit = bnFlipBit
1884 proto.add = bnAdd
1885 proto.subtract = bnSubtract
1886 proto.multiply = bnMultiply
1887 proto.divide = bnDivide
1888 proto.remainder = bnRemainder
1889 proto.divideAndRemainder = bnDivideAndRemainder
1890 proto.modPow = bnModPow
1891 proto.modInverse = bnModInverse
1892 proto.pow = bnPow
1893 proto.gcd = bnGCD
1894 proto.isProbablePrime = bnIsProbablePrime
1895
1896 // JSBN-specific extension
1897 proto.square = bnSquare
1898
1899 // constants
1900 BigInteger.ZERO = nbv(0)
1901 BigInteger.ONE = nbv(1)
1902 BigInteger.valueOf = nbv
1903
1904 module.exports = BigInteger
1905
1906 },{"../package.json":4}],2:[function(require,module,exports){
1907 (function (Buffer){
1908 // FIXME: Kind of a weird way to throw exceptions, consider removing
1909 var assert = require('assert')
1910 var BigInteger = require('./bigi')
1911
1912 /**
1913 * Turns a byte array into a big integer.
1914 *
1915 * This function will interpret a byte array as a big integer in big
1916 * endian notation.
1917 */
1918 BigInteger.fromByteArrayUnsigned = function(byteArray) {
1919 // BigInteger expects a DER integer conformant byte array
1920 if (byteArray[0] & 0x80) {
1921 return new BigInteger([0].concat(byteArray))
1922 }
1923
1924 return new BigInteger(byteArray)
1925 }
1926
1927 /**
1928 * Returns a byte array representation of the big integer.
1929 *
1930 * This returns the absolute of the contained value in big endian
1931 * form. A value of zero results in an empty array.
1932 */
1933 BigInteger.prototype.toByteArrayUnsigned = function() {
1934 var byteArray = this.toByteArray()
1935 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
1936 }
1937
1938 BigInteger.fromDERInteger = function(byteArray) {
1939 return new BigInteger(byteArray)
1940 }
1941
1942 /*
1943 * Converts BigInteger to a DER integer representation.
1944 *
1945 * The format for this value uses the most significant bit as a sign
1946 * bit. If the most significant bit is already set and the integer is
1947 * positive, a 0x00 is prepended.
1948 *
1949 * Examples:
1950 *
1951 * 0 => 0x00
1952 * 1 => 0x01
1953 * -1 => 0xff
1954 * 127 => 0x7f
1955 * -127 => 0x81
1956 * 128 => 0x0080
1957 * -128 => 0x80
1958 * 255 => 0x00ff
1959 * -255 => 0xff01
1960 * 16300 => 0x3fac
1961 * -16300 => 0xc054
1962 * 62300 => 0x00f35c
1963 * -62300 => 0xff0ca4
1964 */
1965 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
1966
1967 BigInteger.fromBuffer = function(buffer) {
1968 // BigInteger expects a DER integer conformant byte array
1969 if (buffer[0] & 0x80) {
1970 var byteArray = Array.prototype.slice.call(buffer)
1971
1972 return new BigInteger([0].concat(byteArray))
1973 }
1974
1975 return new BigInteger(buffer)
1976 }
1977
1978 BigInteger.fromHex = function(hex) {
1979 if (hex === '') return BigInteger.ZERO
1980
1981 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
1982 assert.equal(hex.length % 2, 0, 'Incomplete hex')
1983 return new BigInteger(hex, 16)
1984 }
1985
1986 BigInteger.prototype.toBuffer = function(size) {
1987 var byteArray = this.toByteArrayUnsigned()
1988 var zeros = []
1989
1990 var padding = size - byteArray.length
1991 while (zeros.length < padding) zeros.push(0)
1992
1993 return new Buffer(zeros.concat(byteArray))
1994 }
1995
1996 BigInteger.prototype.toHex = function(size) {
1997 return this.toBuffer(size).toString('hex')
1998 }
1999
2000 }).call(this,require("buffer").Buffer)
2001 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2002 var BigInteger = require('./bigi')
2003
2004 //addons
2005 require('./convert')
2006
2007 module.exports = BigInteger
2008 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2009 module.exports={
2010 "name": "bigi",
2011 "version": "1.4.0",
2012 "description": "Big integers.",
2013 "keywords": [
2014 "cryptography",
2015 "math",
2016 "bitcoin",
2017 "arbitrary",
2018 "precision",
2019 "arithmetic",
2020 "big",
2021 "integer",
2022 "int",
2023 "number",
2024 "biginteger",
2025 "bigint",
2026 "bignumber",
2027 "decimal",
2028 "float"
2029 ],
2030 "devDependencies": {
2031 "mocha": "^1.20.1",
2032 "jshint": "^2.5.1",
2033 "coveralls": "^2.10.0",
2034 "istanbul": "^0.2.11"
2035 },
2036 "repository": {
2037 "url": "https://github.com/cryptocoinjs/bigi",
2038 "type": "git"
2039 },
2040 "main": "./lib/index.js",
2041 "scripts": {
2042 "test": "_mocha -- test/*.js",
2043 "jshint": "jshint --config jshint.json lib/*.js ; true",
2044 "unit": "mocha",
2045 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2046 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2047 },
2048 "dependencies": {},
2049 "testling": {
2050 "files": "test/*.js",
2051 "harness": "mocha",
2052 "browsers": [
2053 "ie/9..latest",
2054 "firefox/latest",
2055 "chrome/latest",
2056 "safari/6.0..latest",
2057 "iphone/6.0..latest",
2058 "android-browser/4.2..latest"
2059 ]
2060 },
2061 "bugs": {
2062 "url": "https://github.com/cryptocoinjs/bigi/issues"
2063 },
2064 "homepage": "https://github.com/cryptocoinjs/bigi",
2065 "_id": "bigi@1.4.0",
2066 "dist": {
2067 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2068 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2069 },
2070 "_from": "bigi@^1.4.0",
2071 "_npmVersion": "1.4.3",
2072 "_npmUser": {
2073 "name": "jp",
2074 "email": "jprichardson@gmail.com"
2075 },
2076 "maintainers": [
2077 {
2078 "name": "jp",
2079 "email": "jprichardson@gmail.com"
2080 },
2081 {
2082 "name": "midnightlightning",
2083 "email": "boydb@midnightdesign.ws"
2084 },
2085 {
2086 "name": "sidazhang",
2087 "email": "sidazhang89@gmail.com"
2088 },
2089 {
2090 "name": "nadav",
2091 "email": "npm@shesek.info"
2092 }
2093 ],
2094 "directories": {},
2095 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2096 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2097 }
2098
2099 },{}],5:[function(require,module,exports){
2100 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2101 //
2102 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2103 //
2104 // Originally from narwhal.js (http://narwhaljs.org)
2105 // Copyright (c) 2009 Thomas Robinson <280north.com>
2106 //
2107 // Permission is hereby granted, free of charge, to any person obtaining a copy
2108 // of this software and associated documentation files (the 'Software'), to
2109 // deal in the Software without restriction, including without limitation the
2110 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2111 // sell copies of the Software, and to permit persons to whom the Software is
2112 // furnished to do so, subject to the following conditions:
2113 //
2114 // The above copyright notice and this permission notice shall be included in
2115 // all copies or substantial portions of the Software.
2116 //
2117 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2118 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2119 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2120 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2121 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2122 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2123
2124 // when used in node, this will actually load the util module we depend on
2125 // versus loading the builtin util module as happens otherwise
2126 // this is a bug in node module loading as far as I am concerned
2127 var util = require('util/');
2128
2129 var pSlice = Array.prototype.slice;
2130 var hasOwn = Object.prototype.hasOwnProperty;
2131
2132 // 1. The assert module provides functions that throw
2133 // AssertionError's when particular conditions are not met. The
2134 // assert module must conform to the following interface.
2135
2136 var assert = module.exports = ok;
2137
2138 // 2. The AssertionError is defined in assert.
2139 // new assert.AssertionError({ message: message,
2140 // actual: actual,
2141 // expected: expected })
2142
2143 assert.AssertionError = function AssertionError(options) {
2144 this.name = 'AssertionError';
2145 this.actual = options.actual;
2146 this.expected = options.expected;
2147 this.operator = options.operator;
2148 if (options.message) {
2149 this.message = options.message;
2150 this.generatedMessage = false;
2151 } else {
2152 this.message = getMessage(this);
2153 this.generatedMessage = true;
2154 }
2155 var stackStartFunction = options.stackStartFunction || fail;
2156
2157 if (Error.captureStackTrace) {
2158 Error.captureStackTrace(this, stackStartFunction);
2159 }
2160 else {
2161 // non v8 browsers so we can have a stacktrace
2162 var err = new Error();
2163 if (err.stack) {
2164 var out = err.stack;
2165
2166 // try to strip useless frames
2167 var fn_name = stackStartFunction.name;
2168 var idx = out.indexOf('\n' + fn_name);
2169 if (idx >= 0) {
2170 // once we have located the function frame
2171 // we need to strip out everything before it (and its line)
2172 var next_line = out.indexOf('\n', idx + 1);
2173 out = out.substring(next_line + 1);
2174 }
2175
2176 this.stack = out;
2177 }
2178 }
2179 };
2180
2181 // assert.AssertionError instanceof Error
2182 util.inherits(assert.AssertionError, Error);
2183
2184 function replacer(key, value) {
2185 if (util.isUndefined(value)) {
2186 return '' + value;
2187 }
2188 if (util.isNumber(value) && !isFinite(value)) {
2189 return value.toString();
2190 }
2191 if (util.isFunction(value) || util.isRegExp(value)) {
2192 return value.toString();
2193 }
2194 return value;
2195 }
2196
2197 function truncate(s, n) {
2198 if (util.isString(s)) {
2199 return s.length < n ? s : s.slice(0, n);
2200 } else {
2201 return s;
2202 }
2203 }
2204
2205 function getMessage(self) {
2206 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2207 self.operator + ' ' +
2208 truncate(JSON.stringify(self.expected, replacer), 128);
2209 }
2210
2211 // At present only the three keys mentioned above are used and
2212 // understood by the spec. Implementations or sub modules can pass
2213 // other keys to the AssertionError's constructor - they will be
2214 // ignored.
2215
2216 // 3. All of the following functions must throw an AssertionError
2217 // when a corresponding condition is not met, with a message that
2218 // may be undefined if not provided. All assertion methods provide
2219 // both the actual and expected values to the assertion error for
2220 // display purposes.
2221
2222 function fail(actual, expected, message, operator, stackStartFunction) {
2223 throw new assert.AssertionError({
2224 message: message,
2225 actual: actual,
2226 expected: expected,
2227 operator: operator,
2228 stackStartFunction: stackStartFunction
2229 });
2230 }
2231
2232 // EXTENSION! allows for well behaved errors defined elsewhere.
2233 assert.fail = fail;
2234
2235 // 4. Pure assertion tests whether a value is truthy, as determined
2236 // by !!guard.
2237 // assert.ok(guard, message_opt);
2238 // This statement is equivalent to assert.equal(true, !!guard,
2239 // message_opt);. To test strictly for the value true, use
2240 // assert.strictEqual(true, guard, message_opt);.
2241
2242 function ok(value, message) {
2243 if (!value) fail(value, true, message, '==', assert.ok);
2244 }
2245 assert.ok = ok;
2246
2247 // 5. The equality assertion tests shallow, coercive equality with
2248 // ==.
2249 // assert.equal(actual, expected, message_opt);
2250
2251 assert.equal = function equal(actual, expected, message) {
2252 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2253 };
2254
2255 // 6. The non-equality assertion tests for whether two objects are not equal
2256 // with != assert.notEqual(actual, expected, message_opt);
2257
2258 assert.notEqual = function notEqual(actual, expected, message) {
2259 if (actual == expected) {
2260 fail(actual, expected, message, '!=', assert.notEqual);
2261 }
2262 };
2263
2264 // 7. The equivalence assertion tests a deep equality relation.
2265 // assert.deepEqual(actual, expected, message_opt);
2266
2267 assert.deepEqual = function deepEqual(actual, expected, message) {
2268 if (!_deepEqual(actual, expected)) {
2269 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2270 }
2271 };
2272
2273 function _deepEqual(actual, expected) {
2274 // 7.1. All identical values are equivalent, as determined by ===.
2275 if (actual === expected) {
2276 return true;
2277
2278 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2279 if (actual.length != expected.length) return false;
2280
2281 for (var i = 0; i < actual.length; i++) {
2282 if (actual[i] !== expected[i]) return false;
2283 }
2284
2285 return true;
2286
2287 // 7.2. If the expected value is a Date object, the actual value is
2288 // equivalent if it is also a Date object that refers to the same time.
2289 } else if (util.isDate(actual) && util.isDate(expected)) {
2290 return actual.getTime() === expected.getTime();
2291
2292 // 7.3 If the expected value is a RegExp object, the actual value is
2293 // equivalent if it is also a RegExp object with the same source and
2294 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2295 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2296 return actual.source === expected.source &&
2297 actual.global === expected.global &&
2298 actual.multiline === expected.multiline &&
2299 actual.lastIndex === expected.lastIndex &&
2300 actual.ignoreCase === expected.ignoreCase;
2301
2302 // 7.4. Other pairs that do not both pass typeof value == 'object',
2303 // equivalence is determined by ==.
2304 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2305 return actual == expected;
2306
2307 // 7.5 For all other Object pairs, including Array objects, equivalence is
2308 // determined by having the same number of owned properties (as verified
2309 // with Object.prototype.hasOwnProperty.call), the same set of keys
2310 // (although not necessarily the same order), equivalent values for every
2311 // corresponding key, and an identical 'prototype' property. Note: this
2312 // accounts for both named and indexed properties on Arrays.
2313 } else {
2314 return objEquiv(actual, expected);
2315 }
2316 }
2317
2318 function isArguments(object) {
2319 return Object.prototype.toString.call(object) == '[object Arguments]';
2320 }
2321
2322 function objEquiv(a, b) {
2323 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2324 return false;
2325 // an identical 'prototype' property.
2326 if (a.prototype !== b.prototype) return false;
2327 // if one is a primitive, the other must be same
2328 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2329 return a === b;
2330 }
2331 var aIsArgs = isArguments(a),
2332 bIsArgs = isArguments(b);
2333 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2334 return false;
2335 if (aIsArgs) {
2336 a = pSlice.call(a);
2337 b = pSlice.call(b);
2338 return _deepEqual(a, b);
2339 }
2340 var ka = objectKeys(a),
2341 kb = objectKeys(b),
2342 key, i;
2343 // having the same number of owned properties (keys incorporates
2344 // hasOwnProperty)
2345 if (ka.length != kb.length)
2346 return false;
2347 //the same set of keys (although not necessarily the same order),
2348 ka.sort();
2349 kb.sort();
2350 //~~~cheap key test
2351 for (i = ka.length - 1; i >= 0; i--) {
2352 if (ka[i] != kb[i])
2353 return false;
2354 }
2355 //equivalent values for every corresponding key, and
2356 //~~~possibly expensive deep test
2357 for (i = ka.length - 1; i >= 0; i--) {
2358 key = ka[i];
2359 if (!_deepEqual(a[key], b[key])) return false;
2360 }
2361 return true;
2362 }
2363
2364 // 8. The non-equivalence assertion tests for any deep inequality.
2365 // assert.notDeepEqual(actual, expected, message_opt);
2366
2367 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2368 if (_deepEqual(actual, expected)) {
2369 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2370 }
2371 };
2372
2373 // 9. The strict equality assertion tests strict equality, as determined by ===.
2374 // assert.strictEqual(actual, expected, message_opt);
2375
2376 assert.strictEqual = function strictEqual(actual, expected, message) {
2377 if (actual !== expected) {
2378 fail(actual, expected, message, '===', assert.strictEqual);
2379 }
2380 };
2381
2382 // 10. The strict non-equality assertion tests for strict inequality, as
2383 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2384
2385 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2386 if (actual === expected) {
2387 fail(actual, expected, message, '!==', assert.notStrictEqual);
2388 }
2389 };
2390
2391 function expectedException(actual, expected) {
2392 if (!actual || !expected) {
2393 return false;
2394 }
2395
2396 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2397 return expected.test(actual);
2398 } else if (actual instanceof expected) {
2399 return true;
2400 } else if (expected.call({}, actual) === true) {
2401 return true;
2402 }
2403
2404 return false;
2405 }
2406
2407 function _throws(shouldThrow, block, expected, message) {
2408 var actual;
2409
2410 if (util.isString(expected)) {
2411 message = expected;
2412 expected = null;
2413 }
2414
2415 try {
2416 block();
2417 } catch (e) {
2418 actual = e;
2419 }
2420
2421 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2422 (message ? ' ' + message : '.');
2423
2424 if (shouldThrow && !actual) {
2425 fail(actual, expected, 'Missing expected exception' + message);
2426 }
2427
2428 if (!shouldThrow && expectedException(actual, expected)) {
2429 fail(actual, expected, 'Got unwanted exception' + message);
2430 }
2431
2432 if ((shouldThrow && actual && expected &&
2433 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2434 throw actual;
2435 }
2436 }
2437
2438 // 11. Expected to throw an error:
2439 // assert.throws(block, Error_opt, message_opt);
2440
2441 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2442 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2443 };
2444
2445 // EXTENSION! This is annoying to write outside this module.
2446 assert.doesNotThrow = function(block, /*optional*/message) {
2447 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2448 };
2449
2450 assert.ifError = function(err) { if (err) {throw err;}};
2451
2452 var objectKeys = Object.keys || function (obj) {
2453 var keys = [];
2454 for (var key in obj) {
2455 if (hasOwn.call(obj, key)) keys.push(key);
2456 }
2457 return keys;
2458 };
2459
2460 },{"util/":29}],6:[function(require,module,exports){
2461
2462 },{}],7:[function(require,module,exports){
2463 /*!
2464 * The buffer module from node.js, for the browser.
2465 *
2466 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2467 * @license MIT
2468 */
2469
2470 var base64 = require('base64-js')
2471 var ieee754 = require('ieee754')
2472 var isArray = require('is-array')
2473
2474 exports.Buffer = Buffer
2475 exports.SlowBuffer = SlowBuffer
2476 exports.INSPECT_MAX_BYTES = 50
2477 Buffer.poolSize = 8192 // not used by this implementation
2478
2479 var rootParent = {}
2480
2481 /**
2482 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2483 * === true Use Uint8Array implementation (fastest)
2484 * === false Use Object implementation (most compatible, even IE6)
2485 *
2486 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2487 * Opera 11.6+, iOS 4.2+.
2488 *
2489 * Due to various browser bugs, sometimes the Object implementation will be used even
2490 * when the browser supports typed arrays.
2491 *
2492 * Note:
2493 *
2494 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2495 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2496 *
2497 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2498 * on objects.
2499 *
2500 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2501 *
2502 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2503 * incorrect length in some situations.
2504
2505 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2506 * get the Object implementation, which is slower but behaves correctly.
2507 */
2508 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2509 function Bar () {}
2510 try {
2511 var arr = new Uint8Array(1)
2512 arr.foo = function () { return 42 }
2513 arr.constructor = Bar
2514 return arr.foo() === 42 && // typed array instances can be augmented
2515 arr.constructor === Bar && // constructor can be set
2516 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2517 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2518 } catch (e) {
2519 return false
2520 }
2521 })()
2522
2523 function kMaxLength () {
2524 return Buffer.TYPED_ARRAY_SUPPORT
2525 ? 0x7fffffff
2526 : 0x3fffffff
2527 }
2528
2529 /**
2530 * Class: Buffer
2531 * =============
2532 *
2533 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2534 * with function properties for all the node `Buffer` API functions. We use
2535 * `Uint8Array` so that square bracket notation works as expected -- it returns
2536 * a single octet.
2537 *
2538 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2539 * prototype.
2540 */
2541 function Buffer (arg) {
2542 if (!(this instanceof Buffer)) {
2543 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2544 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2545 return new Buffer(arg)
2546 }
2547
2548 this.length = 0
2549 this.parent = undefined
2550
2551 // Common case.
2552 if (typeof arg === 'number') {
2553 return fromNumber(this, arg)
2554 }
2555
2556 // Slightly less common case.
2557 if (typeof arg === 'string') {
2558 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2559 }
2560
2561 // Unusual.
2562 return fromObject(this, arg)
2563 }
2564
2565 function fromNumber (that, length) {
2566 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2567 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2568 for (var i = 0; i < length; i++) {
2569 that[i] = 0
2570 }
2571 }
2572 return that
2573 }
2574
2575 function fromString (that, string, encoding) {
2576 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2577
2578 // Assumption: byteLength() return value is always < kMaxLength.
2579 var length = byteLength(string, encoding) | 0
2580 that = allocate(that, length)
2581
2582 that.write(string, encoding)
2583 return that
2584 }
2585
2586 function fromObject (that, object) {
2587 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2588
2589 if (isArray(object)) return fromArray(that, object)
2590
2591 if (object == null) {
2592 throw new TypeError('must start with number, buffer, array or string')
2593 }
2594
2595 if (typeof ArrayBuffer !== 'undefined') {
2596 if (object.buffer instanceof ArrayBuffer) {
2597 return fromTypedArray(that, object)
2598 }
2599 if (object instanceof ArrayBuffer) {
2600 return fromArrayBuffer(that, object)
2601 }
2602 }
2603
2604 if (object.length) return fromArrayLike(that, object)
2605
2606 return fromJsonObject(that, object)
2607 }
2608
2609 function fromBuffer (that, buffer) {
2610 var length = checked(buffer.length) | 0
2611 that = allocate(that, length)
2612 buffer.copy(that, 0, 0, length)
2613 return that
2614 }
2615
2616 function fromArray (that, array) {
2617 var length = checked(array.length) | 0
2618 that = allocate(that, length)
2619 for (var i = 0; i < length; i += 1) {
2620 that[i] = array[i] & 255
2621 }
2622 return that
2623 }
2624
2625 // Duplicate of fromArray() to keep fromArray() monomorphic.
2626 function fromTypedArray (that, array) {
2627 var length = checked(array.length) | 0
2628 that = allocate(that, length)
2629 // Truncating the elements is probably not what people expect from typed
2630 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2631 // of the old Buffer constructor.
2632 for (var i = 0; i < length; i += 1) {
2633 that[i] = array[i] & 255
2634 }
2635 return that
2636 }
2637
2638 function fromArrayBuffer (that, array) {
2639 if (Buffer.TYPED_ARRAY_SUPPORT) {
2640 // Return an augmented `Uint8Array` instance, for best performance
2641 array.byteLength
2642 that = Buffer._augment(new Uint8Array(array))
2643 } else {
2644 // Fallback: Return an object instance of the Buffer class
2645 that = fromTypedArray(that, new Uint8Array(array))
2646 }
2647 return that
2648 }
2649
2650 function fromArrayLike (that, array) {
2651 var length = checked(array.length) | 0
2652 that = allocate(that, length)
2653 for (var i = 0; i < length; i += 1) {
2654 that[i] = array[i] & 255
2655 }
2656 return that
2657 }
2658
2659 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2660 // Returns a zero-length buffer for inputs that don't conform to the spec.
2661 function fromJsonObject (that, object) {
2662 var array
2663 var length = 0
2664
2665 if (object.type === 'Buffer' && isArray(object.data)) {
2666 array = object.data
2667 length = checked(array.length) | 0
2668 }
2669 that = allocate(that, length)
2670
2671 for (var i = 0; i < length; i += 1) {
2672 that[i] = array[i] & 255
2673 }
2674 return that
2675 }
2676
2677 function allocate (that, length) {
2678 if (Buffer.TYPED_ARRAY_SUPPORT) {
2679 // Return an augmented `Uint8Array` instance, for best performance
2680 that = Buffer._augment(new Uint8Array(length))
2681 } else {
2682 // Fallback: Return an object instance of the Buffer class
2683 that.length = length
2684 that._isBuffer = true
2685 }
2686
2687 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2688 if (fromPool) that.parent = rootParent
2689
2690 return that
2691 }
2692
2693 function checked (length) {
2694 // Note: cannot use `length < kMaxLength` here because that fails when
2695 // length is NaN (which is otherwise coerced to zero.)
2696 if (length >= kMaxLength()) {
2697 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2698 'size: 0x' + kMaxLength().toString(16) + ' bytes')
2699 }
2700 return length | 0
2701 }
2702
2703 function SlowBuffer (subject, encoding) {
2704 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2705
2706 var buf = new Buffer(subject, encoding)
2707 delete buf.parent
2708 return buf
2709 }
2710
2711 Buffer.isBuffer = function isBuffer (b) {
2712 return !!(b != null && b._isBuffer)
2713 }
2714
2715 Buffer.compare = function compare (a, b) {
2716 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2717 throw new TypeError('Arguments must be Buffers')
2718 }
2719
2720 if (a === b) return 0
2721
2722 var x = a.length
2723 var y = b.length
2724
2725 var i = 0
2726 var len = Math.min(x, y)
2727 while (i < len) {
2728 if (a[i] !== b[i]) break
2729
2730 ++i
2731 }
2732
2733 if (i !== len) {
2734 x = a[i]
2735 y = b[i]
2736 }
2737
2738 if (x < y) return -1
2739 if (y < x) return 1
2740 return 0
2741 }
2742
2743 Buffer.isEncoding = function isEncoding (encoding) {
2744 switch (String(encoding).toLowerCase()) {
2745 case 'hex':
2746 case 'utf8':
2747 case 'utf-8':
2748 case 'ascii':
2749 case 'binary':
2750 case 'base64':
2751 case 'raw':
2752 case 'ucs2':
2753 case 'ucs-2':
2754 case 'utf16le':
2755 case 'utf-16le':
2756 return true
2757 default:
2758 return false
2759 }
2760 }
2761
2762 Buffer.concat = function concat (list, length) {
2763 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
2764
2765 if (list.length === 0) {
2766 return new Buffer(0)
2767 }
2768
2769 var i
2770 if (length === undefined) {
2771 length = 0
2772 for (i = 0; i < list.length; i++) {
2773 length += list[i].length
2774 }
2775 }
2776
2777 var buf = new Buffer(length)
2778 var pos = 0
2779 for (i = 0; i < list.length; i++) {
2780 var item = list[i]
2781 item.copy(buf, pos)
2782 pos += item.length
2783 }
2784 return buf
2785 }
2786
2787 function byteLength (string, encoding) {
2788 if (typeof string !== 'string') string = '' + string
2789
2790 var len = string.length
2791 if (len === 0) return 0
2792
2793 // Use a for loop to avoid recursion
2794 var loweredCase = false
2795 for (;;) {
2796 switch (encoding) {
2797 case 'ascii':
2798 case 'binary':
2799 // Deprecated
2800 case 'raw':
2801 case 'raws':
2802 return len
2803 case 'utf8':
2804 case 'utf-8':
2805 return utf8ToBytes(string).length
2806 case 'ucs2':
2807 case 'ucs-2':
2808 case 'utf16le':
2809 case 'utf-16le':
2810 return len * 2
2811 case 'hex':
2812 return len >>> 1
2813 case 'base64':
2814 return base64ToBytes(string).length
2815 default:
2816 if (loweredCase) return utf8ToBytes(string).length // assume utf8
2817 encoding = ('' + encoding).toLowerCase()
2818 loweredCase = true
2819 }
2820 }
2821 }
2822 Buffer.byteLength = byteLength
2823
2824 // pre-set for values that may exist in the future
2825 Buffer.prototype.length = undefined
2826 Buffer.prototype.parent = undefined
2827
2828 function slowToString (encoding, start, end) {
2829 var loweredCase = false
2830
2831 start = start | 0
2832 end = end === undefined || end === Infinity ? this.length : end | 0
2833
2834 if (!encoding) encoding = 'utf8'
2835 if (start < 0) start = 0
2836 if (end > this.length) end = this.length
2837 if (end <= start) return ''
2838
2839 while (true) {
2840 switch (encoding) {
2841 case 'hex':
2842 return hexSlice(this, start, end)
2843
2844 case 'utf8':
2845 case 'utf-8':
2846 return utf8Slice(this, start, end)
2847
2848 case 'ascii':
2849 return asciiSlice(this, start, end)
2850
2851 case 'binary':
2852 return binarySlice(this, start, end)
2853
2854 case 'base64':
2855 return base64Slice(this, start, end)
2856
2857 case 'ucs2':
2858 case 'ucs-2':
2859 case 'utf16le':
2860 case 'utf-16le':
2861 return utf16leSlice(this, start, end)
2862
2863 default:
2864 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
2865 encoding = (encoding + '').toLowerCase()
2866 loweredCase = true
2867 }
2868 }
2869 }
2870
2871 Buffer.prototype.toString = function toString () {
2872 var length = this.length | 0
2873 if (length === 0) return ''
2874 if (arguments.length === 0) return utf8Slice(this, 0, length)
2875 return slowToString.apply(this, arguments)
2876 }
2877
2878 Buffer.prototype.equals = function equals (b) {
2879 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2880 if (this === b) return true
2881 return Buffer.compare(this, b) === 0
2882 }
2883
2884 Buffer.prototype.inspect = function inspect () {
2885 var str = ''
2886 var max = exports.INSPECT_MAX_BYTES
2887 if (this.length > 0) {
2888 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
2889 if (this.length > max) str += ' ... '
2890 }
2891 return '<Buffer ' + str + '>'
2892 }
2893
2894 Buffer.prototype.compare = function compare (b) {
2895 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2896 if (this === b) return 0
2897 return Buffer.compare(this, b)
2898 }
2899
2900 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
2901 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
2902 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
2903 byteOffset >>= 0
2904
2905 if (this.length === 0) return -1
2906 if (byteOffset >= this.length) return -1
2907
2908 // Negative offsets start from the end of the buffer
2909 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
2910
2911 if (typeof val === 'string') {
2912 if (val.length === 0) return -1 // special case: looking for empty string always fails
2913 return String.prototype.indexOf.call(this, val, byteOffset)
2914 }
2915 if (Buffer.isBuffer(val)) {
2916 return arrayIndexOf(this, val, byteOffset)
2917 }
2918 if (typeof val === 'number') {
2919 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
2920 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
2921 }
2922 return arrayIndexOf(this, [ val ], byteOffset)
2923 }
2924
2925 function arrayIndexOf (arr, val, byteOffset) {
2926 var foundIndex = -1
2927 for (var i = 0; byteOffset + i < arr.length; i++) {
2928 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
2929 if (foundIndex === -1) foundIndex = i
2930 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
2931 } else {
2932 foundIndex = -1
2933 }
2934 }
2935 return -1
2936 }
2937
2938 throw new TypeError('val must be string, number or Buffer')
2939 }
2940
2941 // `get` is deprecated
2942 Buffer.prototype.get = function get (offset) {
2943 console.log('.get() is deprecated. Access using array indexes instead.')
2944 return this.readUInt8(offset)
2945 }
2946
2947 // `set` is deprecated
2948 Buffer.prototype.set = function set (v, offset) {
2949 console.log('.set() is deprecated. Access using array indexes instead.')
2950 return this.writeUInt8(v, offset)
2951 }
2952
2953 function hexWrite (buf, string, offset, length) {
2954 offset = Number(offset) || 0
2955 var remaining = buf.length - offset
2956 if (!length) {
2957 length = remaining
2958 } else {
2959 length = Number(length)
2960 if (length > remaining) {
2961 length = remaining
2962 }
2963 }
2964
2965 // must be an even number of digits
2966 var strLen = string.length
2967 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
2968
2969 if (length > strLen / 2) {
2970 length = strLen / 2
2971 }
2972 for (var i = 0; i < length; i++) {
2973 var parsed = parseInt(string.substr(i * 2, 2), 16)
2974 if (isNaN(parsed)) throw new Error('Invalid hex string')
2975 buf[offset + i] = parsed
2976 }
2977 return i
2978 }
2979
2980 function utf8Write (buf, string, offset, length) {
2981 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
2982 }
2983
2984 function asciiWrite (buf, string, offset, length) {
2985 return blitBuffer(asciiToBytes(string), buf, offset, length)
2986 }
2987
2988 function binaryWrite (buf, string, offset, length) {
2989 return asciiWrite(buf, string, offset, length)
2990 }
2991
2992 function base64Write (buf, string, offset, length) {
2993 return blitBuffer(base64ToBytes(string), buf, offset, length)
2994 }
2995
2996 function ucs2Write (buf, string, offset, length) {
2997 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
2998 }
2999
3000 Buffer.prototype.write = function write (string, offset, length, encoding) {
3001 // Buffer#write(string)
3002 if (offset === undefined) {
3003 encoding = 'utf8'
3004 length = this.length
3005 offset = 0
3006 // Buffer#write(string, encoding)
3007 } else if (length === undefined && typeof offset === 'string') {
3008 encoding = offset
3009 length = this.length
3010 offset = 0
3011 // Buffer#write(string, offset[, length][, encoding])
3012 } else if (isFinite(offset)) {
3013 offset = offset | 0
3014 if (isFinite(length)) {
3015 length = length | 0
3016 if (encoding === undefined) encoding = 'utf8'
3017 } else {
3018 encoding = length
3019 length = undefined
3020 }
3021 // legacy write(string, encoding, offset, length) - remove in v0.13
3022 } else {
3023 var swap = encoding
3024 encoding = offset
3025 offset = length | 0
3026 length = swap
3027 }
3028
3029 var remaining = this.length - offset
3030 if (length === undefined || length > remaining) length = remaining
3031
3032 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3033 throw new RangeError('attempt to write outside buffer bounds')
3034 }
3035
3036 if (!encoding) encoding = 'utf8'
3037
3038 var loweredCase = false
3039 for (;;) {
3040 switch (encoding) {
3041 case 'hex':
3042 return hexWrite(this, string, offset, length)
3043
3044 case 'utf8':
3045 case 'utf-8':
3046 return utf8Write(this, string, offset, length)
3047
3048 case 'ascii':
3049 return asciiWrite(this, string, offset, length)
3050
3051 case 'binary':
3052 return binaryWrite(this, string, offset, length)
3053
3054 case 'base64':
3055 // Warning: maxLength not taken into account in base64Write
3056 return base64Write(this, string, offset, length)
3057
3058 case 'ucs2':
3059 case 'ucs-2':
3060 case 'utf16le':
3061 case 'utf-16le':
3062 return ucs2Write(this, string, offset, length)
3063
3064 default:
3065 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3066 encoding = ('' + encoding).toLowerCase()
3067 loweredCase = true
3068 }
3069 }
3070 }
3071
3072 Buffer.prototype.toJSON = function toJSON () {
3073 return {
3074 type: 'Buffer',
3075 data: Array.prototype.slice.call(this._arr || this, 0)
3076 }
3077 }
3078
3079 function base64Slice (buf, start, end) {
3080 if (start === 0 && end === buf.length) {
3081 return base64.fromByteArray(buf)
3082 } else {
3083 return base64.fromByteArray(buf.slice(start, end))
3084 }
3085 }
3086
3087 function utf8Slice (buf, start, end) {
3088 end = Math.min(buf.length, end)
3089 var firstByte
3090 var secondByte
3091 var thirdByte
3092 var fourthByte
3093 var bytesPerSequence
3094 var tempCodePoint
3095 var codePoint
3096 var res = []
3097 var i = start
3098
3099 for (; i < end; i += bytesPerSequence) {
3100 firstByte = buf[i]
3101 codePoint = 0xFFFD
3102
3103 if (firstByte > 0xEF) {
3104 bytesPerSequence = 4
3105 } else if (firstByte > 0xDF) {
3106 bytesPerSequence = 3
3107 } else if (firstByte > 0xBF) {
3108 bytesPerSequence = 2
3109 } else {
3110 bytesPerSequence = 1
3111 }
3112
3113 if (i + bytesPerSequence <= end) {
3114 switch (bytesPerSequence) {
3115 case 1:
3116 if (firstByte < 0x80) {
3117 codePoint = firstByte
3118 }
3119 break
3120 case 2:
3121 secondByte = buf[i + 1]
3122 if ((secondByte & 0xC0) === 0x80) {
3123 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3124 if (tempCodePoint > 0x7F) {
3125 codePoint = tempCodePoint
3126 }
3127 }
3128 break
3129 case 3:
3130 secondByte = buf[i + 1]
3131 thirdByte = buf[i + 2]
3132 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3133 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3134 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3135 codePoint = tempCodePoint
3136 }
3137 }
3138 break
3139 case 4:
3140 secondByte = buf[i + 1]
3141 thirdByte = buf[i + 2]
3142 fourthByte = buf[i + 3]
3143 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3144 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3145 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3146 codePoint = tempCodePoint
3147 }
3148 }
3149 }
3150 }
3151
3152 if (codePoint === 0xFFFD) {
3153 // we generated an invalid codePoint so make sure to only advance by 1 byte
3154 bytesPerSequence = 1
3155 } else if (codePoint > 0xFFFF) {
3156 // encode to utf16 (surrogate pair dance)
3157 codePoint -= 0x10000
3158 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3159 codePoint = 0xDC00 | codePoint & 0x3FF
3160 }
3161
3162 res.push(codePoint)
3163 }
3164
3165 return String.fromCharCode.apply(String, res)
3166 }
3167
3168 function asciiSlice (buf, start, end) {
3169 var ret = ''
3170 end = Math.min(buf.length, end)
3171
3172 for (var i = start; i < end; i++) {
3173 ret += String.fromCharCode(buf[i] & 0x7F)
3174 }
3175 return ret
3176 }
3177
3178 function binarySlice (buf, start, end) {
3179 var ret = ''
3180 end = Math.min(buf.length, end)
3181
3182 for (var i = start; i < end; i++) {
3183 ret += String.fromCharCode(buf[i])
3184 }
3185 return ret
3186 }
3187
3188 function hexSlice (buf, start, end) {
3189 var len = buf.length
3190
3191 if (!start || start < 0) start = 0
3192 if (!end || end < 0 || end > len) end = len
3193
3194 var out = ''
3195 for (var i = start; i < end; i++) {
3196 out += toHex(buf[i])
3197 }
3198 return out
3199 }
3200
3201 function utf16leSlice (buf, start, end) {
3202 var bytes = buf.slice(start, end)
3203 var res = ''
3204 for (var i = 0; i < bytes.length; i += 2) {
3205 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3206 }
3207 return res
3208 }
3209
3210 Buffer.prototype.slice = function slice (start, end) {
3211 var len = this.length
3212 start = ~~start
3213 end = end === undefined ? len : ~~end
3214
3215 if (start < 0) {
3216 start += len
3217 if (start < 0) start = 0
3218 } else if (start > len) {
3219 start = len
3220 }
3221
3222 if (end < 0) {
3223 end += len
3224 if (end < 0) end = 0
3225 } else if (end > len) {
3226 end = len
3227 }
3228
3229 if (end < start) end = start
3230
3231 var newBuf
3232 if (Buffer.TYPED_ARRAY_SUPPORT) {
3233 newBuf = Buffer._augment(this.subarray(start, end))
3234 } else {
3235 var sliceLen = end - start
3236 newBuf = new Buffer(sliceLen, undefined)
3237 for (var i = 0; i < sliceLen; i++) {
3238 newBuf[i] = this[i + start]
3239 }
3240 }
3241
3242 if (newBuf.length) newBuf.parent = this.parent || this
3243
3244 return newBuf
3245 }
3246
3247 /*
3248 * Need to make sure that buffer isn't trying to write out of bounds.
3249 */
3250 function checkOffset (offset, ext, length) {
3251 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3252 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3253 }
3254
3255 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3256 offset = offset | 0
3257 byteLength = byteLength | 0
3258 if (!noAssert) checkOffset(offset, byteLength, this.length)
3259
3260 var val = this[offset]
3261 var mul = 1
3262 var i = 0
3263 while (++i < byteLength && (mul *= 0x100)) {
3264 val += this[offset + i] * mul
3265 }
3266
3267 return val
3268 }
3269
3270 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3271 offset = offset | 0
3272 byteLength = byteLength | 0
3273 if (!noAssert) {
3274 checkOffset(offset, byteLength, this.length)
3275 }
3276
3277 var val = this[offset + --byteLength]
3278 var mul = 1
3279 while (byteLength > 0 && (mul *= 0x100)) {
3280 val += this[offset + --byteLength] * mul
3281 }
3282
3283 return val
3284 }
3285
3286 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3287 if (!noAssert) checkOffset(offset, 1, this.length)
3288 return this[offset]
3289 }
3290
3291 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3292 if (!noAssert) checkOffset(offset, 2, this.length)
3293 return this[offset] | (this[offset + 1] << 8)
3294 }
3295
3296 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3297 if (!noAssert) checkOffset(offset, 2, this.length)
3298 return (this[offset] << 8) | this[offset + 1]
3299 }
3300
3301 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3302 if (!noAssert) checkOffset(offset, 4, this.length)
3303
3304 return ((this[offset]) |
3305 (this[offset + 1] << 8) |
3306 (this[offset + 2] << 16)) +
3307 (this[offset + 3] * 0x1000000)
3308 }
3309
3310 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3311 if (!noAssert) checkOffset(offset, 4, this.length)
3312
3313 return (this[offset] * 0x1000000) +
3314 ((this[offset + 1] << 16) |
3315 (this[offset + 2] << 8) |
3316 this[offset + 3])
3317 }
3318
3319 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3320 offset = offset | 0
3321 byteLength = byteLength | 0
3322 if (!noAssert) checkOffset(offset, byteLength, this.length)
3323
3324 var val = this[offset]
3325 var mul = 1
3326 var i = 0
3327 while (++i < byteLength && (mul *= 0x100)) {
3328 val += this[offset + i] * mul
3329 }
3330 mul *= 0x80
3331
3332 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3333
3334 return val
3335 }
3336
3337 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3338 offset = offset | 0
3339 byteLength = byteLength | 0
3340 if (!noAssert) checkOffset(offset, byteLength, this.length)
3341
3342 var i = byteLength
3343 var mul = 1
3344 var val = this[offset + --i]
3345 while (i > 0 && (mul *= 0x100)) {
3346 val += this[offset + --i] * mul
3347 }
3348 mul *= 0x80
3349
3350 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3351
3352 return val
3353 }
3354
3355 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3356 if (!noAssert) checkOffset(offset, 1, this.length)
3357 if (!(this[offset] & 0x80)) return (this[offset])
3358 return ((0xff - this[offset] + 1) * -1)
3359 }
3360
3361 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3362 if (!noAssert) checkOffset(offset, 2, this.length)
3363 var val = this[offset] | (this[offset + 1] << 8)
3364 return (val & 0x8000) ? val | 0xFFFF0000 : val
3365 }
3366
3367 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3368 if (!noAssert) checkOffset(offset, 2, this.length)
3369 var val = this[offset + 1] | (this[offset] << 8)
3370 return (val & 0x8000) ? val | 0xFFFF0000 : val
3371 }
3372
3373 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3374 if (!noAssert) checkOffset(offset, 4, this.length)
3375
3376 return (this[offset]) |
3377 (this[offset + 1] << 8) |
3378 (this[offset + 2] << 16) |
3379 (this[offset + 3] << 24)
3380 }
3381
3382 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3383 if (!noAssert) checkOffset(offset, 4, this.length)
3384
3385 return (this[offset] << 24) |
3386 (this[offset + 1] << 16) |
3387 (this[offset + 2] << 8) |
3388 (this[offset + 3])
3389 }
3390
3391 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3392 if (!noAssert) checkOffset(offset, 4, this.length)
3393 return ieee754.read(this, offset, true, 23, 4)
3394 }
3395
3396 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3397 if (!noAssert) checkOffset(offset, 4, this.length)
3398 return ieee754.read(this, offset, false, 23, 4)
3399 }
3400
3401 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3402 if (!noAssert) checkOffset(offset, 8, this.length)
3403 return ieee754.read(this, offset, true, 52, 8)
3404 }
3405
3406 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3407 if (!noAssert) checkOffset(offset, 8, this.length)
3408 return ieee754.read(this, offset, false, 52, 8)
3409 }
3410
3411 function checkInt (buf, value, offset, ext, max, min) {
3412 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3413 if (value > max || value < min) throw new RangeError('value is out of bounds')
3414 if (offset + ext > buf.length) throw new RangeError('index out of range')
3415 }
3416
3417 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3418 value = +value
3419 offset = offset | 0
3420 byteLength = byteLength | 0
3421 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3422
3423 var mul = 1
3424 var i = 0
3425 this[offset] = value & 0xFF
3426 while (++i < byteLength && (mul *= 0x100)) {
3427 this[offset + i] = (value / mul) & 0xFF
3428 }
3429
3430 return offset + byteLength
3431 }
3432
3433 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3434 value = +value
3435 offset = offset | 0
3436 byteLength = byteLength | 0
3437 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3438
3439 var i = byteLength - 1
3440 var mul = 1
3441 this[offset + i] = value & 0xFF
3442 while (--i >= 0 && (mul *= 0x100)) {
3443 this[offset + i] = (value / mul) & 0xFF
3444 }
3445
3446 return offset + byteLength
3447 }
3448
3449 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3450 value = +value
3451 offset = offset | 0
3452 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3453 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3454 this[offset] = value
3455 return offset + 1
3456 }
3457
3458 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3459 if (value < 0) value = 0xffff + value + 1
3460 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3461 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3462 (littleEndian ? i : 1 - i) * 8
3463 }
3464 }
3465
3466 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3467 value = +value
3468 offset = offset | 0
3469 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3470 if (Buffer.TYPED_ARRAY_SUPPORT) {
3471 this[offset] = value
3472 this[offset + 1] = (value >>> 8)
3473 } else {
3474 objectWriteUInt16(this, value, offset, true)
3475 }
3476 return offset + 2
3477 }
3478
3479 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3480 value = +value
3481 offset = offset | 0
3482 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3483 if (Buffer.TYPED_ARRAY_SUPPORT) {
3484 this[offset] = (value >>> 8)
3485 this[offset + 1] = value
3486 } else {
3487 objectWriteUInt16(this, value, offset, false)
3488 }
3489 return offset + 2
3490 }
3491
3492 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3493 if (value < 0) value = 0xffffffff + value + 1
3494 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3495 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3496 }
3497 }
3498
3499 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3500 value = +value
3501 offset = offset | 0
3502 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3503 if (Buffer.TYPED_ARRAY_SUPPORT) {
3504 this[offset + 3] = (value >>> 24)
3505 this[offset + 2] = (value >>> 16)
3506 this[offset + 1] = (value >>> 8)
3507 this[offset] = value
3508 } else {
3509 objectWriteUInt32(this, value, offset, true)
3510 }
3511 return offset + 4
3512 }
3513
3514 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3515 value = +value
3516 offset = offset | 0
3517 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3518 if (Buffer.TYPED_ARRAY_SUPPORT) {
3519 this[offset] = (value >>> 24)
3520 this[offset + 1] = (value >>> 16)
3521 this[offset + 2] = (value >>> 8)
3522 this[offset + 3] = value
3523 } else {
3524 objectWriteUInt32(this, value, offset, false)
3525 }
3526 return offset + 4
3527 }
3528
3529 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3530 value = +value
3531 offset = offset | 0
3532 if (!noAssert) {
3533 var limit = Math.pow(2, 8 * byteLength - 1)
3534
3535 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3536 }
3537
3538 var i = 0
3539 var mul = 1
3540 var sub = value < 0 ? 1 : 0
3541 this[offset] = value & 0xFF
3542 while (++i < byteLength && (mul *= 0x100)) {
3543 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3544 }
3545
3546 return offset + byteLength
3547 }
3548
3549 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3550 value = +value
3551 offset = offset | 0
3552 if (!noAssert) {
3553 var limit = Math.pow(2, 8 * byteLength - 1)
3554
3555 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3556 }
3557
3558 var i = byteLength - 1
3559 var mul = 1
3560 var sub = value < 0 ? 1 : 0
3561 this[offset + i] = value & 0xFF
3562 while (--i >= 0 && (mul *= 0x100)) {
3563 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3564 }
3565
3566 return offset + byteLength
3567 }
3568
3569 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3570 value = +value
3571 offset = offset | 0
3572 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3573 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3574 if (value < 0) value = 0xff + value + 1
3575 this[offset] = value
3576 return offset + 1
3577 }
3578
3579 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3580 value = +value
3581 offset = offset | 0
3582 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3583 if (Buffer.TYPED_ARRAY_SUPPORT) {
3584 this[offset] = value
3585 this[offset + 1] = (value >>> 8)
3586 } else {
3587 objectWriteUInt16(this, value, offset, true)
3588 }
3589 return offset + 2
3590 }
3591
3592 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3593 value = +value
3594 offset = offset | 0
3595 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3596 if (Buffer.TYPED_ARRAY_SUPPORT) {
3597 this[offset] = (value >>> 8)
3598 this[offset + 1] = value
3599 } else {
3600 objectWriteUInt16(this, value, offset, false)
3601 }
3602 return offset + 2
3603 }
3604
3605 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3606 value = +value
3607 offset = offset | 0
3608 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3609 if (Buffer.TYPED_ARRAY_SUPPORT) {
3610 this[offset] = value
3611 this[offset + 1] = (value >>> 8)
3612 this[offset + 2] = (value >>> 16)
3613 this[offset + 3] = (value >>> 24)
3614 } else {
3615 objectWriteUInt32(this, value, offset, true)
3616 }
3617 return offset + 4
3618 }
3619
3620 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3621 value = +value
3622 offset = offset | 0
3623 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3624 if (value < 0) value = 0xffffffff + value + 1
3625 if (Buffer.TYPED_ARRAY_SUPPORT) {
3626 this[offset] = (value >>> 24)
3627 this[offset + 1] = (value >>> 16)
3628 this[offset + 2] = (value >>> 8)
3629 this[offset + 3] = value
3630 } else {
3631 objectWriteUInt32(this, value, offset, false)
3632 }
3633 return offset + 4
3634 }
3635
3636 function checkIEEE754 (buf, value, offset, ext, max, min) {
3637 if (value > max || value < min) throw new RangeError('value is out of bounds')
3638 if (offset + ext > buf.length) throw new RangeError('index out of range')
3639 if (offset < 0) throw new RangeError('index out of range')
3640 }
3641
3642 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3643 if (!noAssert) {
3644 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3645 }
3646 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3647 return offset + 4
3648 }
3649
3650 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3651 return writeFloat(this, value, offset, true, noAssert)
3652 }
3653
3654 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3655 return writeFloat(this, value, offset, false, noAssert)
3656 }
3657
3658 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3659 if (!noAssert) {
3660 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3661 }
3662 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3663 return offset + 8
3664 }
3665
3666 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3667 return writeDouble(this, value, offset, true, noAssert)
3668 }
3669
3670 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3671 return writeDouble(this, value, offset, false, noAssert)
3672 }
3673
3674 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3675 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3676 if (!start) start = 0
3677 if (!end && end !== 0) end = this.length
3678 if (targetStart >= target.length) targetStart = target.length
3679 if (!targetStart) targetStart = 0
3680 if (end > 0 && end < start) end = start
3681
3682 // Copy 0 bytes; we're done
3683 if (end === start) return 0
3684 if (target.length === 0 || this.length === 0) return 0
3685
3686 // Fatal error conditions
3687 if (targetStart < 0) {
3688 throw new RangeError('targetStart out of bounds')
3689 }
3690 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3691 if (end < 0) throw new RangeError('sourceEnd out of bounds')
3692
3693 // Are we oob?
3694 if (end > this.length) end = this.length
3695 if (target.length - targetStart < end - start) {
3696 end = target.length - targetStart + start
3697 }
3698
3699 var len = end - start
3700 var i
3701
3702 if (this === target && start < targetStart && targetStart < end) {
3703 // descending copy from end
3704 for (i = len - 1; i >= 0; i--) {
3705 target[i + targetStart] = this[i + start]
3706 }
3707 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3708 // ascending copy from start
3709 for (i = 0; i < len; i++) {
3710 target[i + targetStart] = this[i + start]
3711 }
3712 } else {
3713 target._set(this.subarray(start, start + len), targetStart)
3714 }
3715
3716 return len
3717 }
3718
3719 // fill(value, start=0, end=buffer.length)
3720 Buffer.prototype.fill = function fill (value, start, end) {
3721 if (!value) value = 0
3722 if (!start) start = 0
3723 if (!end) end = this.length
3724
3725 if (end < start) throw new RangeError('end < start')
3726
3727 // Fill 0 bytes; we're done
3728 if (end === start) return
3729 if (this.length === 0) return
3730
3731 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3732 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
3733
3734 var i
3735 if (typeof value === 'number') {
3736 for (i = start; i < end; i++) {
3737 this[i] = value
3738 }
3739 } else {
3740 var bytes = utf8ToBytes(value.toString())
3741 var len = bytes.length
3742 for (i = start; i < end; i++) {
3743 this[i] = bytes[i % len]
3744 }
3745 }
3746
3747 return this
3748 }
3749
3750 /**
3751 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3752 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
3753 */
3754 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3755 if (typeof Uint8Array !== 'undefined') {
3756 if (Buffer.TYPED_ARRAY_SUPPORT) {
3757 return (new Buffer(this)).buffer
3758 } else {
3759 var buf = new Uint8Array(this.length)
3760 for (var i = 0, len = buf.length; i < len; i += 1) {
3761 buf[i] = this[i]
3762 }
3763 return buf.buffer
3764 }
3765 } else {
3766 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
3767 }
3768 }
3769
3770 // HELPER FUNCTIONS
3771 // ================
3772
3773 var BP = Buffer.prototype
3774
3775 /**
3776 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
3777 */
3778 Buffer._augment = function _augment (arr) {
3779 arr.constructor = Buffer
3780 arr._isBuffer = true
3781
3782 // save reference to original Uint8Array set method before overwriting
3783 arr._set = arr.set
3784
3785 // deprecated
3786 arr.get = BP.get
3787 arr.set = BP.set
3788
3789 arr.write = BP.write
3790 arr.toString = BP.toString
3791 arr.toLocaleString = BP.toString
3792 arr.toJSON = BP.toJSON
3793 arr.equals = BP.equals
3794 arr.compare = BP.compare
3795 arr.indexOf = BP.indexOf
3796 arr.copy = BP.copy
3797 arr.slice = BP.slice
3798 arr.readUIntLE = BP.readUIntLE
3799 arr.readUIntBE = BP.readUIntBE
3800 arr.readUInt8 = BP.readUInt8
3801 arr.readUInt16LE = BP.readUInt16LE
3802 arr.readUInt16BE = BP.readUInt16BE
3803 arr.readUInt32LE = BP.readUInt32LE
3804 arr.readUInt32BE = BP.readUInt32BE
3805 arr.readIntLE = BP.readIntLE
3806 arr.readIntBE = BP.readIntBE
3807 arr.readInt8 = BP.readInt8
3808 arr.readInt16LE = BP.readInt16LE
3809 arr.readInt16BE = BP.readInt16BE
3810 arr.readInt32LE = BP.readInt32LE
3811 arr.readInt32BE = BP.readInt32BE
3812 arr.readFloatLE = BP.readFloatLE
3813 arr.readFloatBE = BP.readFloatBE
3814 arr.readDoubleLE = BP.readDoubleLE
3815 arr.readDoubleBE = BP.readDoubleBE
3816 arr.writeUInt8 = BP.writeUInt8
3817 arr.writeUIntLE = BP.writeUIntLE
3818 arr.writeUIntBE = BP.writeUIntBE
3819 arr.writeUInt16LE = BP.writeUInt16LE
3820 arr.writeUInt16BE = BP.writeUInt16BE
3821 arr.writeUInt32LE = BP.writeUInt32LE
3822 arr.writeUInt32BE = BP.writeUInt32BE
3823 arr.writeIntLE = BP.writeIntLE
3824 arr.writeIntBE = BP.writeIntBE
3825 arr.writeInt8 = BP.writeInt8
3826 arr.writeInt16LE = BP.writeInt16LE
3827 arr.writeInt16BE = BP.writeInt16BE
3828 arr.writeInt32LE = BP.writeInt32LE
3829 arr.writeInt32BE = BP.writeInt32BE
3830 arr.writeFloatLE = BP.writeFloatLE
3831 arr.writeFloatBE = BP.writeFloatBE
3832 arr.writeDoubleLE = BP.writeDoubleLE
3833 arr.writeDoubleBE = BP.writeDoubleBE
3834 arr.fill = BP.fill
3835 arr.inspect = BP.inspect
3836 arr.toArrayBuffer = BP.toArrayBuffer
3837
3838 return arr
3839 }
3840
3841 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
3842
3843 function base64clean (str) {
3844 // Node strips out invalid characters like \n and \t from the string, base64-js does not
3845 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
3846 // Node converts strings with length < 2 to ''
3847 if (str.length < 2) return ''
3848 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
3849 while (str.length % 4 !== 0) {
3850 str = str + '='
3851 }
3852 return str
3853 }
3854
3855 function stringtrim (str) {
3856 if (str.trim) return str.trim()
3857 return str.replace(/^\s+|\s+$/g, '')
3858 }
3859
3860 function toHex (n) {
3861 if (n < 16) return '0' + n.toString(16)
3862 return n.toString(16)
3863 }
3864
3865 function utf8ToBytes (string, units) {
3866 units = units || Infinity
3867 var codePoint
3868 var length = string.length
3869 var leadSurrogate = null
3870 var bytes = []
3871
3872 for (var i = 0; i < length; i++) {
3873 codePoint = string.charCodeAt(i)
3874
3875 // is surrogate component
3876 if (codePoint > 0xD7FF && codePoint < 0xE000) {
3877 // last char was a lead
3878 if (!leadSurrogate) {
3879 // no lead yet
3880 if (codePoint > 0xDBFF) {
3881 // unexpected trail
3882 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3883 continue
3884
3885 } else if (i + 1 === length) {
3886 // unpaired lead
3887 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3888 continue
3889 }
3890
3891 // valid lead
3892 leadSurrogate = codePoint
3893
3894 continue
3895 }
3896
3897 // 2 leads in a row
3898 if (codePoint < 0xDC00) {
3899 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3900 leadSurrogate = codePoint
3901 continue
3902 }
3903
3904 // valid surrogate pair
3905 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
3906
3907 } else if (leadSurrogate) {
3908 // valid bmp char, but last char was a lead
3909 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3910 }
3911
3912 leadSurrogate = null
3913
3914 // encode utf8
3915 if (codePoint < 0x80) {
3916 if ((units -= 1) < 0) break
3917 bytes.push(codePoint)
3918 } else if (codePoint < 0x800) {
3919 if ((units -= 2) < 0) break
3920 bytes.push(
3921 codePoint >> 0x6 | 0xC0,
3922 codePoint & 0x3F | 0x80
3923 )
3924 } else if (codePoint < 0x10000) {
3925 if ((units -= 3) < 0) break
3926 bytes.push(
3927 codePoint >> 0xC | 0xE0,
3928 codePoint >> 0x6 & 0x3F | 0x80,
3929 codePoint & 0x3F | 0x80
3930 )
3931 } else if (codePoint < 0x110000) {
3932 if ((units -= 4) < 0) break
3933 bytes.push(
3934 codePoint >> 0x12 | 0xF0,
3935 codePoint >> 0xC & 0x3F | 0x80,
3936 codePoint >> 0x6 & 0x3F | 0x80,
3937 codePoint & 0x3F | 0x80
3938 )
3939 } else {
3940 throw new Error('Invalid code point')
3941 }
3942 }
3943
3944 return bytes
3945 }
3946
3947 function asciiToBytes (str) {
3948 var byteArray = []
3949 for (var i = 0; i < str.length; i++) {
3950 // Node's code seems to be doing this and not & 0x7F..
3951 byteArray.push(str.charCodeAt(i) & 0xFF)
3952 }
3953 return byteArray
3954 }
3955
3956 function utf16leToBytes (str, units) {
3957 var c, hi, lo
3958 var byteArray = []
3959 for (var i = 0; i < str.length; i++) {
3960 if ((units -= 2) < 0) break
3961
3962 c = str.charCodeAt(i)
3963 hi = c >> 8
3964 lo = c % 256
3965 byteArray.push(lo)
3966 byteArray.push(hi)
3967 }
3968
3969 return byteArray
3970 }
3971
3972 function base64ToBytes (str) {
3973 return base64.toByteArray(base64clean(str))
3974 }
3975
3976 function blitBuffer (src, dst, offset, length) {
3977 for (var i = 0; i < length; i++) {
3978 if ((i + offset >= dst.length) || (i >= src.length)) break
3979 dst[i + offset] = src[i]
3980 }
3981 return i
3982 }
3983
3984 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
3985 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
3986
3987 ;(function (exports) {
3988 'use strict';
3989
3990 var Arr = (typeof Uint8Array !== 'undefined')
3991 ? Uint8Array
3992 : Array
3993
3994 var PLUS = '+'.charCodeAt(0)
3995 var SLASH = '/'.charCodeAt(0)
3996 var NUMBER = '0'.charCodeAt(0)
3997 var LOWER = 'a'.charCodeAt(0)
3998 var UPPER = 'A'.charCodeAt(0)
3999 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4000 var SLASH_URL_SAFE = '_'.charCodeAt(0)
4001
4002 function decode (elt) {
4003 var code = elt.charCodeAt(0)
4004 if (code === PLUS ||
4005 code === PLUS_URL_SAFE)
4006 return 62 // '+'
4007 if (code === SLASH ||
4008 code === SLASH_URL_SAFE)
4009 return 63 // '/'
4010 if (code < NUMBER)
4011 return -1 //no match
4012 if (code < NUMBER + 10)
4013 return code - NUMBER + 26 + 26
4014 if (code < UPPER + 26)
4015 return code - UPPER
4016 if (code < LOWER + 26)
4017 return code - LOWER + 26
4018 }
4019
4020 function b64ToByteArray (b64) {
4021 var i, j, l, tmp, placeHolders, arr
4022
4023 if (b64.length % 4 > 0) {
4024 throw new Error('Invalid string. Length must be a multiple of 4')
4025 }
4026
4027 // the number of equal signs (place holders)
4028 // if there are two placeholders, than the two characters before it
4029 // represent one byte
4030 // if there is only one, then the three characters before it represent 2 bytes
4031 // this is just a cheap hack to not do indexOf twice
4032 var len = b64.length
4033 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
4034
4035 // base64 is 4/3 + up to two characters of the original data
4036 arr = new Arr(b64.length * 3 / 4 - placeHolders)
4037
4038 // if there are placeholders, only get up to the last complete 4 chars
4039 l = placeHolders > 0 ? b64.length - 4 : b64.length
4040
4041 var L = 0
4042
4043 function push (v) {
4044 arr[L++] = v
4045 }
4046
4047 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4048 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4049 push((tmp & 0xFF0000) >> 16)
4050 push((tmp & 0xFF00) >> 8)
4051 push(tmp & 0xFF)
4052 }
4053
4054 if (placeHolders === 2) {
4055 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4056 push(tmp & 0xFF)
4057 } else if (placeHolders === 1) {
4058 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4059 push((tmp >> 8) & 0xFF)
4060 push(tmp & 0xFF)
4061 }
4062
4063 return arr
4064 }
4065
4066 function uint8ToBase64 (uint8) {
4067 var i,
4068 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4069 output = "",
4070 temp, length
4071
4072 function encode (num) {
4073 return lookup.charAt(num)
4074 }
4075
4076 function tripletToBase64 (num) {
4077 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4078 }
4079
4080 // go through the array every three bytes, we'll deal with trailing stuff later
4081 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4082 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4083 output += tripletToBase64(temp)
4084 }
4085
4086 // pad the end with zeros, but make sure to not forget the extra bytes
4087 switch (extraBytes) {
4088 case 1:
4089 temp = uint8[uint8.length - 1]
4090 output += encode(temp >> 2)
4091 output += encode((temp << 4) & 0x3F)
4092 output += '=='
4093 break
4094 case 2:
4095 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4096 output += encode(temp >> 10)
4097 output += encode((temp >> 4) & 0x3F)
4098 output += encode((temp << 2) & 0x3F)
4099 output += '='
4100 break
4101 }
4102
4103 return output
4104 }
4105
4106 exports.toByteArray = b64ToByteArray
4107 exports.fromByteArray = uint8ToBase64
4108 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4109
4110 },{}],9:[function(require,module,exports){
4111 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4112 var e, m
4113 var eLen = nBytes * 8 - mLen - 1
4114 var eMax = (1 << eLen) - 1
4115 var eBias = eMax >> 1
4116 var nBits = -7
4117 var i = isLE ? (nBytes - 1) : 0
4118 var d = isLE ? -1 : 1
4119 var s = buffer[offset + i]
4120
4121 i += d
4122
4123 e = s & ((1 << (-nBits)) - 1)
4124 s >>= (-nBits)
4125 nBits += eLen
4126 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4127
4128 m = e & ((1 << (-nBits)) - 1)
4129 e >>= (-nBits)
4130 nBits += mLen
4131 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4132
4133 if (e === 0) {
4134 e = 1 - eBias
4135 } else if (e === eMax) {
4136 return m ? NaN : ((s ? -1 : 1) * Infinity)
4137 } else {
4138 m = m + Math.pow(2, mLen)
4139 e = e - eBias
4140 }
4141 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
4142 }
4143
4144 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4145 var e, m, c
4146 var eLen = nBytes * 8 - mLen - 1
4147 var eMax = (1 << eLen) - 1
4148 var eBias = eMax >> 1
4149 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4150 var i = isLE ? 0 : (nBytes - 1)
4151 var d = isLE ? 1 : -1
4152 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
4153
4154 value = Math.abs(value)
4155
4156 if (isNaN(value) || value === Infinity) {
4157 m = isNaN(value) ? 1 : 0
4158 e = eMax
4159 } else {
4160 e = Math.floor(Math.log(value) / Math.LN2)
4161 if (value * (c = Math.pow(2, -e)) < 1) {
4162 e--
4163 c *= 2
4164 }
4165 if (e + eBias >= 1) {
4166 value += rt / c
4167 } else {
4168 value += rt * Math.pow(2, 1 - eBias)
4169 }
4170 if (value * c >= 2) {
4171 e++
4172 c /= 2
4173 }
4174
4175 if (e + eBias >= eMax) {
4176 m = 0
4177 e = eMax
4178 } else if (e + eBias >= 1) {
4179 m = (value * c - 1) * Math.pow(2, mLen)
4180 e = e + eBias
4181 } else {
4182 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4183 e = 0
4184 }
4185 }
4186
4187 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
4188
4189 e = (e << mLen) | m
4190 eLen += mLen
4191 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
4192
4193 buffer[offset + i - d] |= s * 128
4194 }
4195
4196 },{}],10:[function(require,module,exports){
4197
4198 /**
4199 * isArray
4200 */
4201
4202 var isArray = Array.isArray;
4203
4204 /**
4205 * toString
4206 */
4207
4208 var str = Object.prototype.toString;
4209
4210 /**
4211 * Whether or not the given `val`
4212 * is an array.
4213 *
4214 * example:
4215 *
4216 * isArray([]);
4217 * // > true
4218 * isArray(arguments);
4219 * // > false
4220 * isArray('');
4221 * // > false
4222 *
4223 * @param {mixed} val
4224 * @return {bool}
4225 */
4226
4227 module.exports = isArray || function (val) {
4228 return !! val && '[object Array]' == str.call(val);
4229 };
4230
4231 },{}],11:[function(require,module,exports){
4232 // Copyright Joyent, Inc. and other Node contributors.
4233 //
4234 // Permission is hereby granted, free of charge, to any person obtaining a
4235 // copy of this software and associated documentation files (the
4236 // "Software"), to deal in the Software without restriction, including
4237 // without limitation the rights to use, copy, modify, merge, publish,
4238 // distribute, sublicense, and/or sell copies of the Software, and to permit
4239 // persons to whom the Software is furnished to do so, subject to the
4240 // following conditions:
4241 //
4242 // The above copyright notice and this permission notice shall be included
4243 // in all copies or substantial portions of the Software.
4244 //
4245 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4246 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4247 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4248 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4249 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4250 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4251 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4252
4253 function EventEmitter() {
4254 this._events = this._events || {};
4255 this._maxListeners = this._maxListeners || undefined;
4256 }
4257 module.exports = EventEmitter;
4258
4259 // Backwards-compat with node 0.10.x
4260 EventEmitter.EventEmitter = EventEmitter;
4261
4262 EventEmitter.prototype._events = undefined;
4263 EventEmitter.prototype._maxListeners = undefined;
4264
4265 // By default EventEmitters will print a warning if more than 10 listeners are
4266 // added to it. This is a useful default which helps finding memory leaks.
4267 EventEmitter.defaultMaxListeners = 10;
4268
4269 // Obviously not all Emitters should be limited to 10. This function allows
4270 // that to be increased. Set to zero for unlimited.
4271 EventEmitter.prototype.setMaxListeners = function(n) {
4272 if (!isNumber(n) || n < 0 || isNaN(n))
4273 throw TypeError('n must be a positive number');
4274 this._maxListeners = n;
4275 return this;
4276 };
4277
4278 EventEmitter.prototype.emit = function(type) {
4279 var er, handler, len, args, i, listeners;
4280
4281 if (!this._events)
4282 this._events = {};
4283
4284 // If there is no 'error' event listener then throw.
4285 if (type === 'error') {
4286 if (!this._events.error ||
4287 (isObject(this._events.error) && !this._events.error.length)) {
4288 er = arguments[1];
4289 if (er instanceof Error) {
4290 throw er; // Unhandled 'error' event
4291 }
4292 throw TypeError('Uncaught, unspecified "error" event.');
4293 }
4294 }
4295
4296 handler = this._events[type];
4297
4298 if (isUndefined(handler))
4299 return false;
4300
4301 if (isFunction(handler)) {
4302 switch (arguments.length) {
4303 // fast cases
4304 case 1:
4305 handler.call(this);
4306 break;
4307 case 2:
4308 handler.call(this, arguments[1]);
4309 break;
4310 case 3:
4311 handler.call(this, arguments[1], arguments[2]);
4312 break;
4313 // slower
4314 default:
4315 len = arguments.length;
4316 args = new Array(len - 1);
4317 for (i = 1; i < len; i++)
4318 args[i - 1] = arguments[i];
4319 handler.apply(this, args);
4320 }
4321 } else if (isObject(handler)) {
4322 len = arguments.length;
4323 args = new Array(len - 1);
4324 for (i = 1; i < len; i++)
4325 args[i - 1] = arguments[i];
4326
4327 listeners = handler.slice();
4328 len = listeners.length;
4329 for (i = 0; i < len; i++)
4330 listeners[i].apply(this, args);
4331 }
4332
4333 return true;
4334 };
4335
4336 EventEmitter.prototype.addListener = function(type, listener) {
4337 var m;
4338
4339 if (!isFunction(listener))
4340 throw TypeError('listener must be a function');
4341
4342 if (!this._events)
4343 this._events = {};
4344
4345 // To avoid recursion in the case that type === "newListener"! Before
4346 // adding it to the listeners, first emit "newListener".
4347 if (this._events.newListener)
4348 this.emit('newListener', type,
4349 isFunction(listener.listener) ?
4350 listener.listener : listener);
4351
4352 if (!this._events[type])
4353 // Optimize the case of one listener. Don't need the extra array object.
4354 this._events[type] = listener;
4355 else if (isObject(this._events[type]))
4356 // If we've already got an array, just append.
4357 this._events[type].push(listener);
4358 else
4359 // Adding the second element, need to change to array.
4360 this._events[type] = [this._events[type], listener];
4361
4362 // Check for listener leak
4363 if (isObject(this._events[type]) && !this._events[type].warned) {
4364 var m;
4365 if (!isUndefined(this._maxListeners)) {
4366 m = this._maxListeners;
4367 } else {
4368 m = EventEmitter.defaultMaxListeners;
4369 }
4370
4371 if (m && m > 0 && this._events[type].length > m) {
4372 this._events[type].warned = true;
4373 console.error('(node) warning: possible EventEmitter memory ' +
4374 'leak detected. %d listeners added. ' +
4375 'Use emitter.setMaxListeners() to increase limit.',
4376 this._events[type].length);
4377 if (typeof console.trace === 'function') {
4378 // not supported in IE 10
4379 console.trace();
4380 }
4381 }
4382 }
4383
4384 return this;
4385 };
4386
4387 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4388
4389 EventEmitter.prototype.once = function(type, listener) {
4390 if (!isFunction(listener))
4391 throw TypeError('listener must be a function');
4392
4393 var fired = false;
4394
4395 function g() {
4396 this.removeListener(type, g);
4397
4398 if (!fired) {
4399 fired = true;
4400 listener.apply(this, arguments);
4401 }
4402 }
4403
4404 g.listener = listener;
4405 this.on(type, g);
4406
4407 return this;
4408 };
4409
4410 // emits a 'removeListener' event iff the listener was removed
4411 EventEmitter.prototype.removeListener = function(type, listener) {
4412 var list, position, length, i;
4413
4414 if (!isFunction(listener))
4415 throw TypeError('listener must be a function');
4416
4417 if (!this._events || !this._events[type])
4418 return this;
4419
4420 list = this._events[type];
4421 length = list.length;
4422 position = -1;
4423
4424 if (list === listener ||
4425 (isFunction(list.listener) && list.listener === listener)) {
4426 delete this._events[type];
4427 if (this._events.removeListener)
4428 this.emit('removeListener', type, listener);
4429
4430 } else if (isObject(list)) {
4431 for (i = length; i-- > 0;) {
4432 if (list[i] === listener ||
4433 (list[i].listener && list[i].listener === listener)) {
4434 position = i;
4435 break;
4436 }
4437 }
4438
4439 if (position < 0)
4440 return this;
4441
4442 if (list.length === 1) {
4443 list.length = 0;
4444 delete this._events[type];
4445 } else {
4446 list.splice(position, 1);
4447 }
4448
4449 if (this._events.removeListener)
4450 this.emit('removeListener', type, listener);
4451 }
4452
4453 return this;
4454 };
4455
4456 EventEmitter.prototype.removeAllListeners = function(type) {
4457 var key, listeners;
4458
4459 if (!this._events)
4460 return this;
4461
4462 // not listening for removeListener, no need to emit
4463 if (!this._events.removeListener) {
4464 if (arguments.length === 0)
4465 this._events = {};
4466 else if (this._events[type])
4467 delete this._events[type];
4468 return this;
4469 }
4470
4471 // emit removeListener for all listeners on all events
4472 if (arguments.length === 0) {
4473 for (key in this._events) {
4474 if (key === 'removeListener') continue;
4475 this.removeAllListeners(key);
4476 }
4477 this.removeAllListeners('removeListener');
4478 this._events = {};
4479 return this;
4480 }
4481
4482 listeners = this._events[type];
4483
4484 if (isFunction(listeners)) {
4485 this.removeListener(type, listeners);
4486 } else {
4487 // LIFO order
4488 while (listeners.length)
4489 this.removeListener(type, listeners[listeners.length - 1]);
4490 }
4491 delete this._events[type];
4492
4493 return this;
4494 };
4495
4496 EventEmitter.prototype.listeners = function(type) {
4497 var ret;
4498 if (!this._events || !this._events[type])
4499 ret = [];
4500 else if (isFunction(this._events[type]))
4501 ret = [this._events[type]];
4502 else
4503 ret = this._events[type].slice();
4504 return ret;
4505 };
4506
4507 EventEmitter.listenerCount = function(emitter, type) {
4508 var ret;
4509 if (!emitter._events || !emitter._events[type])
4510 ret = 0;
4511 else if (isFunction(emitter._events[type]))
4512 ret = 1;
4513 else
4514 ret = emitter._events[type].length;
4515 return ret;
4516 };
4517
4518 function isFunction(arg) {
4519 return typeof arg === 'function';
4520 }
4521
4522 function isNumber(arg) {
4523 return typeof arg === 'number';
4524 }
4525
4526 function isObject(arg) {
4527 return typeof arg === 'object' && arg !== null;
4528 }
4529
4530 function isUndefined(arg) {
4531 return arg === void 0;
4532 }
4533
4534 },{}],12:[function(require,module,exports){
4535 if (typeof Object.create === 'function') {
4536 // implementation from standard node.js 'util' module
4537 module.exports = function inherits(ctor, superCtor) {
4538 ctor.super_ = superCtor
4539 ctor.prototype = Object.create(superCtor.prototype, {
4540 constructor: {
4541 value: ctor,
4542 enumerable: false,
4543 writable: true,
4544 configurable: true
4545 }
4546 });
4547 };
4548 } else {
4549 // old school shim for old browsers
4550 module.exports = function inherits(ctor, superCtor) {
4551 ctor.super_ = superCtor
4552 var TempCtor = function () {}
4553 TempCtor.prototype = superCtor.prototype
4554 ctor.prototype = new TempCtor()
4555 ctor.prototype.constructor = ctor
4556 }
4557 }
4558
4559 },{}],13:[function(require,module,exports){
4560 module.exports = Array.isArray || function (arr) {
4561 return Object.prototype.toString.call(arr) == '[object Array]';
4562 };
4563
4564 },{}],14:[function(require,module,exports){
4565 // shim for using process in browser
4566
4567 var process = module.exports = {};
4568 var queue = [];
4569 var draining = false;
4570 var currentQueue;
4571 var queueIndex = -1;
4572
4573 function cleanUpNextTick() {
4574 draining = false;
4575 if (currentQueue.length) {
4576 queue = currentQueue.concat(queue);
4577 } else {
4578 queueIndex = -1;
4579 }
4580 if (queue.length) {
4581 drainQueue();
4582 }
4583 }
4584
4585 function drainQueue() {
4586 if (draining) {
4587 return;
4588 }
4589 var timeout = setTimeout(cleanUpNextTick);
4590 draining = true;
4591
4592 var len = queue.length;
4593 while(len) {
4594 currentQueue = queue;
4595 queue = [];
4596 while (++queueIndex < len) {
4597 currentQueue[queueIndex].run();
4598 }
4599 queueIndex = -1;
4600 len = queue.length;
4601 }
4602 currentQueue = null;
4603 draining = false;
4604 clearTimeout(timeout);
4605 }
4606
4607 process.nextTick = function (fun) {
4608 var args = new Array(arguments.length - 1);
4609 if (arguments.length > 1) {
4610 for (var i = 1; i < arguments.length; i++) {
4611 args[i - 1] = arguments[i];
4612 }
4613 }
4614 queue.push(new Item(fun, args));
4615 if (queue.length === 1 && !draining) {
4616 setTimeout(drainQueue, 0);
4617 }
4618 };
4619
4620 // v8 likes predictible objects
4621 function Item(fun, array) {
4622 this.fun = fun;
4623 this.array = array;
4624 }
4625 Item.prototype.run = function () {
4626 this.fun.apply(null, this.array);
4627 };
4628 process.title = 'browser';
4629 process.browser = true;
4630 process.env = {};
4631 process.argv = [];
4632 process.version = ''; // empty string to avoid regexp issues
4633 process.versions = {};
4634
4635 function noop() {}
4636
4637 process.on = noop;
4638 process.addListener = noop;
4639 process.once = noop;
4640 process.off = noop;
4641 process.removeListener = noop;
4642 process.removeAllListeners = noop;
4643 process.emit = noop;
4644
4645 process.binding = function (name) {
4646 throw new Error('process.binding is not supported');
4647 };
4648
4649 // TODO(shtylman)
4650 process.cwd = function () { return '/' };
4651 process.chdir = function (dir) {
4652 throw new Error('process.chdir is not supported');
4653 };
4654 process.umask = function() { return 0; };
4655
4656 },{}],15:[function(require,module,exports){
4657 module.exports = require("./lib/_stream_duplex.js")
4658
4659 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4660 (function (process){
4661 // Copyright Joyent, Inc. and other Node contributors.
4662 //
4663 // Permission is hereby granted, free of charge, to any person obtaining a
4664 // copy of this software and associated documentation files (the
4665 // "Software"), to deal in the Software without restriction, including
4666 // without limitation the rights to use, copy, modify, merge, publish,
4667 // distribute, sublicense, and/or sell copies of the Software, and to permit
4668 // persons to whom the Software is furnished to do so, subject to the
4669 // following conditions:
4670 //
4671 // The above copyright notice and this permission notice shall be included
4672 // in all copies or substantial portions of the Software.
4673 //
4674 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4675 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4676 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4677 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4678 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4679 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4680 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4681
4682 // a duplex stream is just a stream that is both readable and writable.
4683 // Since JS doesn't have multiple prototypal inheritance, this class
4684 // prototypally inherits from Readable, and then parasitically from
4685 // Writable.
4686
4687 module.exports = Duplex;
4688
4689 /*<replacement>*/
4690 var objectKeys = Object.keys || function (obj) {
4691 var keys = [];
4692 for (var key in obj) keys.push(key);
4693 return keys;
4694 }
4695 /*</replacement>*/
4696
4697
4698 /*<replacement>*/
4699 var util = require('core-util-is');
4700 util.inherits = require('inherits');
4701 /*</replacement>*/
4702
4703 var Readable = require('./_stream_readable');
4704 var Writable = require('./_stream_writable');
4705
4706 util.inherits(Duplex, Readable);
4707
4708 forEach(objectKeys(Writable.prototype), function(method) {
4709 if (!Duplex.prototype[method])
4710 Duplex.prototype[method] = Writable.prototype[method];
4711 });
4712
4713 function Duplex(options) {
4714 if (!(this instanceof Duplex))
4715 return new Duplex(options);
4716
4717 Readable.call(this, options);
4718 Writable.call(this, options);
4719
4720 if (options && options.readable === false)
4721 this.readable = false;
4722
4723 if (options && options.writable === false)
4724 this.writable = false;
4725
4726 this.allowHalfOpen = true;
4727 if (options && options.allowHalfOpen === false)
4728 this.allowHalfOpen = false;
4729
4730 this.once('end', onend);
4731 }
4732
4733 // the no-half-open enforcer
4734 function onend() {
4735 // if we allow half-open state, or if the writable side ended,
4736 // then we're ok.
4737 if (this.allowHalfOpen || this._writableState.ended)
4738 return;
4739
4740 // no more data can be written.
4741 // But allow more writes to happen in this tick.
4742 process.nextTick(this.end.bind(this));
4743 }
4744
4745 function forEach (xs, f) {
4746 for (var i = 0, l = xs.length; i < l; i++) {
4747 f(xs[i], i);
4748 }
4749 }
4750
4751 }).call(this,require('_process'))
4752 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
4753 // Copyright Joyent, Inc. and other Node contributors.
4754 //
4755 // Permission is hereby granted, free of charge, to any person obtaining a
4756 // copy of this software and associated documentation files (the
4757 // "Software"), to deal in the Software without restriction, including
4758 // without limitation the rights to use, copy, modify, merge, publish,
4759 // distribute, sublicense, and/or sell copies of the Software, and to permit
4760 // persons to whom the Software is furnished to do so, subject to the
4761 // following conditions:
4762 //
4763 // The above copyright notice and this permission notice shall be included
4764 // in all copies or substantial portions of the Software.
4765 //
4766 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4767 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4768 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4769 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4770 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4771 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4772 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4773
4774 // a passthrough stream.
4775 // basically just the most minimal sort of Transform stream.
4776 // Every written chunk gets output as-is.
4777
4778 module.exports = PassThrough;
4779
4780 var Transform = require('./_stream_transform');
4781
4782 /*<replacement>*/
4783 var util = require('core-util-is');
4784 util.inherits = require('inherits');
4785 /*</replacement>*/
4786
4787 util.inherits(PassThrough, Transform);
4788
4789 function PassThrough(options) {
4790 if (!(this instanceof PassThrough))
4791 return new PassThrough(options);
4792
4793 Transform.call(this, options);
4794 }
4795
4796 PassThrough.prototype._transform = function(chunk, encoding, cb) {
4797 cb(null, chunk);
4798 };
4799
4800 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
4801 (function (process){
4802 // Copyright Joyent, Inc. and other Node contributors.
4803 //
4804 // Permission is hereby granted, free of charge, to any person obtaining a
4805 // copy of this software and associated documentation files (the
4806 // "Software"), to deal in the Software without restriction, including
4807 // without limitation the rights to use, copy, modify, merge, publish,
4808 // distribute, sublicense, and/or sell copies of the Software, and to permit
4809 // persons to whom the Software is furnished to do so, subject to the
4810 // following conditions:
4811 //
4812 // The above copyright notice and this permission notice shall be included
4813 // in all copies or substantial portions of the Software.
4814 //
4815 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4816 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4817 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4818 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4819 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4820 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4821 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4822
4823 module.exports = Readable;
4824
4825 /*<replacement>*/
4826 var isArray = require('isarray');
4827 /*</replacement>*/
4828
4829
4830 /*<replacement>*/
4831 var Buffer = require('buffer').Buffer;
4832 /*</replacement>*/
4833
4834 Readable.ReadableState = ReadableState;
4835
4836 var EE = require('events').EventEmitter;
4837
4838 /*<replacement>*/
4839 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
4840 return emitter.listeners(type).length;
4841 };
4842 /*</replacement>*/
4843
4844 var Stream = require('stream');
4845
4846 /*<replacement>*/
4847 var util = require('core-util-is');
4848 util.inherits = require('inherits');
4849 /*</replacement>*/
4850
4851 var StringDecoder;
4852
4853
4854 /*<replacement>*/
4855 var debug = require('util');
4856 if (debug && debug.debuglog) {
4857 debug = debug.debuglog('stream');
4858 } else {
4859 debug = function () {};
4860 }
4861 /*</replacement>*/
4862
4863
4864 util.inherits(Readable, Stream);
4865
4866 function ReadableState(options, stream) {
4867 var Duplex = require('./_stream_duplex');
4868
4869 options = options || {};
4870
4871 // the point at which it stops calling _read() to fill the buffer
4872 // Note: 0 is a valid value, means "don't call _read preemptively ever"
4873 var hwm = options.highWaterMark;
4874 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
4875 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
4876
4877 // cast to ints.
4878 this.highWaterMark = ~~this.highWaterMark;
4879
4880 this.buffer = [];
4881 this.length = 0;
4882 this.pipes = null;
4883 this.pipesCount = 0;
4884 this.flowing = null;
4885 this.ended = false;
4886 this.endEmitted = false;
4887 this.reading = false;
4888
4889 // a flag to be able to tell if the onwrite cb is called immediately,
4890 // or on a later tick. We set this to true at first, because any
4891 // actions that shouldn't happen until "later" should generally also
4892 // not happen before the first write call.
4893 this.sync = true;
4894
4895 // whenever we return null, then we set a flag to say
4896 // that we're awaiting a 'readable' event emission.
4897 this.needReadable = false;
4898 this.emittedReadable = false;
4899 this.readableListening = false;
4900
4901
4902 // object stream flag. Used to make read(n) ignore n and to
4903 // make all the buffer merging and length checks go away
4904 this.objectMode = !!options.objectMode;
4905
4906 if (stream instanceof Duplex)
4907 this.objectMode = this.objectMode || !!options.readableObjectMode;
4908
4909 // Crypto is kind of old and crusty. Historically, its default string
4910 // encoding is 'binary' so we have to make this configurable.
4911 // Everything else in the universe uses 'utf8', though.
4912 this.defaultEncoding = options.defaultEncoding || 'utf8';
4913
4914 // when piping, we only care about 'readable' events that happen
4915 // after read()ing all the bytes and not getting any pushback.
4916 this.ranOut = false;
4917
4918 // the number of writers that are awaiting a drain event in .pipe()s
4919 this.awaitDrain = 0;
4920
4921 // if true, a maybeReadMore has been scheduled
4922 this.readingMore = false;
4923
4924 this.decoder = null;
4925 this.encoding = null;
4926 if (options.encoding) {
4927 if (!StringDecoder)
4928 StringDecoder = require('string_decoder/').StringDecoder;
4929 this.decoder = new StringDecoder(options.encoding);
4930 this.encoding = options.encoding;
4931 }
4932 }
4933
4934 function Readable(options) {
4935 var Duplex = require('./_stream_duplex');
4936
4937 if (!(this instanceof Readable))
4938 return new Readable(options);
4939
4940 this._readableState = new ReadableState(options, this);
4941
4942 // legacy
4943 this.readable = true;
4944
4945 Stream.call(this);
4946 }
4947
4948 // Manually shove something into the read() buffer.
4949 // This returns true if the highWaterMark has not been hit yet,
4950 // similar to how Writable.write() returns true if you should
4951 // write() some more.
4952 Readable.prototype.push = function(chunk, encoding) {
4953 var state = this._readableState;
4954
4955 if (util.isString(chunk) && !state.objectMode) {
4956 encoding = encoding || state.defaultEncoding;
4957 if (encoding !== state.encoding) {
4958 chunk = new Buffer(chunk, encoding);
4959 encoding = '';
4960 }
4961 }
4962
4963 return readableAddChunk(this, state, chunk, encoding, false);
4964 };
4965
4966 // Unshift should *always* be something directly out of read()
4967 Readable.prototype.unshift = function(chunk) {
4968 var state = this._readableState;
4969 return readableAddChunk(this, state, chunk, '', true);
4970 };
4971
4972 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
4973 var er = chunkInvalid(state, chunk);
4974 if (er) {
4975 stream.emit('error', er);
4976 } else if (util.isNullOrUndefined(chunk)) {
4977 state.reading = false;
4978 if (!state.ended)
4979 onEofChunk(stream, state);
4980 } else if (state.objectMode || chunk && chunk.length > 0) {
4981 if (state.ended && !addToFront) {
4982 var e = new Error('stream.push() after EOF');
4983 stream.emit('error', e);
4984 } else if (state.endEmitted && addToFront) {
4985 var e = new Error('stream.unshift() after end event');
4986 stream.emit('error', e);
4987 } else {
4988 if (state.decoder && !addToFront && !encoding)
4989 chunk = state.decoder.write(chunk);
4990
4991 if (!addToFront)
4992 state.reading = false;
4993
4994 // if we want the data now, just emit it.
4995 if (state.flowing && state.length === 0 && !state.sync) {
4996 stream.emit('data', chunk);
4997 stream.read(0);
4998 } else {
4999 // update the buffer info.
5000 state.length += state.objectMode ? 1 : chunk.length;
5001 if (addToFront)
5002 state.buffer.unshift(chunk);
5003 else
5004 state.buffer.push(chunk);
5005
5006 if (state.needReadable)
5007 emitReadable(stream);
5008 }
5009
5010 maybeReadMore(stream, state);
5011 }
5012 } else if (!addToFront) {
5013 state.reading = false;
5014 }
5015
5016 return needMoreData(state);
5017 }
5018
5019
5020
5021 // if it's past the high water mark, we can push in some more.
5022 // Also, if we have no data yet, we can stand some
5023 // more bytes. This is to work around cases where hwm=0,
5024 // such as the repl. Also, if the push() triggered a
5025 // readable event, and the user called read(largeNumber) such that
5026 // needReadable was set, then we ought to push more, so that another
5027 // 'readable' event will be triggered.
5028 function needMoreData(state) {
5029 return !state.ended &&
5030 (state.needReadable ||
5031 state.length < state.highWaterMark ||
5032 state.length === 0);
5033 }
5034
5035 // backwards compatibility.
5036 Readable.prototype.setEncoding = function(enc) {
5037 if (!StringDecoder)
5038 StringDecoder = require('string_decoder/').StringDecoder;
5039 this._readableState.decoder = new StringDecoder(enc);
5040 this._readableState.encoding = enc;
5041 return this;
5042 };
5043
5044 // Don't raise the hwm > 128MB
5045 var MAX_HWM = 0x800000;
5046 function roundUpToNextPowerOf2(n) {
5047 if (n >= MAX_HWM) {
5048 n = MAX_HWM;
5049 } else {
5050 // Get the next highest power of 2
5051 n--;
5052 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5053 n++;
5054 }
5055 return n;
5056 }
5057
5058 function howMuchToRead(n, state) {
5059 if (state.length === 0 && state.ended)
5060 return 0;
5061
5062 if (state.objectMode)
5063 return n === 0 ? 0 : 1;
5064
5065 if (isNaN(n) || util.isNull(n)) {
5066 // only flow one buffer at a time
5067 if (state.flowing && state.buffer.length)
5068 return state.buffer[0].length;
5069 else
5070 return state.length;
5071 }
5072
5073 if (n <= 0)
5074 return 0;
5075
5076 // If we're asking for more than the target buffer level,
5077 // then raise the water mark. Bump up to the next highest
5078 // power of 2, to prevent increasing it excessively in tiny
5079 // amounts.
5080 if (n > state.highWaterMark)
5081 state.highWaterMark = roundUpToNextPowerOf2(n);
5082
5083 // don't have that much. return null, unless we've ended.
5084 if (n > state.length) {
5085 if (!state.ended) {
5086 state.needReadable = true;
5087 return 0;
5088 } else
5089 return state.length;
5090 }
5091
5092 return n;
5093 }
5094
5095 // you can override either this method, or the async _read(n) below.
5096 Readable.prototype.read = function(n) {
5097 debug('read', n);
5098 var state = this._readableState;
5099 var nOrig = n;
5100
5101 if (!util.isNumber(n) || n > 0)
5102 state.emittedReadable = false;
5103
5104 // if we're doing read(0) to trigger a readable event, but we
5105 // already have a bunch of data in the buffer, then just trigger
5106 // the 'readable' event and move on.
5107 if (n === 0 &&
5108 state.needReadable &&
5109 (state.length >= state.highWaterMark || state.ended)) {
5110 debug('read: emitReadable', state.length, state.ended);
5111 if (state.length === 0 && state.ended)
5112 endReadable(this);
5113 else
5114 emitReadable(this);
5115 return null;
5116 }
5117
5118 n = howMuchToRead(n, state);
5119
5120 // if we've ended, and we're now clear, then finish it up.
5121 if (n === 0 && state.ended) {
5122 if (state.length === 0)
5123 endReadable(this);
5124 return null;
5125 }
5126
5127 // All the actual chunk generation logic needs to be
5128 // *below* the call to _read. The reason is that in certain
5129 // synthetic stream cases, such as passthrough streams, _read
5130 // may be a completely synchronous operation which may change
5131 // the state of the read buffer, providing enough data when
5132 // before there was *not* enough.
5133 //
5134 // So, the steps are:
5135 // 1. Figure out what the state of things will be after we do
5136 // a read from the buffer.
5137 //
5138 // 2. If that resulting state will trigger a _read, then call _read.
5139 // Note that this may be asynchronous, or synchronous. Yes, it is
5140 // deeply ugly to write APIs this way, but that still doesn't mean
5141 // that the Readable class should behave improperly, as streams are
5142 // designed to be sync/async agnostic.
5143 // Take note if the _read call is sync or async (ie, if the read call
5144 // has returned yet), so that we know whether or not it's safe to emit
5145 // 'readable' etc.
5146 //
5147 // 3. Actually pull the requested chunks out of the buffer and return.
5148
5149 // if we need a readable event, then we need to do some reading.
5150 var doRead = state.needReadable;
5151 debug('need readable', doRead);
5152
5153 // if we currently have less than the highWaterMark, then also read some
5154 if (state.length === 0 || state.length - n < state.highWaterMark) {
5155 doRead = true;
5156 debug('length less than watermark', doRead);
5157 }
5158
5159 // however, if we've ended, then there's no point, and if we're already
5160 // reading, then it's unnecessary.
5161 if (state.ended || state.reading) {
5162 doRead = false;
5163 debug('reading or ended', doRead);
5164 }
5165
5166 if (doRead) {
5167 debug('do read');
5168 state.reading = true;
5169 state.sync = true;
5170 // if the length is currently zero, then we *need* a readable event.
5171 if (state.length === 0)
5172 state.needReadable = true;
5173 // call internal read method
5174 this._read(state.highWaterMark);
5175 state.sync = false;
5176 }
5177
5178 // If _read pushed data synchronously, then `reading` will be false,
5179 // and we need to re-evaluate how much data we can return to the user.
5180 if (doRead && !state.reading)
5181 n = howMuchToRead(nOrig, state);
5182
5183 var ret;
5184 if (n > 0)
5185 ret = fromList(n, state);
5186 else
5187 ret = null;
5188
5189 if (util.isNull(ret)) {
5190 state.needReadable = true;
5191 n = 0;
5192 }
5193
5194 state.length -= n;
5195
5196 // If we have nothing in the buffer, then we want to know
5197 // as soon as we *do* get something into the buffer.
5198 if (state.length === 0 && !state.ended)
5199 state.needReadable = true;
5200
5201 // If we tried to read() past the EOF, then emit end on the next tick.
5202 if (nOrig !== n && state.ended && state.length === 0)
5203 endReadable(this);
5204
5205 if (!util.isNull(ret))
5206 this.emit('data', ret);
5207
5208 return ret;
5209 };
5210
5211 function chunkInvalid(state, chunk) {
5212 var er = null;
5213 if (!util.isBuffer(chunk) &&
5214 !util.isString(chunk) &&
5215 !util.isNullOrUndefined(chunk) &&
5216 !state.objectMode) {
5217 er = new TypeError('Invalid non-string/buffer chunk');
5218 }
5219 return er;
5220 }
5221
5222
5223 function onEofChunk(stream, state) {
5224 if (state.decoder && !state.ended) {
5225 var chunk = state.decoder.end();
5226 if (chunk && chunk.length) {
5227 state.buffer.push(chunk);
5228 state.length += state.objectMode ? 1 : chunk.length;
5229 }
5230 }
5231 state.ended = true;
5232
5233 // emit 'readable' now to make sure it gets picked up.
5234 emitReadable(stream);
5235 }
5236
5237 // Don't emit readable right away in sync mode, because this can trigger
5238 // another read() call => stack overflow. This way, it might trigger
5239 // a nextTick recursion warning, but that's not so bad.
5240 function emitReadable(stream) {
5241 var state = stream._readableState;
5242 state.needReadable = false;
5243 if (!state.emittedReadable) {
5244 debug('emitReadable', state.flowing);
5245 state.emittedReadable = true;
5246 if (state.sync)
5247 process.nextTick(function() {
5248 emitReadable_(stream);
5249 });
5250 else
5251 emitReadable_(stream);
5252 }
5253 }
5254
5255 function emitReadable_(stream) {
5256 debug('emit readable');
5257 stream.emit('readable');
5258 flow(stream);
5259 }
5260
5261
5262 // at this point, the user has presumably seen the 'readable' event,
5263 // and called read() to consume some data. that may have triggered
5264 // in turn another _read(n) call, in which case reading = true if
5265 // it's in progress.
5266 // However, if we're not ended, or reading, and the length < hwm,
5267 // then go ahead and try to read some more preemptively.
5268 function maybeReadMore(stream, state) {
5269 if (!state.readingMore) {
5270 state.readingMore = true;
5271 process.nextTick(function() {
5272 maybeReadMore_(stream, state);
5273 });
5274 }
5275 }
5276
5277 function maybeReadMore_(stream, state) {
5278 var len = state.length;
5279 while (!state.reading && !state.flowing && !state.ended &&
5280 state.length < state.highWaterMark) {
5281 debug('maybeReadMore read 0');
5282 stream.read(0);
5283 if (len === state.length)
5284 // didn't get any data, stop spinning.
5285 break;
5286 else
5287 len = state.length;
5288 }
5289 state.readingMore = false;
5290 }
5291
5292 // abstract method. to be overridden in specific implementation classes.
5293 // call cb(er, data) where data is <= n in length.
5294 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5295 // arbitrary, and perhaps not very meaningful.
5296 Readable.prototype._read = function(n) {
5297 this.emit('error', new Error('not implemented'));
5298 };
5299
5300 Readable.prototype.pipe = function(dest, pipeOpts) {
5301 var src = this;
5302 var state = this._readableState;
5303
5304 switch (state.pipesCount) {
5305 case 0:
5306 state.pipes = dest;
5307 break;
5308 case 1:
5309 state.pipes = [state.pipes, dest];
5310 break;
5311 default:
5312 state.pipes.push(dest);
5313 break;
5314 }
5315 state.pipesCount += 1;
5316 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5317
5318 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5319 dest !== process.stdout &&
5320 dest !== process.stderr;
5321
5322 var endFn = doEnd ? onend : cleanup;
5323 if (state.endEmitted)
5324 process.nextTick(endFn);
5325 else
5326 src.once('end', endFn);
5327
5328 dest.on('unpipe', onunpipe);
5329 function onunpipe(readable) {
5330 debug('onunpipe');
5331 if (readable === src) {
5332 cleanup();
5333 }
5334 }
5335
5336 function onend() {
5337 debug('onend');
5338 dest.end();
5339 }
5340
5341 // when the dest drains, it reduces the awaitDrain counter
5342 // on the source. This would be more elegant with a .once()
5343 // handler in flow(), but adding and removing repeatedly is
5344 // too slow.
5345 var ondrain = pipeOnDrain(src);
5346 dest.on('drain', ondrain);
5347
5348 function cleanup() {
5349 debug('cleanup');
5350 // cleanup event handlers once the pipe is broken
5351 dest.removeListener('close', onclose);
5352 dest.removeListener('finish', onfinish);
5353 dest.removeListener('drain', ondrain);
5354 dest.removeListener('error', onerror);
5355 dest.removeListener('unpipe', onunpipe);
5356 src.removeListener('end', onend);
5357 src.removeListener('end', cleanup);
5358 src.removeListener('data', ondata);
5359
5360 // if the reader is waiting for a drain event from this
5361 // specific writer, then it would cause it to never start
5362 // flowing again.
5363 // So, if this is awaiting a drain, then we just call it now.
5364 // If we don't know, then assume that we are waiting for one.
5365 if (state.awaitDrain &&
5366 (!dest._writableState || dest._writableState.needDrain))
5367 ondrain();
5368 }
5369
5370 src.on('data', ondata);
5371 function ondata(chunk) {
5372 debug('ondata');
5373 var ret = dest.write(chunk);
5374 if (false === ret) {
5375 debug('false write response, pause',
5376 src._readableState.awaitDrain);
5377 src._readableState.awaitDrain++;
5378 src.pause();
5379 }
5380 }
5381
5382 // if the dest has an error, then stop piping into it.
5383 // however, don't suppress the throwing behavior for this.
5384 function onerror(er) {
5385 debug('onerror', er);
5386 unpipe();
5387 dest.removeListener('error', onerror);
5388 if (EE.listenerCount(dest, 'error') === 0)
5389 dest.emit('error', er);
5390 }
5391 // This is a brutally ugly hack to make sure that our error handler
5392 // is attached before any userland ones. NEVER DO THIS.
5393 if (!dest._events || !dest._events.error)
5394 dest.on('error', onerror);
5395 else if (isArray(dest._events.error))
5396 dest._events.error.unshift(onerror);
5397 else
5398 dest._events.error = [onerror, dest._events.error];
5399
5400
5401
5402 // Both close and finish should trigger unpipe, but only once.
5403 function onclose() {
5404 dest.removeListener('finish', onfinish);
5405 unpipe();
5406 }
5407 dest.once('close', onclose);
5408 function onfinish() {
5409 debug('onfinish');
5410 dest.removeListener('close', onclose);
5411 unpipe();
5412 }
5413 dest.once('finish', onfinish);
5414
5415 function unpipe() {
5416 debug('unpipe');
5417 src.unpipe(dest);
5418 }
5419
5420 // tell the dest that it's being piped to
5421 dest.emit('pipe', src);
5422
5423 // start the flow if it hasn't been started already.
5424 if (!state.flowing) {
5425 debug('pipe resume');
5426 src.resume();
5427 }
5428
5429 return dest;
5430 };
5431
5432 function pipeOnDrain(src) {
5433 return function() {
5434 var state = src._readableState;
5435 debug('pipeOnDrain', state.awaitDrain);
5436 if (state.awaitDrain)
5437 state.awaitDrain--;
5438 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5439 state.flowing = true;
5440 flow(src);
5441 }
5442 };
5443 }
5444
5445
5446 Readable.prototype.unpipe = function(dest) {
5447 var state = this._readableState;
5448
5449 // if we're not piping anywhere, then do nothing.
5450 if (state.pipesCount === 0)
5451 return this;
5452
5453 // just one destination. most common case.
5454 if (state.pipesCount === 1) {
5455 // passed in one, but it's not the right one.
5456 if (dest && dest !== state.pipes)
5457 return this;
5458
5459 if (!dest)
5460 dest = state.pipes;
5461
5462 // got a match.
5463 state.pipes = null;
5464 state.pipesCount = 0;
5465 state.flowing = false;
5466 if (dest)
5467 dest.emit('unpipe', this);
5468 return this;
5469 }
5470
5471 // slow case. multiple pipe destinations.
5472
5473 if (!dest) {
5474 // remove all.
5475 var dests = state.pipes;
5476 var len = state.pipesCount;
5477 state.pipes = null;
5478 state.pipesCount = 0;
5479 state.flowing = false;
5480
5481 for (var i = 0; i < len; i++)
5482 dests[i].emit('unpipe', this);
5483 return this;
5484 }
5485
5486 // try to find the right one.
5487 var i = indexOf(state.pipes, dest);
5488 if (i === -1)
5489 return this;
5490
5491 state.pipes.splice(i, 1);
5492 state.pipesCount -= 1;
5493 if (state.pipesCount === 1)
5494 state.pipes = state.pipes[0];
5495
5496 dest.emit('unpipe', this);
5497
5498 return this;
5499 };
5500
5501 // set up data events if they are asked for
5502 // Ensure readable listeners eventually get something
5503 Readable.prototype.on = function(ev, fn) {
5504 var res = Stream.prototype.on.call(this, ev, fn);
5505
5506 // If listening to data, and it has not explicitly been paused,
5507 // then call resume to start the flow of data on the next tick.
5508 if (ev === 'data' && false !== this._readableState.flowing) {
5509 this.resume();
5510 }
5511
5512 if (ev === 'readable' && this.readable) {
5513 var state = this._readableState;
5514 if (!state.readableListening) {
5515 state.readableListening = true;
5516 state.emittedReadable = false;
5517 state.needReadable = true;
5518 if (!state.reading) {
5519 var self = this;
5520 process.nextTick(function() {
5521 debug('readable nexttick read 0');
5522 self.read(0);
5523 });
5524 } else if (state.length) {
5525 emitReadable(this, state);
5526 }
5527 }
5528 }
5529
5530 return res;
5531 };
5532 Readable.prototype.addListener = Readable.prototype.on;
5533
5534 // pause() and resume() are remnants of the legacy readable stream API
5535 // If the user uses them, then switch into old mode.
5536 Readable.prototype.resume = function() {
5537 var state = this._readableState;
5538 if (!state.flowing) {
5539 debug('resume');
5540 state.flowing = true;
5541 if (!state.reading) {
5542 debug('resume read 0');
5543 this.read(0);
5544 }
5545 resume(this, state);
5546 }
5547 return this;
5548 };
5549
5550 function resume(stream, state) {
5551 if (!state.resumeScheduled) {
5552 state.resumeScheduled = true;
5553 process.nextTick(function() {
5554 resume_(stream, state);
5555 });
5556 }
5557 }
5558
5559 function resume_(stream, state) {
5560 state.resumeScheduled = false;
5561 stream.emit('resume');
5562 flow(stream);
5563 if (state.flowing && !state.reading)
5564 stream.read(0);
5565 }
5566
5567 Readable.prototype.pause = function() {
5568 debug('call pause flowing=%j', this._readableState.flowing);
5569 if (false !== this._readableState.flowing) {
5570 debug('pause');
5571 this._readableState.flowing = false;
5572 this.emit('pause');
5573 }
5574 return this;
5575 };
5576
5577 function flow(stream) {
5578 var state = stream._readableState;
5579 debug('flow', state.flowing);
5580 if (state.flowing) {
5581 do {
5582 var chunk = stream.read();
5583 } while (null !== chunk && state.flowing);
5584 }
5585 }
5586
5587 // wrap an old-style stream as the async data source.
5588 // This is *not* part of the readable stream interface.
5589 // It is an ugly unfortunate mess of history.
5590 Readable.prototype.wrap = function(stream) {
5591 var state = this._readableState;
5592 var paused = false;
5593
5594 var self = this;
5595 stream.on('end', function() {
5596 debug('wrapped end');
5597 if (state.decoder && !state.ended) {
5598 var chunk = state.decoder.end();
5599 if (chunk && chunk.length)
5600 self.push(chunk);
5601 }
5602
5603 self.push(null);
5604 });
5605
5606 stream.on('data', function(chunk) {
5607 debug('wrapped data');
5608 if (state.decoder)
5609 chunk = state.decoder.write(chunk);
5610 if (!chunk || !state.objectMode && !chunk.length)
5611 return;
5612
5613 var ret = self.push(chunk);
5614 if (!ret) {
5615 paused = true;
5616 stream.pause();
5617 }
5618 });
5619
5620 // proxy all the other methods.
5621 // important when wrapping filters and duplexes.
5622 for (var i in stream) {
5623 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5624 this[i] = function(method) { return function() {
5625 return stream[method].apply(stream, arguments);
5626 }}(i);
5627 }
5628 }
5629
5630 // proxy certain important events.
5631 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5632 forEach(events, function(ev) {
5633 stream.on(ev, self.emit.bind(self, ev));
5634 });
5635
5636 // when we try to consume some more bytes, simply unpause the
5637 // underlying stream.
5638 self._read = function(n) {
5639 debug('wrapped _read', n);
5640 if (paused) {
5641 paused = false;
5642 stream.resume();
5643 }
5644 };
5645
5646 return self;
5647 };
5648
5649
5650
5651 // exposed for testing purposes only.
5652 Readable._fromList = fromList;
5653
5654 // Pluck off n bytes from an array of buffers.
5655 // Length is the combined lengths of all the buffers in the list.
5656 function fromList(n, state) {
5657 var list = state.buffer;
5658 var length = state.length;
5659 var stringMode = !!state.decoder;
5660 var objectMode = !!state.objectMode;
5661 var ret;
5662
5663 // nothing in the list, definitely empty.
5664 if (list.length === 0)
5665 return null;
5666
5667 if (length === 0)
5668 ret = null;
5669 else if (objectMode)
5670 ret = list.shift();
5671 else if (!n || n >= length) {
5672 // read it all, truncate the array.
5673 if (stringMode)
5674 ret = list.join('');
5675 else
5676 ret = Buffer.concat(list, length);
5677 list.length = 0;
5678 } else {
5679 // read just some of it.
5680 if (n < list[0].length) {
5681 // just take a part of the first list item.
5682 // slice is the same for buffers and strings.
5683 var buf = list[0];
5684 ret = buf.slice(0, n);
5685 list[0] = buf.slice(n);
5686 } else if (n === list[0].length) {
5687 // first list is a perfect match
5688 ret = list.shift();
5689 } else {
5690 // complex case.
5691 // we have enough to cover it, but it spans past the first buffer.
5692 if (stringMode)
5693 ret = '';
5694 else
5695 ret = new Buffer(n);
5696
5697 var c = 0;
5698 for (var i = 0, l = list.length; i < l && c < n; i++) {
5699 var buf = list[0];
5700 var cpy = Math.min(n - c, buf.length);
5701
5702 if (stringMode)
5703 ret += buf.slice(0, cpy);
5704 else
5705 buf.copy(ret, c, 0, cpy);
5706
5707 if (cpy < buf.length)
5708 list[0] = buf.slice(cpy);
5709 else
5710 list.shift();
5711
5712 c += cpy;
5713 }
5714 }
5715 }
5716
5717 return ret;
5718 }
5719
5720 function endReadable(stream) {
5721 var state = stream._readableState;
5722
5723 // If we get here before consuming all the bytes, then that is a
5724 // bug in node. Should never happen.
5725 if (state.length > 0)
5726 throw new Error('endReadable called on non-empty stream');
5727
5728 if (!state.endEmitted) {
5729 state.ended = true;
5730 process.nextTick(function() {
5731 // Check that we didn't get one last unshift.
5732 if (!state.endEmitted && state.length === 0) {
5733 state.endEmitted = true;
5734 stream.readable = false;
5735 stream.emit('end');
5736 }
5737 });
5738 }
5739 }
5740
5741 function forEach (xs, f) {
5742 for (var i = 0, l = xs.length; i < l; i++) {
5743 f(xs[i], i);
5744 }
5745 }
5746
5747 function indexOf (xs, x) {
5748 for (var i = 0, l = xs.length; i < l; i++) {
5749 if (xs[i] === x) return i;
5750 }
5751 return -1;
5752 }
5753
5754 }).call(this,require('_process'))
5755 },{"./_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){
5756 // Copyright Joyent, Inc. and other Node contributors.
5757 //
5758 // Permission is hereby granted, free of charge, to any person obtaining a
5759 // copy of this software and associated documentation files (the
5760 // "Software"), to deal in the Software without restriction, including
5761 // without limitation the rights to use, copy, modify, merge, publish,
5762 // distribute, sublicense, and/or sell copies of the Software, and to permit
5763 // persons to whom the Software is furnished to do so, subject to the
5764 // following conditions:
5765 //
5766 // The above copyright notice and this permission notice shall be included
5767 // in all copies or substantial portions of the Software.
5768 //
5769 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5770 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5771 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5772 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5773 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5774 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5775 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5776
5777
5778 // a transform stream is a readable/writable stream where you do
5779 // something with the data. Sometimes it's called a "filter",
5780 // but that's not a great name for it, since that implies a thing where
5781 // some bits pass through, and others are simply ignored. (That would
5782 // be a valid example of a transform, of course.)
5783 //
5784 // While the output is causally related to the input, it's not a
5785 // necessarily symmetric or synchronous transformation. For example,
5786 // a zlib stream might take multiple plain-text writes(), and then
5787 // emit a single compressed chunk some time in the future.
5788 //
5789 // Here's how this works:
5790 //
5791 // The Transform stream has all the aspects of the readable and writable
5792 // stream classes. When you write(chunk), that calls _write(chunk,cb)
5793 // internally, and returns false if there's a lot of pending writes
5794 // buffered up. When you call read(), that calls _read(n) until
5795 // there's enough pending readable data buffered up.
5796 //
5797 // In a transform stream, the written data is placed in a buffer. When
5798 // _read(n) is called, it transforms the queued up data, calling the
5799 // buffered _write cb's as it consumes chunks. If consuming a single
5800 // written chunk would result in multiple output chunks, then the first
5801 // outputted bit calls the readcb, and subsequent chunks just go into
5802 // the read buffer, and will cause it to emit 'readable' if necessary.
5803 //
5804 // This way, back-pressure is actually determined by the reading side,
5805 // since _read has to be called to start processing a new chunk. However,
5806 // a pathological inflate type of transform can cause excessive buffering
5807 // here. For example, imagine a stream where every byte of input is
5808 // interpreted as an integer from 0-255, and then results in that many
5809 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
5810 // 1kb of data being output. In this case, you could write a very small
5811 // amount of input, and end up with a very large amount of output. In
5812 // such a pathological inflating mechanism, there'd be no way to tell
5813 // the system to stop doing the transform. A single 4MB write could
5814 // cause the system to run out of memory.
5815 //
5816 // However, even in such a pathological case, only a single written chunk
5817 // would be consumed, and then the rest would wait (un-transformed) until
5818 // the results of the previous transformed chunk were consumed.
5819
5820 module.exports = Transform;
5821
5822 var Duplex = require('./_stream_duplex');
5823
5824 /*<replacement>*/
5825 var util = require('core-util-is');
5826 util.inherits = require('inherits');
5827 /*</replacement>*/
5828
5829 util.inherits(Transform, Duplex);
5830
5831
5832 function TransformState(options, stream) {
5833 this.afterTransform = function(er, data) {
5834 return afterTransform(stream, er, data);
5835 };
5836
5837 this.needTransform = false;
5838 this.transforming = false;
5839 this.writecb = null;
5840 this.writechunk = null;
5841 }
5842
5843 function afterTransform(stream, er, data) {
5844 var ts = stream._transformState;
5845 ts.transforming = false;
5846
5847 var cb = ts.writecb;
5848
5849 if (!cb)
5850 return stream.emit('error', new Error('no writecb in Transform class'));
5851
5852 ts.writechunk = null;
5853 ts.writecb = null;
5854
5855 if (!util.isNullOrUndefined(data))
5856 stream.push(data);
5857
5858 if (cb)
5859 cb(er);
5860
5861 var rs = stream._readableState;
5862 rs.reading = false;
5863 if (rs.needReadable || rs.length < rs.highWaterMark) {
5864 stream._read(rs.highWaterMark);
5865 }
5866 }
5867
5868
5869 function Transform(options) {
5870 if (!(this instanceof Transform))
5871 return new Transform(options);
5872
5873 Duplex.call(this, options);
5874
5875 this._transformState = new TransformState(options, this);
5876
5877 // when the writable side finishes, then flush out anything remaining.
5878 var stream = this;
5879
5880 // start out asking for a readable event once data is transformed.
5881 this._readableState.needReadable = true;
5882
5883 // we have implemented the _read method, and done the other things
5884 // that Readable wants before the first _read call, so unset the
5885 // sync guard flag.
5886 this._readableState.sync = false;
5887
5888 this.once('prefinish', function() {
5889 if (util.isFunction(this._flush))
5890 this._flush(function(er) {
5891 done(stream, er);
5892 });
5893 else
5894 done(stream);
5895 });
5896 }
5897
5898 Transform.prototype.push = function(chunk, encoding) {
5899 this._transformState.needTransform = false;
5900 return Duplex.prototype.push.call(this, chunk, encoding);
5901 };
5902
5903 // This is the part where you do stuff!
5904 // override this function in implementation classes.
5905 // 'chunk' is an input chunk.
5906 //
5907 // Call `push(newChunk)` to pass along transformed output
5908 // to the readable side. You may call 'push' zero or more times.
5909 //
5910 // Call `cb(err)` when you are done with this chunk. If you pass
5911 // an error, then that'll put the hurt on the whole operation. If you
5912 // never call cb(), then you'll never get another chunk.
5913 Transform.prototype._transform = function(chunk, encoding, cb) {
5914 throw new Error('not implemented');
5915 };
5916
5917 Transform.prototype._write = function(chunk, encoding, cb) {
5918 var ts = this._transformState;
5919 ts.writecb = cb;
5920 ts.writechunk = chunk;
5921 ts.writeencoding = encoding;
5922 if (!ts.transforming) {
5923 var rs = this._readableState;
5924 if (ts.needTransform ||
5925 rs.needReadable ||
5926 rs.length < rs.highWaterMark)
5927 this._read(rs.highWaterMark);
5928 }
5929 };
5930
5931 // Doesn't matter what the args are here.
5932 // _transform does all the work.
5933 // That we got here means that the readable side wants more data.
5934 Transform.prototype._read = function(n) {
5935 var ts = this._transformState;
5936
5937 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
5938 ts.transforming = true;
5939 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
5940 } else {
5941 // mark that we need a transform, so that any data that comes in
5942 // will get processed, now that we've asked for it.
5943 ts.needTransform = true;
5944 }
5945 };
5946
5947
5948 function done(stream, er) {
5949 if (er)
5950 return stream.emit('error', er);
5951
5952 // if there's nothing in the write buffer, then that means
5953 // that nothing more will ever be provided
5954 var ws = stream._writableState;
5955 var ts = stream._transformState;
5956
5957 if (ws.length)
5958 throw new Error('calling transform done when ws.length != 0');
5959
5960 if (ts.transforming)
5961 throw new Error('calling transform done when still transforming');
5962
5963 return stream.push(null);
5964 }
5965
5966 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
5967 (function (process){
5968 // Copyright Joyent, Inc. and other Node contributors.
5969 //
5970 // Permission is hereby granted, free of charge, to any person obtaining a
5971 // copy of this software and associated documentation files (the
5972 // "Software"), to deal in the Software without restriction, including
5973 // without limitation the rights to use, copy, modify, merge, publish,
5974 // distribute, sublicense, and/or sell copies of the Software, and to permit
5975 // persons to whom the Software is furnished to do so, subject to the
5976 // following conditions:
5977 //
5978 // The above copyright notice and this permission notice shall be included
5979 // in all copies or substantial portions of the Software.
5980 //
5981 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5982 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5983 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5984 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5985 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5986 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5987 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5988
5989 // A bit simpler than readable streams.
5990 // Implement an async ._write(chunk, cb), and it'll handle all
5991 // the drain event emission and buffering.
5992
5993 module.exports = Writable;
5994
5995 /*<replacement>*/
5996 var Buffer = require('buffer').Buffer;
5997 /*</replacement>*/
5998
5999 Writable.WritableState = WritableState;
6000
6001
6002 /*<replacement>*/
6003 var util = require('core-util-is');
6004 util.inherits = require('inherits');
6005 /*</replacement>*/
6006
6007 var Stream = require('stream');
6008
6009 util.inherits(Writable, Stream);
6010
6011 function WriteReq(chunk, encoding, cb) {
6012 this.chunk = chunk;
6013 this.encoding = encoding;
6014 this.callback = cb;
6015 }
6016
6017 function WritableState(options, stream) {
6018 var Duplex = require('./_stream_duplex');
6019
6020 options = options || {};
6021
6022 // the point at which write() starts returning false
6023 // Note: 0 is a valid value, means that we always return false if
6024 // the entire buffer is not flushed immediately on write()
6025 var hwm = options.highWaterMark;
6026 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6027 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
6028
6029 // object stream flag to indicate whether or not this stream
6030 // contains buffers or objects.
6031 this.objectMode = !!options.objectMode;
6032
6033 if (stream instanceof Duplex)
6034 this.objectMode = this.objectMode || !!options.writableObjectMode;
6035
6036 // cast to ints.
6037 this.highWaterMark = ~~this.highWaterMark;
6038
6039 this.needDrain = false;
6040 // at the start of calling end()
6041 this.ending = false;
6042 // when end() has been called, and returned
6043 this.ended = false;
6044 // when 'finish' is emitted
6045 this.finished = false;
6046
6047 // should we decode strings into buffers before passing to _write?
6048 // this is here so that some node-core streams can optimize string
6049 // handling at a lower level.
6050 var noDecode = options.decodeStrings === false;
6051 this.decodeStrings = !noDecode;
6052
6053 // Crypto is kind of old and crusty. Historically, its default string
6054 // encoding is 'binary' so we have to make this configurable.
6055 // Everything else in the universe uses 'utf8', though.
6056 this.defaultEncoding = options.defaultEncoding || 'utf8';
6057
6058 // not an actual buffer we keep track of, but a measurement
6059 // of how much we're waiting to get pushed to some underlying
6060 // socket or file.
6061 this.length = 0;
6062
6063 // a flag to see when we're in the middle of a write.
6064 this.writing = false;
6065
6066 // when true all writes will be buffered until .uncork() call
6067 this.corked = 0;
6068
6069 // a flag to be able to tell if the onwrite cb is called immediately,
6070 // or on a later tick. We set this to true at first, because any
6071 // actions that shouldn't happen until "later" should generally also
6072 // not happen before the first write call.
6073 this.sync = true;
6074
6075 // a flag to know if we're processing previously buffered items, which
6076 // may call the _write() callback in the same tick, so that we don't
6077 // end up in an overlapped onwrite situation.
6078 this.bufferProcessing = false;
6079
6080 // the callback that's passed to _write(chunk,cb)
6081 this.onwrite = function(er) {
6082 onwrite(stream, er);
6083 };
6084
6085 // the callback that the user supplies to write(chunk,encoding,cb)
6086 this.writecb = null;
6087
6088 // the amount that is being written when _write is called.
6089 this.writelen = 0;
6090
6091 this.buffer = [];
6092
6093 // number of pending user-supplied write callbacks
6094 // this must be 0 before 'finish' can be emitted
6095 this.pendingcb = 0;
6096
6097 // emit prefinish if the only thing we're waiting for is _write cbs
6098 // This is relevant for synchronous Transform streams
6099 this.prefinished = false;
6100
6101 // True if the error was already emitted and should not be thrown again
6102 this.errorEmitted = false;
6103 }
6104
6105 function Writable(options) {
6106 var Duplex = require('./_stream_duplex');
6107
6108 // Writable ctor is applied to Duplexes, though they're not
6109 // instanceof Writable, they're instanceof Readable.
6110 if (!(this instanceof Writable) && !(this instanceof Duplex))
6111 return new Writable(options);
6112
6113 this._writableState = new WritableState(options, this);
6114
6115 // legacy.
6116 this.writable = true;
6117
6118 Stream.call(this);
6119 }
6120
6121 // Otherwise people can pipe Writable streams, which is just wrong.
6122 Writable.prototype.pipe = function() {
6123 this.emit('error', new Error('Cannot pipe. Not readable.'));
6124 };
6125
6126
6127 function writeAfterEnd(stream, state, cb) {
6128 var er = new Error('write after end');
6129 // TODO: defer error events consistently everywhere, not just the cb
6130 stream.emit('error', er);
6131 process.nextTick(function() {
6132 cb(er);
6133 });
6134 }
6135
6136 // If we get something that is not a buffer, string, null, or undefined,
6137 // and we're not in objectMode, then that's an error.
6138 // Otherwise stream chunks are all considered to be of length=1, and the
6139 // watermarks determine how many objects to keep in the buffer, rather than
6140 // how many bytes or characters.
6141 function validChunk(stream, state, chunk, cb) {
6142 var valid = true;
6143 if (!util.isBuffer(chunk) &&
6144 !util.isString(chunk) &&
6145 !util.isNullOrUndefined(chunk) &&
6146 !state.objectMode) {
6147 var er = new TypeError('Invalid non-string/buffer chunk');
6148 stream.emit('error', er);
6149 process.nextTick(function() {
6150 cb(er);
6151 });
6152 valid = false;
6153 }
6154 return valid;
6155 }
6156
6157 Writable.prototype.write = function(chunk, encoding, cb) {
6158 var state = this._writableState;
6159 var ret = false;
6160
6161 if (util.isFunction(encoding)) {
6162 cb = encoding;
6163 encoding = null;
6164 }
6165
6166 if (util.isBuffer(chunk))
6167 encoding = 'buffer';
6168 else if (!encoding)
6169 encoding = state.defaultEncoding;
6170
6171 if (!util.isFunction(cb))
6172 cb = function() {};
6173
6174 if (state.ended)
6175 writeAfterEnd(this, state, cb);
6176 else if (validChunk(this, state, chunk, cb)) {
6177 state.pendingcb++;
6178 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6179 }
6180
6181 return ret;
6182 };
6183
6184 Writable.prototype.cork = function() {
6185 var state = this._writableState;
6186
6187 state.corked++;
6188 };
6189
6190 Writable.prototype.uncork = function() {
6191 var state = this._writableState;
6192
6193 if (state.corked) {
6194 state.corked--;
6195
6196 if (!state.writing &&
6197 !state.corked &&
6198 !state.finished &&
6199 !state.bufferProcessing &&
6200 state.buffer.length)
6201 clearBuffer(this, state);
6202 }
6203 };
6204
6205 function decodeChunk(state, chunk, encoding) {
6206 if (!state.objectMode &&
6207 state.decodeStrings !== false &&
6208 util.isString(chunk)) {
6209 chunk = new Buffer(chunk, encoding);
6210 }
6211 return chunk;
6212 }
6213
6214 // if we're already writing something, then just put this
6215 // in the queue, and wait our turn. Otherwise, call _write
6216 // If we return false, then we need a drain event, so set that flag.
6217 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6218 chunk = decodeChunk(state, chunk, encoding);
6219 if (util.isBuffer(chunk))
6220 encoding = 'buffer';
6221 var len = state.objectMode ? 1 : chunk.length;
6222
6223 state.length += len;
6224
6225 var ret = state.length < state.highWaterMark;
6226 // we must ensure that previous needDrain will not be reset to false.
6227 if (!ret)
6228 state.needDrain = true;
6229
6230 if (state.writing || state.corked)
6231 state.buffer.push(new WriteReq(chunk, encoding, cb));
6232 else
6233 doWrite(stream, state, false, len, chunk, encoding, cb);
6234
6235 return ret;
6236 }
6237
6238 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6239 state.writelen = len;
6240 state.writecb = cb;
6241 state.writing = true;
6242 state.sync = true;
6243 if (writev)
6244 stream._writev(chunk, state.onwrite);
6245 else
6246 stream._write(chunk, encoding, state.onwrite);
6247 state.sync = false;
6248 }
6249
6250 function onwriteError(stream, state, sync, er, cb) {
6251 if (sync)
6252 process.nextTick(function() {
6253 state.pendingcb--;
6254 cb(er);
6255 });
6256 else {
6257 state.pendingcb--;
6258 cb(er);
6259 }
6260
6261 stream._writableState.errorEmitted = true;
6262 stream.emit('error', er);
6263 }
6264
6265 function onwriteStateUpdate(state) {
6266 state.writing = false;
6267 state.writecb = null;
6268 state.length -= state.writelen;
6269 state.writelen = 0;
6270 }
6271
6272 function onwrite(stream, er) {
6273 var state = stream._writableState;
6274 var sync = state.sync;
6275 var cb = state.writecb;
6276
6277 onwriteStateUpdate(state);
6278
6279 if (er)
6280 onwriteError(stream, state, sync, er, cb);
6281 else {
6282 // Check if we're actually ready to finish, but don't emit yet
6283 var finished = needFinish(stream, state);
6284
6285 if (!finished &&
6286 !state.corked &&
6287 !state.bufferProcessing &&
6288 state.buffer.length) {
6289 clearBuffer(stream, state);
6290 }
6291
6292 if (sync) {
6293 process.nextTick(function() {
6294 afterWrite(stream, state, finished, cb);
6295 });
6296 } else {
6297 afterWrite(stream, state, finished, cb);
6298 }
6299 }
6300 }
6301
6302 function afterWrite(stream, state, finished, cb) {
6303 if (!finished)
6304 onwriteDrain(stream, state);
6305 state.pendingcb--;
6306 cb();
6307 finishMaybe(stream, state);
6308 }
6309
6310 // Must force callback to be called on nextTick, so that we don't
6311 // emit 'drain' before the write() consumer gets the 'false' return
6312 // value, and has a chance to attach a 'drain' listener.
6313 function onwriteDrain(stream, state) {
6314 if (state.length === 0 && state.needDrain) {
6315 state.needDrain = false;
6316 stream.emit('drain');
6317 }
6318 }
6319
6320
6321 // if there's something in the buffer waiting, then process it
6322 function clearBuffer(stream, state) {
6323 state.bufferProcessing = true;
6324
6325 if (stream._writev && state.buffer.length > 1) {
6326 // Fast case, write everything using _writev()
6327 var cbs = [];
6328 for (var c = 0; c < state.buffer.length; c++)
6329 cbs.push(state.buffer[c].callback);
6330
6331 // count the one we are adding, as well.
6332 // TODO(isaacs) clean this up
6333 state.pendingcb++;
6334 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6335 for (var i = 0; i < cbs.length; i++) {
6336 state.pendingcb--;
6337 cbs[i](err);
6338 }
6339 });
6340
6341 // Clear buffer
6342 state.buffer = [];
6343 } else {
6344 // Slow case, write chunks one-by-one
6345 for (var c = 0; c < state.buffer.length; c++) {
6346 var entry = state.buffer[c];
6347 var chunk = entry.chunk;
6348 var encoding = entry.encoding;
6349 var cb = entry.callback;
6350 var len = state.objectMode ? 1 : chunk.length;
6351
6352 doWrite(stream, state, false, len, chunk, encoding, cb);
6353
6354 // if we didn't call the onwrite immediately, then
6355 // it means that we need to wait until it does.
6356 // also, that means that the chunk and cb are currently
6357 // being processed, so move the buffer counter past them.
6358 if (state.writing) {
6359 c++;
6360 break;
6361 }
6362 }
6363
6364 if (c < state.buffer.length)
6365 state.buffer = state.buffer.slice(c);
6366 else
6367 state.buffer.length = 0;
6368 }
6369
6370 state.bufferProcessing = false;
6371 }
6372
6373 Writable.prototype._write = function(chunk, encoding, cb) {
6374 cb(new Error('not implemented'));
6375
6376 };
6377
6378 Writable.prototype._writev = null;
6379
6380 Writable.prototype.end = function(chunk, encoding, cb) {
6381 var state = this._writableState;
6382
6383 if (util.isFunction(chunk)) {
6384 cb = chunk;
6385 chunk = null;
6386 encoding = null;
6387 } else if (util.isFunction(encoding)) {
6388 cb = encoding;
6389 encoding = null;
6390 }
6391
6392 if (!util.isNullOrUndefined(chunk))
6393 this.write(chunk, encoding);
6394
6395 // .end() fully uncorks
6396 if (state.corked) {
6397 state.corked = 1;
6398 this.uncork();
6399 }
6400
6401 // ignore unnecessary end() calls.
6402 if (!state.ending && !state.finished)
6403 endWritable(this, state, cb);
6404 };
6405
6406
6407 function needFinish(stream, state) {
6408 return (state.ending &&
6409 state.length === 0 &&
6410 !state.finished &&
6411 !state.writing);
6412 }
6413
6414 function prefinish(stream, state) {
6415 if (!state.prefinished) {
6416 state.prefinished = true;
6417 stream.emit('prefinish');
6418 }
6419 }
6420
6421 function finishMaybe(stream, state) {
6422 var need = needFinish(stream, state);
6423 if (need) {
6424 if (state.pendingcb === 0) {
6425 prefinish(stream, state);
6426 state.finished = true;
6427 stream.emit('finish');
6428 } else
6429 prefinish(stream, state);
6430 }
6431 return need;
6432 }
6433
6434 function endWritable(stream, state, cb) {
6435 state.ending = true;
6436 finishMaybe(stream, state);
6437 if (cb) {
6438 if (state.finished)
6439 process.nextTick(cb);
6440 else
6441 stream.once('finish', cb);
6442 }
6443 state.ended = true;
6444 }
6445
6446 }).call(this,require('_process'))
6447 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6448 (function (Buffer){
6449 // Copyright Joyent, Inc. and other Node contributors.
6450 //
6451 // Permission is hereby granted, free of charge, to any person obtaining a
6452 // copy of this software and associated documentation files (the
6453 // "Software"), to deal in the Software without restriction, including
6454 // without limitation the rights to use, copy, modify, merge, publish,
6455 // distribute, sublicense, and/or sell copies of the Software, and to permit
6456 // persons to whom the Software is furnished to do so, subject to the
6457 // following conditions:
6458 //
6459 // The above copyright notice and this permission notice shall be included
6460 // in all copies or substantial portions of the Software.
6461 //
6462 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6463 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6464 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6465 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6466 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6467 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6468 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6469
6470 // NOTE: These type checking functions intentionally don't use `instanceof`
6471 // because it is fragile and can be easily faked with `Object.create()`.
6472 function isArray(ar) {
6473 return Array.isArray(ar);
6474 }
6475 exports.isArray = isArray;
6476
6477 function isBoolean(arg) {
6478 return typeof arg === 'boolean';
6479 }
6480 exports.isBoolean = isBoolean;
6481
6482 function isNull(arg) {
6483 return arg === null;
6484 }
6485 exports.isNull = isNull;
6486
6487 function isNullOrUndefined(arg) {
6488 return arg == null;
6489 }
6490 exports.isNullOrUndefined = isNullOrUndefined;
6491
6492 function isNumber(arg) {
6493 return typeof arg === 'number';
6494 }
6495 exports.isNumber = isNumber;
6496
6497 function isString(arg) {
6498 return typeof arg === 'string';
6499 }
6500 exports.isString = isString;
6501
6502 function isSymbol(arg) {
6503 return typeof arg === 'symbol';
6504 }
6505 exports.isSymbol = isSymbol;
6506
6507 function isUndefined(arg) {
6508 return arg === void 0;
6509 }
6510 exports.isUndefined = isUndefined;
6511
6512 function isRegExp(re) {
6513 return isObject(re) && objectToString(re) === '[object RegExp]';
6514 }
6515 exports.isRegExp = isRegExp;
6516
6517 function isObject(arg) {
6518 return typeof arg === 'object' && arg !== null;
6519 }
6520 exports.isObject = isObject;
6521
6522 function isDate(d) {
6523 return isObject(d) && objectToString(d) === '[object Date]';
6524 }
6525 exports.isDate = isDate;
6526
6527 function isError(e) {
6528 return isObject(e) &&
6529 (objectToString(e) === '[object Error]' || e instanceof Error);
6530 }
6531 exports.isError = isError;
6532
6533 function isFunction(arg) {
6534 return typeof arg === 'function';
6535 }
6536 exports.isFunction = isFunction;
6537
6538 function isPrimitive(arg) {
6539 return arg === null ||
6540 typeof arg === 'boolean' ||
6541 typeof arg === 'number' ||
6542 typeof arg === 'string' ||
6543 typeof arg === 'symbol' || // ES6 symbol
6544 typeof arg === 'undefined';
6545 }
6546 exports.isPrimitive = isPrimitive;
6547
6548 function isBuffer(arg) {
6549 return Buffer.isBuffer(arg);
6550 }
6551 exports.isBuffer = isBuffer;
6552
6553 function objectToString(o) {
6554 return Object.prototype.toString.call(o);
6555 }
6556 }).call(this,require("buffer").Buffer)
6557 },{"buffer":7}],22:[function(require,module,exports){
6558 module.exports = require("./lib/_stream_passthrough.js")
6559
6560 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6561 exports = module.exports = require('./lib/_stream_readable.js');
6562 exports.Stream = require('stream');
6563 exports.Readable = exports;
6564 exports.Writable = require('./lib/_stream_writable.js');
6565 exports.Duplex = require('./lib/_stream_duplex.js');
6566 exports.Transform = require('./lib/_stream_transform.js');
6567 exports.PassThrough = require('./lib/_stream_passthrough.js');
6568
6569 },{"./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){
6570 module.exports = require("./lib/_stream_transform.js")
6571
6572 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6573 module.exports = require("./lib/_stream_writable.js")
6574
6575 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6576 // Copyright Joyent, Inc. and other Node contributors.
6577 //
6578 // Permission is hereby granted, free of charge, to any person obtaining a
6579 // copy of this software and associated documentation files (the
6580 // "Software"), to deal in the Software without restriction, including
6581 // without limitation the rights to use, copy, modify, merge, publish,
6582 // distribute, sublicense, and/or sell copies of the Software, and to permit
6583 // persons to whom the Software is furnished to do so, subject to the
6584 // following conditions:
6585 //
6586 // The above copyright notice and this permission notice shall be included
6587 // in all copies or substantial portions of the Software.
6588 //
6589 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6590 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6591 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6592 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6593 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6594 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6595 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6596
6597 module.exports = Stream;
6598
6599 var EE = require('events').EventEmitter;
6600 var inherits = require('inherits');
6601
6602 inherits(Stream, EE);
6603 Stream.Readable = require('readable-stream/readable.js');
6604 Stream.Writable = require('readable-stream/writable.js');
6605 Stream.Duplex = require('readable-stream/duplex.js');
6606 Stream.Transform = require('readable-stream/transform.js');
6607 Stream.PassThrough = require('readable-stream/passthrough.js');
6608
6609 // Backwards-compat with node 0.4.x
6610 Stream.Stream = Stream;
6611
6612
6613
6614 // old-style streams. Note that the pipe method (the only relevant
6615 // part of this class) is overridden in the Readable class.
6616
6617 function Stream() {
6618 EE.call(this);
6619 }
6620
6621 Stream.prototype.pipe = function(dest, options) {
6622 var source = this;
6623
6624 function ondata(chunk) {
6625 if (dest.writable) {
6626 if (false === dest.write(chunk) && source.pause) {
6627 source.pause();
6628 }
6629 }
6630 }
6631
6632 source.on('data', ondata);
6633
6634 function ondrain() {
6635 if (source.readable && source.resume) {
6636 source.resume();
6637 }
6638 }
6639
6640 dest.on('drain', ondrain);
6641
6642 // If the 'end' option is not supplied, dest.end() will be called when
6643 // source gets the 'end' or 'close' events. Only dest.end() once.
6644 if (!dest._isStdio && (!options || options.end !== false)) {
6645 source.on('end', onend);
6646 source.on('close', onclose);
6647 }
6648
6649 var didOnEnd = false;
6650 function onend() {
6651 if (didOnEnd) return;
6652 didOnEnd = true;
6653
6654 dest.end();
6655 }
6656
6657
6658 function onclose() {
6659 if (didOnEnd) return;
6660 didOnEnd = true;
6661
6662 if (typeof dest.destroy === 'function') dest.destroy();
6663 }
6664
6665 // don't leave dangling pipes when there are errors.
6666 function onerror(er) {
6667 cleanup();
6668 if (EE.listenerCount(this, 'error') === 0) {
6669 throw er; // Unhandled stream error in pipe.
6670 }
6671 }
6672
6673 source.on('error', onerror);
6674 dest.on('error', onerror);
6675
6676 // remove all the event listeners that were added.
6677 function cleanup() {
6678 source.removeListener('data', ondata);
6679 dest.removeListener('drain', ondrain);
6680
6681 source.removeListener('end', onend);
6682 source.removeListener('close', onclose);
6683
6684 source.removeListener('error', onerror);
6685 dest.removeListener('error', onerror);
6686
6687 source.removeListener('end', cleanup);
6688 source.removeListener('close', cleanup);
6689
6690 dest.removeListener('close', cleanup);
6691 }
6692
6693 source.on('end', cleanup);
6694 source.on('close', cleanup);
6695
6696 dest.on('close', cleanup);
6697
6698 dest.emit('pipe', source);
6699
6700 // Allow for unix-like usage: A.pipe(B).pipe(C)
6701 return dest;
6702 };
6703
6704 },{"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){
6705 // Copyright Joyent, Inc. and other Node contributors.
6706 //
6707 // Permission is hereby granted, free of charge, to any person obtaining a
6708 // copy of this software and associated documentation files (the
6709 // "Software"), to deal in the Software without restriction, including
6710 // without limitation the rights to use, copy, modify, merge, publish,
6711 // distribute, sublicense, and/or sell copies of the Software, and to permit
6712 // persons to whom the Software is furnished to do so, subject to the
6713 // following conditions:
6714 //
6715 // The above copyright notice and this permission notice shall be included
6716 // in all copies or substantial portions of the Software.
6717 //
6718 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6719 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6720 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6721 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6722 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6723 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6724 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6725
6726 var Buffer = require('buffer').Buffer;
6727
6728 var isBufferEncoding = Buffer.isEncoding
6729 || function(encoding) {
6730 switch (encoding && encoding.toLowerCase()) {
6731 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;
6732 default: return false;
6733 }
6734 }
6735
6736
6737 function assertEncoding(encoding) {
6738 if (encoding && !isBufferEncoding(encoding)) {
6739 throw new Error('Unknown encoding: ' + encoding);
6740 }
6741 }
6742
6743 // StringDecoder provides an interface for efficiently splitting a series of
6744 // buffers into a series of JS strings without breaking apart multi-byte
6745 // characters. CESU-8 is handled as part of the UTF-8 encoding.
6746 //
6747 // @TODO Handling all encodings inside a single object makes it very difficult
6748 // to reason about this code, so it should be split up in the future.
6749 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
6750 // points as used by CESU-8.
6751 var StringDecoder = exports.StringDecoder = function(encoding) {
6752 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6753 assertEncoding(encoding);
6754 switch (this.encoding) {
6755 case 'utf8':
6756 // CESU-8 represents each of Surrogate Pair by 3-bytes
6757 this.surrogateSize = 3;
6758 break;
6759 case 'ucs2':
6760 case 'utf16le':
6761 // UTF-16 represents each of Surrogate Pair by 2-bytes
6762 this.surrogateSize = 2;
6763 this.detectIncompleteChar = utf16DetectIncompleteChar;
6764 break;
6765 case 'base64':
6766 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
6767 this.surrogateSize = 3;
6768 this.detectIncompleteChar = base64DetectIncompleteChar;
6769 break;
6770 default:
6771 this.write = passThroughWrite;
6772 return;
6773 }
6774
6775 // Enough space to store all bytes of a single character. UTF-8 needs 4
6776 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
6777 this.charBuffer = new Buffer(6);
6778 // Number of bytes received for the current incomplete multi-byte character.
6779 this.charReceived = 0;
6780 // Number of bytes expected for the current incomplete multi-byte character.
6781 this.charLength = 0;
6782 };
6783
6784
6785 // write decodes the given buffer and returns it as JS string that is
6786 // guaranteed to not contain any partial multi-byte characters. Any partial
6787 // character found at the end of the buffer is buffered up, and will be
6788 // returned when calling write again with the remaining bytes.
6789 //
6790 // Note: Converting a Buffer containing an orphan surrogate to a String
6791 // currently works, but converting a String to a Buffer (via `new Buffer`, or
6792 // Buffer#write) will replace incomplete surrogates with the unicode
6793 // replacement character. See https://codereview.chromium.org/121173009/ .
6794 StringDecoder.prototype.write = function(buffer) {
6795 var charStr = '';
6796 // if our last write ended with an incomplete multibyte character
6797 while (this.charLength) {
6798 // determine how many remaining bytes this buffer has to offer for this char
6799 var available = (buffer.length >= this.charLength - this.charReceived) ?
6800 this.charLength - this.charReceived :
6801 buffer.length;
6802
6803 // add the new bytes to the char buffer
6804 buffer.copy(this.charBuffer, this.charReceived, 0, available);
6805 this.charReceived += available;
6806
6807 if (this.charReceived < this.charLength) {
6808 // still not enough chars in this buffer? wait for more ...
6809 return '';
6810 }
6811
6812 // remove bytes belonging to the current character from the buffer
6813 buffer = buffer.slice(available, buffer.length);
6814
6815 // get the character that was split
6816 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
6817
6818 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6819 var charCode = charStr.charCodeAt(charStr.length - 1);
6820 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6821 this.charLength += this.surrogateSize;
6822 charStr = '';
6823 continue;
6824 }
6825 this.charReceived = this.charLength = 0;
6826
6827 // if there are no more bytes in this buffer, just emit our char
6828 if (buffer.length === 0) {
6829 return charStr;
6830 }
6831 break;
6832 }
6833
6834 // determine and set charLength / charReceived
6835 this.detectIncompleteChar(buffer);
6836
6837 var end = buffer.length;
6838 if (this.charLength) {
6839 // buffer the incomplete character bytes we got
6840 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
6841 end -= this.charReceived;
6842 }
6843
6844 charStr += buffer.toString(this.encoding, 0, end);
6845
6846 var end = charStr.length - 1;
6847 var charCode = charStr.charCodeAt(end);
6848 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6849 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6850 var size = this.surrogateSize;
6851 this.charLength += size;
6852 this.charReceived += size;
6853 this.charBuffer.copy(this.charBuffer, size, 0, size);
6854 buffer.copy(this.charBuffer, 0, 0, size);
6855 return charStr.substring(0, end);
6856 }
6857
6858 // or just emit the charStr
6859 return charStr;
6860 };
6861
6862 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
6863 // the end of the given buffer. If so, it sets this.charLength to the byte
6864 // length that character, and sets this.charReceived to the number of bytes
6865 // that are available for this character.
6866 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
6867 // determine how many bytes we have to check at the end of this buffer
6868 var i = (buffer.length >= 3) ? 3 : buffer.length;
6869
6870 // Figure out if one of the last i bytes of our buffer announces an
6871 // incomplete char.
6872 for (; i > 0; i--) {
6873 var c = buffer[buffer.length - i];
6874
6875 // See http://en.wikipedia.org/wiki/UTF-8#Description
6876
6877 // 110XXXXX
6878 if (i == 1 && c >> 5 == 0x06) {
6879 this.charLength = 2;
6880 break;
6881 }
6882
6883 // 1110XXXX
6884 if (i <= 2 && c >> 4 == 0x0E) {
6885 this.charLength = 3;
6886 break;
6887 }
6888
6889 // 11110XXX
6890 if (i <= 3 && c >> 3 == 0x1E) {
6891 this.charLength = 4;
6892 break;
6893 }
6894 }
6895 this.charReceived = i;
6896 };
6897
6898 StringDecoder.prototype.end = function(buffer) {
6899 var res = '';
6900 if (buffer && buffer.length)
6901 res = this.write(buffer);
6902
6903 if (this.charReceived) {
6904 var cr = this.charReceived;
6905 var buf = this.charBuffer;
6906 var enc = this.encoding;
6907 res += buf.slice(0, cr).toString(enc);
6908 }
6909
6910 return res;
6911 };
6912
6913 function passThroughWrite(buffer) {
6914 return buffer.toString(this.encoding);
6915 }
6916
6917 function utf16DetectIncompleteChar(buffer) {
6918 this.charReceived = buffer.length % 2;
6919 this.charLength = this.charReceived ? 2 : 0;
6920 }
6921
6922 function base64DetectIncompleteChar(buffer) {
6923 this.charReceived = buffer.length % 3;
6924 this.charLength = this.charReceived ? 3 : 0;
6925 }
6926
6927 },{"buffer":7}],28:[function(require,module,exports){
6928 module.exports = function isBuffer(arg) {
6929 return arg && typeof arg === 'object'
6930 && typeof arg.copy === 'function'
6931 && typeof arg.fill === 'function'
6932 && typeof arg.readUInt8 === 'function';
6933 }
6934 },{}],29:[function(require,module,exports){
6935 (function (process,global){
6936 // Copyright Joyent, Inc. and other Node contributors.
6937 //
6938 // Permission is hereby granted, free of charge, to any person obtaining a
6939 // copy of this software and associated documentation files (the
6940 // "Software"), to deal in the Software without restriction, including
6941 // without limitation the rights to use, copy, modify, merge, publish,
6942 // distribute, sublicense, and/or sell copies of the Software, and to permit
6943 // persons to whom the Software is furnished to do so, subject to the
6944 // following conditions:
6945 //
6946 // The above copyright notice and this permission notice shall be included
6947 // in all copies or substantial portions of the Software.
6948 //
6949 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6950 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6951 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6952 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6953 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6954 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6955 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6956
6957 var formatRegExp = /%[sdj%]/g;
6958 exports.format = function(f) {
6959 if (!isString(f)) {
6960 var objects = [];
6961 for (var i = 0; i < arguments.length; i++) {
6962 objects.push(inspect(arguments[i]));
6963 }
6964 return objects.join(' ');
6965 }
6966
6967 var i = 1;
6968 var args = arguments;
6969 var len = args.length;
6970 var str = String(f).replace(formatRegExp, function(x) {
6971 if (x === '%%') return '%';
6972 if (i >= len) return x;
6973 switch (x) {
6974 case '%s': return String(args[i++]);
6975 case '%d': return Number(args[i++]);
6976 case '%j':
6977 try {
6978 return JSON.stringify(args[i++]);
6979 } catch (_) {
6980 return '[Circular]';
6981 }
6982 default:
6983 return x;
6984 }
6985 });
6986 for (var x = args[i]; i < len; x = args[++i]) {
6987 if (isNull(x) || !isObject(x)) {
6988 str += ' ' + x;
6989 } else {
6990 str += ' ' + inspect(x);
6991 }
6992 }
6993 return str;
6994 };
6995
6996
6997 // Mark that a method should not be used.
6998 // Returns a modified function which warns once by default.
6999 // If --no-deprecation is set, then it is a no-op.
7000 exports.deprecate = function(fn, msg) {
7001 // Allow for deprecating things in the process of starting up.
7002 if (isUndefined(global.process)) {
7003 return function() {
7004 return exports.deprecate(fn, msg).apply(this, arguments);
7005 };
7006 }
7007
7008 if (process.noDeprecation === true) {
7009 return fn;
7010 }
7011
7012 var warned = false;
7013 function deprecated() {
7014 if (!warned) {
7015 if (process.throwDeprecation) {
7016 throw new Error(msg);
7017 } else if (process.traceDeprecation) {
7018 console.trace(msg);
7019 } else {
7020 console.error(msg);
7021 }
7022 warned = true;
7023 }
7024 return fn.apply(this, arguments);
7025 }
7026
7027 return deprecated;
7028 };
7029
7030
7031 var debugs = {};
7032 var debugEnviron;
7033 exports.debuglog = function(set) {
7034 if (isUndefined(debugEnviron))
7035 debugEnviron = process.env.NODE_DEBUG || '';
7036 set = set.toUpperCase();
7037 if (!debugs[set]) {
7038 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7039 var pid = process.pid;
7040 debugs[set] = function() {
7041 var msg = exports.format.apply(exports, arguments);
7042 console.error('%s %d: %s', set, pid, msg);
7043 };
7044 } else {
7045 debugs[set] = function() {};
7046 }
7047 }
7048 return debugs[set];
7049 };
7050
7051
7052 /**
7053 * Echos the value of a value. Trys to print the value out
7054 * in the best way possible given the different types.
7055 *
7056 * @param {Object} obj The object to print out.
7057 * @param {Object} opts Optional options object that alters the output.
7058 */
7059 /* legacy: obj, showHidden, depth, colors*/
7060 function inspect(obj, opts) {
7061 // default options
7062 var ctx = {
7063 seen: [],
7064 stylize: stylizeNoColor
7065 };
7066 // legacy...
7067 if (arguments.length >= 3) ctx.depth = arguments[2];
7068 if (arguments.length >= 4) ctx.colors = arguments[3];
7069 if (isBoolean(opts)) {
7070 // legacy...
7071 ctx.showHidden = opts;
7072 } else if (opts) {
7073 // got an "options" object
7074 exports._extend(ctx, opts);
7075 }
7076 // set default options
7077 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7078 if (isUndefined(ctx.depth)) ctx.depth = 2;
7079 if (isUndefined(ctx.colors)) ctx.colors = false;
7080 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7081 if (ctx.colors) ctx.stylize = stylizeWithColor;
7082 return formatValue(ctx, obj, ctx.depth);
7083 }
7084 exports.inspect = inspect;
7085
7086
7087 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7088 inspect.colors = {
7089 'bold' : [1, 22],
7090 'italic' : [3, 23],
7091 'underline' : [4, 24],
7092 'inverse' : [7, 27],
7093 'white' : [37, 39],
7094 'grey' : [90, 39],
7095 'black' : [30, 39],
7096 'blue' : [34, 39],
7097 'cyan' : [36, 39],
7098 'green' : [32, 39],
7099 'magenta' : [35, 39],
7100 'red' : [31, 39],
7101 'yellow' : [33, 39]
7102 };
7103
7104 // Don't use 'blue' not visible on cmd.exe
7105 inspect.styles = {
7106 'special': 'cyan',
7107 'number': 'yellow',
7108 'boolean': 'yellow',
7109 'undefined': 'grey',
7110 'null': 'bold',
7111 'string': 'green',
7112 'date': 'magenta',
7113 // "name": intentionally not styling
7114 'regexp': 'red'
7115 };
7116
7117
7118 function stylizeWithColor(str, styleType) {
7119 var style = inspect.styles[styleType];
7120
7121 if (style) {
7122 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7123 '\u001b[' + inspect.colors[style][1] + 'm';
7124 } else {
7125 return str;
7126 }
7127 }
7128
7129
7130 function stylizeNoColor(str, styleType) {
7131 return str;
7132 }
7133
7134
7135 function arrayToHash(array) {
7136 var hash = {};
7137
7138 array.forEach(function(val, idx) {
7139 hash[val] = true;
7140 });
7141
7142 return hash;
7143 }
7144
7145
7146 function formatValue(ctx, value, recurseTimes) {
7147 // Provide a hook for user-specified inspect functions.
7148 // Check that value is an object with an inspect function on it
7149 if (ctx.customInspect &&
7150 value &&
7151 isFunction(value.inspect) &&
7152 // Filter out the util module, it's inspect function is special
7153 value.inspect !== exports.inspect &&
7154 // Also filter out any prototype objects using the circular check.
7155 !(value.constructor && value.constructor.prototype === value)) {
7156 var ret = value.inspect(recurseTimes, ctx);
7157 if (!isString(ret)) {
7158 ret = formatValue(ctx, ret, recurseTimes);
7159 }
7160 return ret;
7161 }
7162
7163 // Primitive types cannot have properties
7164 var primitive = formatPrimitive(ctx, value);
7165 if (primitive) {
7166 return primitive;
7167 }
7168
7169 // Look up the keys of the object.
7170 var keys = Object.keys(value);
7171 var visibleKeys = arrayToHash(keys);
7172
7173 if (ctx.showHidden) {
7174 keys = Object.getOwnPropertyNames(value);
7175 }
7176
7177 // IE doesn't make error fields non-enumerable
7178 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7179 if (isError(value)
7180 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7181 return formatError(value);
7182 }
7183
7184 // Some type of object without properties can be shortcutted.
7185 if (keys.length === 0) {
7186 if (isFunction(value)) {
7187 var name = value.name ? ': ' + value.name : '';
7188 return ctx.stylize('[Function' + name + ']', 'special');
7189 }
7190 if (isRegExp(value)) {
7191 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7192 }
7193 if (isDate(value)) {
7194 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7195 }
7196 if (isError(value)) {
7197 return formatError(value);
7198 }
7199 }
7200
7201 var base = '', array = false, braces = ['{', '}'];
7202
7203 // Make Array say that they are Array
7204 if (isArray(value)) {
7205 array = true;
7206 braces = ['[', ']'];
7207 }
7208
7209 // Make functions say that they are functions
7210 if (isFunction(value)) {
7211 var n = value.name ? ': ' + value.name : '';
7212 base = ' [Function' + n + ']';
7213 }
7214
7215 // Make RegExps say that they are RegExps
7216 if (isRegExp(value)) {
7217 base = ' ' + RegExp.prototype.toString.call(value);
7218 }
7219
7220 // Make dates with properties first say the date
7221 if (isDate(value)) {
7222 base = ' ' + Date.prototype.toUTCString.call(value);
7223 }
7224
7225 // Make error with message first say the error
7226 if (isError(value)) {
7227 base = ' ' + formatError(value);
7228 }
7229
7230 if (keys.length === 0 && (!array || value.length == 0)) {
7231 return braces[0] + base + braces[1];
7232 }
7233
7234 if (recurseTimes < 0) {
7235 if (isRegExp(value)) {
7236 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7237 } else {
7238 return ctx.stylize('[Object]', 'special');
7239 }
7240 }
7241
7242 ctx.seen.push(value);
7243
7244 var output;
7245 if (array) {
7246 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7247 } else {
7248 output = keys.map(function(key) {
7249 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7250 });
7251 }
7252
7253 ctx.seen.pop();
7254
7255 return reduceToSingleString(output, base, braces);
7256 }
7257
7258
7259 function formatPrimitive(ctx, value) {
7260 if (isUndefined(value))
7261 return ctx.stylize('undefined', 'undefined');
7262 if (isString(value)) {
7263 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7264 .replace(/'/g, "\\'")
7265 .replace(/\\"/g, '"') + '\'';
7266 return ctx.stylize(simple, 'string');
7267 }
7268 if (isNumber(value))
7269 return ctx.stylize('' + value, 'number');
7270 if (isBoolean(value))
7271 return ctx.stylize('' + value, 'boolean');
7272 // For some reason typeof null is "object", so special case here.
7273 if (isNull(value))
7274 return ctx.stylize('null', 'null');
7275 }
7276
7277
7278 function formatError(value) {
7279 return '[' + Error.prototype.toString.call(value) + ']';
7280 }
7281
7282
7283 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7284 var output = [];
7285 for (var i = 0, l = value.length; i < l; ++i) {
7286 if (hasOwnProperty(value, String(i))) {
7287 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7288 String(i), true));
7289 } else {
7290 output.push('');
7291 }
7292 }
7293 keys.forEach(function(key) {
7294 if (!key.match(/^\d+$/)) {
7295 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7296 key, true));
7297 }
7298 });
7299 return output;
7300 }
7301
7302
7303 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7304 var name, str, desc;
7305 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7306 if (desc.get) {
7307 if (desc.set) {
7308 str = ctx.stylize('[Getter/Setter]', 'special');
7309 } else {
7310 str = ctx.stylize('[Getter]', 'special');
7311 }
7312 } else {
7313 if (desc.set) {
7314 str = ctx.stylize('[Setter]', 'special');
7315 }
7316 }
7317 if (!hasOwnProperty(visibleKeys, key)) {
7318 name = '[' + key + ']';
7319 }
7320 if (!str) {
7321 if (ctx.seen.indexOf(desc.value) < 0) {
7322 if (isNull(recurseTimes)) {
7323 str = formatValue(ctx, desc.value, null);
7324 } else {
7325 str = formatValue(ctx, desc.value, recurseTimes - 1);
7326 }
7327 if (str.indexOf('\n') > -1) {
7328 if (array) {
7329 str = str.split('\n').map(function(line) {
7330 return ' ' + line;
7331 }).join('\n').substr(2);
7332 } else {
7333 str = '\n' + str.split('\n').map(function(line) {
7334 return ' ' + line;
7335 }).join('\n');
7336 }
7337 }
7338 } else {
7339 str = ctx.stylize('[Circular]', 'special');
7340 }
7341 }
7342 if (isUndefined(name)) {
7343 if (array && key.match(/^\d+$/)) {
7344 return str;
7345 }
7346 name = JSON.stringify('' + key);
7347 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7348 name = name.substr(1, name.length - 2);
7349 name = ctx.stylize(name, 'name');
7350 } else {
7351 name = name.replace(/'/g, "\\'")
7352 .replace(/\\"/g, '"')
7353 .replace(/(^"|"$)/g, "'");
7354 name = ctx.stylize(name, 'string');
7355 }
7356 }
7357
7358 return name + ': ' + str;
7359 }
7360
7361
7362 function reduceToSingleString(output, base, braces) {
7363 var numLinesEst = 0;
7364 var length = output.reduce(function(prev, cur) {
7365 numLinesEst++;
7366 if (cur.indexOf('\n') >= 0) numLinesEst++;
7367 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7368 }, 0);
7369
7370 if (length > 60) {
7371 return braces[0] +
7372 (base === '' ? '' : base + '\n ') +
7373 ' ' +
7374 output.join(',\n ') +
7375 ' ' +
7376 braces[1];
7377 }
7378
7379 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7380 }
7381
7382
7383 // NOTE: These type checking functions intentionally don't use `instanceof`
7384 // because it is fragile and can be easily faked with `Object.create()`.
7385 function isArray(ar) {
7386 return Array.isArray(ar);
7387 }
7388 exports.isArray = isArray;
7389
7390 function isBoolean(arg) {
7391 return typeof arg === 'boolean';
7392 }
7393 exports.isBoolean = isBoolean;
7394
7395 function isNull(arg) {
7396 return arg === null;
7397 }
7398 exports.isNull = isNull;
7399
7400 function isNullOrUndefined(arg) {
7401 return arg == null;
7402 }
7403 exports.isNullOrUndefined = isNullOrUndefined;
7404
7405 function isNumber(arg) {
7406 return typeof arg === 'number';
7407 }
7408 exports.isNumber = isNumber;
7409
7410 function isString(arg) {
7411 return typeof arg === 'string';
7412 }
7413 exports.isString = isString;
7414
7415 function isSymbol(arg) {
7416 return typeof arg === 'symbol';
7417 }
7418 exports.isSymbol = isSymbol;
7419
7420 function isUndefined(arg) {
7421 return arg === void 0;
7422 }
7423 exports.isUndefined = isUndefined;
7424
7425 function isRegExp(re) {
7426 return isObject(re) && objectToString(re) === '[object RegExp]';
7427 }
7428 exports.isRegExp = isRegExp;
7429
7430 function isObject(arg) {
7431 return typeof arg === 'object' && arg !== null;
7432 }
7433 exports.isObject = isObject;
7434
7435 function isDate(d) {
7436 return isObject(d) && objectToString(d) === '[object Date]';
7437 }
7438 exports.isDate = isDate;
7439
7440 function isError(e) {
7441 return isObject(e) &&
7442 (objectToString(e) === '[object Error]' || e instanceof Error);
7443 }
7444 exports.isError = isError;
7445
7446 function isFunction(arg) {
7447 return typeof arg === 'function';
7448 }
7449 exports.isFunction = isFunction;
7450
7451 function isPrimitive(arg) {
7452 return arg === null ||
7453 typeof arg === 'boolean' ||
7454 typeof arg === 'number' ||
7455 typeof arg === 'string' ||
7456 typeof arg === 'symbol' || // ES6 symbol
7457 typeof arg === 'undefined';
7458 }
7459 exports.isPrimitive = isPrimitive;
7460
7461 exports.isBuffer = require('./support/isBuffer');
7462
7463 function objectToString(o) {
7464 return Object.prototype.toString.call(o);
7465 }
7466
7467
7468 function pad(n) {
7469 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7470 }
7471
7472
7473 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7474 'Oct', 'Nov', 'Dec'];
7475
7476 // 26 Feb 16:19:34
7477 function timestamp() {
7478 var d = new Date();
7479 var time = [pad(d.getHours()),
7480 pad(d.getMinutes()),
7481 pad(d.getSeconds())].join(':');
7482 return [d.getDate(), months[d.getMonth()], time].join(' ');
7483 }
7484
7485
7486 // log is just a thin wrapper to console.log that prepends a timestamp
7487 exports.log = function() {
7488 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7489 };
7490
7491
7492 /**
7493 * Inherit the prototype methods from one constructor into another.
7494 *
7495 * The Function.prototype.inherits from lang.js rewritten as a standalone
7496 * function (not on Function.prototype). NOTE: If this file is to be loaded
7497 * during bootstrapping this function needs to be rewritten using some native
7498 * functions as prototype setup using normal JavaScript does not work as
7499 * expected during bootstrapping (see mirror.js in r114903).
7500 *
7501 * @param {function} ctor Constructor function which needs to inherit the
7502 * prototype.
7503 * @param {function} superCtor Constructor function to inherit prototype from.
7504 */
7505 exports.inherits = require('inherits');
7506
7507 exports._extend = function(origin, add) {
7508 // Don't do anything if add isn't an object
7509 if (!add || !isObject(add)) return origin;
7510
7511 var keys = Object.keys(add);
7512 var i = keys.length;
7513 while (i--) {
7514 origin[keys[i]] = add[keys[i]];
7515 }
7516 return origin;
7517 };
7518
7519 function hasOwnProperty(obj, prop) {
7520 return Object.prototype.hasOwnProperty.call(obj, prop);
7521 }
7522
7523 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7524 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
7525 // Base58 encoding/decoding
7526 // Originally written by Mike Hearn for BitcoinJ
7527 // Copyright (c) 2011 Google Inc
7528 // Ported to JavaScript by Stefan Thomas
7529 // Merged Buffer refactorings from base58-native by Stephen Pair
7530 // Copyright (c) 2013 BitPay Inc
7531
7532 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7533 var ALPHABET_MAP = {}
7534 for(var i = 0; i < ALPHABET.length; i++) {
7535 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7536 }
7537 var BASE = 58
7538
7539 function encode(buffer) {
7540 if (buffer.length === 0) return ''
7541
7542 var i, j, digits = [0]
7543 for (i = 0; i < buffer.length; i++) {
7544 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7545
7546 digits[0] += buffer[i]
7547
7548 var carry = 0
7549 for (j = 0; j < digits.length; ++j) {
7550 digits[j] += carry
7551
7552 carry = (digits[j] / BASE) | 0
7553 digits[j] %= BASE
7554 }
7555
7556 while (carry) {
7557 digits.push(carry % BASE)
7558
7559 carry = (carry / BASE) | 0
7560 }
7561 }
7562
7563 // deal with leading zeros
7564 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
7565
7566 // convert digits to a string
7567 var stringOutput = ""
7568 for (var i = digits.length - 1; i >= 0; i--) {
7569 stringOutput = stringOutput + ALPHABET[digits[i]]
7570 }
7571 return stringOutput
7572 }
7573
7574 function decode(string) {
7575 if (string.length === 0) return []
7576
7577 var i, j, bytes = [0]
7578 for (i = 0; i < string.length; i++) {
7579 var c = string[i]
7580 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7581
7582 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7583 bytes[0] += ALPHABET_MAP[c]
7584
7585 var carry = 0
7586 for (j = 0; j < bytes.length; ++j) {
7587 bytes[j] += carry
7588
7589 carry = bytes[j] >> 8
7590 bytes[j] &= 0xff
7591 }
7592
7593 while (carry) {
7594 bytes.push(carry & 0xff)
7595
7596 carry >>= 8
7597 }
7598 }
7599
7600 // deal with leading zeros
7601 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
7602
7603 return bytes.reverse()
7604 }
7605
7606 module.exports = {
7607 encode: encode,
7608 decode: decode
7609 }
7610
7611 },{}],31:[function(require,module,exports){
7612 (function (Buffer){
7613 'use strict'
7614
7615 var base58 = require('bs58')
7616 var createHash = require('create-hash')
7617
7618 // SHA256(SHA256(buffer))
7619 function sha256x2 (buffer) {
7620 buffer = createHash('sha256').update(buffer).digest()
7621 return createHash('sha256').update(buffer).digest()
7622 }
7623
7624 // Encode a buffer as a base58-check encoded string
7625 function encode (payload) {
7626 var checksum = sha256x2(payload).slice(0, 4)
7627
7628 return base58.encode(Buffer.concat([
7629 payload,
7630 checksum
7631 ]))
7632 }
7633
7634 // Decode a base58-check encoded string to a buffer
7635 function decode (string) {
7636 var buffer = new Buffer(base58.decode(string))
7637
7638 var payload = buffer.slice(0, -4)
7639 var checksum = buffer.slice(-4)
7640 var newChecksum = sha256x2(payload).slice(0, 4)
7641
7642 for (var i = 0; i < newChecksum.length; ++i) {
7643 if (newChecksum[i] === checksum[i]) continue
7644
7645 throw new Error('Invalid checksum')
7646 }
7647
7648 return payload
7649 }
7650
7651 module.exports = {
7652 encode: encode,
7653 decode: decode
7654 }
7655
7656 }).call(this,require("buffer").Buffer)
7657 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
7658 (function (Buffer){
7659 'use strict';
7660 var inherits = require('inherits')
7661 var md5 = require('./md5')
7662 var rmd160 = require('ripemd160')
7663 var sha = require('sha.js')
7664
7665 var Transform = require('stream').Transform
7666
7667 function HashNoConstructor(hash) {
7668 Transform.call(this)
7669
7670 this._hash = hash
7671 this.buffers = []
7672 }
7673
7674 inherits(HashNoConstructor, Transform)
7675
7676 HashNoConstructor.prototype._transform = function (data, _, next) {
7677 this.buffers.push(data)
7678
7679 next()
7680 }
7681
7682 HashNoConstructor.prototype._flush = function (next) {
7683 this.push(this.digest())
7684 next()
7685 }
7686
7687 HashNoConstructor.prototype.update = function (data, enc) {
7688 if (typeof data === 'string') {
7689 data = new Buffer(data, enc)
7690 }
7691
7692 this.buffers.push(data)
7693 return this
7694 }
7695
7696 HashNoConstructor.prototype.digest = function (enc) {
7697 var buf = Buffer.concat(this.buffers)
7698 var r = this._hash(buf)
7699 this.buffers = null
7700
7701 return enc ? r.toString(enc) : r
7702 }
7703
7704 function Hash(hash) {
7705 Transform.call(this)
7706
7707 this._hash = hash
7708 }
7709
7710 inherits(Hash, Transform)
7711
7712 Hash.prototype._transform = function (data, enc, next) {
7713 if (enc) data = new Buffer(data, enc)
7714
7715 this._hash.update(data)
7716
7717 next()
7718 }
7719
7720 Hash.prototype._flush = function (next) {
7721 this.push(this._hash.digest())
7722 this._hash = null
7723
7724 next()
7725 }
7726
7727 Hash.prototype.update = function (data, enc) {
7728 if (typeof data === 'string') {
7729 data = new Buffer(data, enc)
7730 }
7731
7732 this._hash.update(data)
7733 return this
7734 }
7735
7736 Hash.prototype.digest = function (enc) {
7737 var outData = this._hash.digest()
7738
7739 return enc ? outData.toString(enc) : outData
7740 }
7741
7742 module.exports = function createHash (alg) {
7743 if ('md5' === alg) return new HashNoConstructor(md5)
7744 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7745
7746 return new Hash(sha(alg))
7747 }
7748
7749 }).call(this,require("buffer").Buffer)
7750 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
7751 (function (Buffer){
7752 'use strict';
7753 var intSize = 4;
7754 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
7755 var chrsz = 8;
7756
7757 function toArray(buf, bigEndian) {
7758 if ((buf.length % intSize) !== 0) {
7759 var len = buf.length + (intSize - (buf.length % intSize));
7760 buf = Buffer.concat([buf, zeroBuffer], len);
7761 }
7762
7763 var arr = [];
7764 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
7765 for (var i = 0; i < buf.length; i += intSize) {
7766 arr.push(fn.call(buf, i));
7767 }
7768 return arr;
7769 }
7770
7771 function toBuffer(arr, size, bigEndian) {
7772 var buf = new Buffer(size);
7773 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
7774 for (var i = 0; i < arr.length; i++) {
7775 fn.call(buf, arr[i], i * 4, true);
7776 }
7777 return buf;
7778 }
7779
7780 function hash(buf, fn, hashSize, bigEndian) {
7781 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
7782 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
7783 return toBuffer(arr, hashSize, bigEndian);
7784 }
7785 exports.hash = hash;
7786 }).call(this,require("buffer").Buffer)
7787 },{"buffer":7}],34:[function(require,module,exports){
7788 'use strict';
7789 /*
7790 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
7791 * Digest Algorithm, as defined in RFC 1321.
7792 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
7793 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
7794 * Distributed under the BSD License
7795 * See http://pajhome.org.uk/crypt/md5 for more info.
7796 */
7797
7798 var helpers = require('./helpers');
7799
7800 /*
7801 * Calculate the MD5 of an array of little-endian words, and a bit length
7802 */
7803 function core_md5(x, len)
7804 {
7805 /* append padding */
7806 x[len >> 5] |= 0x80 << ((len) % 32);
7807 x[(((len + 64) >>> 9) << 4) + 14] = len;
7808
7809 var a = 1732584193;
7810 var b = -271733879;
7811 var c = -1732584194;
7812 var d = 271733878;
7813
7814 for(var i = 0; i < x.length; i += 16)
7815 {
7816 var olda = a;
7817 var oldb = b;
7818 var oldc = c;
7819 var oldd = d;
7820
7821 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
7822 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
7823 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
7824 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
7825 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
7826 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
7827 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
7828 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
7829 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
7830 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
7831 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
7832 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
7833 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
7834 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
7835 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
7836 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
7837
7838 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
7839 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
7840 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
7841 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
7842 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
7843 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
7844 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
7845 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
7846 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
7847 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
7848 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
7849 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
7850 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
7851 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
7852 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
7853 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
7854
7855 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
7856 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
7857 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
7858 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
7859 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
7860 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
7861 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
7862 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
7863 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
7864 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
7865 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
7866 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
7867 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
7868 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
7869 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
7870 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
7871
7872 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
7873 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
7874 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
7875 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
7876 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
7877 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
7878 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
7879 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
7880 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
7881 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
7882 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
7883 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
7884 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
7885 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
7886 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
7887 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
7888
7889 a = safe_add(a, olda);
7890 b = safe_add(b, oldb);
7891 c = safe_add(c, oldc);
7892 d = safe_add(d, oldd);
7893 }
7894 return Array(a, b, c, d);
7895
7896 }
7897
7898 /*
7899 * These functions implement the four basic operations the algorithm uses.
7900 */
7901 function md5_cmn(q, a, b, x, s, t)
7902 {
7903 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
7904 }
7905 function md5_ff(a, b, c, d, x, s, t)
7906 {
7907 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7908 }
7909 function md5_gg(a, b, c, d, x, s, t)
7910 {
7911 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7912 }
7913 function md5_hh(a, b, c, d, x, s, t)
7914 {
7915 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
7916 }
7917 function md5_ii(a, b, c, d, x, s, t)
7918 {
7919 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7920 }
7921
7922 /*
7923 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
7924 * to work around bugs in some JS interpreters.
7925 */
7926 function safe_add(x, y)
7927 {
7928 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
7929 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
7930 return (msw << 16) | (lsw & 0xFFFF);
7931 }
7932
7933 /*
7934 * Bitwise rotate a 32-bit number to the left.
7935 */
7936 function bit_rol(num, cnt)
7937 {
7938 return (num << cnt) | (num >>> (32 - cnt));
7939 }
7940
7941 module.exports = function md5(buf) {
7942 return helpers.hash(buf, core_md5, 16);
7943 };
7944 },{"./helpers":33}],35:[function(require,module,exports){
7945 arguments[4][12][0].apply(exports,arguments)
7946 },{"dup":12}],36:[function(require,module,exports){
7947 (function (Buffer){
7948 /*
7949 CryptoJS v3.1.2
7950 code.google.com/p/crypto-js
7951 (c) 2009-2013 by Jeff Mott. All rights reserved.
7952 code.google.com/p/crypto-js/wiki/License
7953 */
7954 /** @preserve
7955 (c) 2012 by Cédric Mesnil. All rights reserved.
7956
7957 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
7958
7959 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7960 - 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.
7961
7962 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.
7963 */
7964
7965 // constants table
7966 var zl = [
7967 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
7968 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
7969 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
7970 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
7971 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
7972 ]
7973
7974 var zr = [
7975 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
7976 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
7977 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
7978 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
7979 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
7980 ]
7981
7982 var sl = [
7983 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
7984 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
7985 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
7986 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
7987 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
7988 ]
7989
7990 var sr = [
7991 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
7992 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
7993 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
7994 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
7995 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
7996 ]
7997
7998 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
7999 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
8000
8001 function bytesToWords (bytes) {
8002 var words = []
8003 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
8004 words[b >>> 5] |= bytes[i] << (24 - b % 32)
8005 }
8006 return words
8007 }
8008
8009 function wordsToBytes (words) {
8010 var bytes = []
8011 for (var b = 0; b < words.length * 32; b += 8) {
8012 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
8013 }
8014 return bytes
8015 }
8016
8017 function processBlock (H, M, offset) {
8018 // swap endian
8019 for (var i = 0; i < 16; i++) {
8020 var offset_i = offset + i
8021 var M_offset_i = M[offset_i]
8022
8023 // Swap
8024 M[offset_i] = (
8025 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8026 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8027 )
8028 }
8029
8030 // Working variables
8031 var al, bl, cl, dl, el
8032 var ar, br, cr, dr, er
8033
8034 ar = al = H[0]
8035 br = bl = H[1]
8036 cr = cl = H[2]
8037 dr = dl = H[3]
8038 er = el = H[4]
8039
8040 // computation
8041 var t
8042 for (i = 0; i < 80; i += 1) {
8043 t = (al + M[offset + zl[i]]) | 0
8044 if (i < 16) {
8045 t += f1(bl, cl, dl) + hl[0]
8046 } else if (i < 32) {
8047 t += f2(bl, cl, dl) + hl[1]
8048 } else if (i < 48) {
8049 t += f3(bl, cl, dl) + hl[2]
8050 } else if (i < 64) {
8051 t += f4(bl, cl, dl) + hl[3]
8052 } else {// if (i<80) {
8053 t += f5(bl, cl, dl) + hl[4]
8054 }
8055 t = t | 0
8056 t = rotl(t, sl[i])
8057 t = (t + el) | 0
8058 al = el
8059 el = dl
8060 dl = rotl(cl, 10)
8061 cl = bl
8062 bl = t
8063
8064 t = (ar + M[offset + zr[i]]) | 0
8065 if (i < 16) {
8066 t += f5(br, cr, dr) + hr[0]
8067 } else if (i < 32) {
8068 t += f4(br, cr, dr) + hr[1]
8069 } else if (i < 48) {
8070 t += f3(br, cr, dr) + hr[2]
8071 } else if (i < 64) {
8072 t += f2(br, cr, dr) + hr[3]
8073 } else {// if (i<80) {
8074 t += f1(br, cr, dr) + hr[4]
8075 }
8076
8077 t = t | 0
8078 t = rotl(t, sr[i])
8079 t = (t + er) | 0
8080 ar = er
8081 er = dr
8082 dr = rotl(cr, 10)
8083 cr = br
8084 br = t
8085 }
8086
8087 // intermediate hash value
8088 t = (H[1] + cl + dr) | 0
8089 H[1] = (H[2] + dl + er) | 0
8090 H[2] = (H[3] + el + ar) | 0
8091 H[3] = (H[4] + al + br) | 0
8092 H[4] = (H[0] + bl + cr) | 0
8093 H[0] = t
8094 }
8095
8096 function f1 (x, y, z) {
8097 return ((x) ^ (y) ^ (z))
8098 }
8099
8100 function f2 (x, y, z) {
8101 return (((x) & (y)) | ((~x) & (z)))
8102 }
8103
8104 function f3 (x, y, z) {
8105 return (((x) | (~(y))) ^ (z))
8106 }
8107
8108 function f4 (x, y, z) {
8109 return (((x) & (z)) | ((y) & (~(z))))
8110 }
8111
8112 function f5 (x, y, z) {
8113 return ((x) ^ ((y) | (~(z))))
8114 }
8115
8116 function rotl (x, n) {
8117 return (x << n) | (x >>> (32 - n))
8118 }
8119
8120 function ripemd160 (message) {
8121 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
8122
8123 if (typeof message === 'string') {
8124 message = new Buffer(message, 'utf8')
8125 }
8126
8127 var m = bytesToWords(message)
8128
8129 var nBitsLeft = message.length * 8
8130 var nBitsTotal = message.length * 8
8131
8132 // Add padding
8133 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
8134 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
8135 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8136 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8137 )
8138
8139 for (var i = 0; i < m.length; i += 16) {
8140 processBlock(H, m, i)
8141 }
8142
8143 // swap endian
8144 for (i = 0; i < 5; i++) {
8145 // shortcut
8146 var H_i = H[i]
8147
8148 // Swap
8149 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8150 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
8151 }
8152
8153 var digestbytes = wordsToBytes(H)
8154 return new Buffer(digestbytes)
8155 }
8156
8157 module.exports = ripemd160
8158
8159 }).call(this,require("buffer").Buffer)
8160 },{"buffer":7}],37:[function(require,module,exports){
8161 (function (Buffer){
8162 // prototype class for hash functions
8163 function Hash (blockSize, finalSize) {
8164 this._block = new Buffer(blockSize)
8165 this._finalSize = finalSize
8166 this._blockSize = blockSize
8167 this._len = 0
8168 this._s = 0
8169 }
8170
8171 Hash.prototype.update = function (data, enc) {
8172 if (typeof data === 'string') {
8173 enc = enc || 'utf8'
8174 data = new Buffer(data, enc)
8175 }
8176
8177 var l = this._len += data.length
8178 var s = this._s || 0
8179 var f = 0
8180 var buffer = this._block
8181
8182 while (s < l) {
8183 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8184 var ch = (t - f)
8185
8186 for (var i = 0; i < ch; i++) {
8187 buffer[(s % this._blockSize) + i] = data[i + f]
8188 }
8189
8190 s += ch
8191 f += ch
8192
8193 if ((s % this._blockSize) === 0) {
8194 this._update(buffer)
8195 }
8196 }
8197 this._s = s
8198
8199 return this
8200 }
8201
8202 Hash.prototype.digest = function (enc) {
8203 // Suppose the length of the message M, in bits, is l
8204 var l = this._len * 8
8205
8206 // Append the bit 1 to the end of the message
8207 this._block[this._len % this._blockSize] = 0x80
8208
8209 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8210 this._block.fill(0, this._len % this._blockSize + 1)
8211
8212 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8213 this._update(this._block)
8214 this._block.fill(0)
8215 }
8216
8217 // to this append the block which is equal to the number l written in binary
8218 // TODO: handle case where l is > Math.pow(2, 29)
8219 this._block.writeInt32BE(l, this._blockSize - 4)
8220
8221 var hash = this._update(this._block) || this._hash()
8222
8223 return enc ? hash.toString(enc) : hash
8224 }
8225
8226 Hash.prototype._update = function () {
8227 throw new Error('_update must be implemented by subclass')
8228 }
8229
8230 module.exports = Hash
8231
8232 }).call(this,require("buffer").Buffer)
8233 },{"buffer":7}],38:[function(require,module,exports){
8234 var exports = module.exports = function SHA (algorithm) {
8235 algorithm = algorithm.toLowerCase()
8236
8237 var Algorithm = exports[algorithm]
8238 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8239
8240 return new Algorithm()
8241 }
8242
8243 exports.sha = require('./sha')
8244 exports.sha1 = require('./sha1')
8245 exports.sha224 = require('./sha224')
8246 exports.sha256 = require('./sha256')
8247 exports.sha384 = require('./sha384')
8248 exports.sha512 = require('./sha512')
8249
8250 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8251 (function (Buffer){
8252 /*
8253 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8254 * in FIPS PUB 180-1
8255 * This source code is derived from sha1.js of the same repository.
8256 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8257 * operation was added.
8258 */
8259
8260 var inherits = require('inherits')
8261 var Hash = require('./hash')
8262
8263 var W = new Array(80)
8264
8265 function Sha () {
8266 this.init()
8267 this._w = W
8268
8269 Hash.call(this, 64, 56)
8270 }
8271
8272 inherits(Sha, Hash)
8273
8274 Sha.prototype.init = function () {
8275 this._a = 0x67452301 | 0
8276 this._b = 0xefcdab89 | 0
8277 this._c = 0x98badcfe | 0
8278 this._d = 0x10325476 | 0
8279 this._e = 0xc3d2e1f0 | 0
8280
8281 return this
8282 }
8283
8284 /*
8285 * Bitwise rotate a 32-bit number to the left.
8286 */
8287 function rol (num, cnt) {
8288 return (num << cnt) | (num >>> (32 - cnt))
8289 }
8290
8291 Sha.prototype._update = function (M) {
8292 var W = this._w
8293
8294 var a = this._a
8295 var b = this._b
8296 var c = this._c
8297 var d = this._d
8298 var e = this._e
8299
8300 var j = 0, k
8301
8302 /*
8303 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8304 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8305 */
8306 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8307 function loop (w, f) {
8308 W[j] = w
8309
8310 var t = rol(a, 5) + f + e + w + k
8311
8312 e = d
8313 d = c
8314 c = rol(b, 30)
8315 b = a
8316 a = t
8317 j++
8318 }
8319
8320 k = 1518500249
8321 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8322 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8323 k = 1859775393
8324 while (j < 40) loop(calcW(), b ^ c ^ d)
8325 k = -1894007588
8326 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8327 k = -899497514
8328 while (j < 80) loop(calcW(), b ^ c ^ d)
8329
8330 this._a = (a + this._a) | 0
8331 this._b = (b + this._b) | 0
8332 this._c = (c + this._c) | 0
8333 this._d = (d + this._d) | 0
8334 this._e = (e + this._e) | 0
8335 }
8336
8337 Sha.prototype._hash = function () {
8338 var H = new Buffer(20)
8339
8340 H.writeInt32BE(this._a | 0, 0)
8341 H.writeInt32BE(this._b | 0, 4)
8342 H.writeInt32BE(this._c | 0, 8)
8343 H.writeInt32BE(this._d | 0, 12)
8344 H.writeInt32BE(this._e | 0, 16)
8345
8346 return H
8347 }
8348
8349 module.exports = Sha
8350
8351
8352 }).call(this,require("buffer").Buffer)
8353 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8354 (function (Buffer){
8355 /*
8356 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8357 * in FIPS PUB 180-1
8358 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8359 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8360 * Distributed under the BSD License
8361 * See http://pajhome.org.uk/crypt/md5 for details.
8362 */
8363
8364 var inherits = require('inherits')
8365 var Hash = require('./hash')
8366
8367 var W = new Array(80)
8368
8369 function Sha1 () {
8370 this.init()
8371 this._w = W
8372
8373 Hash.call(this, 64, 56)
8374 }
8375
8376 inherits(Sha1, Hash)
8377
8378 Sha1.prototype.init = function () {
8379 this._a = 0x67452301 | 0
8380 this._b = 0xefcdab89 | 0
8381 this._c = 0x98badcfe | 0
8382 this._d = 0x10325476 | 0
8383 this._e = 0xc3d2e1f0 | 0
8384
8385 return this
8386 }
8387
8388 /*
8389 * Bitwise rotate a 32-bit number to the left.
8390 */
8391 function rol (num, cnt) {
8392 return (num << cnt) | (num >>> (32 - cnt))
8393 }
8394
8395 Sha1.prototype._update = function (M) {
8396 var W = this._w
8397
8398 var a = this._a
8399 var b = this._b
8400 var c = this._c
8401 var d = this._d
8402 var e = this._e
8403
8404 var j = 0, k
8405
8406 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8407 function loop (w, f) {
8408 W[j] = w
8409
8410 var t = rol(a, 5) + f + e + w + k
8411
8412 e = d
8413 d = c
8414 c = rol(b, 30)
8415 b = a
8416 a = t
8417 j++
8418 }
8419
8420 k = 1518500249
8421 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8422 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8423 k = 1859775393
8424 while (j < 40) loop(calcW(), b ^ c ^ d)
8425 k = -1894007588
8426 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8427 k = -899497514
8428 while (j < 80) loop(calcW(), b ^ c ^ d)
8429
8430 this._a = (a + this._a) | 0
8431 this._b = (b + this._b) | 0
8432 this._c = (c + this._c) | 0
8433 this._d = (d + this._d) | 0
8434 this._e = (e + this._e) | 0
8435 }
8436
8437 Sha1.prototype._hash = function () {
8438 var H = new Buffer(20)
8439
8440 H.writeInt32BE(this._a | 0, 0)
8441 H.writeInt32BE(this._b | 0, 4)
8442 H.writeInt32BE(this._c | 0, 8)
8443 H.writeInt32BE(this._d | 0, 12)
8444 H.writeInt32BE(this._e | 0, 16)
8445
8446 return H
8447 }
8448
8449 module.exports = Sha1
8450
8451 }).call(this,require("buffer").Buffer)
8452 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8453 (function (Buffer){
8454 /**
8455 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8456 * in FIPS 180-2
8457 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8458 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8459 *
8460 */
8461
8462 var inherits = require('inherits')
8463 var Sha256 = require('./sha256')
8464 var Hash = require('./hash')
8465
8466 var W = new Array(64)
8467
8468 function Sha224 () {
8469 this.init()
8470
8471 this._w = W // new Array(64)
8472
8473 Hash.call(this, 64, 56)
8474 }
8475
8476 inherits(Sha224, Sha256)
8477
8478 Sha224.prototype.init = function () {
8479 this._a = 0xc1059ed8 | 0
8480 this._b = 0x367cd507 | 0
8481 this._c = 0x3070dd17 | 0
8482 this._d = 0xf70e5939 | 0
8483 this._e = 0xffc00b31 | 0
8484 this._f = 0x68581511 | 0
8485 this._g = 0x64f98fa7 | 0
8486 this._h = 0xbefa4fa4 | 0
8487
8488 return this
8489 }
8490
8491 Sha224.prototype._hash = function () {
8492 var H = new Buffer(28)
8493
8494 H.writeInt32BE(this._a, 0)
8495 H.writeInt32BE(this._b, 4)
8496 H.writeInt32BE(this._c, 8)
8497 H.writeInt32BE(this._d, 12)
8498 H.writeInt32BE(this._e, 16)
8499 H.writeInt32BE(this._f, 20)
8500 H.writeInt32BE(this._g, 24)
8501
8502 return H
8503 }
8504
8505 module.exports = Sha224
8506
8507 }).call(this,require("buffer").Buffer)
8508 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8509 (function (Buffer){
8510 /**
8511 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8512 * in FIPS 180-2
8513 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8514 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8515 *
8516 */
8517
8518 var inherits = require('inherits')
8519 var Hash = require('./hash')
8520
8521 var K = [
8522 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8523 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8524 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8525 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8526 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8527 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8528 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8529 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8530 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8531 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8532 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8533 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8534 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8535 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8536 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8537 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8538 ]
8539
8540 var W = new Array(64)
8541
8542 function Sha256 () {
8543 this.init()
8544
8545 this._w = W // new Array(64)
8546
8547 Hash.call(this, 64, 56)
8548 }
8549
8550 inherits(Sha256, Hash)
8551
8552 Sha256.prototype.init = function () {
8553 this._a = 0x6a09e667 | 0
8554 this._b = 0xbb67ae85 | 0
8555 this._c = 0x3c6ef372 | 0
8556 this._d = 0xa54ff53a | 0
8557 this._e = 0x510e527f | 0
8558 this._f = 0x9b05688c | 0
8559 this._g = 0x1f83d9ab | 0
8560 this._h = 0x5be0cd19 | 0
8561
8562 return this
8563 }
8564
8565 function S (X, n) {
8566 return (X >>> n) | (X << (32 - n))
8567 }
8568
8569 function R (X, n) {
8570 return (X >>> n)
8571 }
8572
8573 function Ch (x, y, z) {
8574 return ((x & y) ^ ((~x) & z))
8575 }
8576
8577 function Maj (x, y, z) {
8578 return ((x & y) ^ (x & z) ^ (y & z))
8579 }
8580
8581 function Sigma0256 (x) {
8582 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8583 }
8584
8585 function Sigma1256 (x) {
8586 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8587 }
8588
8589 function Gamma0256 (x) {
8590 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8591 }
8592
8593 function Gamma1256 (x) {
8594 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8595 }
8596
8597 Sha256.prototype._update = function (M) {
8598 var W = this._w
8599
8600 var a = this._a | 0
8601 var b = this._b | 0
8602 var c = this._c | 0
8603 var d = this._d | 0
8604 var e = this._e | 0
8605 var f = this._f | 0
8606 var g = this._g | 0
8607 var h = this._h | 0
8608
8609 var j = 0
8610
8611 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8612 function loop (w) {
8613 W[j] = w
8614
8615 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8616 var T2 = Sigma0256(a) + Maj(a, b, c)
8617
8618 h = g
8619 g = f
8620 f = e
8621 e = d + T1
8622 d = c
8623 c = b
8624 b = a
8625 a = T1 + T2
8626
8627 j++
8628 }
8629
8630 while (j < 16) loop(M.readInt32BE(j * 4))
8631 while (j < 64) loop(calcW())
8632
8633 this._a = (a + this._a) | 0
8634 this._b = (b + this._b) | 0
8635 this._c = (c + this._c) | 0
8636 this._d = (d + this._d) | 0
8637 this._e = (e + this._e) | 0
8638 this._f = (f + this._f) | 0
8639 this._g = (g + this._g) | 0
8640 this._h = (h + this._h) | 0
8641 }
8642
8643 Sha256.prototype._hash = function () {
8644 var H = new Buffer(32)
8645
8646 H.writeInt32BE(this._a, 0)
8647 H.writeInt32BE(this._b, 4)
8648 H.writeInt32BE(this._c, 8)
8649 H.writeInt32BE(this._d, 12)
8650 H.writeInt32BE(this._e, 16)
8651 H.writeInt32BE(this._f, 20)
8652 H.writeInt32BE(this._g, 24)
8653 H.writeInt32BE(this._h, 28)
8654
8655 return H
8656 }
8657
8658 module.exports = Sha256
8659
8660 }).call(this,require("buffer").Buffer)
8661 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8662 (function (Buffer){
8663 var inherits = require('inherits')
8664 var SHA512 = require('./sha512')
8665 var Hash = require('./hash')
8666
8667 var W = new Array(160)
8668
8669 function Sha384 () {
8670 this.init()
8671 this._w = W
8672
8673 Hash.call(this, 128, 112)
8674 }
8675
8676 inherits(Sha384, SHA512)
8677
8678 Sha384.prototype.init = function () {
8679 this._a = 0xcbbb9d5d | 0
8680 this._b = 0x629a292a | 0
8681 this._c = 0x9159015a | 0
8682 this._d = 0x152fecd8 | 0
8683 this._e = 0x67332667 | 0
8684 this._f = 0x8eb44a87 | 0
8685 this._g = 0xdb0c2e0d | 0
8686 this._h = 0x47b5481d | 0
8687
8688 this._al = 0xc1059ed8 | 0
8689 this._bl = 0x367cd507 | 0
8690 this._cl = 0x3070dd17 | 0
8691 this._dl = 0xf70e5939 | 0
8692 this._el = 0xffc00b31 | 0
8693 this._fl = 0x68581511 | 0
8694 this._gl = 0x64f98fa7 | 0
8695 this._hl = 0xbefa4fa4 | 0
8696
8697 return this
8698 }
8699
8700 Sha384.prototype._hash = function () {
8701 var H = new Buffer(48)
8702
8703 function writeInt64BE (h, l, offset) {
8704 H.writeInt32BE(h, offset)
8705 H.writeInt32BE(l, offset + 4)
8706 }
8707
8708 writeInt64BE(this._a, this._al, 0)
8709 writeInt64BE(this._b, this._bl, 8)
8710 writeInt64BE(this._c, this._cl, 16)
8711 writeInt64BE(this._d, this._dl, 24)
8712 writeInt64BE(this._e, this._el, 32)
8713 writeInt64BE(this._f, this._fl, 40)
8714
8715 return H
8716 }
8717
8718 module.exports = Sha384
8719
8720 }).call(this,require("buffer").Buffer)
8721 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
8722 (function (Buffer){
8723 var inherits = require('inherits')
8724 var Hash = require('./hash')
8725
8726 var K = [
8727 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8728 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8729 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8730 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8731 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8732 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8733 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8734 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8735 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8736 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8737 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8738 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8739 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8740 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
8741 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
8742 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
8743 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
8744 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
8745 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
8746 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
8747 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
8748 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
8749 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
8750 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
8751 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
8752 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
8753 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
8754 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
8755 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
8756 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
8757 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
8758 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
8759 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
8760 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
8761 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
8762 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
8763 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
8764 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
8765 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
8766 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
8767 ]
8768
8769 var W = new Array(160)
8770
8771 function Sha512 () {
8772 this.init()
8773 this._w = W
8774
8775 Hash.call(this, 128, 112)
8776 }
8777
8778 inherits(Sha512, Hash)
8779
8780 Sha512.prototype.init = function () {
8781 this._a = 0x6a09e667 | 0
8782 this._b = 0xbb67ae85 | 0
8783 this._c = 0x3c6ef372 | 0
8784 this._d = 0xa54ff53a | 0
8785 this._e = 0x510e527f | 0
8786 this._f = 0x9b05688c | 0
8787 this._g = 0x1f83d9ab | 0
8788 this._h = 0x5be0cd19 | 0
8789
8790 this._al = 0xf3bcc908 | 0
8791 this._bl = 0x84caa73b | 0
8792 this._cl = 0xfe94f82b | 0
8793 this._dl = 0x5f1d36f1 | 0
8794 this._el = 0xade682d1 | 0
8795 this._fl = 0x2b3e6c1f | 0
8796 this._gl = 0xfb41bd6b | 0
8797 this._hl = 0x137e2179 | 0
8798
8799 return this
8800 }
8801
8802 function S (X, Xl, n) {
8803 return (X >>> n) | (Xl << (32 - n))
8804 }
8805
8806 function Ch (x, y, z) {
8807 return ((x & y) ^ ((~x) & z))
8808 }
8809
8810 function Maj (x, y, z) {
8811 return ((x & y) ^ (x & z) ^ (y & z))
8812 }
8813
8814 Sha512.prototype._update = function (M) {
8815 var W = this._w
8816
8817 var a = this._a | 0
8818 var b = this._b | 0
8819 var c = this._c | 0
8820 var d = this._d | 0
8821 var e = this._e | 0
8822 var f = this._f | 0
8823 var g = this._g | 0
8824 var h = this._h | 0
8825
8826 var al = this._al | 0
8827 var bl = this._bl | 0
8828 var cl = this._cl | 0
8829 var dl = this._dl | 0
8830 var el = this._el | 0
8831 var fl = this._fl | 0
8832 var gl = this._gl | 0
8833 var hl = this._hl | 0
8834
8835 var i = 0, j = 0
8836 var Wi, Wil
8837 function calcW () {
8838 var x = W[j - 15 * 2]
8839 var xl = W[j - 15 * 2 + 1]
8840 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
8841 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
8842
8843 x = W[j - 2 * 2]
8844 xl = W[j - 2 * 2 + 1]
8845 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
8846 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
8847
8848 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
8849 var Wi7 = W[j - 7 * 2]
8850 var Wi7l = W[j - 7 * 2 + 1]
8851
8852 var Wi16 = W[j - 16 * 2]
8853 var Wi16l = W[j - 16 * 2 + 1]
8854
8855 Wil = gamma0l + Wi7l
8856 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
8857 Wil = Wil + gamma1l
8858 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
8859 Wil = Wil + Wi16l
8860 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
8861 }
8862
8863 function loop () {
8864 W[j] = Wi
8865 W[j + 1] = Wil
8866
8867 var maj = Maj(a, b, c)
8868 var majl = Maj(al, bl, cl)
8869
8870 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
8871 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
8872 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
8873 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
8874
8875 // t1 = h + sigma1 + ch + K[i] + W[i]
8876 var Ki = K[j]
8877 var Kil = K[j + 1]
8878
8879 var ch = Ch(e, f, g)
8880 var chl = Ch(el, fl, gl)
8881
8882 var t1l = hl + sigma1l
8883 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
8884 t1l = t1l + chl
8885 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
8886 t1l = t1l + Kil
8887 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
8888 t1l = t1l + Wil
8889 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
8890
8891 // t2 = sigma0 + maj
8892 var t2l = sigma0l + majl
8893 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
8894
8895 h = g
8896 hl = gl
8897 g = f
8898 gl = fl
8899 f = e
8900 fl = el
8901 el = (dl + t1l) | 0
8902 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8903 d = c
8904 dl = cl
8905 c = b
8906 cl = bl
8907 b = a
8908 bl = al
8909 al = (t1l + t2l) | 0
8910 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
8911
8912 i++
8913 j += 2
8914 }
8915
8916 while (i < 16) {
8917 Wi = M.readInt32BE(j * 4)
8918 Wil = M.readInt32BE(j * 4 + 4)
8919
8920 loop()
8921 }
8922
8923 while (i < 80) {
8924 calcW()
8925 loop()
8926 }
8927
8928 this._al = (this._al + al) | 0
8929 this._bl = (this._bl + bl) | 0
8930 this._cl = (this._cl + cl) | 0
8931 this._dl = (this._dl + dl) | 0
8932 this._el = (this._el + el) | 0
8933 this._fl = (this._fl + fl) | 0
8934 this._gl = (this._gl + gl) | 0
8935 this._hl = (this._hl + hl) | 0
8936
8937 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
8938 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
8939 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
8940 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8941 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
8942 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
8943 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
8944 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
8945 }
8946
8947 Sha512.prototype._hash = function () {
8948 var H = new Buffer(64)
8949
8950 function writeInt64BE (h, l, offset) {
8951 H.writeInt32BE(h, offset)
8952 H.writeInt32BE(l, offset + 4)
8953 }
8954
8955 writeInt64BE(this._a, this._al, 0)
8956 writeInt64BE(this._b, this._bl, 8)
8957 writeInt64BE(this._c, this._cl, 16)
8958 writeInt64BE(this._d, this._dl, 24)
8959 writeInt64BE(this._e, this._el, 32)
8960 writeInt64BE(this._f, this._fl, 40)
8961 writeInt64BE(this._g, this._gl, 48)
8962 writeInt64BE(this._h, this._hl, 56)
8963
8964 return H
8965 }
8966
8967 module.exports = Sha512
8968
8969 }).call(this,require("buffer").Buffer)
8970 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
8971 (function (Buffer){
8972 'use strict';
8973 var createHash = require('create-hash/browser');
8974 var inherits = require('inherits')
8975
8976 var Transform = require('stream').Transform
8977
8978 var ZEROS = new Buffer(128)
8979 ZEROS.fill(0)
8980
8981 function Hmac(alg, key) {
8982 Transform.call(this)
8983
8984 if (typeof key === 'string') {
8985 key = new Buffer(key)
8986 }
8987
8988 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
8989
8990 this._alg = alg
8991 this._key = key
8992
8993 if (key.length > blocksize) {
8994 key = createHash(alg).update(key).digest()
8995
8996 } else if (key.length < blocksize) {
8997 key = Buffer.concat([key, ZEROS], blocksize)
8998 }
8999
9000 var ipad = this._ipad = new Buffer(blocksize)
9001 var opad = this._opad = new Buffer(blocksize)
9002
9003 for (var i = 0; i < blocksize; i++) {
9004 ipad[i] = key[i] ^ 0x36
9005 opad[i] = key[i] ^ 0x5C
9006 }
9007
9008 this._hash = createHash(alg).update(ipad)
9009 }
9010
9011 inherits(Hmac, Transform)
9012
9013 Hmac.prototype.update = function (data, enc) {
9014 this._hash.update(data, enc)
9015
9016 return this
9017 }
9018
9019 Hmac.prototype._transform = function (data, _, next) {
9020 this._hash.update(data)
9021
9022 next()
9023 }
9024
9025 Hmac.prototype._flush = function (next) {
9026 this.push(this.digest())
9027
9028 next()
9029 }
9030
9031 Hmac.prototype.digest = function (enc) {
9032 var h = this._hash.digest()
9033
9034 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9035 }
9036
9037 module.exports = function createHmac(alg, key) {
9038 return new Hmac(alg, key)
9039 }
9040
9041 }).call(this,require("buffer").Buffer)
9042 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9043 arguments[4][12][0].apply(exports,arguments)
9044 },{"dup":12}],47:[function(require,module,exports){
9045 var assert = require('assert')
9046 var BigInteger = require('bigi')
9047
9048 var Point = require('./point')
9049
9050 function Curve(p, a, b, Gx, Gy, n, h) {
9051 this.p = p
9052 this.a = a
9053 this.b = b
9054 this.G = Point.fromAffine(this, Gx, Gy)
9055 this.n = n
9056 this.h = h
9057
9058 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9059
9060 // result caching
9061 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9062 }
9063
9064 Curve.prototype.pointFromX = function(isOdd, x) {
9065 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9066 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9067
9068 var y = beta
9069 if (beta.isEven() ^ !isOdd) {
9070 y = this.p.subtract(y) // -y % p
9071 }
9072
9073 return Point.fromAffine(this, x, y)
9074 }
9075
9076 Curve.prototype.isInfinity = function(Q) {
9077 if (Q === this.infinity) return true
9078
9079 return Q.z.signum() === 0 && Q.y.signum() !== 0
9080 }
9081
9082 Curve.prototype.isOnCurve = function(Q) {
9083 if (this.isInfinity(Q)) return true
9084
9085 var x = Q.affineX
9086 var y = Q.affineY
9087 var a = this.a
9088 var b = this.b
9089 var p = this.p
9090
9091 // Check that xQ and yQ are integers in the interval [0, p - 1]
9092 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9093 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9094
9095 // and check that y^2 = x^3 + ax + b (mod p)
9096 var lhs = y.square().mod(p)
9097 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9098 return lhs.equals(rhs)
9099 }
9100
9101 /**
9102 * Validate an elliptic curve point.
9103 *
9104 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9105 */
9106 Curve.prototype.validate = function(Q) {
9107 // Check Q != O
9108 assert(!this.isInfinity(Q), 'Point is at infinity')
9109 assert(this.isOnCurve(Q), 'Point is not on the curve')
9110
9111 // Check nQ = O (where Q is a scalar multiple of G)
9112 var nQ = Q.multiply(this.n)
9113 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9114
9115 return true
9116 }
9117
9118 module.exports = Curve
9119
9120 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
9121 module.exports={
9122 "secp128r1": {
9123 "p": "fffffffdffffffffffffffffffffffff",
9124 "a": "fffffffdfffffffffffffffffffffffc",
9125 "b": "e87579c11079f43dd824993c2cee5ed3",
9126 "n": "fffffffe0000000075a30d1b9038a115",
9127 "h": "01",
9128 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9129 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9130 },
9131 "secp160k1": {
9132 "p": "fffffffffffffffffffffffffffffffeffffac73",
9133 "a": "00",
9134 "b": "07",
9135 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9136 "h": "01",
9137 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9138 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9139 },
9140 "secp160r1": {
9141 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9142 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9143 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9144 "n": "0100000000000000000001f4c8f927aed3ca752257",
9145 "h": "01",
9146 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9147 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9148 },
9149 "secp192k1": {
9150 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9151 "a": "00",
9152 "b": "03",
9153 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9154 "h": "01",
9155 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9156 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9157 },
9158 "secp192r1": {
9159 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9160 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9161 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9162 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9163 "h": "01",
9164 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9165 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9166 },
9167 "secp256k1": {
9168 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9169 "a": "00",
9170 "b": "07",
9171 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9172 "h": "01",
9173 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9174 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9175 },
9176 "secp256r1": {
9177 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9178 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9179 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9180 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9181 "h": "01",
9182 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9183 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9184 }
9185 }
9186
9187 },{}],49:[function(require,module,exports){
9188 var Point = require('./point')
9189 var Curve = require('./curve')
9190
9191 var getCurveByName = require('./names')
9192
9193 module.exports = {
9194 Curve: Curve,
9195 Point: Point,
9196 getCurveByName: getCurveByName
9197 }
9198
9199 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9200 var BigInteger = require('bigi')
9201
9202 var curves = require('./curves')
9203 var Curve = require('./curve')
9204
9205 function getCurveByName(name) {
9206 var curve = curves[name]
9207 if (!curve) return null
9208
9209 var p = new BigInteger(curve.p, 16)
9210 var a = new BigInteger(curve.a, 16)
9211 var b = new BigInteger(curve.b, 16)
9212 var n = new BigInteger(curve.n, 16)
9213 var h = new BigInteger(curve.h, 16)
9214 var Gx = new BigInteger(curve.Gx, 16)
9215 var Gy = new BigInteger(curve.Gy, 16)
9216
9217 return new Curve(p, a, b, Gx, Gy, n, h)
9218 }
9219
9220 module.exports = getCurveByName
9221
9222 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
9223 (function (Buffer){
9224 var assert = require('assert')
9225 var BigInteger = require('bigi')
9226
9227 var THREE = BigInteger.valueOf(3)
9228
9229 function Point(curve, x, y, z) {
9230 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9231
9232 this.curve = curve
9233 this.x = x
9234 this.y = y
9235 this.z = z
9236 this._zInv = null
9237
9238 this.compressed = true
9239 }
9240
9241 Object.defineProperty(Point.prototype, 'zInv', {
9242 get: function() {
9243 if (this._zInv === null) {
9244 this._zInv = this.z.modInverse(this.curve.p)
9245 }
9246
9247 return this._zInv
9248 }
9249 })
9250
9251 Object.defineProperty(Point.prototype, 'affineX', {
9252 get: function() {
9253 return this.x.multiply(this.zInv).mod(this.curve.p)
9254 }
9255 })
9256
9257 Object.defineProperty(Point.prototype, 'affineY', {
9258 get: function() {
9259 return this.y.multiply(this.zInv).mod(this.curve.p)
9260 }
9261 })
9262
9263 Point.fromAffine = function(curve, x, y) {
9264 return new Point(curve, x, y, BigInteger.ONE)
9265 }
9266
9267 Point.prototype.equals = function(other) {
9268 if (other === this) return true
9269 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9270 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9271
9272 // u = Y2 * Z1 - Y1 * Z2
9273 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9274
9275 if (u.signum() !== 0) return false
9276
9277 // v = X2 * Z1 - X1 * Z2
9278 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9279
9280 return v.signum() === 0
9281 }
9282
9283 Point.prototype.negate = function() {
9284 var y = this.curve.p.subtract(this.y)
9285
9286 return new Point(this.curve, this.x, y, this.z)
9287 }
9288
9289 Point.prototype.add = function(b) {
9290 if (this.curve.isInfinity(this)) return b
9291 if (this.curve.isInfinity(b)) return this
9292
9293 var x1 = this.x
9294 var y1 = this.y
9295 var x2 = b.x
9296 var y2 = b.y
9297
9298 // u = Y2 * Z1 - Y1 * Z2
9299 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9300 // v = X2 * Z1 - X1 * Z2
9301 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9302
9303 if (v.signum() === 0) {
9304 if (u.signum() === 0) {
9305 return this.twice() // this == b, so double
9306 }
9307
9308 return this.curve.infinity // this = -b, so infinity
9309 }
9310
9311 var v2 = v.square()
9312 var v3 = v2.multiply(v)
9313 var x1v2 = x1.multiply(v2)
9314 var zu2 = u.square().multiply(this.z)
9315
9316 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9317 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9318 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9319 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)
9320 // z3 = v^3 * z1 * z2
9321 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9322
9323 return new Point(this.curve, x3, y3, z3)
9324 }
9325
9326 Point.prototype.twice = function() {
9327 if (this.curve.isInfinity(this)) return this
9328 if (this.y.signum() === 0) return this.curve.infinity
9329
9330 var x1 = this.x
9331 var y1 = this.y
9332
9333 var y1z1 = y1.multiply(this.z)
9334 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9335 var a = this.curve.a
9336
9337 // w = 3 * x1^2 + a * z1^2
9338 var w = x1.square().multiply(THREE)
9339
9340 if (a.signum() !== 0) {
9341 w = w.add(this.z.square().multiply(a))
9342 }
9343
9344 w = w.mod(this.curve.p)
9345 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9346 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9347 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9348 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9349 // z3 = 8 * (y1 * z1)^3
9350 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9351
9352 return new Point(this.curve, x3, y3, z3)
9353 }
9354
9355 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9356 // TODO: modularize the multiplication algorithm
9357 Point.prototype.multiply = function(k) {
9358 if (this.curve.isInfinity(this)) return this
9359 if (k.signum() === 0) return this.curve.infinity
9360
9361 var e = k
9362 var h = e.multiply(THREE)
9363
9364 var neg = this.negate()
9365 var R = this
9366
9367 for (var i = h.bitLength() - 2; i > 0; --i) {
9368 R = R.twice()
9369
9370 var hBit = h.testBit(i)
9371 var eBit = e.testBit(i)
9372
9373 if (hBit != eBit) {
9374 R = R.add(hBit ? this : neg)
9375 }
9376 }
9377
9378 return R
9379 }
9380
9381 // Compute this*j + x*k (simultaneous multiplication)
9382 Point.prototype.multiplyTwo = function(j, x, k) {
9383 var i
9384
9385 if (j.bitLength() > k.bitLength())
9386 i = j.bitLength() - 1
9387 else
9388 i = k.bitLength() - 1
9389
9390 var R = this.curve.infinity
9391 var both = this.add(x)
9392
9393 while (i >= 0) {
9394 R = R.twice()
9395
9396 var jBit = j.testBit(i)
9397 var kBit = k.testBit(i)
9398
9399 if (jBit) {
9400 if (kBit) {
9401 R = R.add(both)
9402
9403 } else {
9404 R = R.add(this)
9405 }
9406
9407 } else {
9408 if (kBit) {
9409 R = R.add(x)
9410 }
9411 }
9412 --i
9413 }
9414
9415 return R
9416 }
9417
9418 Point.prototype.getEncoded = function(compressed) {
9419 if (compressed == undefined) compressed = this.compressed
9420 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9421
9422 var x = this.affineX
9423 var y = this.affineY
9424
9425 var buffer
9426
9427 // Determine size of q in bytes
9428 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9429
9430 // 0x02/0x03 | X
9431 if (compressed) {
9432 buffer = new Buffer(1 + byteLength)
9433 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9434
9435 // 0x04 | X | Y
9436 } else {
9437 buffer = new Buffer(1 + byteLength + byteLength)
9438 buffer.writeUInt8(0x04, 0)
9439
9440 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9441 }
9442
9443 x.toBuffer(byteLength).copy(buffer, 1)
9444
9445 return buffer
9446 }
9447
9448 Point.decodeFrom = function(curve, buffer) {
9449 var type = buffer.readUInt8(0)
9450 var compressed = (type !== 4)
9451
9452 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
9453 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
9454
9455 var Q
9456 if (compressed) {
9457 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9458 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9459
9460 var isOdd = (type === 0x03)
9461 Q = curve.pointFromX(isOdd, x)
9462
9463 } else {
9464 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9465
9466 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9467 Q = Point.fromAffine(curve, x, y)
9468 }
9469
9470 Q.compressed = compressed
9471 return Q
9472 }
9473
9474 Point.prototype.toString = function () {
9475 if (this.curve.isInfinity(this)) return '(INFINITY)'
9476
9477 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9478 }
9479
9480 module.exports = Point
9481
9482 }).call(this,require("buffer").Buffer)
9483 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9484 (function (process,global,Buffer){
9485 'use strict';
9486
9487 var crypto = global.crypto || global.msCrypto
9488 if(crypto && crypto.getRandomValues) {
9489 module.exports = randomBytes;
9490 } else {
9491 module.exports = oldBrowser;
9492 }
9493 function randomBytes(size, cb) {
9494 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9495 /* This will not work in older browsers.
9496 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9497 */
9498
9499 crypto.getRandomValues(bytes);
9500 if (typeof cb === 'function') {
9501 return process.nextTick(function () {
9502 cb(null, bytes);
9503 });
9504 }
9505 return bytes;
9506 }
9507 function oldBrowser() {
9508 throw new Error(
9509 'secure random number generation not supported by this browser\n'+
9510 'use chrome, FireFox or Internet Explorer 11'
9511 )
9512 }
9513
9514 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9515 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
9516 (function (Buffer){
9517 'use strict';
9518
9519 function getFunctionName(fn) {
9520 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9521 }
9522
9523 function getTypeTypeName(type) {
9524 if (nativeTypes.Function(type)) {
9525 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9526 }
9527 if (nativeTypes.Object(type)) return JSON.stringify(type);
9528
9529 return type;
9530 }
9531
9532 function getValueTypeName(value) {
9533 if (nativeTypes.Null(value)) return '';
9534
9535 return getFunctionName(value.constructor);
9536 }
9537
9538 function tfErrorString(type, value) {
9539 var typeTypeName = getTypeTypeName(type);
9540 var valueTypeName = getValueTypeName(value);
9541
9542 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9543 }
9544
9545 function tfPropertyErrorString(type, name, value) {
9546 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9547 }
9548
9549 var nativeTypes = {
9550 Array: (function (_Array) {
9551 function Array(_x) {
9552 return _Array.apply(this, arguments);
9553 }
9554
9555 Array.toString = function () {
9556 return _Array.toString();
9557 };
9558
9559 return Array;
9560 })(function (value) {
9561 return value !== null && value !== undefined && value.constructor === Array;
9562 }),
9563 Boolean: function Boolean(value) {
9564 return typeof value === 'boolean';
9565 },
9566 Buffer: (function (_Buffer) {
9567 function Buffer(_x2) {
9568 return _Buffer.apply(this, arguments);
9569 }
9570
9571 Buffer.toString = function () {
9572 return _Buffer.toString();
9573 };
9574
9575 return Buffer;
9576 })(function (value) {
9577 return Buffer.isBuffer(value);
9578 }),
9579 Function: function Function(value) {
9580 return typeof value === 'function';
9581 },
9582 Null: function Null(value) {
9583 return value === undefined || value === null;
9584 },
9585 Number: function Number(value) {
9586 return typeof value === 'number';
9587 },
9588 Object: function Object(value) {
9589 return typeof value === 'object';
9590 },
9591 String: function String(value) {
9592 return typeof value === 'string';
9593 },
9594 '': function _() {
9595 return true;
9596 }
9597 };
9598
9599 function tJSON(type) {
9600 return type && type.toJSON ? type.toJSON() : type;
9601 }
9602
9603 function sJSON(type) {
9604 var json = tJSON(type);
9605 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9606 }
9607
9608 var otherTypes = {
9609 arrayOf: function arrayOf(type) {
9610 function arrayOf(value, strict) {
9611 try {
9612 return nativeTypes.Array(value) && value.every(function (x) {
9613 return typeforce(type, x, strict);
9614 });
9615 } catch (e) {
9616 return false;
9617 }
9618 }
9619 arrayOf.toJSON = function () {
9620 return [tJSON(type)];
9621 };
9622
9623 return arrayOf;
9624 },
9625
9626 maybe: function maybe(type) {
9627 function maybe(value, strict) {
9628 return nativeTypes.Null(value) || typeforce(type, value, strict);
9629 }
9630 maybe.toJSON = function () {
9631 return '?' + sJSON(type);
9632 };
9633
9634 return maybe;
9635 },
9636
9637 object: function object(type) {
9638 function object(value, strict) {
9639 typeforce(nativeTypes.Object, value, strict);
9640
9641 var propertyName, propertyType, propertyValue;
9642
9643 try {
9644 for (propertyName in type) {
9645 propertyType = type[propertyName];
9646 propertyValue = value[propertyName];
9647
9648 typeforce(propertyType, propertyValue, strict);
9649 }
9650 } catch (e) {
9651 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9652 }
9653
9654 if (strict) {
9655 for (propertyName in value) {
9656 if (type[propertyName]) continue;
9657
9658 throw new TypeError('Unexpected property "' + propertyName + '"');
9659 }
9660 }
9661
9662 return true;
9663 }
9664 object.toJSON = function () {
9665 return type;
9666 };
9667
9668 return object;
9669 },
9670
9671 oneOf: function oneOf() {
9672 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9673 types[_key] = arguments[_key];
9674 }
9675
9676 function oneOf(value, strict) {
9677 return types.some(function (type) {
9678 try {
9679 return typeforce(type, value, strict);
9680 } catch (e) {
9681 return false;
9682 }
9683 });
9684 }
9685 oneOf.toJSON = function () {
9686 return types.map(sJSON).join('|');
9687 };
9688
9689 return oneOf;
9690 },
9691
9692 quacksLike: function quacksLike(type) {
9693 function quacksLike(value, strict) {
9694 return type === getValueTypeName(value);
9695 }
9696 quacksLike.toJSON = function () {
9697 return type;
9698 };
9699
9700 return quacksLike;
9701 },
9702
9703 tuple: function tuple() {
9704 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9705 types[_key2] = arguments[_key2];
9706 }
9707
9708 function tuple(value, strict) {
9709 return types.every(function (type, i) {
9710 return typeforce(type, value[i], strict);
9711 });
9712 }
9713 tuple.toJSON = function () {
9714 return '(' + types.map(sJSON).join(', ') + ')';
9715 };
9716
9717 return tuple;
9718 },
9719
9720 value: function value(expected) {
9721 function value(actual) {
9722 return actual === expected;
9723 }
9724 value.toJSON = function () {
9725 return expected;
9726 };
9727
9728 return value;
9729 }
9730 };
9731
9732 function compile(type) {
9733 if (nativeTypes.String(type)) {
9734 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9735
9736 return nativeTypes[type] || otherTypes.quacksLike(type);
9737 } else if (type && nativeTypes.Object(type)) {
9738 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9739
9740 var compiled = {};
9741
9742 for (var propertyName in type) {
9743 compiled[propertyName] = compile(type[propertyName]);
9744 }
9745
9746 return otherTypes.object(compiled);
9747 } else if (nativeTypes.Function(type)) {
9748 return type;
9749 }
9750
9751 return otherTypes.value(type);
9752 }
9753
9754 function typeforce(_x3, _x4, _x5) {
9755 var _again = true;
9756
9757 _function: while (_again) {
9758 var type = _x3,
9759 value = _x4,
9760 strict = _x5;
9761 _again = false;
9762
9763 if (nativeTypes.Function(type)) {
9764 if (type(value, strict)) return true;
9765
9766 throw new TypeError(tfErrorString(type, value));
9767 }
9768
9769 // JIT
9770 _x3 = compile(type);
9771 _x4 = value;
9772 _x5 = strict;
9773 _again = true;
9774 continue _function;
9775 }
9776 }
9777
9778 // assign all types to typeforce function
9779 var typeName;
9780 Object.keys(nativeTypes).forEach(function (typeName) {
9781 var nativeType = nativeTypes[typeName];
9782 nativeType.toJSON = function () {
9783 return typeName;
9784 };
9785
9786 typeforce[typeName] = nativeType;
9787 });
9788
9789 for (typeName in otherTypes) {
9790 typeforce[typeName] = otherTypes[typeName];
9791 }
9792
9793 module.exports = typeforce;
9794 module.exports.compile = compile;
9795 }).call(this,require("buffer").Buffer)
9796 },{"buffer":7}],54:[function(require,module,exports){
9797 (function (Buffer){
9798 var assert = require('assert')
9799 var base58check = require('bs58check')
9800 var typeForce = require('typeforce')
9801 var networks = require('./networks')
9802 var scripts = require('./scripts')
9803
9804 function findScriptTypeByVersion (version) {
9805 for (var networkName in networks) {
9806 var network = networks[networkName]
9807
9808 if (version === network.pubKeyHash) return 'pubkeyhash'
9809 if (version === network.scriptHash) return 'scripthash'
9810 }
9811 }
9812
9813 function Address (hash, version) {
9814 typeForce('Buffer', hash)
9815
9816 assert.strictEqual(hash.length, 20, 'Invalid hash length')
9817 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
9818
9819 this.hash = hash
9820 this.version = version
9821 }
9822
9823 Address.fromBase58Check = function (string) {
9824 var payload = base58check.decode(string)
9825 var version = payload.readUInt8(0)
9826 var hash = payload.slice(1)
9827
9828 return new Address(hash, version)
9829 }
9830
9831 Address.fromOutputScript = function (script, network) {
9832 network = network || networks.bitcoin
9833
9834 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
9835 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
9836
9837 assert(false, script.toASM() + ' has no matching Address')
9838 }
9839
9840 Address.prototype.toBase58Check = function () {
9841 var payload = new Buffer(21)
9842 payload.writeUInt8(this.version, 0)
9843 this.hash.copy(payload, 1)
9844
9845 return base58check.encode(payload)
9846 }
9847
9848 Address.prototype.toOutputScript = function () {
9849 var scriptType = findScriptTypeByVersion(this.version)
9850
9851 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
9852 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
9853
9854 assert(false, this.toString() + ' has no matching Script')
9855 }
9856
9857 Address.prototype.toString = Address.prototype.toBase58Check
9858
9859 module.exports = Address
9860
9861 }).call(this,require("buffer").Buffer)
9862 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
9863 var bs58check = require('bs58check')
9864
9865 function decode () {
9866 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9867
9868 return bs58check.decode.apply(undefined, arguments)
9869 }
9870
9871 function encode () {
9872 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9873
9874 return bs58check.encode.apply(undefined, arguments)
9875 }
9876
9877 module.exports = {
9878 decode: decode,
9879 encode: encode
9880 }
9881
9882 },{"bs58check":31}],56:[function(require,module,exports){
9883 (function (Buffer){
9884 var assert = require('assert')
9885 var bufferutils = require('./bufferutils')
9886 var crypto = require('./crypto')
9887
9888 var Transaction = require('./transaction')
9889
9890 function Block () {
9891 this.version = 1
9892 this.prevHash = null
9893 this.merkleRoot = null
9894 this.timestamp = 0
9895 this.bits = 0
9896 this.nonce = 0
9897 }
9898
9899 Block.fromBuffer = function (buffer) {
9900 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
9901
9902 var offset = 0
9903 function readSlice (n) {
9904 offset += n
9905 return buffer.slice(offset - n, offset)
9906 }
9907
9908 function readUInt32 () {
9909 var i = buffer.readUInt32LE(offset)
9910 offset += 4
9911 return i
9912 }
9913
9914 var block = new Block()
9915 block.version = readUInt32()
9916 block.prevHash = readSlice(32)
9917 block.merkleRoot = readSlice(32)
9918 block.timestamp = readUInt32()
9919 block.bits = readUInt32()
9920 block.nonce = readUInt32()
9921
9922 if (buffer.length === 80) return block
9923
9924 function readVarInt () {
9925 var vi = bufferutils.readVarInt(buffer, offset)
9926 offset += vi.size
9927 return vi.number
9928 }
9929
9930 // FIXME: poor performance
9931 function readTransaction () {
9932 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
9933
9934 offset += tx.toBuffer().length
9935 return tx
9936 }
9937
9938 var nTransactions = readVarInt()
9939 block.transactions = []
9940
9941 for (var i = 0; i < nTransactions; ++i) {
9942 var tx = readTransaction()
9943 block.transactions.push(tx)
9944 }
9945
9946 return block
9947 }
9948
9949 Block.fromHex = function (hex) {
9950 return Block.fromBuffer(new Buffer(hex, 'hex'))
9951 }
9952
9953 Block.prototype.getHash = function () {
9954 return crypto.hash256(this.toBuffer(true))
9955 }
9956
9957 Block.prototype.getId = function () {
9958 return bufferutils.reverse(this.getHash()).toString('hex')
9959 }
9960
9961 Block.prototype.getUTCDate = function () {
9962 var date = new Date(0) // epoch
9963 date.setUTCSeconds(this.timestamp)
9964
9965 return date
9966 }
9967
9968 Block.prototype.toBuffer = function (headersOnly) {
9969 var buffer = new Buffer(80)
9970
9971 var offset = 0
9972 function writeSlice (slice) {
9973 slice.copy(buffer, offset)
9974 offset += slice.length
9975 }
9976
9977 function writeUInt32 (i) {
9978 buffer.writeUInt32LE(i, offset)
9979 offset += 4
9980 }
9981
9982 writeUInt32(this.version)
9983 writeSlice(this.prevHash)
9984 writeSlice(this.merkleRoot)
9985 writeUInt32(this.timestamp)
9986 writeUInt32(this.bits)
9987 writeUInt32(this.nonce)
9988
9989 if (headersOnly || !this.transactions) return buffer
9990
9991 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
9992 var txBuffers = this.transactions.map(function (tx) {
9993 return tx.toBuffer()
9994 })
9995
9996 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
9997 }
9998
9999 Block.prototype.toHex = function (headersOnly) {
10000 return this.toBuffer(headersOnly).toString('hex')
10001 }
10002
10003 module.exports = Block
10004
10005 }).call(this,require("buffer").Buffer)
10006 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10007 (function (Buffer){
10008 var assert = require('assert')
10009 var opcodes = require('./opcodes')
10010
10011 // https://github.com/feross/buffer/blob/master/index.js#L1127
10012 function verifuint (value, max) {
10013 assert(typeof value === 'number', 'cannot write a non-number as a number')
10014 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10015 assert(value <= max, 'value is larger than maximum value for type')
10016 assert(Math.floor(value) === value, 'value has a fractional component')
10017 }
10018
10019 function pushDataSize (i) {
10020 return i < opcodes.OP_PUSHDATA1 ? 1
10021 : i < 0xff ? 2
10022 : i < 0xffff ? 3
10023 : 5
10024 }
10025
10026 function readPushDataInt (buffer, offset) {
10027 var opcode = buffer.readUInt8(offset)
10028 var number, size
10029
10030 // ~6 bit
10031 if (opcode < opcodes.OP_PUSHDATA1) {
10032 number = opcode
10033 size = 1
10034
10035 // 8 bit
10036 } else if (opcode === opcodes.OP_PUSHDATA1) {
10037 if (offset + 2 > buffer.length) return null
10038 number = buffer.readUInt8(offset + 1)
10039 size = 2
10040
10041 // 16 bit
10042 } else if (opcode === opcodes.OP_PUSHDATA2) {
10043 if (offset + 3 > buffer.length) return null
10044 number = buffer.readUInt16LE(offset + 1)
10045 size = 3
10046
10047 // 32 bit
10048 } else {
10049 if (offset + 5 > buffer.length) return null
10050 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10051
10052 number = buffer.readUInt32LE(offset + 1)
10053 size = 5
10054 }
10055
10056 return {
10057 opcode: opcode,
10058 number: number,
10059 size: size
10060 }
10061 }
10062
10063 function readUInt64LE (buffer, offset) {
10064 var a = buffer.readUInt32LE(offset)
10065 var b = buffer.readUInt32LE(offset + 4)
10066 b *= 0x100000000
10067
10068 verifuint(b + a, 0x001fffffffffffff)
10069
10070 return b + a
10071 }
10072
10073 function readVarInt (buffer, offset) {
10074 var t = buffer.readUInt8(offset)
10075 var number, size
10076
10077 // 8 bit
10078 if (t < 253) {
10079 number = t
10080 size = 1
10081
10082 // 16 bit
10083 } else if (t < 254) {
10084 number = buffer.readUInt16LE(offset + 1)
10085 size = 3
10086
10087 // 32 bit
10088 } else if (t < 255) {
10089 number = buffer.readUInt32LE(offset + 1)
10090 size = 5
10091
10092 // 64 bit
10093 } else {
10094 number = readUInt64LE(buffer, offset + 1)
10095 size = 9
10096 }
10097
10098 return {
10099 number: number,
10100 size: size
10101 }
10102 }
10103
10104 function writePushDataInt (buffer, number, offset) {
10105 var size = pushDataSize(number)
10106
10107 // ~6 bit
10108 if (size === 1) {
10109 buffer.writeUInt8(number, offset)
10110
10111 // 8 bit
10112 } else if (size === 2) {
10113 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10114 buffer.writeUInt8(number, offset + 1)
10115
10116 // 16 bit
10117 } else if (size === 3) {
10118 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10119 buffer.writeUInt16LE(number, offset + 1)
10120
10121 // 32 bit
10122 } else {
10123 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10124 buffer.writeUInt32LE(number, offset + 1)
10125 }
10126
10127 return size
10128 }
10129
10130 function writeUInt64LE (buffer, value, offset) {
10131 verifuint(value, 0x001fffffffffffff)
10132
10133 buffer.writeInt32LE(value & -1, offset)
10134 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10135 }
10136
10137 function varIntSize (i) {
10138 return i < 253 ? 1
10139 : i < 0x10000 ? 3
10140 : i < 0x100000000 ? 5
10141 : 9
10142 }
10143
10144 function writeVarInt (buffer, number, offset) {
10145 var size = varIntSize(number)
10146
10147 // 8 bit
10148 if (size === 1) {
10149 buffer.writeUInt8(number, offset)
10150
10151 // 16 bit
10152 } else if (size === 3) {
10153 buffer.writeUInt8(253, offset)
10154 buffer.writeUInt16LE(number, offset + 1)
10155
10156 // 32 bit
10157 } else if (size === 5) {
10158 buffer.writeUInt8(254, offset)
10159 buffer.writeUInt32LE(number, offset + 1)
10160
10161 // 64 bit
10162 } else {
10163 buffer.writeUInt8(255, offset)
10164 writeUInt64LE(buffer, number, offset + 1)
10165 }
10166
10167 return size
10168 }
10169
10170 function varIntBuffer (i) {
10171 var size = varIntSize(i)
10172 var buffer = new Buffer(size)
10173 writeVarInt(buffer, i, 0)
10174
10175 return buffer
10176 }
10177
10178 function reverse (buffer) {
10179 var buffer2 = new Buffer(buffer)
10180 Array.prototype.reverse.call(buffer2)
10181 return buffer2
10182 }
10183
10184 module.exports = {
10185 pushDataSize: pushDataSize,
10186 readPushDataInt: readPushDataInt,
10187 readUInt64LE: readUInt64LE,
10188 readVarInt: readVarInt,
10189 reverse: reverse,
10190 varIntBuffer: varIntBuffer,
10191 varIntSize: varIntSize,
10192 writePushDataInt: writePushDataInt,
10193 writeUInt64LE: writeUInt64LE,
10194 writeVarInt: writeVarInt
10195 }
10196
10197 }).call(this,require("buffer").Buffer)
10198 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10199 var createHash = require('create-hash')
10200
10201 function hash160 (buffer) {
10202 return ripemd160(sha256(buffer))
10203 }
10204
10205 function hash256 (buffer) {
10206 return sha256(sha256(buffer))
10207 }
10208
10209 function ripemd160 (buffer) {
10210 return createHash('rmd160').update(buffer).digest()
10211 }
10212
10213 function sha1 (buffer) {
10214 return createHash('sha1').update(buffer).digest()
10215 }
10216
10217 function sha256 (buffer) {
10218 return createHash('sha256').update(buffer).digest()
10219 }
10220
10221 // FIXME: Name not consistent with others
10222 var createHmac = require('create-hmac')
10223
10224 function HmacSHA256 (buffer, secret) {
10225 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10226 return createHmac('sha256', secret).update(buffer).digest()
10227 }
10228
10229 function HmacSHA512 (buffer, secret) {
10230 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10231 return createHmac('sha512', secret).update(buffer).digest()
10232 }
10233
10234 module.exports = {
10235 ripemd160: ripemd160,
10236 sha1: sha1,
10237 sha256: sha256,
10238 hash160: hash160,
10239 hash256: hash256,
10240 HmacSHA256: HmacSHA256,
10241 HmacSHA512: HmacSHA512
10242 }
10243
10244 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
10245 (function (Buffer){
10246 var assert = require('assert')
10247 var createHmac = require('create-hmac')
10248 var typeForce = require('typeforce')
10249
10250 var BigInteger = require('bigi')
10251 var ECSignature = require('./ecsignature')
10252
10253 var ZERO = new Buffer([0])
10254 var ONE = new Buffer([1])
10255
10256 // https://tools.ietf.org/html/rfc6979#section-3.2
10257 function deterministicGenerateK (curve, hash, d, checkSig) {
10258 typeForce('Buffer', hash)
10259 typeForce('BigInteger', d)
10260
10261 // FIXME: remove/uncomment for 2.0.0
10262 // typeForce('Function', checkSig)
10263
10264 if (typeof checkSig !== 'function') {
10265 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10266
10267 checkSig = function (k) {
10268 var G = curve.G
10269 var n = curve.n
10270 var e = BigInteger.fromBuffer(hash)
10271
10272 var Q = G.multiply(k)
10273
10274 if (curve.isInfinity(Q))
10275 return false
10276
10277 var r = Q.affineX.mod(n)
10278 if (r.signum() === 0)
10279 return false
10280
10281 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10282 if (s.signum() === 0)
10283 return false
10284
10285 return true
10286 }
10287 }
10288
10289 // sanity check
10290 assert.equal(hash.length, 32, 'Hash must be 256 bit')
10291
10292 var x = d.toBuffer(32)
10293 var k = new Buffer(32)
10294 var v = new Buffer(32)
10295
10296 // Step A, ignored as hash already provided
10297 // Step B
10298 v.fill(1)
10299
10300 // Step C
10301 k.fill(0)
10302
10303 // Step D
10304 k = createHmac('sha256', k)
10305 .update(v)
10306 .update(ZERO)
10307 .update(x)
10308 .update(hash)
10309 .digest()
10310
10311 // Step E
10312 v = createHmac('sha256', k).update(v).digest()
10313
10314 // Step F
10315 k = createHmac('sha256', k)
10316 .update(v)
10317 .update(ONE)
10318 .update(x)
10319 .update(hash)
10320 .digest()
10321
10322 // Step G
10323 v = createHmac('sha256', k).update(v).digest()
10324
10325 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10326 // Step H2b
10327 v = createHmac('sha256', k).update(v).digest()
10328
10329 var T = BigInteger.fromBuffer(v)
10330
10331 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10332 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10333 k = createHmac('sha256', k)
10334 .update(v)
10335 .update(ZERO)
10336 .digest()
10337
10338 v = createHmac('sha256', k).update(v).digest()
10339
10340 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10341 // Step H2b again
10342 v = createHmac('sha256', k).update(v).digest()
10343 T = BigInteger.fromBuffer(v)
10344 }
10345
10346 return T
10347 }
10348
10349 function sign (curve, hash, d) {
10350 var r, s
10351
10352 var e = BigInteger.fromBuffer(hash)
10353 var n = curve.n
10354 var G = curve.G
10355
10356 deterministicGenerateK(curve, hash, d, function (k) {
10357 var Q = G.multiply(k)
10358
10359 if (curve.isInfinity(Q))
10360 return false
10361
10362 r = Q.affineX.mod(n)
10363 if (r.signum() === 0)
10364 return false
10365
10366 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10367 if (s.signum() === 0)
10368 return false
10369
10370 return true
10371 })
10372
10373 var N_OVER_TWO = n.shiftRight(1)
10374
10375 // enforce low S values, see bip62: 'low s values in signatures'
10376 if (s.compareTo(N_OVER_TWO) > 0) {
10377 s = n.subtract(s)
10378 }
10379
10380 return new ECSignature(r, s)
10381 }
10382
10383 function verifyRaw (curve, e, signature, Q) {
10384 var n = curve.n
10385 var G = curve.G
10386
10387 var r = signature.r
10388 var s = signature.s
10389
10390 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10391 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10392 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
10393
10394 // c = s^-1 mod n
10395 var c = s.modInverse(n)
10396
10397 // 1.4.4 Compute u1 = es^−1 mod n
10398 // u2 = rs^−1 mod n
10399 var u1 = e.multiply(c).mod(n)
10400 var u2 = r.multiply(c).mod(n)
10401
10402 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10403 var R = G.multiplyTwo(u1, Q, u2)
10404 var v = R.affineX.mod(n)
10405
10406 // 1.4.5 (cont.) Enforce R is not at infinity
10407 if (curve.isInfinity(R)) return false
10408
10409 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10410 return v.equals(r)
10411 }
10412
10413 function verify (curve, hash, signature, Q) {
10414 // 1.4.2 H = Hash(M), already done by the user
10415 // 1.4.3 e = H
10416 var e = BigInteger.fromBuffer(hash)
10417
10418 return verifyRaw(curve, e, signature, Q)
10419 }
10420
10421 /**
10422 * Recover a public key from a signature.
10423 *
10424 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10425 * Key Recovery Operation".
10426 *
10427 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10428 */
10429 function recoverPubKey (curve, e, signature, i) {
10430 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10431
10432 var n = curve.n
10433 var G = curve.G
10434
10435 var r = signature.r
10436 var s = signature.s
10437
10438 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10439 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10440
10441 // A set LSB signifies that the y-coordinate is odd
10442 var isYOdd = i & 1
10443
10444 // The more significant bit specifies whether we should use the
10445 // first or second candidate key.
10446 var isSecondKey = i >> 1
10447
10448 // 1.1 Let x = r + jn
10449 var x = isSecondKey ? r.add(n) : r
10450 var R = curve.pointFromX(isYOdd, x)
10451
10452 // 1.4 Check that nR is at infinity
10453 var nR = R.multiply(n)
10454 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10455
10456 // Compute -e from e
10457 var eNeg = e.negate().mod(n)
10458
10459 // 1.6.1 Compute Q = r^-1 (sR - eG)
10460 // Q = r^-1 (sR + -eG)
10461 var rInv = r.modInverse(n)
10462
10463 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10464 curve.validate(Q)
10465
10466 return Q
10467 }
10468
10469 /**
10470 * Calculate pubkey extraction parameter.
10471 *
10472 * When extracting a pubkey from a signature, we have to
10473 * distinguish four different cases. Rather than putting this
10474 * burden on the verifier, Bitcoin includes a 2-bit value with the
10475 * signature.
10476 *
10477 * This function simply tries all four cases and returns the value
10478 * that resulted in a successful pubkey recovery.
10479 */
10480 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10481 for (var i = 0; i < 4; i++) {
10482 var Qprime = recoverPubKey(curve, e, signature, i)
10483
10484 // 1.6.2 Verify Q
10485 if (Qprime.equals(Q)) {
10486 return i
10487 }
10488 }
10489
10490 throw new Error('Unable to find valid recovery factor')
10491 }
10492
10493 module.exports = {
10494 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10495 deterministicGenerateK: deterministicGenerateK,
10496 recoverPubKey: recoverPubKey,
10497 sign: sign,
10498 verify: verify,
10499 verifyRaw: verifyRaw
10500 }
10501
10502 }).call(this,require("buffer").Buffer)
10503 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
10504 (function (Buffer){
10505 var assert = require('assert')
10506 var base58check = require('bs58check')
10507 var ecdsa = require('./ecdsa')
10508 var networks = require('./networks')
10509 var randomBytes = require('randombytes')
10510 var typeForce = require('typeforce')
10511
10512 var BigInteger = require('bigi')
10513 var ECPubKey = require('./ecpubkey')
10514
10515 var ecurve = require('ecurve')
10516 var secp256k1 = ecurve.getCurveByName('secp256k1')
10517
10518 function ECKey (d, compressed) {
10519 assert(d.signum() > 0, 'Private key must be greater than 0')
10520 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
10521
10522 var Q = ECKey.curve.G.multiply(d)
10523
10524 this.d = d
10525 this.pub = new ECPubKey(Q, compressed)
10526 }
10527
10528 // Constants
10529 ECKey.curve = secp256k1
10530
10531 // Static constructors
10532 ECKey.fromWIF = function (string) {
10533 var payload = base58check.decode(string)
10534 var compressed = false
10535
10536 // Ignore the version byte
10537 payload = payload.slice(1)
10538
10539 if (payload.length === 33) {
10540 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10541
10542 // Truncate the compression flag
10543 payload = payload.slice(0, -1)
10544 compressed = true
10545 }
10546
10547 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10548
10549 var d = BigInteger.fromBuffer(payload)
10550 return new ECKey(d, compressed)
10551 }
10552
10553 ECKey.makeRandom = function (compressed, rng) {
10554 rng = rng || randomBytes
10555
10556 var buffer = rng(32)
10557 typeForce('Buffer', buffer)
10558 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
10559
10560 var d = BigInteger.fromBuffer(buffer)
10561 d = d.mod(ECKey.curve.n)
10562
10563 return new ECKey(d, compressed)
10564 }
10565
10566 // Export functions
10567 ECKey.prototype.toWIF = function (network) {
10568 network = network || networks.bitcoin
10569
10570 var bufferLen = this.pub.compressed ? 34 : 33
10571 var buffer = new Buffer(bufferLen)
10572
10573 buffer.writeUInt8(network.wif, 0)
10574 this.d.toBuffer(32).copy(buffer, 1)
10575
10576 if (this.pub.compressed) {
10577 buffer.writeUInt8(0x01, 33)
10578 }
10579
10580 return base58check.encode(buffer)
10581 }
10582
10583 // Operations
10584 ECKey.prototype.sign = function (hash) {
10585 return ecdsa.sign(ECKey.curve, hash, this.d)
10586 }
10587
10588 module.exports = ECKey
10589
10590 }).call(this,require("buffer").Buffer)
10591 },{"./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){
10592 (function (Buffer){
10593 var crypto = require('./crypto')
10594 var ecdsa = require('./ecdsa')
10595 var typeForce = require('typeforce')
10596 var networks = require('./networks')
10597
10598 var Address = require('./address')
10599
10600 var ecurve = require('ecurve')
10601 var secp256k1 = ecurve.getCurveByName('secp256k1')
10602
10603 function ECPubKey (Q, compressed) {
10604 if (compressed === undefined) {
10605 compressed = true
10606 }
10607
10608 typeForce('Point', Q)
10609 typeForce('Boolean', compressed)
10610
10611 this.compressed = compressed
10612 this.Q = Q
10613 }
10614
10615 // Constants
10616 ECPubKey.curve = secp256k1
10617
10618 // Static constructors
10619 ECPubKey.fromBuffer = function (buffer) {
10620 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10621 return new ECPubKey(Q, Q.compressed)
10622 }
10623
10624 ECPubKey.fromHex = function (hex) {
10625 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10626 }
10627
10628 // Operations
10629 ECPubKey.prototype.getAddress = function (network) {
10630 network = network || networks.bitcoin
10631
10632 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10633 }
10634
10635 ECPubKey.prototype.verify = function (hash, signature) {
10636 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10637 }
10638
10639 // Export functions
10640 ECPubKey.prototype.toBuffer = function () {
10641 return this.Q.getEncoded(this.compressed)
10642 }
10643
10644 ECPubKey.prototype.toHex = function () {
10645 return this.toBuffer().toString('hex')
10646 }
10647
10648 module.exports = ECPubKey
10649
10650 }).call(this,require("buffer").Buffer)
10651 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
10652 (function (Buffer){
10653 var assert = require('assert')
10654 var typeForce = require('typeforce')
10655
10656 var BigInteger = require('bigi')
10657
10658 function ECSignature (r, s) {
10659 typeForce('BigInteger', r)
10660 typeForce('BigInteger', s)
10661
10662 this.r = r
10663 this.s = s
10664 }
10665
10666 ECSignature.parseCompact = function (buffer) {
10667 assert.equal(buffer.length, 65, 'Invalid signature length')
10668 var i = buffer.readUInt8(0) - 27
10669
10670 // At most 3 bits
10671 assert.equal(i, i & 7, 'Invalid signature parameter')
10672 var compressed = !!(i & 4)
10673
10674 // Recovery param only
10675 i = i & 3
10676
10677 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10678 var s = BigInteger.fromBuffer(buffer.slice(33))
10679
10680 return {
10681 compressed: compressed,
10682 i: i,
10683 signature: new ECSignature(r, s)
10684 }
10685 }
10686
10687 ECSignature.fromDER = function (buffer) {
10688 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10689 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10690 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10691
10692 var rLen = buffer.readUInt8(3)
10693 assert(rLen > 0, 'R length is zero')
10694
10695 var offset = 4 + rLen
10696 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10697
10698 var sLen = buffer.readUInt8(offset + 1)
10699 assert(sLen > 0, 'S length is zero')
10700
10701 var rB = buffer.slice(4, offset)
10702 var sB = buffer.slice(offset + 2)
10703 offset += 2 + sLen
10704
10705 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10706 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10707 }
10708
10709 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10710 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10711 }
10712
10713 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10714 var r = BigInteger.fromDERInteger(rB)
10715 var s = BigInteger.fromDERInteger(sB)
10716
10717 assert(r.signum() >= 0, 'R value is negative')
10718 assert(s.signum() >= 0, 'S value is negative')
10719
10720 return new ECSignature(r, s)
10721 }
10722
10723 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10724 ECSignature.parseScriptSignature = function (buffer) {
10725 var hashType = buffer.readUInt8(buffer.length - 1)
10726 var hashTypeMod = hashType & ~0x80
10727
10728 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10729
10730 return {
10731 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10732 hashType: hashType
10733 }
10734 }
10735
10736 ECSignature.prototype.toCompact = function (i, compressed) {
10737 if (compressed) {
10738 i += 4
10739 }
10740
10741 i += 27
10742
10743 var buffer = new Buffer(65)
10744 buffer.writeUInt8(i, 0)
10745
10746 this.r.toBuffer(32).copy(buffer, 1)
10747 this.s.toBuffer(32).copy(buffer, 33)
10748
10749 return buffer
10750 }
10751
10752 ECSignature.prototype.toDER = function () {
10753 var rBa = this.r.toDERInteger()
10754 var sBa = this.s.toDERInteger()
10755
10756 var sequence = []
10757
10758 // INTEGER
10759 sequence.push(0x02, rBa.length)
10760 sequence = sequence.concat(rBa)
10761
10762 // INTEGER
10763 sequence.push(0x02, sBa.length)
10764 sequence = sequence.concat(sBa)
10765
10766 // SEQUENCE
10767 sequence.unshift(0x30, sequence.length)
10768
10769 return new Buffer(sequence)
10770 }
10771
10772 ECSignature.prototype.toScriptSignature = function (hashType) {
10773 var hashTypeMod = hashType & ~0x80
10774 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10775
10776 var hashTypeBuffer = new Buffer(1)
10777 hashTypeBuffer.writeUInt8(hashType, 0)
10778
10779 return Buffer.concat([this.toDER(), hashTypeBuffer])
10780 }
10781
10782 module.exports = ECSignature
10783
10784 }).call(this,require("buffer").Buffer)
10785 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
10786 (function (Buffer){
10787 var assert = require('assert')
10788 var base58check = require('bs58check')
10789 var bcrypto = require('./crypto')
10790 var createHmac = require('create-hmac')
10791 var typeForce = require('typeforce')
10792 var networks = require('./networks')
10793
10794 var BigInteger = require('bigi')
10795 var ECKey = require('./eckey')
10796 var ECPubKey = require('./ecpubkey')
10797
10798 var ecurve = require('ecurve')
10799 var curve = ecurve.getCurveByName('secp256k1')
10800
10801 function findBIP32NetworkByVersion (version) {
10802 for (var name in networks) {
10803 var network = networks[name]
10804
10805 if (version === network.bip32.private || version === network.bip32.public) {
10806 return network
10807 }
10808 }
10809
10810 assert(false, 'Could not find network for ' + version.toString(16))
10811 }
10812
10813 function HDNode (K, chainCode, network) {
10814 network = network || networks.bitcoin
10815
10816 typeForce('Buffer', chainCode)
10817
10818 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
10819 assert(network.bip32, 'Unknown BIP32 constants for network')
10820
10821 this.chainCode = chainCode
10822 this.depth = 0
10823 this.index = 0
10824 this.parentFingerprint = 0x00000000
10825 this.network = network
10826
10827 if (K instanceof BigInteger) {
10828 this.privKey = new ECKey(K, true)
10829 this.pubKey = this.privKey.pub
10830 } else if (K instanceof ECKey) {
10831 assert(K.pub.compressed, 'ECKey must be compressed')
10832 this.privKey = K
10833 this.pubKey = K.pub
10834 } else if (K instanceof ECPubKey) {
10835 assert(K.compressed, 'ECPubKey must be compressed')
10836 this.pubKey = K
10837 } else {
10838 this.pubKey = new ECPubKey(K, true)
10839 }
10840 }
10841
10842 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
10843 HDNode.HIGHEST_BIT = 0x80000000
10844 HDNode.LENGTH = 78
10845
10846 HDNode.fromSeedBuffer = function (seed, network) {
10847 typeForce('Buffer', seed)
10848
10849 assert(seed.length >= 16, 'Seed should be at least 128 bits')
10850 assert(seed.length <= 64, 'Seed should be at most 512 bits')
10851
10852 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
10853 var IL = I.slice(0, 32)
10854 var IR = I.slice(32)
10855
10856 // In case IL is 0 or >= n, the master key is invalid
10857 // This is handled by `new ECKey` in the HDNode constructor
10858 var pIL = BigInteger.fromBuffer(IL)
10859
10860 return new HDNode(pIL, IR, network)
10861 }
10862
10863 HDNode.fromSeedHex = function (hex, network) {
10864 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
10865 }
10866
10867 HDNode.fromBase58 = function (string, network) {
10868 return HDNode.fromBuffer(base58check.decode(string), network, true)
10869 }
10870
10871 // FIXME: remove in 2.x.y
10872 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
10873 if (!__ignoreDeprecation) {
10874 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
10875 }
10876
10877 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
10878
10879 // 4 byte: version bytes
10880 var version = buffer.readUInt32BE(0)
10881
10882 if (network) {
10883 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
10884
10885 // auto-detect
10886 } else {
10887 network = findBIP32NetworkByVersion(version)
10888 }
10889
10890 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
10891 var depth = buffer.readUInt8(4)
10892
10893 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
10894 var parentFingerprint = buffer.readUInt32BE(5)
10895 if (depth === 0) {
10896 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
10897 }
10898
10899 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
10900 // This is encoded in MSB order. (0x00000000 if master key)
10901 var index = buffer.readUInt32BE(9)
10902 assert(depth > 0 || index === 0, 'Invalid index')
10903
10904 // 32 bytes: the chain code
10905 var chainCode = buffer.slice(13, 45)
10906 var data, hd
10907
10908 // 33 bytes: private key data (0x00 + k)
10909 if (version === network.bip32.private) {
10910 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
10911 data = buffer.slice(46, 78)
10912 var d = BigInteger.fromBuffer(data)
10913 hd = new HDNode(d, chainCode, network)
10914
10915 // 33 bytes: public key data (0x02 + X or 0x03 + X)
10916 } else {
10917 data = buffer.slice(45, 78)
10918 var Q = ecurve.Point.decodeFrom(curve, data)
10919 assert.equal(Q.compressed, true, 'Invalid public key')
10920
10921 // Verify that the X coordinate in the public point corresponds to a point on the curve.
10922 // If not, the extended public key is invalid.
10923 curve.validate(Q)
10924
10925 hd = new HDNode(Q, chainCode, network)
10926 }
10927
10928 hd.depth = depth
10929 hd.index = index
10930 hd.parentFingerprint = parentFingerprint
10931
10932 return hd
10933 }
10934
10935 // FIXME: remove in 2.x.y
10936 HDNode.fromHex = function (hex, network) {
10937 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
10938 }
10939
10940 HDNode.prototype.getIdentifier = function () {
10941 return bcrypto.hash160(this.pubKey.toBuffer())
10942 }
10943
10944 HDNode.prototype.getFingerprint = function () {
10945 return this.getIdentifier().slice(0, 4)
10946 }
10947
10948 HDNode.prototype.getAddress = function () {
10949 return this.pubKey.getAddress(this.network)
10950 }
10951
10952 HDNode.prototype.neutered = function () {
10953 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
10954 neutered.depth = this.depth
10955 neutered.index = this.index
10956 neutered.parentFingerprint = this.parentFingerprint
10957
10958 return neutered
10959 }
10960
10961 HDNode.prototype.toBase58 = function (isPrivate) {
10962 return base58check.encode(this.toBuffer(isPrivate, true))
10963 }
10964
10965 // FIXME: remove in 2.x.y
10966 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
10967 if (isPrivate === undefined) {
10968 isPrivate = !!this.privKey
10969
10970 // FIXME: remove in 2.x.y
10971 } else {
10972 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
10973 }
10974
10975 if (!__ignoreDeprecation) {
10976 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
10977 }
10978
10979 // Version
10980 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
10981 var buffer = new Buffer(HDNode.LENGTH)
10982
10983 // 4 bytes: version bytes
10984 buffer.writeUInt32BE(version, 0)
10985
10986 // Depth
10987 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
10988 buffer.writeUInt8(this.depth, 4)
10989
10990 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
10991 buffer.writeUInt32BE(this.parentFingerprint, 5)
10992
10993 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
10994 // This is encoded in Big endian. (0x00000000 if master key)
10995 buffer.writeUInt32BE(this.index, 9)
10996
10997 // 32 bytes: the chain code
10998 this.chainCode.copy(buffer, 13)
10999
11000 // 33 bytes: the public key or private key data
11001 if (isPrivate) {
11002 // FIXME: remove in 2.x.y
11003 assert(this.privKey, 'Missing private key')
11004
11005 // 0x00 + k for private keys
11006 buffer.writeUInt8(0, 45)
11007 this.privKey.d.toBuffer(32).copy(buffer, 46)
11008 } else {
11009 // X9.62 encoding for public keys
11010 this.pubKey.toBuffer().copy(buffer, 45)
11011 }
11012
11013 return buffer
11014 }
11015
11016 // FIXME: remove in 2.x.y
11017 HDNode.prototype.toHex = function (isPrivate) {
11018 return this.toBuffer(isPrivate).toString('hex')
11019 }
11020
11021 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
11022 HDNode.prototype.derive = function (index) {
11023 var isHardened = index >= HDNode.HIGHEST_BIT
11024 var indexBuffer = new Buffer(4)
11025 indexBuffer.writeUInt32BE(index, 0)
11026
11027 var data
11028
11029 // Hardened child
11030 if (isHardened) {
11031 assert(this.privKey, 'Could not derive hardened child key')
11032
11033 // data = 0x00 || ser256(kpar) || ser32(index)
11034 data = Buffer.concat([
11035 this.privKey.d.toBuffer(33),
11036 indexBuffer
11037 ])
11038
11039 // Normal child
11040 } else {
11041 // data = serP(point(kpar)) || ser32(index)
11042 // = serP(Kpar) || ser32(index)
11043 data = Buffer.concat([
11044 this.pubKey.toBuffer(),
11045 indexBuffer
11046 ])
11047 }
11048
11049 var I = createHmac('sha512', this.chainCode).update(data).digest()
11050 var IL = I.slice(0, 32)
11051 var IR = I.slice(32)
11052
11053 var pIL = BigInteger.fromBuffer(IL)
11054
11055 // In case parse256(IL) >= n, proceed with the next value for i
11056 if (pIL.compareTo(curve.n) >= 0) {
11057 return this.derive(index + 1)
11058 }
11059
11060 // Private parent key -> private child key
11061 var hd
11062 if (this.privKey) {
11063 // ki = parse256(IL) + kpar (mod n)
11064 var ki = pIL.add(this.privKey.d).mod(curve.n)
11065
11066 // In case ki == 0, proceed with the next value for i
11067 if (ki.signum() === 0) {
11068 return this.derive(index + 1)
11069 }
11070
11071 hd = new HDNode(ki, IR, this.network)
11072
11073 // Public parent key -> public child key
11074 } else {
11075 // Ki = point(parse256(IL)) + Kpar
11076 // = G*IL + Kpar
11077 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11078
11079 // In case Ki is the point at infinity, proceed with the next value for i
11080 if (curve.isInfinity(Ki)) {
11081 return this.derive(index + 1)
11082 }
11083
11084 hd = new HDNode(Ki, IR, this.network)
11085 }
11086
11087 hd.depth = this.depth + 1
11088 hd.index = index
11089 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11090
11091 return hd
11092 }
11093
11094 HDNode.prototype.deriveHardened = function (index) {
11095 // Only derives hardened private keys by default
11096 return this.derive(index + HDNode.HIGHEST_BIT)
11097 }
11098
11099 HDNode.prototype.toString = HDNode.prototype.toBase58
11100
11101 module.exports = HDNode
11102
11103 }).call(this,require("buffer").Buffer)
11104 },{"./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){
11105 module.exports = {
11106 Address: require('./address'),
11107 base58check: require('./base58check'),
11108 Block: require('./block'),
11109 bufferutils: require('./bufferutils'),
11110 crypto: require('./crypto'),
11111 ecdsa: require('./ecdsa'),
11112 ECKey: require('./eckey'),
11113 ECPubKey: require('./ecpubkey'),
11114 ECSignature: require('./ecsignature'),
11115 Message: require('./message'),
11116 opcodes: require('./opcodes'),
11117 HDNode: require('./hdnode'),
11118 Script: require('./script'),
11119 scripts: require('./scripts'),
11120 Transaction: require('./transaction'),
11121 TransactionBuilder: require('./transaction_builder'),
11122 networks: require('./networks'),
11123 Wallet: require('./wallet')
11124 }
11125
11126 },{"./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){
11127 (function (Buffer){
11128 var bufferutils = require('./bufferutils')
11129 var crypto = require('./crypto')
11130 var ecdsa = require('./ecdsa')
11131 var networks = require('./networks')
11132
11133 var BigInteger = require('bigi')
11134 var ECPubKey = require('./ecpubkey')
11135 var ECSignature = require('./ecsignature')
11136
11137 var ecurve = require('ecurve')
11138 var ecparams = ecurve.getCurveByName('secp256k1')
11139
11140 function magicHash (message, network) {
11141 var magicPrefix = new Buffer(network.magicPrefix)
11142 var messageBuffer = new Buffer(message)
11143 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11144
11145 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11146 return crypto.hash256(buffer)
11147 }
11148
11149 function sign (privKey, message, network) {
11150 network = network || networks.bitcoin
11151
11152 var hash = magicHash(message, network)
11153 var signature = privKey.sign(hash)
11154 var e = BigInteger.fromBuffer(hash)
11155 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11156
11157 return signature.toCompact(i, privKey.pub.compressed)
11158 }
11159
11160 // TODO: network could be implied from address
11161 function verify (address, signature, message, network) {
11162 if (!Buffer.isBuffer(signature)) {
11163 signature = new Buffer(signature, 'base64')
11164 }
11165
11166 network = network || networks.bitcoin
11167
11168 var hash = magicHash(message, network)
11169 var parsed = ECSignature.parseCompact(signature)
11170 var e = BigInteger.fromBuffer(hash)
11171 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11172
11173 var pubKey = new ECPubKey(Q, parsed.compressed)
11174 return pubKey.getAddress(network).toString() === address.toString()
11175 }
11176
11177 module.exports = {
11178 magicHash: magicHash,
11179 sign: sign,
11180 verify: verify
11181 }
11182
11183 }).call(this,require("buffer").Buffer)
11184 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
11185 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11186 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11187
11188 var networks = {
11189 bitcoin: {
11190 magicPrefix: '\x18Bitcoin Signed Message:\n',
11191 bip32: {
11192 public: 0x0488b21e,
11193 private: 0x0488ade4
11194 },
11195 pubKeyHash: 0x00,
11196 scriptHash: 0x05,
11197 wif: 0x80,
11198 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11199 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11200 estimateFee: estimateFee('bitcoin')
11201 },
11202 testnet: {
11203 magicPrefix: '\x18Bitcoin Signed Message:\n',
11204 bip32: {
11205 public: 0x043587cf,
11206 private: 0x04358394
11207 },
11208 pubKeyHash: 0x6f,
11209 scriptHash: 0xc4,
11210 wif: 0xef,
11211 dustThreshold: 546,
11212 feePerKb: 10000,
11213 estimateFee: estimateFee('testnet')
11214 },
11215 litecoin: {
11216 magicPrefix: '\x19Litecoin Signed Message:\n',
11217 bip32: {
11218 public: 0x019da462,
11219 private: 0x019d9cfe
11220 },
11221 pubKeyHash: 0x30,
11222 scriptHash: 0x05,
11223 wif: 0xb0,
11224 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11225 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11226 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11227 estimateFee: estimateFee('litecoin')
11228 },
11229 dogecoin: {
11230 magicPrefix: '\x19Dogecoin Signed Message:\n',
11231 bip32: {
11232 public: 0x02facafd,
11233 private: 0x02fac398
11234 },
11235 pubKeyHash: 0x1e,
11236 scriptHash: 0x16,
11237 wif: 0x9e,
11238 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11239 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11240 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11241 estimateFee: estimateFee('dogecoin')
11242 },
11243 viacoin: {
11244 magicPrefix: '\x18Viacoin Signed Message:\n',
11245 bip32: {
11246 public: 0x0488b21e,
11247 private: 0x0488ade4
11248 },
11249 pubKeyHash: 0x47,
11250 scriptHash: 0x21,
11251 wif: 0xc7,
11252 dustThreshold: 560,
11253 dustSoftThreshold: 100000,
11254 feePerKb: 100000, //
11255 estimateFee: estimateFee('viacoin')
11256 },
11257 viacointestnet: {
11258 magicPrefix: '\x18Viacoin Signed Message:\n',
11259 bip32: {
11260 public: 0x043587cf,
11261 private: 0x04358394
11262 },
11263 pubKeyHash: 0x7f,
11264 scriptHash: 0xc4,
11265 wif: 0xff,
11266 dustThreshold: 560,
11267 dustSoftThreshold: 100000,
11268 feePerKb: 100000,
11269 estimateFee: estimateFee('viacointestnet')
11270 },
11271 gamerscoin: {
11272 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11273 bip32: {
11274 public: 0x019da462,
11275 private: 0x019d9cfe
11276 },
11277 pubKeyHash: 0x26,
11278 scriptHash: 0x05,
11279 wif: 0xA6,
11280 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11281 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11282 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11283 estimateFee: estimateFee('gamerscoin')
11284 },
11285 jumbucks: {
11286 magicPrefix: '\x19Jumbucks Signed Message:\n',
11287 bip32: {
11288 public: 0x037a689a,
11289 private: 0x037a6460
11290 },
11291 pubKeyHash: 0x2b,
11292 scriptHash: 0x05,
11293 wif: 0xab,
11294 dustThreshold: 0,
11295 dustSoftThreshold: 10000,
11296 feePerKb: 10000,
11297 estimateFee: estimateFee('jumbucks')
11298 },
11299 zetacoin: {
11300 magicPrefix: '\x18Zetacoin Signed Message:\n',
11301 bip32: {
11302 public: 0x0488b21e,
11303 private: 0x0488ade4
11304 },
11305 pubKeyHash: 0x50,
11306 scriptHash: 0x09,
11307 wif: 0xe0,
11308 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11309 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11310 estimateFee: estimateFee('zetacoin')
11311 }
11312 }
11313
11314 function estimateFee (type) {
11315 return function (tx) {
11316 var network = networks[type]
11317 var baseFee = network.feePerKb
11318 var byteSize = tx.toBuffer().length
11319
11320 var fee = baseFee * Math.ceil(byteSize / 1000)
11321 if (network.dustSoftThreshold === undefined) return fee
11322
11323 tx.outs.forEach(function (e) {
11324 if (e.value < network.dustSoftThreshold) {
11325 fee += baseFee
11326 }
11327 })
11328
11329 return fee
11330 }
11331 }
11332
11333 module.exports = networks
11334
11335 },{}],67:[function(require,module,exports){
11336 module.exports = {
11337 // push value
11338 OP_FALSE: 0,
11339 OP_0: 0,
11340 OP_PUSHDATA1: 76,
11341 OP_PUSHDATA2: 77,
11342 OP_PUSHDATA4: 78,
11343 OP_1NEGATE: 79,
11344 OP_RESERVED: 80,
11345 OP_1: 81,
11346 OP_TRUE: 81,
11347 OP_2: 82,
11348 OP_3: 83,
11349 OP_4: 84,
11350 OP_5: 85,
11351 OP_6: 86,
11352 OP_7: 87,
11353 OP_8: 88,
11354 OP_9: 89,
11355 OP_10: 90,
11356 OP_11: 91,
11357 OP_12: 92,
11358 OP_13: 93,
11359 OP_14: 94,
11360 OP_15: 95,
11361 OP_16: 96,
11362
11363 // control
11364 OP_NOP: 97,
11365 OP_VER: 98,
11366 OP_IF: 99,
11367 OP_NOTIF: 100,
11368 OP_VERIF: 101,
11369 OP_VERNOTIF: 102,
11370 OP_ELSE: 103,
11371 OP_ENDIF: 104,
11372 OP_VERIFY: 105,
11373 OP_RETURN: 106,
11374
11375 // stack ops
11376 OP_TOALTSTACK: 107,
11377 OP_FROMALTSTACK: 108,
11378 OP_2DROP: 109,
11379 OP_2DUP: 110,
11380 OP_3DUP: 111,
11381 OP_2OVER: 112,
11382 OP_2ROT: 113,
11383 OP_2SWAP: 114,
11384 OP_IFDUP: 115,
11385 OP_DEPTH: 116,
11386 OP_DROP: 117,
11387 OP_DUP: 118,
11388 OP_NIP: 119,
11389 OP_OVER: 120,
11390 OP_PICK: 121,
11391 OP_ROLL: 122,
11392 OP_ROT: 123,
11393 OP_SWAP: 124,
11394 OP_TUCK: 125,
11395
11396 // splice ops
11397 OP_CAT: 126,
11398 OP_SUBSTR: 127,
11399 OP_LEFT: 128,
11400 OP_RIGHT: 129,
11401 OP_SIZE: 130,
11402
11403 // bit logic
11404 OP_INVERT: 131,
11405 OP_AND: 132,
11406 OP_OR: 133,
11407 OP_XOR: 134,
11408 OP_EQUAL: 135,
11409 OP_EQUALVERIFY: 136,
11410 OP_RESERVED1: 137,
11411 OP_RESERVED2: 138,
11412
11413 // numeric
11414 OP_1ADD: 139,
11415 OP_1SUB: 140,
11416 OP_2MUL: 141,
11417 OP_2DIV: 142,
11418 OP_NEGATE: 143,
11419 OP_ABS: 144,
11420 OP_NOT: 145,
11421 OP_0NOTEQUAL: 146,
11422
11423 OP_ADD: 147,
11424 OP_SUB: 148,
11425 OP_MUL: 149,
11426 OP_DIV: 150,
11427 OP_MOD: 151,
11428 OP_LSHIFT: 152,
11429 OP_RSHIFT: 153,
11430
11431 OP_BOOLAND: 154,
11432 OP_BOOLOR: 155,
11433 OP_NUMEQUAL: 156,
11434 OP_NUMEQUALVERIFY: 157,
11435 OP_NUMNOTEQUAL: 158,
11436 OP_LESSTHAN: 159,
11437 OP_GREATERTHAN: 160,
11438 OP_LESSTHANOREQUAL: 161,
11439 OP_GREATERTHANOREQUAL: 162,
11440 OP_MIN: 163,
11441 OP_MAX: 164,
11442
11443 OP_WITHIN: 165,
11444
11445 // crypto
11446 OP_RIPEMD160: 166,
11447 OP_SHA1: 167,
11448 OP_SHA256: 168,
11449 OP_HASH160: 169,
11450 OP_HASH256: 170,
11451 OP_CODESEPARATOR: 171,
11452 OP_CHECKSIG: 172,
11453 OP_CHECKSIGVERIFY: 173,
11454 OP_CHECKMULTISIG: 174,
11455 OP_CHECKMULTISIGVERIFY: 175,
11456
11457 // expansion
11458 OP_NOP1: 176,
11459 OP_NOP2: 177,
11460 OP_NOP3: 178,
11461 OP_NOP4: 179,
11462 OP_NOP5: 180,
11463 OP_NOP6: 181,
11464 OP_NOP7: 182,
11465 OP_NOP8: 183,
11466 OP_NOP9: 184,
11467 OP_NOP10: 185,
11468
11469 // template matching params
11470 OP_PUBKEYHASH: 253,
11471 OP_PUBKEY: 254,
11472 OP_INVALIDOPCODE: 255
11473 }
11474
11475 },{}],68:[function(require,module,exports){
11476 (function (Buffer){
11477 var assert = require('assert')
11478 var bufferutils = require('./bufferutils')
11479 var crypto = require('./crypto')
11480 var typeForce = require('typeforce')
11481 var opcodes = require('./opcodes')
11482
11483 function Script (buffer, chunks) {
11484 typeForce('Buffer', buffer)
11485 typeForce('Array', chunks)
11486
11487 this.buffer = buffer
11488 this.chunks = chunks
11489 }
11490
11491 Script.fromASM = function (asm) {
11492 var strChunks = asm.split(' ')
11493 var chunks = strChunks.map(function (strChunk) {
11494 // opcode
11495 if (strChunk in opcodes) {
11496 return opcodes[strChunk]
11497
11498 // data chunk
11499 } else {
11500 return new Buffer(strChunk, 'hex')
11501 }
11502 })
11503
11504 return Script.fromChunks(chunks)
11505 }
11506
11507 Script.fromBuffer = function (buffer) {
11508 var chunks = []
11509 var i = 0
11510
11511 while (i < buffer.length) {
11512 var opcode = buffer.readUInt8(i)
11513
11514 // data chunk
11515 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11516 var d = bufferutils.readPushDataInt(buffer, i)
11517
11518 // did reading a pushDataInt fail? return non-chunked script
11519 if (d === null) return new Script(buffer, [])
11520 i += d.size
11521
11522 // attempt to read too much data?
11523 if (i + d.number > buffer.length) return new Script(buffer, [])
11524
11525 var data = buffer.slice(i, i + d.number)
11526 i += d.number
11527
11528 chunks.push(data)
11529
11530 // opcode
11531 } else {
11532 chunks.push(opcode)
11533
11534 i += 1
11535 }
11536 }
11537
11538 return new Script(buffer, chunks)
11539 }
11540
11541 Script.fromChunks = function (chunks) {
11542 typeForce('Array', chunks)
11543
11544 var bufferSize = chunks.reduce(function (accum, chunk) {
11545 // data chunk
11546 if (Buffer.isBuffer(chunk)) {
11547 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11548 }
11549
11550 // opcode
11551 return accum + 1
11552 }, 0.0)
11553
11554 var buffer = new Buffer(bufferSize)
11555 var offset = 0
11556
11557 chunks.forEach(function (chunk) {
11558 // data chunk
11559 if (Buffer.isBuffer(chunk)) {
11560 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11561
11562 chunk.copy(buffer, offset)
11563 offset += chunk.length
11564
11565 // opcode
11566 } else {
11567 buffer.writeUInt8(chunk, offset)
11568 offset += 1
11569 }
11570 })
11571
11572 assert.equal(offset, buffer.length, 'Could not decode chunks')
11573 return new Script(buffer, chunks)
11574 }
11575
11576 Script.fromHex = function (hex) {
11577 return Script.fromBuffer(new Buffer(hex, 'hex'))
11578 }
11579
11580 Script.EMPTY = Script.fromChunks([])
11581
11582 Script.prototype.getHash = function () {
11583 return crypto.hash160(this.buffer)
11584 }
11585
11586 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11587 Script.prototype.without = function (needle) {
11588 return Script.fromChunks(this.chunks.filter(function (op) {
11589 return op !== needle
11590 }))
11591 }
11592
11593 var reverseOps = []
11594 for (var op in opcodes) {
11595 var code = opcodes[op]
11596 reverseOps[code] = op
11597 }
11598
11599 Script.prototype.toASM = function () {
11600 return this.chunks.map(function (chunk) {
11601 // data chunk
11602 if (Buffer.isBuffer(chunk)) {
11603 return chunk.toString('hex')
11604
11605 // opcode
11606 } else {
11607 return reverseOps[chunk]
11608 }
11609 }).join(' ')
11610 }
11611
11612 Script.prototype.toBuffer = function () {
11613 return this.buffer
11614 }
11615
11616 Script.prototype.toHex = function () {
11617 return this.toBuffer().toString('hex')
11618 }
11619
11620 module.exports = Script
11621
11622 }).call(this,require("buffer").Buffer)
11623 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
11624 (function (Buffer){
11625 var assert = require('assert')
11626 var ops = require('./opcodes')
11627 var typeForce = require('typeforce')
11628
11629 var ecurve = require('ecurve')
11630 var curve = ecurve.getCurveByName('secp256k1')
11631
11632 var ECSignature = require('./ecsignature')
11633 var Script = require('./script')
11634
11635 function isCanonicalPubKey (buffer) {
11636 if (!Buffer.isBuffer(buffer)) return false
11637
11638 try {
11639 ecurve.Point.decodeFrom(curve, buffer)
11640 } catch (e) {
11641 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11642 throw e
11643
11644 return false
11645 }
11646
11647 return true
11648 }
11649
11650 function isCanonicalSignature (buffer) {
11651 if (!Buffer.isBuffer(buffer)) return false
11652
11653 try {
11654 ECSignature.parseScriptSignature(buffer)
11655 } catch (e) {
11656 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/))) {
11657 throw e
11658 }
11659
11660 return false
11661 }
11662
11663 return true
11664 }
11665
11666 function isPubKeyHashInput (script) {
11667 return script.chunks.length === 2 &&
11668 isCanonicalSignature(script.chunks[0]) &&
11669 isCanonicalPubKey(script.chunks[1])
11670 }
11671
11672 function isPubKeyHashOutput (script) {
11673 return script.chunks.length === 5 &&
11674 script.chunks[0] === ops.OP_DUP &&
11675 script.chunks[1] === ops.OP_HASH160 &&
11676 Buffer.isBuffer(script.chunks[2]) &&
11677 script.chunks[2].length === 20 &&
11678 script.chunks[3] === ops.OP_EQUALVERIFY &&
11679 script.chunks[4] === ops.OP_CHECKSIG
11680 }
11681
11682 function isPubKeyInput (script) {
11683 return script.chunks.length === 1 &&
11684 isCanonicalSignature(script.chunks[0])
11685 }
11686
11687 function isPubKeyOutput (script) {
11688 return script.chunks.length === 2 &&
11689 isCanonicalPubKey(script.chunks[0]) &&
11690 script.chunks[1] === ops.OP_CHECKSIG
11691 }
11692
11693 function isScriptHashInput (script, allowIncomplete) {
11694 if (script.chunks.length < 2) return false
11695
11696 var lastChunk = script.chunks[script.chunks.length - 1]
11697 if (!Buffer.isBuffer(lastChunk)) return false
11698
11699 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11700 var redeemScript = Script.fromBuffer(lastChunk)
11701
11702 // is redeemScript a valid script?
11703 if (redeemScript.chunks.length === 0) return false
11704
11705 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11706 }
11707
11708 function isScriptHashOutput (script) {
11709 return script.chunks.length === 3 &&
11710 script.chunks[0] === ops.OP_HASH160 &&
11711 Buffer.isBuffer(script.chunks[1]) &&
11712 script.chunks[1].length === 20 &&
11713 script.chunks[2] === ops.OP_EQUAL
11714 }
11715
11716 // allowIncomplete is to account for combining signatures
11717 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11718 function isMultisigInput (script, allowIncomplete) {
11719 if (script.chunks.length < 2) return false
11720 if (script.chunks[0] !== ops.OP_0) return false
11721
11722 if (allowIncomplete) {
11723 return script.chunks.slice(1).every(function (chunk) {
11724 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11725 })
11726 }
11727
11728 return script.chunks.slice(1).every(isCanonicalSignature)
11729 }
11730
11731 function isMultisigOutput (script) {
11732 if (script.chunks.length < 4) return false
11733 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
11734
11735 var mOp = script.chunks[0]
11736 if (mOp === ops.OP_0) return false
11737 if (mOp < ops.OP_1) return false
11738 if (mOp > ops.OP_16) return false
11739
11740 var nOp = script.chunks[script.chunks.length - 2]
11741 if (nOp === ops.OP_0) return false
11742 if (nOp < ops.OP_1) return false
11743 if (nOp > ops.OP_16) return false
11744
11745 var m = mOp - (ops.OP_1 - 1)
11746 var n = nOp - (ops.OP_1 - 1)
11747 if (n < m) return false
11748
11749 var pubKeys = script.chunks.slice(1, -2)
11750 if (n < pubKeys.length) return false
11751
11752 return pubKeys.every(isCanonicalPubKey)
11753 }
11754
11755 function isNullDataOutput (script) {
11756 return script.chunks[0] === ops.OP_RETURN
11757 }
11758
11759 function classifyOutput (script) {
11760 typeForce('Script', script)
11761
11762 if (isPubKeyHashOutput(script)) {
11763 return 'pubkeyhash'
11764 } else if (isScriptHashOutput(script)) {
11765 return 'scripthash'
11766 } else if (isMultisigOutput(script)) {
11767 return 'multisig'
11768 } else if (isPubKeyOutput(script)) {
11769 return 'pubkey'
11770 } else if (isNullDataOutput(script)) {
11771 return 'nulldata'
11772 }
11773
11774 return 'nonstandard'
11775 }
11776
11777 function classifyInput (script, allowIncomplete) {
11778 typeForce('Script', script)
11779
11780 if (isPubKeyHashInput(script)) {
11781 return 'pubkeyhash'
11782 } else if (isMultisigInput(script, allowIncomplete)) {
11783 return 'multisig'
11784 } else if (isScriptHashInput(script, allowIncomplete)) {
11785 return 'scripthash'
11786 } else if (isPubKeyInput(script)) {
11787 return 'pubkey'
11788 }
11789
11790 return 'nonstandard'
11791 }
11792
11793 // Standard Script Templates
11794 // {pubKey} OP_CHECKSIG
11795 function pubKeyOutput (pubKey) {
11796 return Script.fromChunks([
11797 pubKey.toBuffer(),
11798 ops.OP_CHECKSIG
11799 ])
11800 }
11801
11802 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
11803 function pubKeyHashOutput (hash) {
11804 typeForce('Buffer', hash)
11805
11806 return Script.fromChunks([
11807 ops.OP_DUP,
11808 ops.OP_HASH160,
11809 hash,
11810 ops.OP_EQUALVERIFY,
11811 ops.OP_CHECKSIG
11812 ])
11813 }
11814
11815 // OP_HASH160 {scriptHash} OP_EQUAL
11816 function scriptHashOutput (hash) {
11817 typeForce('Buffer', hash)
11818
11819 return Script.fromChunks([
11820 ops.OP_HASH160,
11821 hash,
11822 ops.OP_EQUAL
11823 ])
11824 }
11825
11826 // m [pubKeys ...] n OP_CHECKMULTISIG
11827 function multisigOutput (m, pubKeys) {
11828 typeForce(['ECPubKey'], pubKeys)
11829
11830 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
11831
11832 var pubKeyBuffers = pubKeys.map(function (pubKey) {
11833 return pubKey.toBuffer()
11834 })
11835 var n = pubKeys.length
11836
11837 return Script.fromChunks([].concat(
11838 (ops.OP_1 - 1) + m,
11839 pubKeyBuffers,
11840 (ops.OP_1 - 1) + n,
11841 ops.OP_CHECKMULTISIG
11842 ))
11843 }
11844
11845 // {signature}
11846 function pubKeyInput (signature) {
11847 typeForce('Buffer', signature)
11848
11849 return Script.fromChunks([signature])
11850 }
11851
11852 // {signature} {pubKey}
11853 function pubKeyHashInput (signature, pubKey) {
11854 typeForce('Buffer', signature)
11855
11856 return Script.fromChunks([signature, pubKey.toBuffer()])
11857 }
11858
11859 // <scriptSig> {serialized scriptPubKey script}
11860 function scriptHashInput (scriptSig, scriptPubKey) {
11861 return Script.fromChunks([].concat(
11862 scriptSig.chunks,
11863 scriptPubKey.toBuffer()
11864 ))
11865 }
11866
11867 // OP_0 [signatures ...]
11868 function multisigInput (signatures, scriptPubKey) {
11869 if (scriptPubKey) {
11870 assert(isMultisigOutput(scriptPubKey))
11871
11872 var mOp = scriptPubKey.chunks[0]
11873 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
11874 var m = mOp - (ops.OP_1 - 1)
11875 var n = nOp - (ops.OP_1 - 1)
11876
11877 assert(signatures.length >= m, 'Not enough signatures provided')
11878 assert(signatures.length <= n, 'Too many signatures provided')
11879 }
11880
11881 return Script.fromChunks([].concat(ops.OP_0, signatures))
11882 }
11883
11884 function nullDataOutput (data) {
11885 return Script.fromChunks([ops.OP_RETURN, data])
11886 }
11887
11888 module.exports = {
11889 isCanonicalPubKey: isCanonicalPubKey,
11890 isCanonicalSignature: isCanonicalSignature,
11891 isPubKeyHashInput: isPubKeyHashInput,
11892 isPubKeyHashOutput: isPubKeyHashOutput,
11893 isPubKeyInput: isPubKeyInput,
11894 isPubKeyOutput: isPubKeyOutput,
11895 isScriptHashInput: isScriptHashInput,
11896 isScriptHashOutput: isScriptHashOutput,
11897 isMultisigInput: isMultisigInput,
11898 isMultisigOutput: isMultisigOutput,
11899 isNullDataOutput: isNullDataOutput,
11900 classifyOutput: classifyOutput,
11901 classifyInput: classifyInput,
11902 pubKeyOutput: pubKeyOutput,
11903 pubKeyHashOutput: pubKeyHashOutput,
11904 scriptHashOutput: scriptHashOutput,
11905 multisigOutput: multisigOutput,
11906 pubKeyInput: pubKeyInput,
11907 pubKeyHashInput: pubKeyHashInput,
11908 scriptHashInput: scriptHashInput,
11909 multisigInput: multisigInput,
11910 dataOutput: function (data) {
11911 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
11912 return nullDataOutput(data)
11913 },
11914 nullDataOutput: nullDataOutput
11915 }
11916
11917 }).call(this,require("buffer").Buffer)
11918 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
11919 (function (Buffer){
11920 var assert = require('assert')
11921 var bufferutils = require('./bufferutils')
11922 var crypto = require('./crypto')
11923 var typeForce = require('typeforce')
11924 var opcodes = require('./opcodes')
11925 var scripts = require('./scripts')
11926
11927 var Address = require('./address')
11928 var ECSignature = require('./ecsignature')
11929 var Script = require('./script')
11930
11931 function Transaction () {
11932 this.version = 1
11933 this.locktime = 0
11934 this.ins = []
11935 this.outs = []
11936 }
11937
11938 Transaction.DEFAULT_SEQUENCE = 0xffffffff
11939 Transaction.SIGHASH_ALL = 0x01
11940 Transaction.SIGHASH_NONE = 0x02
11941 Transaction.SIGHASH_SINGLE = 0x03
11942 Transaction.SIGHASH_ANYONECANPAY = 0x80
11943
11944 Transaction.fromBuffer = function (buffer, __disableAssert) {
11945 var offset = 0
11946 function readSlice (n) {
11947 offset += n
11948 return buffer.slice(offset - n, offset)
11949 }
11950
11951 function readUInt32 () {
11952 var i = buffer.readUInt32LE(offset)
11953 offset += 4
11954 return i
11955 }
11956
11957 function readUInt64 () {
11958 var i = bufferutils.readUInt64LE(buffer, offset)
11959 offset += 8
11960 return i
11961 }
11962
11963 function readVarInt () {
11964 var vi = bufferutils.readVarInt(buffer, offset)
11965 offset += vi.size
11966 return vi.number
11967 }
11968
11969 function readScript () {
11970 return Script.fromBuffer(readSlice(readVarInt()))
11971 }
11972
11973 function readGenerationScript () {
11974 return new Script(readSlice(readVarInt()), [])
11975 }
11976
11977 var tx = new Transaction()
11978 tx.version = readUInt32()
11979
11980 var vinLen = readVarInt()
11981 for (var i = 0; i < vinLen; ++i) {
11982 var hash = readSlice(32)
11983
11984 if (Transaction.isCoinbaseHash(hash)) {
11985 tx.ins.push({
11986 hash: hash,
11987 index: readUInt32(),
11988 script: readGenerationScript(),
11989 sequence: readUInt32()
11990 })
11991 } else {
11992 tx.ins.push({
11993 hash: hash,
11994 index: readUInt32(),
11995 script: readScript(),
11996 sequence: readUInt32()
11997 })
11998 }
11999 }
12000
12001 var voutLen = readVarInt()
12002 for (i = 0; i < voutLen; ++i) {
12003 tx.outs.push({
12004 value: readUInt64(),
12005 script: readScript()
12006 })
12007 }
12008
12009 tx.locktime = readUInt32()
12010
12011 if (!__disableAssert) {
12012 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12013 }
12014
12015 return tx
12016 }
12017
12018 Transaction.fromHex = function (hex) {
12019 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12020 }
12021
12022 Transaction.isCoinbaseHash = function (buffer) {
12023 return Array.prototype.every.call(buffer, function (x) {
12024 return x === 0
12025 })
12026 }
12027
12028 /**
12029 * Create a new txIn.
12030 *
12031 * Can be called with any of:
12032 *
12033 * - A transaction and an index
12034 * - A transaction hash and an index
12035 *
12036 * Note that this method does not sign the created input.
12037 */
12038 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12039 if (sequence === undefined || sequence === null) {
12040 sequence = Transaction.DEFAULT_SEQUENCE
12041 }
12042
12043 script = script || Script.EMPTY
12044
12045 if (typeof hash === 'string') {
12046 // TxId hex is big-endian, we need little-endian
12047 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12048 } else if (hash instanceof Transaction) {
12049 hash = hash.getHash()
12050 }
12051
12052 typeForce('Buffer', hash)
12053 typeForce('Number', index)
12054 typeForce('Number', sequence)
12055 typeForce('Script', script)
12056
12057 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
12058
12059 // Add the input and return the input's index
12060 return (this.ins.push({
12061 hash: hash,
12062 index: index,
12063 script: script,
12064 sequence: sequence
12065 }) - 1)
12066 }
12067
12068 /**
12069 * Create a new txOut.
12070 *
12071 * Can be called with:
12072 *
12073 * - A base58 address string and a value
12074 * - An Address object and a value
12075 * - A scriptPubKey Script and a value
12076 */
12077 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12078 // Attempt to get a valid address if it's a base58 address string
12079 if (typeof scriptPubKey === 'string') {
12080 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12081 }
12082
12083 // Attempt to get a valid script if it's an Address object
12084 if (scriptPubKey instanceof Address) {
12085 scriptPubKey = scriptPubKey.toOutputScript()
12086 }
12087
12088 typeForce('Script', scriptPubKey)
12089 typeForce('Number', value)
12090
12091 // Add the output and return the output's index
12092 return (this.outs.push({
12093 script: scriptPubKey,
12094 value: value
12095 }) - 1)
12096 }
12097
12098 Transaction.prototype.clone = function () {
12099 var newTx = new Transaction()
12100 newTx.version = this.version
12101 newTx.locktime = this.locktime
12102
12103 newTx.ins = this.ins.map(function (txIn) {
12104 return {
12105 hash: txIn.hash,
12106 index: txIn.index,
12107 script: txIn.script,
12108 sequence: txIn.sequence
12109 }
12110 })
12111
12112 newTx.outs = this.outs.map(function (txOut) {
12113 return {
12114 script: txOut.script,
12115 value: txOut.value
12116 }
12117 })
12118
12119 return newTx
12120 }
12121
12122 /**
12123 * Hash transaction for signing a specific input.
12124 *
12125 * Bitcoin uses a different hash for each signed transaction input. This
12126 * method copies the transaction, makes the necessary changes based on the
12127 * hashType, serializes and finally hashes the result. This hash can then be
12128 * used to sign the transaction input in question.
12129 */
12130 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12131 // FIXME: remove in 2.x.y
12132 if (arguments[0] instanceof Script) {
12133 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12134
12135 // swap the arguments (must be stored in tmp, arguments is special)
12136 var tmp = arguments[0]
12137 inIndex = arguments[1]
12138 prevOutScript = tmp
12139 }
12140
12141 typeForce('Number', inIndex)
12142 typeForce('Script', prevOutScript)
12143 typeForce('Number', hashType)
12144
12145 assert(inIndex >= 0, 'Invalid vin index')
12146 assert(inIndex < this.ins.length, 'Invalid vin index')
12147
12148 var txTmp = this.clone()
12149 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12150
12151 // Blank out other inputs' signatures
12152 txTmp.ins.forEach(function (txIn) {
12153 txIn.script = Script.EMPTY
12154 })
12155 txTmp.ins[inIndex].script = hashScript
12156
12157 var hashTypeModifier = hashType & 0x1f
12158
12159 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12160 assert(false, 'SIGHASH_NONE not yet supported')
12161 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12162 assert(false, 'SIGHASH_SINGLE not yet supported')
12163 }
12164
12165 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12166 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12167 }
12168
12169 var hashTypeBuffer = new Buffer(4)
12170 hashTypeBuffer.writeInt32LE(hashType, 0)
12171
12172 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12173 return crypto.hash256(buffer)
12174 }
12175
12176 Transaction.prototype.getHash = function () {
12177 return crypto.hash256(this.toBuffer())
12178 }
12179
12180 Transaction.prototype.getId = function () {
12181 // TxHash is little-endian, we need big-endian
12182 return bufferutils.reverse(this.getHash()).toString('hex')
12183 }
12184
12185 Transaction.prototype.toBuffer = function () {
12186 function scriptSize (script) {
12187 var length = script.buffer.length
12188
12189 return bufferutils.varIntSize(length) + length
12190 }
12191
12192 var buffer = new Buffer(
12193 8 +
12194 bufferutils.varIntSize(this.ins.length) +
12195 bufferutils.varIntSize(this.outs.length) +
12196 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12197 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
12198 )
12199
12200 var offset = 0
12201 function writeSlice (slice) {
12202 slice.copy(buffer, offset)
12203 offset += slice.length
12204 }
12205
12206 function writeUInt32 (i) {
12207 buffer.writeUInt32LE(i, offset)
12208 offset += 4
12209 }
12210
12211 function writeUInt64 (i) {
12212 bufferutils.writeUInt64LE(buffer, i, offset)
12213 offset += 8
12214 }
12215
12216 function writeVarInt (i) {
12217 var n = bufferutils.writeVarInt(buffer, i, offset)
12218 offset += n
12219 }
12220
12221 writeUInt32(this.version)
12222 writeVarInt(this.ins.length)
12223
12224 this.ins.forEach(function (txIn) {
12225 writeSlice(txIn.hash)
12226 writeUInt32(txIn.index)
12227 writeVarInt(txIn.script.buffer.length)
12228 writeSlice(txIn.script.buffer)
12229 writeUInt32(txIn.sequence)
12230 })
12231
12232 writeVarInt(this.outs.length)
12233 this.outs.forEach(function (txOut) {
12234 writeUInt64(txOut.value)
12235 writeVarInt(txOut.script.buffer.length)
12236 writeSlice(txOut.script.buffer)
12237 })
12238
12239 writeUInt32(this.locktime)
12240
12241 return buffer
12242 }
12243
12244 Transaction.prototype.toHex = function () {
12245 return this.toBuffer().toString('hex')
12246 }
12247
12248 Transaction.prototype.setInputScript = function (index, script) {
12249 typeForce('Number', index)
12250 typeForce('Script', script)
12251
12252 this.ins[index].script = script
12253 }
12254
12255 // FIXME: remove in 2.x.y
12256 Transaction.prototype.sign = function (index, privKey, hashType) {
12257 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12258
12259 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12260 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12261
12262 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12263 this.setInputScript(index, scriptSig)
12264 }
12265
12266 // FIXME: remove in 2.x.y
12267 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12268 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12269
12270 hashType = hashType || Transaction.SIGHASH_ALL
12271
12272 var hash = this.hashForSignature(index, prevOutScript, hashType)
12273 var signature = privKey.sign(hash)
12274
12275 return signature.toScriptSignature(hashType)
12276 }
12277
12278 // FIXME: remove in 2.x.y
12279 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12280 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12281
12282 var parsed = ECSignature.parseScriptSignature(buffer)
12283 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12284
12285 return pubKey.verify(hash, parsed.signature)
12286 }
12287
12288 module.exports = Transaction
12289
12290 }).call(this,require("buffer").Buffer)
12291 },{"./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){
12292 (function (Buffer){
12293 var assert = require('assert')
12294 var ops = require('./opcodes')
12295 var scripts = require('./scripts')
12296
12297 var ECPubKey = require('./ecpubkey')
12298 var ECSignature = require('./ecsignature')
12299 var Script = require('./script')
12300 var Transaction = require('./transaction')
12301
12302 function extractInput (txIn) {
12303 var redeemScript
12304 var scriptSig = txIn.script
12305 var prevOutScript
12306 var prevOutType = scripts.classifyInput(scriptSig, true)
12307 var scriptType
12308
12309 // Re-classify if scriptHash
12310 if (prevOutType === 'scripthash') {
12311 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12312 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12313
12314 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12315 scriptType = scripts.classifyInput(scriptSig, true)
12316 } else {
12317 scriptType = prevOutType
12318 }
12319
12320 // Extract hashType, pubKeys and signatures
12321 var hashType, parsed, pubKeys, signatures
12322
12323 switch (scriptType) {
12324 case 'pubkeyhash': {
12325 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12326 hashType = parsed.hashType
12327 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12328 signatures = [parsed.signature]
12329 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12330
12331 break
12332 }
12333
12334 case 'pubkey': {
12335 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12336 hashType = parsed.hashType
12337 signatures = [parsed.signature]
12338
12339 if (redeemScript) {
12340 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12341 }
12342
12343 break
12344 }
12345
12346 case 'multisig': {
12347 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12348 if (chunk === ops.OP_0) return chunk
12349
12350 var parsed = ECSignature.parseScriptSignature(chunk)
12351 hashType = parsed.hashType
12352
12353 return parsed.signature
12354 })
12355
12356 if (redeemScript) {
12357 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12358 }
12359
12360 break
12361 }
12362 }
12363
12364 return {
12365 hashType: hashType,
12366 prevOutScript: prevOutScript,
12367 prevOutType: prevOutType,
12368 pubKeys: pubKeys,
12369 redeemScript: redeemScript,
12370 scriptType: scriptType,
12371 signatures: signatures
12372 }
12373 }
12374
12375 function TransactionBuilder () {
12376 this.prevTxMap = {}
12377 this.prevOutScripts = {}
12378 this.prevOutTypes = {}
12379
12380 this.inputs = []
12381 this.tx = new Transaction()
12382 }
12383
12384 TransactionBuilder.fromTransaction = function (transaction) {
12385 var txb = new TransactionBuilder()
12386
12387 // Copy other transaction fields
12388 txb.tx.version = transaction.version
12389 txb.tx.locktime = transaction.locktime
12390
12391 // Extract/add inputs
12392 transaction.ins.forEach(function (txIn) {
12393 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12394 })
12395
12396 // Extract/add outputs
12397 transaction.outs.forEach(function (txOut) {
12398 txb.addOutput(txOut.script, txOut.value)
12399 })
12400
12401 // Extract/add signatures
12402 txb.inputs = transaction.ins.map(function (txIn) {
12403 // TODO: remove me after testcase added
12404 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12405
12406 // Ignore empty scripts
12407 if (txIn.script.buffer.length === 0) return {}
12408
12409 return extractInput(txIn)
12410 })
12411
12412 return txb
12413 }
12414
12415 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12416 var prevOutHash
12417
12418 // txId
12419 if (typeof prevTx === 'string') {
12420 prevOutHash = new Buffer(prevTx, 'hex')
12421
12422 // TxId hex is big-endian, we want little-endian hash
12423 Array.prototype.reverse.call(prevOutHash)
12424
12425 // Transaction
12426 } else if (prevTx instanceof Transaction) {
12427 prevOutHash = prevTx.getHash()
12428 prevOutScript = prevTx.outs[index].script
12429
12430 // txHash
12431 } else {
12432 prevOutHash = prevTx
12433 }
12434
12435 var input = {}
12436 if (prevOutScript) {
12437 var prevOutType = scripts.classifyOutput(prevOutScript)
12438
12439 // if we can, extract pubKey information
12440 switch (prevOutType) {
12441 case 'multisig': {
12442 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12443 break
12444 }
12445
12446 case 'pubkey': {
12447 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12448 break
12449 }
12450 }
12451
12452 if (prevOutType !== 'scripthash') {
12453 input.scriptType = prevOutType
12454 }
12455
12456 input.prevOutScript = prevOutScript
12457 input.prevOutType = prevOutType
12458 }
12459
12460 assert(this.inputs.every(function (input2) {
12461 if (input2.hashType === undefined) return true
12462
12463 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12464 }), 'No, this would invalidate signatures')
12465
12466 var prevOut = prevOutHash.toString('hex') + ':' + index
12467 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12468
12469 var vin = this.tx.addInput(prevOutHash, index, sequence)
12470 this.inputs[vin] = input
12471 this.prevTxMap[prevOut] = vin
12472
12473 return vin
12474 }
12475
12476 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12477 assert(this.inputs.every(function (input) {
12478 if (input.hashType === undefined) return true
12479
12480 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12481 }), 'No, this would invalidate signatures')
12482
12483 return this.tx.addOutput(scriptPubKey, value)
12484 }
12485
12486 TransactionBuilder.prototype.build = function () {
12487 return this.__build(false)
12488 }
12489 TransactionBuilder.prototype.buildIncomplete = function () {
12490 return this.__build(true)
12491 }
12492
12493 var canSignTypes = {
12494 'pubkeyhash': true,
12495 'multisig': true,
12496 'pubkey': true
12497 }
12498
12499 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12500 if (!allowIncomplete) {
12501 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12502 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
12503 }
12504
12505 var tx = this.tx.clone()
12506
12507 // Create script signatures from signature meta-data
12508 this.inputs.forEach(function (input, index) {
12509 var scriptType = input.scriptType
12510 var scriptSig
12511
12512 if (!allowIncomplete) {
12513 assert(!!scriptType, 'Transaction is not complete')
12514 assert(scriptType in canSignTypes, scriptType + ' not supported')
12515 assert(input.signatures, 'Transaction is missing signatures')
12516 }
12517
12518 if (input.signatures) {
12519 switch (scriptType) {
12520 case 'pubkeyhash': {
12521 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12522 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12523 break
12524 }
12525
12526 case 'multisig': {
12527 // Array.prototype.map is sparse-compatible
12528 var msSignatures = input.signatures.map(function (signature) {
12529 return signature && signature.toScriptSignature(input.hashType)
12530 })
12531
12532 // fill in blanks with OP_0
12533 if (allowIncomplete) {
12534 for (var i = 0; i < msSignatures.length; ++i) {
12535 if (msSignatures[i]) continue
12536
12537 msSignatures[i] = ops.OP_0
12538 }
12539 } else {
12540 // Array.prototype.filter returns non-sparse array
12541 msSignatures = msSignatures.filter(function (x) { return x })
12542 }
12543
12544 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12545 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12546 break
12547 }
12548
12549 case 'pubkey': {
12550 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12551 scriptSig = scripts.pubKeyInput(pkSignature)
12552 break
12553 }
12554 }
12555 }
12556
12557 // did we build a scriptSig?
12558 if (scriptSig) {
12559 // wrap as scriptHash if necessary
12560 if (input.prevOutType === 'scripthash') {
12561 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12562 }
12563
12564 tx.setInputScript(index, scriptSig)
12565 }
12566 })
12567
12568 return tx
12569 }
12570
12571 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12572 assert(index in this.inputs, 'No input at index: ' + index)
12573 hashType = hashType || Transaction.SIGHASH_ALL
12574
12575 var input = this.inputs[index]
12576 var canSign = input.hashType &&
12577 input.prevOutScript &&
12578 input.prevOutType &&
12579 input.pubKeys &&
12580 input.scriptType &&
12581 input.signatures
12582
12583 // are we almost ready to sign?
12584 if (canSign) {
12585 // if redeemScript was provided, enforce consistency
12586 if (redeemScript) {
12587 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12588 }
12589
12590 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12591
12592 // no? prepare
12593 } else {
12594 // must be pay-to-scriptHash?
12595 if (redeemScript) {
12596 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12597 if (input.prevOutScript) {
12598 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12599
12600 var scriptHash = input.prevOutScript.chunks[1]
12601 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12602 }
12603
12604 var scriptType = scripts.classifyOutput(redeemScript)
12605 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12606
12607 var pubKeys = []
12608 switch (scriptType) {
12609 case 'multisig': {
12610 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12611 break
12612 }
12613
12614 case 'pubkeyhash': {
12615 var pkh1 = redeemScript.chunks[2]
12616 var pkh2 = privKey.pub.getAddress().hash
12617
12618 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12619 pubKeys = [privKey.pub]
12620 break
12621 }
12622
12623 case 'pubkey': {
12624 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12625 break
12626 }
12627 }
12628
12629 if (!input.prevOutScript) {
12630 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12631 input.prevOutType = 'scripthash'
12632 }
12633
12634 input.pubKeys = pubKeys
12635 input.redeemScript = redeemScript
12636 input.scriptType = scriptType
12637
12638 // cannot be pay-to-scriptHash
12639 } else {
12640 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12641
12642 // can we otherwise sign this?
12643 if (input.scriptType) {
12644 assert(input.pubKeys, input.scriptType + ' not supported')
12645
12646 // we know nothin' Jon Snow, assume pubKeyHash
12647 } else {
12648 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12649 input.prevOutType = 'pubkeyhash'
12650 input.pubKeys = [privKey.pub]
12651 input.scriptType = input.prevOutType
12652 }
12653 }
12654
12655 input.hashType = hashType
12656 input.signatures = input.signatures || []
12657 }
12658
12659 var signatureScript = input.redeemScript || input.prevOutScript
12660 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12661
12662 // enforce signature order matches public keys
12663 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12664 // maintain a local copy of unmatched signatures
12665 var unmatched = input.signatures.slice()
12666
12667 input.signatures = input.pubKeys.map(function (pubKey) {
12668 var match
12669
12670 // check for any matching signatures
12671 unmatched.some(function (signature, i) {
12672 if (!pubKey.verify(signatureHash, signature)) return false
12673 match = signature
12674
12675 // remove matched signature from unmatched
12676 unmatched.splice(i, 1)
12677
12678 return true
12679 })
12680
12681 return match || undefined
12682 })
12683 }
12684
12685 // enforce in order signing of public keys
12686 assert(input.pubKeys.some(function (pubKey, i) {
12687 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12688
12689 assert(!input.signatures[i], 'Signature already exists')
12690 var signature = privKey.sign(signatureHash)
12691 input.signatures[i] = signature
12692
12693 return true
12694 }, this), 'privateKey cannot sign for this input')
12695 }
12696
12697 module.exports = TransactionBuilder
12698
12699 }).call(this,require("buffer").Buffer)
12700 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
12701 (function (Buffer){
12702 var assert = require('assert')
12703 var bufferutils = require('./bufferutils')
12704 var typeForce = require('typeforce')
12705 var networks = require('./networks')
12706 var randomBytes = require('randombytes')
12707
12708 var Address = require('./address')
12709 var HDNode = require('./hdnode')
12710 var TransactionBuilder = require('./transaction_builder')
12711 var Script = require('./script')
12712
12713 function Wallet (seed, network) {
12714 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12715
12716 seed = seed || randomBytes(32)
12717 network = network || networks.bitcoin
12718
12719 // Stored in a closure to make accidental serialization less likely
12720 var masterKey = HDNode.fromSeedBuffer(seed, network)
12721
12722 // HD first-level child derivation method should be hardened
12723 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12724 var accountZero = masterKey.deriveHardened(0)
12725 var externalAccount = accountZero.derive(0)
12726 var internalAccount = accountZero.derive(1)
12727
12728 this.addresses = []
12729 this.changeAddresses = []
12730 this.network = network
12731 this.unspents = []
12732
12733 // FIXME: remove in 2.0.0
12734 this.unspentMap = {}
12735
12736 // FIXME: remove in 2.0.0
12737 var me = this
12738 this.newMasterKey = function (seed) {
12739 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12740
12741 seed = seed || randomBytes(32)
12742 masterKey = HDNode.fromSeedBuffer(seed, network)
12743
12744 accountZero = masterKey.deriveHardened(0)
12745 externalAccount = accountZero.derive(0)
12746 internalAccount = accountZero.derive(1)
12747
12748 me.addresses = []
12749 me.changeAddresses = []
12750
12751 me.unspents = []
12752 me.unspentMap = {}
12753 }
12754
12755 this.getMasterKey = function () {
12756 return masterKey
12757 }
12758 this.getAccountZero = function () {
12759 return accountZero
12760 }
12761 this.getExternalAccount = function () {
12762 return externalAccount
12763 }
12764 this.getInternalAccount = function () {
12765 return internalAccount
12766 }
12767 }
12768
12769 Wallet.prototype.createTransaction = function (to, value, options) {
12770 // FIXME: remove in 2.0.0
12771 if (typeof options !== 'object') {
12772 if (options !== undefined) {
12773 console.warn('Non options object parameters are deprecated, use options object instead')
12774
12775 options = {
12776 fixedFee: arguments[2],
12777 changeAddress: arguments[3]
12778 }
12779 }
12780 }
12781
12782 options = options || {}
12783
12784 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
12785
12786 var changeAddress = options.changeAddress
12787 var fixedFee = options.fixedFee
12788 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
12789
12790 // filter by minConf, then pending and sort by descending value
12791 var unspents = this.unspents.filter(function (unspent) {
12792 return unspent.confirmations >= minConf
12793 }).filter(function (unspent) {
12794 return !unspent.pending
12795 }).sort(function (o1, o2) {
12796 return o2.value - o1.value
12797 })
12798
12799 var accum = 0
12800 var addresses = []
12801 var subTotal = value
12802
12803 var txb = new TransactionBuilder()
12804 txb.addOutput(to, value)
12805
12806 for (var i = 0; i < unspents.length; ++i) {
12807 var unspent = unspents[i]
12808 addresses.push(unspent.address)
12809
12810 txb.addInput(unspent.txHash, unspent.index)
12811
12812 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
12813
12814 accum += unspent.value
12815 subTotal = value + fee
12816
12817 if (accum >= subTotal) {
12818 var change = accum - subTotal
12819
12820 if (change > this.network.dustThreshold) {
12821 txb.addOutput(changeAddress || this.getChangeAddress(), change)
12822 }
12823
12824 break
12825 }
12826 }
12827
12828 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
12829
12830 return this.signWith(txb, addresses).build()
12831 }
12832
12833 // FIXME: remove in 2.0.0
12834 Wallet.prototype.processPendingTx = function (tx) {
12835 this.__processTx(tx, true)
12836 }
12837
12838 // FIXME: remove in 2.0.0
12839 Wallet.prototype.processConfirmedTx = function (tx) {
12840 this.__processTx(tx, false)
12841 }
12842
12843 // FIXME: remove in 2.0.0
12844 Wallet.prototype.__processTx = function (tx, isPending) {
12845 console.warn('processTransaction is considered harmful, see issue #260 for more information')
12846
12847 var txId = tx.getId()
12848 var txHash = tx.getHash()
12849
12850 tx.outs.forEach(function (txOut, i) {
12851 var address
12852
12853 try {
12854 address = Address.fromOutputScript(txOut.script, this.network).toString()
12855 } catch (e) {
12856 if (!(e.message.match(/has no matching Address/)))
12857 throw e
12858 }
12859
12860 var myAddresses = this.addresses.concat(this.changeAddresses)
12861 if (myAddresses.indexOf(address) > -1) {
12862 var lookup = txId + ':' + i
12863 if (lookup in this.unspentMap) return
12864
12865 // its unique, add it
12866 var unspent = {
12867 address: address,
12868 confirmations: 0, // no way to determine this without more information
12869 index: i,
12870 txHash: txHash,
12871 txId: txId,
12872 value: txOut.value,
12873 pending: isPending
12874 }
12875
12876 this.unspentMap[lookup] = unspent
12877 this.unspents.push(unspent)
12878 }
12879 }, this)
12880
12881 tx.ins.forEach(function (txIn) {
12882 // copy and convert to big-endian hex
12883 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
12884
12885 var lookup = txInId + ':' + txIn.index
12886 if (!(lookup in this.unspentMap)) return
12887
12888 var unspent = this.unspentMap[lookup]
12889
12890 if (isPending) {
12891 unspent.pending = true
12892 unspent.spent = true
12893 } else {
12894 delete this.unspentMap[lookup]
12895
12896 this.unspents = this.unspents.filter(function (unspent2) {
12897 return unspent !== unspent2
12898 })
12899 }
12900 }, this)
12901 }
12902
12903 Wallet.prototype.generateAddress = function () {
12904 var k = this.addresses.length
12905 var address = this.getExternalAccount().derive(k).getAddress()
12906
12907 this.addresses.push(address.toString())
12908
12909 return this.getReceiveAddress()
12910 }
12911
12912 Wallet.prototype.generateChangeAddress = function () {
12913 var k = this.changeAddresses.length
12914 var address = this.getInternalAccount().derive(k).getAddress()
12915
12916 this.changeAddresses.push(address.toString())
12917
12918 return this.getChangeAddress()
12919 }
12920
12921 Wallet.prototype.getAddress = function () {
12922 if (this.addresses.length === 0) {
12923 this.generateAddress()
12924 }
12925
12926 return this.addresses[this.addresses.length - 1]
12927 }
12928
12929 Wallet.prototype.getBalance = function (minConf) {
12930 minConf = minConf || 0
12931
12932 return this.unspents.filter(function (unspent) {
12933 return unspent.confirmations >= minConf
12934
12935 // FIXME: remove spent filter in 2.0.0
12936 }).filter(function (unspent) {
12937 return !unspent.spent
12938 }).reduce(function (accum, unspent) {
12939 return accum + unspent.value
12940 }, 0)
12941 }
12942
12943 Wallet.prototype.getChangeAddress = function () {
12944 if (this.changeAddresses.length === 0) {
12945 this.generateChangeAddress()
12946 }
12947
12948 return this.changeAddresses[this.changeAddresses.length - 1]
12949 }
12950
12951 Wallet.prototype.getInternalPrivateKey = function (index) {
12952 return this.getInternalAccount().derive(index).privKey
12953 }
12954
12955 Wallet.prototype.getPrivateKey = function (index) {
12956 return this.getExternalAccount().derive(index).privKey
12957 }
12958
12959 Wallet.prototype.getPrivateKeyForAddress = function (address) {
12960 var index
12961
12962 if ((index = this.addresses.indexOf(address)) > -1) {
12963 return this.getPrivateKey(index)
12964 }
12965
12966 if ((index = this.changeAddresses.indexOf(address)) > -1) {
12967 return this.getInternalPrivateKey(index)
12968 }
12969
12970 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
12971 }
12972
12973 Wallet.prototype.getUnspentOutputs = function (minConf) {
12974 minConf = minConf || 0
12975
12976 return this.unspents.filter(function (unspent) {
12977 return unspent.confirmations >= minConf
12978
12979 // FIXME: remove spent filter in 2.0.0
12980 }).filter(function (unspent) {
12981 return !unspent.spent
12982 }).map(function (unspent) {
12983 return {
12984 address: unspent.address,
12985 confirmations: unspent.confirmations,
12986 index: unspent.index,
12987 txId: unspent.txId,
12988 value: unspent.value,
12989
12990 // FIXME: remove in 2.0.0
12991 hash: unspent.txId,
12992 pending: unspent.pending
12993 }
12994 })
12995 }
12996
12997 Wallet.prototype.setUnspentOutputs = function (unspents) {
12998 this.unspentMap = {}
12999 this.unspents = unspents.map(function (unspent) {
13000 // FIXME: remove unspent.hash in 2.0.0
13001 var txId = unspent.txId || unspent.hash
13002 var index = unspent.index
13003
13004 // FIXME: remove in 2.0.0
13005 if (unspent.hash !== undefined) {
13006 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13007 }
13008
13009 // FIXME: remove in 2.0.0
13010 if (index === undefined) {
13011 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13012 index = unspent.outputIndex
13013 }
13014
13015 typeForce('String', txId)
13016 typeForce('Number', index)
13017 typeForce('Number', unspent.value)
13018
13019 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13020 assert.doesNotThrow(function () {
13021 Address.fromBase58Check(unspent.address)
13022 }, 'Expected Base58 Address, got ' + unspent.address)
13023 assert(isFinite(index), 'Expected finite index, got ' + index)
13024
13025 // FIXME: remove branch in 2.0.0
13026 if (unspent.confirmations !== undefined) {
13027 typeForce('Number', unspent.confirmations)
13028 }
13029
13030 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13031
13032 unspent = {
13033 address: unspent.address,
13034 confirmations: unspent.confirmations || 0,
13035 index: index,
13036 txHash: txHash,
13037 txId: txId,
13038 value: unspent.value,
13039
13040 // FIXME: remove in 2.0.0
13041 pending: unspent.pending || false
13042 }
13043
13044 // FIXME: remove in 2.0.0
13045 this.unspentMap[txId + ':' + index] = unspent
13046
13047 return unspent
13048 }, this)
13049 }
13050
13051 Wallet.prototype.signWith = function (tx, addresses) {
13052 addresses.forEach(function (address, i) {
13053 var privKey = this.getPrivateKeyForAddress(address)
13054
13055 tx.sign(i, privKey)
13056 }, this)
13057
13058 return tx
13059 }
13060
13061 function estimatePaddedFee (tx, network) {
13062 var tmpTx = tx.clone()
13063 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13064
13065 return network.estimateFee(tmpTx)
13066 }
13067
13068 // FIXME: 1.0.0 shims, remove in 2.0.0
13069 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13070 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13071
13072 module.exports = Wallet
13073
13074 }).call(this,require("buffer").Buffer)
13075 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13076 });</script>
13077 <script>bitcoin.networks.shadow = {
13078 magicPrefix: '\x19ShadowCash Signed Message:\n',
13079 bip32: {
13080 public: 0xEE80286A,
13081 private: 0xEE8031E8
13082 },
13083 pubKeyHash: 0x3f,
13084 scriptHash: 0x7d,
13085 wif: 0xbf,
13086 dustThreshold: 0,
13087 feePerKb: 1000,
13088 estimateFee: function() { return "unused in this app" },
13089 };
13090
13091 bitcoin.networks.shadowtn = {
13092 magicPrefix: '\x19ShadowCash Signed Message:\n',
13093 bip32: {
13094 public: 0x76C0FDFB,
13095 private: 0x76C1077A
13096 },
13097 pubKeyHash: 0x7f,
13098 scriptHash: 0xc4,
13099 wif: 0xff,
13100 dustThreshold: 0,
13101 feePerKb: 1000,
13102 estimateFee: function() { return "unused in this app" },
13103 };
13104
13105 bitcoin.networks.clam = {
13106 bip32: {
13107 public: 0xa8c26d64,
13108 private: 0xa8c17826
13109 },
13110 pubKeyHash: 0x89,
13111 wif: 0x85,
13112 };
13113 </script>
13114 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13115
13116 //// base.js
13117
13118 /** @fileOverview Javascript cryptography implementation.
13119 *
13120 * Crush to remove comments, shorten variable names and
13121 * generally reduce transmission size.
13122 *
13123 * @author Emily Stark
13124 * @author Mike Hamburg
13125 * @author Dan Boneh
13126 */
13127
13128 "use strict";
13129 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13130 /*global document, window, escape, unescape, module, require, Uint32Array */
13131
13132 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13133 var sjcl = {
13134 /** @namespace Symmetric ciphers. */
13135 cipher: {},
13136
13137 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13138 hash: {},
13139
13140 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13141 keyexchange: {},
13142
13143 /** @namespace Block cipher modes of operation. */
13144 mode: {},
13145
13146 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13147 misc: {},
13148
13149 /**
13150 * @namespace Bit array encoders and decoders.
13151 *
13152 * @description
13153 * The members of this namespace are functions which translate between
13154 * SJCL's bitArrays and other objects (usually strings). Because it
13155 * isn't always clear which direction is encoding and which is decoding,
13156 * the method names are "fromBits" and "toBits".
13157 */
13158 codec: {},
13159
13160 /** @namespace Exceptions. */
13161 exception: {
13162 /** @constructor Ciphertext is corrupt. */
13163 corrupt: function(message) {
13164 this.toString = function() { return "CORRUPT: "+this.message; };
13165 this.message = message;
13166 },
13167
13168 /** @constructor Invalid parameter. */
13169 invalid: function(message) {
13170 this.toString = function() { return "INVALID: "+this.message; };
13171 this.message = message;
13172 },
13173
13174 /** @constructor Bug or missing feature in SJCL. @constructor */
13175 bug: function(message) {
13176 this.toString = function() { return "BUG: "+this.message; };
13177 this.message = message;
13178 },
13179
13180 /** @constructor Something isn't ready. */
13181 notReady: function(message) {
13182 this.toString = function() { return "NOT READY: "+this.message; };
13183 this.message = message;
13184 }
13185 }
13186 };
13187
13188 if(typeof module !== 'undefined' && module.exports){
13189 module.exports = sjcl;
13190 }
13191 if (typeof define === "function") {
13192 define([], function () {
13193 return sjcl;
13194 });
13195 }
13196
13197
13198 //// bitArray.js
13199
13200 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13201 *
13202 * @author Emily Stark
13203 * @author Mike Hamburg
13204 * @author Dan Boneh
13205 */
13206
13207 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13208 *
13209 * @description
13210 * <p>
13211 * These objects are the currency accepted by SJCL's crypto functions.
13212 * </p>
13213 *
13214 * <p>
13215 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13216 * but many of them can take arguments that are not a multiple of 4 bytes.
13217 * This library encodes arrays of bits (whose size need not be a multiple of 8
13218 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13219 * array of words, 32 bits at a time. Since the words are double-precision
13220 * floating point numbers, they fit some extra data. We use this (in a private,
13221 * possibly-changing manner) to encode the number of bits actually present
13222 * in the last word of the array.
13223 * </p>
13224 *
13225 * <p>
13226 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13227 * to ciphers like AES which want arrays of words.
13228 * </p>
13229 */
13230 sjcl.bitArray = {
13231 /**
13232 * Array slices in units of bits.
13233 * @param {bitArray} a The array to slice.
13234 * @param {Number} bstart The offset to the start of the slice, in bits.
13235 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13236 * slice until the end of the array.
13237 * @return {bitArray} The requested slice.
13238 */
13239 bitSlice: function (a, bstart, bend) {
13240 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13241 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13242 },
13243
13244 /**
13245 * Extract a number packed into a bit array.
13246 * @param {bitArray} a The array to slice.
13247 * @param {Number} bstart The offset to the start of the slice, in bits.
13248 * @param {Number} length The length of the number to extract.
13249 * @return {Number} The requested slice.
13250 */
13251 extract: function(a, bstart, blength) {
13252 // FIXME: this Math.floor is not necessary at all, but for some reason
13253 // seems to suppress a bug in the Chromium JIT.
13254 var x, sh = Math.floor((-bstart-blength) & 31);
13255 if ((bstart + blength - 1 ^ bstart) & -32) {
13256 // it crosses a boundary
13257 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13258 } else {
13259 // within a single word
13260 x = a[bstart/32|0] >>> sh;
13261 }
13262 return x & ((1<<blength) - 1);
13263 },
13264
13265 /**
13266 * Concatenate two bit arrays.
13267 * @param {bitArray} a1 The first array.
13268 * @param {bitArray} a2 The second array.
13269 * @return {bitArray} The concatenation of a1 and a2.
13270 */
13271 concat: function (a1, a2) {
13272 if (a1.length === 0 || a2.length === 0) {
13273 return a1.concat(a2);
13274 }
13275
13276 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13277 if (shift === 32) {
13278 return a1.concat(a2);
13279 } else {
13280 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
13281 }
13282 },
13283
13284 /**
13285 * Find the length of an array of bits.
13286 * @param {bitArray} a The array.
13287 * @return {Number} The length of a, in bits.
13288 */
13289 bitLength: function (a) {
13290 var l = a.length, x;
13291 if (l === 0) { return 0; }
13292 x = a[l - 1];
13293 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13294 },
13295
13296 /**
13297 * Truncate an array.
13298 * @param {bitArray} a The array.
13299 * @param {Number} len The length to truncate to, in bits.
13300 * @return {bitArray} A new array, truncated to len bits.
13301 */
13302 clamp: function (a, len) {
13303 if (a.length * 32 < len) { return a; }
13304 a = a.slice(0, Math.ceil(len / 32));
13305 var l = a.length;
13306 len = len & 31;
13307 if (l > 0 && len) {
13308 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13309 }
13310 return a;
13311 },
13312
13313 /**
13314 * Make a partial word for a bit array.
13315 * @param {Number} len The number of bits in the word.
13316 * @param {Number} x The bits.
13317 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13318 * @return {Number} The partial word.
13319 */
13320 partial: function (len, x, _end) {
13321 if (len === 32) { return x; }
13322 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13323 },
13324
13325 /**
13326 * Get the number of bits used by a partial word.
13327 * @param {Number} x The partial word.
13328 * @return {Number} The number of bits used by the partial word.
13329 */
13330 getPartial: function (x) {
13331 return Math.round(x/0x10000000000) || 32;
13332 },
13333
13334 /**
13335 * Compare two arrays for equality in a predictable amount of time.
13336 * @param {bitArray} a The first array.
13337 * @param {bitArray} b The second array.
13338 * @return {boolean} true if a == b; false otherwise.
13339 */
13340 equal: function (a, b) {
13341 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13342 return false;
13343 }
13344 var x = 0, i;
13345 for (i=0; i<a.length; i++) {
13346 x |= a[i]^b[i];
13347 }
13348 return (x === 0);
13349 },
13350
13351 /** Shift an array right.
13352 * @param {bitArray} a The array to shift.
13353 * @param {Number} shift The number of bits to shift.
13354 * @param {Number} [carry=0] A byte to carry in
13355 * @param {bitArray} [out=[]] An array to prepend to the output.
13356 * @private
13357 */
13358 _shiftRight: function (a, shift, carry, out) {
13359 var i, last2=0, shift2;
13360 if (out === undefined) { out = []; }
13361
13362 for (; shift >= 32; shift -= 32) {
13363 out.push(carry);
13364 carry = 0;
13365 }
13366 if (shift === 0) {
13367 return out.concat(a);
13368 }
13369
13370 for (i=0; i<a.length; i++) {
13371 out.push(carry | a[i]>>>shift);
13372 carry = a[i] << (32-shift);
13373 }
13374 last2 = a.length ? a[a.length-1] : 0;
13375 shift2 = sjcl.bitArray.getPartial(last2);
13376 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13377 return out;
13378 },
13379
13380 /** xor a block of 4 words together.
13381 * @private
13382 */
13383 _xor4: function(x,y) {
13384 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13385 },
13386
13387 /** byteswap a word array inplace.
13388 * (does not handle partial words)
13389 * @param {sjcl.bitArray} a word array
13390 * @return {sjcl.bitArray} byteswapped array
13391 */
13392 byteswapM: function(a) {
13393 var i, v, m = 0xff00;
13394 for (i = 0; i < a.length; ++i) {
13395 v = a[i];
13396 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
13397 }
13398 return a;
13399 }
13400 };
13401
13402
13403 //// codecString.js
13404
13405 /** @fileOverview Bit array codec implementations.
13406 *
13407 * @author Emily Stark
13408 * @author Mike Hamburg
13409 * @author Dan Boneh
13410 */
13411
13412 /** @namespace UTF-8 strings */
13413 sjcl.codec.utf8String = {
13414 /** Convert from a bitArray to a UTF-8 string. */
13415 fromBits: function (arr) {
13416 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13417 for (i=0; i<bl/8; i++) {
13418 if ((i&3) === 0) {
13419 tmp = arr[i/4];
13420 }
13421 out += String.fromCharCode(tmp >>> 24);
13422 tmp <<= 8;
13423 }
13424 return decodeURIComponent(escape(out));
13425 },
13426
13427 /** Convert from a UTF-8 string to a bitArray. */
13428 toBits: function (str) {
13429 str = unescape(encodeURIComponent(str));
13430 var out = [], i, tmp=0;
13431 for (i=0; i<str.length; i++) {
13432 tmp = tmp << 8 | str.charCodeAt(i);
13433 if ((i&3) === 3) {
13434 out.push(tmp);
13435 tmp = 0;
13436 }
13437 }
13438 if (i&3) {
13439 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
13440 }
13441 return out;
13442 }
13443 };
13444
13445
13446 //// codecHex.js
13447
13448 /** @fileOverview Bit array codec implementations.
13449 *
13450 * @author Emily Stark
13451 * @author Mike Hamburg
13452 * @author Dan Boneh
13453 */
13454
13455 /** @namespace Hexadecimal */
13456 sjcl.codec.hex = {
13457 /** Convert from a bitArray to a hex string. */
13458 fromBits: function (arr) {
13459 var out = "", i;
13460 for (i=0; i<arr.length; i++) {
13461 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
13462 }
13463 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13464 },
13465 /** Convert from a hex string to a bitArray. */
13466 toBits: function (str) {
13467 var i, out=[], len;
13468 str = str.replace(/\s|0x/g, "");
13469 len = str.length;
13470 str = str + "00000000";
13471 for (i=0; i<str.length; i+=8) {
13472 out.push(parseInt(str.substr(i,8),16)^0);
13473 }
13474 return sjcl.bitArray.clamp(out, len*4);
13475 }
13476 };
13477
13478
13479 //// sha512.js
13480
13481 /** @fileOverview Javascript SHA-512 implementation.
13482 *
13483 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13484 * SJCL by Stefan Thomas.
13485 *
13486 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13487 * Released with New BSD License
13488 *
13489 * @author Emily Stark
13490 * @author Mike Hamburg
13491 * @author Dan Boneh
13492 * @author Jeff Mott
13493 * @author Stefan Thomas
13494 */
13495
13496 /**
13497 * Context for a SHA-512 operation in progress.
13498 * @constructor
13499 * @class Secure Hash Algorithm, 512 bits.
13500 */
13501 sjcl.hash.sha512 = function (hash) {
13502 if (!this._key[0]) { this._precompute(); }
13503 if (hash) {
13504 this._h = hash._h.slice(0);
13505 this._buffer = hash._buffer.slice(0);
13506 this._length = hash._length;
13507 } else {
13508 this.reset();
13509 }
13510 };
13511
13512 /**
13513 * Hash a string or an array of words.
13514 * @static
13515 * @param {bitArray|String} data the data to hash.
13516 * @return {bitArray} The hash value, an array of 16 big-endian words.
13517 */
13518 sjcl.hash.sha512.hash = function (data) {
13519 return (new sjcl.hash.sha512()).update(data).finalize();
13520 };
13521
13522 sjcl.hash.sha512.prototype = {
13523 /**
13524 * The hash's block size, in bits.
13525 * @constant
13526 */
13527 blockSize: 1024,
13528
13529 /**
13530 * Reset the hash state.
13531 * @return this
13532 */
13533 reset:function () {
13534 this._h = this._init.slice(0);
13535 this._buffer = [];
13536 this._length = 0;
13537 return this;
13538 },
13539
13540 /**
13541 * Input several words to the hash.
13542 * @param {bitArray|String} data the data to hash.
13543 * @return this
13544 */
13545 update: function (data) {
13546 if (typeof data === "string") {
13547 data = sjcl.codec.utf8String.toBits(data);
13548 }
13549 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13550 ol = this._length,
13551 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13552 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13553 this._block(b.splice(0,32));
13554 }
13555 return this;
13556 },
13557
13558 /**
13559 * Complete hashing and output the hash value.
13560 * @return {bitArray} The hash value, an array of 16 big-endian words.
13561 */
13562 finalize:function () {
13563 var i, b = this._buffer, h = this._h;
13564
13565 // Round out and push the buffer
13566 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13567
13568 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13569 for (i = b.length + 4; i & 31; i++) {
13570 b.push(0);
13571 }
13572
13573 // append the length
13574 b.push(0);
13575 b.push(0);
13576 b.push(Math.floor(this._length / 0x100000000));
13577 b.push(this._length | 0);
13578
13579 while (b.length) {
13580 this._block(b.splice(0,32));
13581 }
13582
13583 this.reset();
13584 return h;
13585 },
13586
13587 /**
13588 * The SHA-512 initialization vector, to be precomputed.
13589 * @private
13590 */
13591 _init:[],
13592
13593 /**
13594 * Least significant 24 bits of SHA512 initialization values.
13595 *
13596 * Javascript only has 53 bits of precision, so we compute the 40 most
13597 * significant bits and add the remaining 24 bits as constants.
13598 *
13599 * @private
13600 */
13601 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13602
13603 /*
13604 _init:
13605 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13606 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13607 */
13608
13609 /**
13610 * The SHA-512 hash key, to be precomputed.
13611 * @private
13612 */
13613 _key:[],
13614
13615 /**
13616 * Least significant 24 bits of SHA512 key values.
13617 * @private
13618 */
13619 _keyr:
13620 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13621 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13622 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13623 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13624 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13625 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13626 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13627 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13628 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13629 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13630
13631 /*
13632 _key:
13633 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13634 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13635 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13636 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13637 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13638 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13639 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13640 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13641 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13642 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13643 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13644 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13645 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13646 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13647 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13648 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13649 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13650 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13651 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13652 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13653 */
13654
13655 /**
13656 * Function to precompute _init and _key.
13657 * @private
13658 */
13659 _precompute: function () {
13660 // XXX: This code is for precomputing the SHA256 constants, change for
13661 // SHA512 and re-enable.
13662 var i = 0, prime = 2, factor;
13663
13664 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13665 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13666
13667 outer: for (; i<80; prime++) {
13668 for (factor=2; factor*factor <= prime; factor++) {
13669 if (prime % factor === 0) {
13670 // not a prime
13671 continue outer;
13672 }
13673 }
13674
13675 if (i<8) {
13676 this._init[i*2] = frac(Math.pow(prime, 1/2));
13677 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13678 }
13679 this._key[i*2] = frac(Math.pow(prime, 1/3));
13680 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13681 i++;
13682 }
13683 },
13684
13685 /**
13686 * Perform one cycle of SHA-512.
13687 * @param {bitArray} words one block of words.
13688 * @private
13689 */
13690 _block:function (words) {
13691 var i, wrh, wrl,
13692 w = words.slice(0),
13693 h = this._h,
13694 k = this._key,
13695 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13696 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13697 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13698 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13699
13700 // Working variables
13701 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13702 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13703 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13704 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13705
13706 for (i=0; i<80; i++) {
13707 // load up the input word for this round
13708 if (i<16) {
13709 wrh = w[i * 2];
13710 wrl = w[i * 2 + 1];
13711 } else {
13712 // Gamma0
13713 var gamma0xh = w[(i-15) * 2];
13714 var gamma0xl = w[(i-15) * 2 + 1];
13715 var gamma0h =
13716 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
13717 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
13718 (gamma0xh >>> 7);
13719 var gamma0l =
13720 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
13721 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
13722 ((gamma0xh << 25) | (gamma0xl >>> 7));
13723
13724 // Gamma1
13725 var gamma1xh = w[(i-2) * 2];
13726 var gamma1xl = w[(i-2) * 2 + 1];
13727 var gamma1h =
13728 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
13729 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
13730 (gamma1xh >>> 6);
13731 var gamma1l =
13732 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
13733 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
13734 ((gamma1xh << 26) | (gamma1xl >>> 6));
13735
13736 // Shortcuts
13737 var wr7h = w[(i-7) * 2];
13738 var wr7l = w[(i-7) * 2 + 1];
13739
13740 var wr16h = w[(i-16) * 2];
13741 var wr16l = w[(i-16) * 2 + 1];
13742
13743 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
13744 wrl = gamma0l + wr7l;
13745 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
13746 wrl += gamma1l;
13747 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
13748 wrl += wr16l;
13749 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
13750 }
13751
13752 w[i*2] = wrh |= 0;
13753 w[i*2 + 1] = wrl |= 0;
13754
13755 // Ch
13756 var chh = (eh & fh) ^ (~eh & gh);
13757 var chl = (el & fl) ^ (~el & gl);
13758
13759 // Maj
13760 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13761 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
13762
13763 // Sigma0
13764 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
13765 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
13766
13767 // Sigma1
13768 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
13769 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
13770
13771 // K(round)
13772 var krh = k[i*2];
13773 var krl = k[i*2+1];
13774
13775 // t1 = h + sigma1 + ch + K(round) + W(round)
13776 var t1l = hl + sigma1l;
13777 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
13778 t1l += chl;
13779 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
13780 t1l += krl;
13781 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
13782 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
13783 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
13784
13785 // t2 = sigma0 + maj
13786 var t2l = sigma0l + majl;
13787 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
13788
13789 // Update working variables
13790 hh = gh;
13791 hl = gl;
13792 gh = fh;
13793 gl = fl;
13794 fh = eh;
13795 fl = el;
13796 el = (dl + t1l) | 0;
13797 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13798 dh = ch;
13799 dl = cl;
13800 ch = bh;
13801 cl = bl;
13802 bh = ah;
13803 bl = al;
13804 al = (t1l + t2l) | 0;
13805 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
13806 }
13807
13808 // Intermediate hash
13809 h0l = h[1] = (h0l + al) | 0;
13810 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
13811 h1l = h[3] = (h1l + bl) | 0;
13812 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
13813 h2l = h[5] = (h2l + cl) | 0;
13814 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
13815 h3l = h[7] = (h3l + dl) | 0;
13816 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13817 h4l = h[9] = (h4l + el) | 0;
13818 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
13819 h5l = h[11] = (h5l + fl) | 0;
13820 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
13821 h6l = h[13] = (h6l + gl) | 0;
13822 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
13823 h7l = h[15] = (h7l + hl) | 0;
13824 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
13825 }
13826 };
13827
13828
13829 //// hmac.js
13830
13831 /** @fileOverview HMAC implementation.
13832 *
13833 * @author Emily Stark
13834 * @author Mike Hamburg
13835 * @author Dan Boneh
13836 */
13837
13838 /** HMAC with the specified hash function.
13839 * @constructor
13840 * @param {bitArray} key the key for HMAC.
13841 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
13842 */
13843 sjcl.misc.hmac = function (key, Hash) {
13844 this._hash = Hash = Hash || sjcl.hash.sha256;
13845 var exKey = [[],[]], i,
13846 bs = Hash.prototype.blockSize / 32;
13847 this._baseHash = [new Hash(), new Hash()];
13848
13849 if (key.length > bs) {
13850 key = Hash.hash(key);
13851 }
13852
13853 for (i=0; i<bs; i++) {
13854 exKey[0][i] = key[i]^0x36363636;
13855 exKey[1][i] = key[i]^0x5C5C5C5C;
13856 }
13857
13858 this._baseHash[0].update(exKey[0]);
13859 this._baseHash[1].update(exKey[1]);
13860 this._resultHash = new Hash(this._baseHash[0]);
13861 };
13862
13863 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
13864 * @param {bitArray|String} data The data to mac.
13865 */
13866 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
13867 if (!this._updated) {
13868 this.update(data);
13869 return this.digest(data);
13870 } else {
13871 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
13872 }
13873 };
13874
13875 sjcl.misc.hmac.prototype.reset = function () {
13876 this._resultHash = new this._hash(this._baseHash[0]);
13877 this._updated = false;
13878 };
13879
13880 sjcl.misc.hmac.prototype.update = function (data) {
13881 this._updated = true;
13882 this._resultHash.update(data);
13883 };
13884
13885 sjcl.misc.hmac.prototype.digest = function () {
13886 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
13887
13888 this.reset();
13889
13890 return result;
13891 };
13892
13893
13894 //// pbkdf2.js
13895
13896
13897 /** @fileOverview Password-based key-derivation function, version 2.0.
13898 *
13899 * @author Emily Stark
13900 * @author Mike Hamburg
13901 * @author Dan Boneh
13902 */
13903
13904 /** Password-Based Key-Derivation Function, version 2.0.
13905 *
13906 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
13907 *
13908 * This is the method specified by RSA's PKCS #5 standard.
13909 *
13910 * @param {bitArray|String} password The password.
13911 * @param {bitArray|String} salt The salt. Should have lots of entropy.
13912 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
13913 * @param {Number} [length] The length of the derived key. Defaults to the
13914 output size of the hash function.
13915 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
13916 * @return {bitArray} the derived key.
13917 */
13918 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
13919 count = count || 1000;
13920
13921 if (length < 0 || count < 0) {
13922 throw sjcl.exception.invalid("invalid params to pbkdf2");
13923 }
13924
13925 if (typeof password === "string") {
13926 password = sjcl.codec.utf8String.toBits(password);
13927 }
13928
13929 if (typeof salt === "string") {
13930 salt = sjcl.codec.utf8String.toBits(salt);
13931 }
13932
13933 Prff = Prff || sjcl.misc.hmac;
13934
13935 var prf = new Prff(password),
13936 u, ui, i, j, k, out = [], b = sjcl.bitArray;
13937
13938 for (k = 1; 32 * out.length < (length || 1); k++) {
13939 u = ui = prf.encrypt(b.concat(salt,[k]));
13940
13941 for (i=1; i<count; i++) {
13942 ui = prf.encrypt(ui);
13943 for (j=0; j<ui.length; j++) {
13944 u[j] ^= ui[j];
13945 }
13946 }
13947
13948 out = out.concat(u);
13949 }
13950
13951 if (length) { out = b.clamp(out, length); }
13952
13953 return out;
13954 };
13955
13956
13957 //// sha256.js
13958
13959 /** @fileOverview Javascript SHA-256 implementation.
13960 *
13961 * An older version of this implementation is available in the public
13962 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
13963 * Stanford University 2008-2010 and BSD-licensed for liability
13964 * reasons.
13965 *
13966 * Special thanks to Aldo Cortesi for pointing out several bugs in
13967 * this code.
13968 *
13969 * @author Emily Stark
13970 * @author Mike Hamburg
13971 * @author Dan Boneh
13972 */
13973
13974 /**
13975 * Context for a SHA-256 operation in progress.
13976 * @constructor
13977 * @class Secure Hash Algorithm, 256 bits.
13978 */
13979 sjcl.hash.sha256 = function (hash) {
13980 if (!this._key[0]) { this._precompute(); }
13981 if (hash) {
13982 this._h = hash._h.slice(0);
13983 this._buffer = hash._buffer.slice(0);
13984 this._length = hash._length;
13985 } else {
13986 this.reset();
13987 }
13988 };
13989
13990 /**
13991 * Hash a string or an array of words.
13992 * @static
13993 * @param {bitArray|String} data the data to hash.
13994 * @return {bitArray} The hash value, an array of 16 big-endian words.
13995 */
13996 sjcl.hash.sha256.hash = function (data) {
13997 return (new sjcl.hash.sha256()).update(data).finalize();
13998 };
13999
14000 sjcl.hash.sha256.prototype = {
14001 /**
14002 * The hash's block size, in bits.
14003 * @constant
14004 */
14005 blockSize: 512,
14006
14007 /**
14008 * Reset the hash state.
14009 * @return this
14010 */
14011 reset:function () {
14012 this._h = this._init.slice(0);
14013 this._buffer = [];
14014 this._length = 0;
14015 return this;
14016 },
14017
14018 /**
14019 * Input several words to the hash.
14020 * @param {bitArray|String} data the data to hash.
14021 * @return this
14022 */
14023 update: function (data) {
14024 if (typeof data === "string") {
14025 data = sjcl.codec.utf8String.toBits(data);
14026 }
14027 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14028 ol = this._length,
14029 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14030 for (i = 512+ol & -512; i <= nl; i+= 512) {
14031 this._block(b.splice(0,16));
14032 }
14033 return this;
14034 },
14035
14036 /**
14037 * Complete hashing and output the hash value.
14038 * @return {bitArray} The hash value, an array of 8 big-endian words.
14039 */
14040 finalize:function () {
14041 var i, b = this._buffer, h = this._h;
14042
14043 // Round out and push the buffer
14044 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14045
14046 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14047 for (i = b.length + 2; i & 15; i++) {
14048 b.push(0);
14049 }
14050
14051 // append the length
14052 b.push(Math.floor(this._length / 0x100000000));
14053 b.push(this._length | 0);
14054
14055 while (b.length) {
14056 this._block(b.splice(0,16));
14057 }
14058
14059 this.reset();
14060 return h;
14061 },
14062
14063 /**
14064 * The SHA-256 initialization vector, to be precomputed.
14065 * @private
14066 */
14067 _init:[],
14068 /*
14069 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14070 */
14071
14072 /**
14073 * The SHA-256 hash key, to be precomputed.
14074 * @private
14075 */
14076 _key:[],
14077 /*
14078 _key:
14079 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14080 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14081 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14082 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14083 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14084 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14085 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14086 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14087 */
14088
14089
14090 /**
14091 * Function to precompute _init and _key.
14092 * @private
14093 */
14094 _precompute: function () {
14095 var i = 0, prime = 2, factor;
14096
14097 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14098
14099 outer: for (; i<64; prime++) {
14100 for (factor=2; factor*factor <= prime; factor++) {
14101 if (prime % factor === 0) {
14102 // not a prime
14103 continue outer;
14104 }
14105 }
14106
14107 if (i<8) {
14108 this._init[i] = frac(Math.pow(prime, 1/2));
14109 }
14110 this._key[i] = frac(Math.pow(prime, 1/3));
14111 i++;
14112 }
14113 },
14114
14115 /**
14116 * Perform one cycle of SHA-256.
14117 * @param {bitArray} words one block of words.
14118 * @private
14119 */
14120 _block:function (words) {
14121 var i, tmp, a, b,
14122 w = words.slice(0),
14123 h = this._h,
14124 k = this._key,
14125 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14126 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14127
14128 /* Rationale for placement of |0 :
14129 * If a value can overflow is original 32 bits by a factor of more than a few
14130 * million (2^23 ish), there is a possibility that it might overflow the
14131 * 53-bit mantissa and lose precision.
14132 *
14133 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14134 * propagates around the loop, and on the hash state h[]. I don't believe
14135 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14136 * (for h4 anyway), and better safe than sorry.
14137 *
14138 * The clamps on h[] are necessary for the output to be correct even in the
14139 * common case and for short inputs.
14140 */
14141 for (i=0; i<64; i++) {
14142 // load up the input word for this round
14143 if (i<16) {
14144 tmp = w[i];
14145 } else {
14146 a = w[(i+1 ) & 15];
14147 b = w[(i+14) & 15];
14148 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14149 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14150 w[i&15] + w[(i+9) & 15]) | 0;
14151 }
14152
14153 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14154
14155 // shift register
14156 h7 = h6; h6 = h5; h5 = h4;
14157 h4 = h3 + tmp | 0;
14158 h3 = h2; h2 = h1; h1 = h0;
14159
14160 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14161 }
14162
14163 h[0] = h[0]+h0 | 0;
14164 h[1] = h[1]+h1 | 0;
14165 h[2] = h[2]+h2 | 0;
14166 h[3] = h[3]+h3 | 0;
14167 h[4] = h[4]+h4 | 0;
14168 h[5] = h[5]+h5 | 0;
14169 h[6] = h[6]+h6 | 0;
14170 h[7] = h[7]+h7 | 0;
14171 }
14172 };
14173 </script>
14174 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14175 WORDLISTS["english"] = [
14176 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14177 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14178 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14179 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14180 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14181 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14182 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14183 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14184 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14185 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14186 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14187 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14188 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14189 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14190 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14191 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14192 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14193 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14194 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14195 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14196 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14197 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14198 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14199 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14200 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14201 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14202 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14203 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14204 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14205 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14206 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14207 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14208 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14209 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14210 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14211 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14212 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14213 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14214 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14215 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14216 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14217 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14218 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14219 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14220 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14221 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14222 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14223 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14224 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14225 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14226 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14227 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14228 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14229 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14230 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14231 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14232 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14233 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14234 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14235 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14236 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14237 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14238 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14239 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14240 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14241 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14242 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14243 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14244 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14245 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14246 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14247 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14248 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14249 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14250 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14251 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14252 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14253 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14254 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14255 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14256 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14257 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14258 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14259 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14260 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14261 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14262 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14263 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14264 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14265 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14266 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14267 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14268 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14269 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14270 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14271 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14272 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14273 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14274 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14275 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14276 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14277 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14278 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14279 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14280 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14281 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14282 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14283 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14284 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14285 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14286 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14287 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14288 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14289 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14290 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14291 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14292 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14293 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14294 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14295 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14296 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14297 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14298 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14299 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14300 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14301 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14302 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14303 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14304 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14305 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14306 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14307 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14308 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14309 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14310 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14311 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14312 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14313 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14314 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14315 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14316 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14317 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14318 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14319 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14320 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14321 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14322 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14323 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14324 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14325 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14326 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14327 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14328 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14329 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14330 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14331 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14332 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14333 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14334 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14335 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14336 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14337 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14338 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14339 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14340 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14341 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14342 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14343 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14344 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14345 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14346 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14347 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14348 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14349 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14350 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14351 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14352 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14353 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14354 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14355 "thank","that","theme","then","theory","there","they","thing","this","thought",
14356 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14357 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14358 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14359 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14360 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14361 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14362 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14363 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14364 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14365 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14366 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14367 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14368 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14369 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14370 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14371 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14372 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14373 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14374 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14375 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14376 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14377 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14378 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14379 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14380 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14381 </script>
14382 <script>/*
14383 * Copyright (c) 2013 Pavol Rusnak
14384 *
14385 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14386 * this software and associated documentation files (the "Software"), to deal in
14387 * the Software without restriction, including without limitation the rights to
14388 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14389 * of the Software, and to permit persons to whom the Software is furnished to do
14390 * so, subject to the following conditions:
14391 *
14392 * The above copyright notice and this permission notice shall be included in all
14393 * copies or substantial portions of the Software.
14394 *
14395 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14396 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14397 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14398 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14399 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14400 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14401 */
14402
14403 /*
14404 * Javascript port from python by Ian Coleman
14405 *
14406 * Requires code from sjcl
14407 * https://github.com/bitwiseshiftleft/sjcl
14408 */
14409
14410 var Mnemonic = function(language) {
14411
14412 var PBKDF2_ROUNDS = 2048;
14413 var RADIX = 2048;
14414
14415 var self = this;
14416 var wordlist = [];
14417
14418 var hmacSHA512 = function(key) {
14419 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14420 this.encrypt = function() {
14421 return hasher.encrypt.apply(hasher, arguments);
14422 };
14423 };
14424
14425 function init() {
14426 wordlist = WORDLISTS[language];
14427 if (wordlist.length != RADIX) {
14428 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14429 throw err;
14430 }
14431 }
14432
14433 self.generate = function(strength) {
14434 strength = strength || 128;
14435 var r = strength % 32;
14436 if (r > 0) {
14437 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14438 }
14439 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14440 if (!hasStrongCrypto) {
14441 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14442 }
14443 var buffer = new Uint8Array(strength / 8);
14444 var data = crypto.getRandomValues(buffer);
14445 return self.toMnemonic(data);
14446 }
14447
14448 self.toMnemonic = function(byteArray) {
14449 if (byteArray.length % 4 > 0) {
14450 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
14451 }
14452
14453 //h = hashlib.sha256(data).hexdigest()
14454 var data = byteArrayToWordArray(byteArray);
14455 var hash = sjcl.hash.sha256.hash(data);
14456 var h = sjcl.codec.hex.fromBits(hash);
14457
14458 // b is a binary string, eg '00111010101100...'
14459 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14460 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14461 //
14462 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14463 // c = bin(int(h, 16))[2:].zfill(256)
14464 // d = c[:len(data) * 8 / 32]
14465 var a = byteArrayToBinaryString(byteArray);
14466 var c = zfill(hexStringToBinaryString(h), 256);
14467 var d = c.substring(0, byteArray.length * 8 / 32);
14468 // b = line1 + line2
14469 var b = a + d;
14470
14471 var result = [];
14472 var blen = b.length / 11;
14473 for (var i=0; i<blen; i++) {
14474 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14475 result.push(wordlist[idx]);
14476 }
14477 return result.join(' ');
14478 }
14479
14480 self.check = function(mnemonic) {
14481 var mnemonic = mnemonic.split(' ')
14482 if (mnemonic.length % 3 > 0) {
14483 return false
14484 }
14485 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14486 var idx = [];
14487 for (var i=0; i<mnemonic.length; i++) {
14488 var word = mnemonic[i];
14489 var wordIndex = wordlist.indexOf(word);
14490 if (wordIndex == -1) {
14491 return false;
14492 }
14493 var binaryIndex = zfill(wordIndex.toString(2), 11);
14494 idx.push(binaryIndex);
14495 }
14496 var b = idx.join('');
14497 var l = b.length;
14498 //d = b[:l / 33 * 32]
14499 //h = b[-l / 33:]
14500 var d = b.substring(0, l / 33 * 32);
14501 var h = b.substring(l - l / 33, l);
14502 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
14503 var nd = binaryStringToWordArray(d);
14504 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
14505 var ndHash = sjcl.hash.sha256.hash(nd);
14506 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14507 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
14508 var nh = ndBstr.substring(0,l/33);
14509 return h == nh;
14510 }
14511
14512 self.toSeed = function(mnemonic, passphrase) {
14513 passphrase = passphrase || '';
14514 mnemonic = self.normalizeString(mnemonic)
14515 passphrase = self.normalizeString(passphrase)
14516 passphrase = "mnemonic" + passphrase;
14517 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14518 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14519 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14520 var hashHex = sjcl.codec.hex.fromBits(result);
14521 return hashHex;
14522 }
14523
14524 self.normalizeString = function(str) {
14525 if (typeof str.normalize == "function") {
14526 return str.normalize("NFKD");
14527 }
14528 else {
14529 // TODO decide how to handle this in the future.
14530 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14531 return str;
14532 }
14533 }
14534
14535 function byteArrayToWordArray(data) {
14536 var a = [];
14537 for (var i=0; i<data.length/4; i++) {
14538 v = 0;
14539 v += data[i*4 + 0] << 8 * 3;
14540 v += data[i*4 + 1] << 8 * 2;
14541 v += data[i*4 + 2] << 8 * 1;
14542 v += data[i*4 + 3] << 8 * 0;
14543 a.push(v);
14544 }
14545 return a;
14546 }
14547
14548 function byteArrayToBinaryString(data) {
14549 var bin = "";
14550 for (var i=0; i<data.length; i++) {
14551 bin += zfill(data[i].toString(2), 8);
14552 }
14553 return bin;
14554 }
14555
14556 function hexStringToBinaryString(hexString) {
14557 binaryString = "";
14558 for (var i=0; i<hexString.length; i++) {
14559 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14560 }
14561 return binaryString;
14562 }
14563
14564 function binaryStringToWordArray(binary) {
14565 var aLen = binary.length / 32;
14566 var a = [];
14567 for (var i=0; i<aLen; i++) {
14568 var valueStr = binary.substring(0,32);
14569 var value = parseInt(valueStr, 2);
14570 a.push(value);
14571 binary = binary.slice(32);
14572 }
14573 return a;
14574 }
14575
14576 // Pad a numeric string on the left with zero digits until the given width
14577 // is reached.
14578 // Note this differs to the python implementation because it does not
14579 // handle numbers starting with a sign.
14580 function zfill(source, length) {
14581 source = source.toString();
14582 while (source.length < length) {
14583 source = '0' + source;
14584 }
14585 return source;
14586 }
14587
14588 init();
14589
14590 }
14591 </script>
14592 <script>(function() {
14593
14594 var mnemonic = new Mnemonic("english");
14595 var bip32RootKey = null;
14596 var bip32ExtendedKey = null;
14597 var network = bitcoin.networks.bitcoin;
14598 var addressRowTemplate = $("#address-row-template");
14599
14600 var showIndex = true;
14601 var showAddress = true;
14602 var showPrivKey = true;
14603
14604 var phraseChangeTimeoutEvent = null;
14605
14606 var DOM = {};
14607 DOM.network = $(".network");
14608 DOM.phraseNetwork = $("#network-phrase");
14609 DOM.phrase = $(".phrase");
14610 DOM.passphrase = $(".passphrase");
14611 DOM.generate = $(".generate");
14612 DOM.rootKey = $(".root-key");
14613 DOM.extendedPrivKey = $(".extended-priv-key");
14614 DOM.extendedPubKey = $(".extended-pub-key");
14615 DOM.bip32tab = $("#bip32-tab");
14616 DOM.bip44tab = $("#bip44-tab");
14617 DOM.bip32panel = $("#bip32");
14618 DOM.bip44panel = $("#bip44");
14619 DOM.bip32path = $("#bip32-path");
14620 DOM.bip44path = $("#bip44-path");
14621 DOM.bip44purpose = $("#bip44 .purpose");
14622 DOM.bip44coin = $("#bip44 .coin");
14623 DOM.bip44account = $("#bip44 .account");
14624 DOM.bip44change = $("#bip44 .change");
14625 DOM.strength = $(".strength");
14626 DOM.addresses = $(".addresses");
14627 DOM.rowsToAdd = $(".rows-to-add");
14628 DOM.more = $(".more");
14629 DOM.feedback = $(".feedback");
14630 DOM.tab = $(".derivation-type a");
14631 DOM.indexToggle = $(".index-toggle");
14632 DOM.addressToggle = $(".address-toggle");
14633 DOM.privateKeyToggle = $(".private-key-toggle");
14634
14635 var derivationPath = $(".tab-pane.active .path").val();
14636
14637 function init() {
14638 // Events
14639 DOM.network.on("change", networkChanged);
14640 DOM.phrase.on("input", delayedPhraseChanged);
14641 DOM.passphrase.on("input", delayedPhraseChanged);
14642 DOM.generate.on("click", generateClicked);
14643 DOM.more.on("click", showMore);
14644 DOM.bip32path.on("input", bip32Changed);
14645 DOM.bip44purpose.on("input", bip44Changed);
14646 DOM.bip44coin.on("input", bip44Changed);
14647 DOM.bip44account.on("input", bip44Changed);
14648 DOM.bip44change.on("input", bip44Changed);
14649 DOM.tab.on("click", tabClicked);
14650 DOM.indexToggle.on("click", toggleIndexes);
14651 DOM.addressToggle.on("click", toggleAddresses);
14652 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14653 disableForms();
14654 hidePending();
14655 hideValidationError();
14656 populateNetworkSelect();
14657 }
14658
14659 // Event handlers
14660
14661 function networkChanged(e) {
14662 var network = e.target.value;
14663 networks[network].onSelect();
14664 setBip44DerivationPath();
14665 delayedPhraseChanged();
14666 }
14667
14668 function delayedPhraseChanged() {
14669 hideValidationError();
14670 showPending();
14671 if (phraseChangeTimeoutEvent != null) {
14672 clearTimeout(phraseChangeTimeoutEvent);
14673 }
14674 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14675 }
14676
14677 function phraseChanged() {
14678 showPending();
14679 hideValidationError();
14680 // Get the mnemonic phrase
14681 var phrase = DOM.phrase.val();
14682 var passphrase = DOM.passphrase.val();
14683 var errorText = findPhraseErrors(phrase);
14684 if (errorText) {
14685 showValidationError(errorText);
14686 return;
14687 }
14688 // Get the derivation path
14689 var errorText = findDerivationPathErrors();
14690 if (errorText) {
14691 showValidationError(errorText);
14692 return;
14693 }
14694 // Calculate and display
14695 calcBip32Seed(phrase, passphrase, derivationPath);
14696 displayBip32Info();
14697 hidePending();
14698 }
14699
14700 function generateClicked() {
14701 clearDisplay();
14702 showPending();
14703 setTimeout(function() {
14704 var phrase = generateRandomPhrase();
14705 if (!phrase) {
14706 return;
14707 }
14708 phraseChanged();
14709 }, 50);
14710 }
14711
14712 function tabClicked(e) {
14713 var activePath = $(e.target.getAttribute("href") + " .path");
14714 derivationPath = activePath.val();
14715 derivationChanged();
14716 }
14717
14718 function derivationChanged() {
14719 delayedPhraseChanged();
14720 }
14721
14722 function bip32Changed() {
14723 derivationPath = DOM.bip32path.val();
14724 derivationChanged();
14725 }
14726
14727 function bip44Changed() {
14728 setBip44DerivationPath();
14729 derivationPath = DOM.bip44path.val();
14730 derivationChanged();
14731 }
14732
14733 function toggleIndexes() {
14734 showIndex = !showIndex;
14735 $("td.index span").toggleClass("invisible");
14736 }
14737
14738 function toggleAddresses() {
14739 showAddress = !showAddress;
14740 $("td.address span").toggleClass("invisible");
14741 }
14742
14743 function togglePrivateKeys() {
14744 showPrivKey = !showPrivKey;
14745 $("td.privkey span").toggleClass("invisible");
14746 }
14747
14748 // Private methods
14749
14750 function generateRandomPhrase() {
14751 if (!hasStrongRandom()) {
14752 var errorText = "This browser does not support strong randomness";
14753 showValidationError(errorText);
14754 return;
14755 }
14756 var numWords = parseInt(DOM.strength.val());
14757 // Check strength is an integer
14758 if (isNaN(numWords)) {
14759 DOM.strength.val("12");
14760 numWords = 12;
14761 }
14762 // Check strength is a multiple of 32, if not round it down
14763 if (numWords % 3 != 0) {
14764 numWords = Math.floor(numWords / 3) * 3;
14765 DOM.strength.val(numWords);
14766 }
14767 // Check strength is at least 32
14768 if (numWords == 0) {
14769 numWords = 3;
14770 DOM.strength.val(numWords);
14771 }
14772 var strength = numWords / 3 * 32;
14773 var words = mnemonic.generate(strength);
14774 DOM.phrase.val(words);
14775 return words;
14776 }
14777
14778 function calcBip32Seed(phrase, passphrase, path) {
14779 var seed = mnemonic.toSeed(phrase, passphrase);
14780 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
14781 bip32ExtendedKey = bip32RootKey;
14782 // Derive the key from the path
14783 var pathBits = path.split("/");
14784 for (var i=0; i<pathBits.length; i++) {
14785 var bit = pathBits[i];
14786 var index = parseInt(bit);
14787 if (isNaN(index)) {
14788 continue;
14789 }
14790 var hardened = bit[bit.length-1] == "'";
14791 if (hardened) {
14792 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
14793 }
14794 else {
14795 bip32ExtendedKey = bip32ExtendedKey.derive(index);
14796 }
14797 }
14798 }
14799
14800 function showValidationError(errorText) {
14801 DOM.feedback
14802 .text(errorText)
14803 .show();
14804 }
14805
14806 function hideValidationError() {
14807 DOM.feedback
14808 .text("")
14809 .hide();
14810 }
14811
14812 function findPhraseErrors(phrase) {
14813 // TODO make this right
14814 // Preprocess the words
14815 phrase = mnemonic.normalizeString(phrase);
14816 var parts = phrase.split(" ");
14817 var proper = [];
14818 for (var i=0; i<parts.length; i++) {
14819 var part = parts[i];
14820 if (part.length > 0) {
14821 // TODO check that lowercasing is always valid to do
14822 proper.push(part.toLowerCase());
14823 }
14824 }
14825 // TODO some levenstein on the words
14826 var properPhrase = proper.join(' ');
14827 // Check the words are valid
14828 var isValid = mnemonic.check(properPhrase);
14829 if (!isValid) {
14830 return "Invalid mnemonic";
14831 }
14832 return false;
14833 }
14834
14835 function findDerivationPathErrors(path) {
14836 // TODO
14837 return false;
14838 }
14839
14840 function displayBip32Info() {
14841 // Display the key
14842 var rootKey = bip32RootKey.toBase58();
14843 DOM.rootKey.val(rootKey);
14844 var extendedPrivKey = bip32ExtendedKey.toBase58();
14845 DOM.extendedPrivKey.val(extendedPrivKey);
14846 var extendedPubKey = bip32ExtendedKey.toBase58(false);
14847 DOM.extendedPubKey.val(extendedPubKey);
14848 // Display the addresses and privkeys
14849 clearAddressesList();
14850 displayAddresses(0, 20);
14851 }
14852
14853 function displayAddresses(start, total) {
14854 for (var i=0; i<total; i++) {
14855 var index = i + start;
14856 new TableRow(index);
14857 }
14858 }
14859
14860 function TableRow(index) {
14861
14862 function init() {
14863 calculateValues();
14864 }
14865
14866 function calculateValues() {
14867 setTimeout(function() {
14868 var key = bip32ExtendedKey.derive(index);
14869 var address = key.getAddress().toString();
14870 var privkey = key.privKey.toWIF(network);
14871 addAddressToList(index, address, privkey);
14872 }, 50)
14873 }
14874
14875 init();
14876
14877 }
14878
14879 function showMore() {
14880 var start = DOM.addresses.children().length;
14881 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
14882 if (isNaN(rowsToAdd)) {
14883 rowsToAdd = 20;
14884 DOM.rowsToAdd.val("20");
14885 }
14886 if (rowsToAdd > 200) {
14887 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
14888 msg += "Do you want to continue?";
14889 if (!confirm(msg)) {
14890 return;
14891 }
14892 }
14893 displayAddresses(start, rowsToAdd);
14894 }
14895
14896 function clearDisplay() {
14897 clearAddressesList();
14898 clearKey();
14899 hideValidationError();
14900 }
14901
14902 function clearAddressesList() {
14903 DOM.addresses.empty();
14904 }
14905
14906 function clearKey() {
14907 DOM.rootKey.val("");
14908 DOM.extendedPrivKey.val("");
14909 DOM.extendedPubKey.val("");
14910 }
14911
14912 function addAddressToList(index, address, privkey) {
14913 var row = $(addressRowTemplate.html());
14914 // Elements
14915 var indexCell = row.find(".index span");
14916 var addressCell = row.find(".address span");
14917 var privkeyCell = row.find(".privkey span");
14918 // Content
14919 var indexText = derivationPath + "/" + index;
14920 indexCell.text(indexText);
14921 addressCell.text(address);
14922 privkeyCell.text(privkey);
14923 // Visibility
14924 if (!showIndex) {
14925 indexCell.addClass("invisible");
14926 }
14927 if (!showAddress) {
14928 addressCell.addClass("invisible");
14929 }
14930 if (!showPrivKey) {
14931 privkeCell.addClass("invisible");
14932 }
14933 DOM.addresses.append(row);
14934 }
14935
14936 function hasStrongRandom() {
14937 return 'crypto' in window && window['crypto'] !== null;
14938 }
14939
14940 function disableForms() {
14941 $("form").on("submit", function(e) {
14942 e.preventDefault();
14943 });
14944 }
14945
14946 function setBip44DerivationPath() {
14947 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
14948 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
14949 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
14950 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
14951 var path = "m/";
14952 path += purpose + "'/";
14953 path += coin + "'/";
14954 path += account + "'/";
14955 path += change;
14956 DOM.bip44path.val(path);
14957 }
14958
14959 function parseIntNoNaN(val, defaultVal) {
14960 var v = parseInt(val);
14961 if (isNaN(v)) {
14962 return defaultVal;
14963 }
14964 return v;
14965 }
14966
14967 function showPending() {
14968 DOM.feedback
14969 .text("Calculating...")
14970 .show();
14971 }
14972
14973 function hidePending() {
14974 DOM.feedback
14975 .text("")
14976 .hide();
14977 }
14978
14979 function populateNetworkSelect() {
14980 for (var i=0; i<networks.length; i++) {
14981 var network = networks[i];
14982 var option = $("<option>");
14983 option.attr("value", i);
14984 option.text(network.name);
14985 DOM.phraseNetwork.append(option);
14986 }
14987 }
14988
14989 var networks = [
14990 {
14991 name: "Bitcoin",
14992 onSelect: function() {
14993 network = bitcoin.networks.bitcoin;
14994 DOM.bip44coin.val(0);
14995 },
14996 },
14997 {
14998 name: "Bitcoin Testnet",
14999 onSelect: function() {
15000 network = bitcoin.networks.testnet;
15001 DOM.bip44coin.val(1);
15002 },
15003 },
15004 {
15005 name: "Litecoin",
15006 onSelect: function() {
15007 network = bitcoin.networks.litecoin;
15008 DOM.bip44coin.val(2);
15009 },
15010 },
15011 {
15012 name: "Dogecoin",
15013 onSelect: function() {
15014 network = bitcoin.networks.dogecoin;
15015 DOM.bip44coin.val(3);
15016 },
15017 },
15018 {
15019 name: "ShadowCash",
15020 onSelect: function() {
15021 network = bitcoin.networks.shadow;
15022 DOM.bip44coin.val(35);
15023 },
15024 },
15025 {
15026 name: "ShadowCash Testnet",
15027 onSelect: function() {
15028 network = bitcoin.networks.shadowtn;
15029 DOM.bip44coin.val(1);
15030 },
15031 },
15032 {
15033 name: "Viacoin",
15034 onSelect: function() {
15035 network = bitcoin.networks.viacoin;
15036 DOM.bip44coin.val(14);
15037 },
15038 },
15039 {
15040 name: "Viacoin Testnet",
15041 onSelect: function() {
15042 network = bitcoin.networks.viacointestnet;
15043 DOM.bip44coin.val(1);
15044 },
15045 },
15046 {
15047 name: "Jumbucks",
15048 onSelect: function() {
15049 network = bitcoin.networks.jumbucks;
15050 DOM.bip44coin.val(26);
15051 },
15052 },
15053 {
15054 name: "CLAM",
15055 onSelect: function() {
15056 network = bitcoin.networks.clam;
15057 DOM.bip44coin.val(23);
15058 },
15059 },
15060 ]
15061
15062 init();
15063
15064 })();
15065 </script>
15066 </body>
15067 </html>