]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Entropy can be supplied by user
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
CommitLineData
ebd8d4e8
IC
1<!DOCTYPE html>
2<html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
ab78acc6 6 <style>/*!
ebd8d4e8
IC
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)
ab78acc6
IC
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" />
b630f83d 14 <meta content="Ian Coleman" name="author" />
3af2954a 15
ab78acc6
IC
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 }
d5dc92fd
IC
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 }
0515eeec
IC
47 .phrase {
48 word-break: keep-all;
49 }
b0818b31
IC
50 .strength {
51 /* override mobile width from bootstrap */
52 width: auto!important;
53 display: inline-block;
54 }
0515eeec
IC
55 .languages * {
56 padding-left: 10px;
57 }
d737abf6
IC
58 .monospace {
59 font-family: monospace;
60 }
ab78acc6
IC
61 </style>
62 </head>
63 <body>
64 <div class="container">
3af2954a 65
ab78acc6
IC
66 <h1 class="text-center">Mnemonic Code Converter</h1>
67 <hr>
68 <div class="row">
69 <div class="col-md-12">
70 <h2>Mnemonic</h2>
71 <form class="form-horizontal" role="form">
ab78acc6 72 <div class="form-group">
c6624d51
IC
73 <div class="col-sm-2"></div>
74 <div class="col-sm-10">
75 <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>
76 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
77 </div>
78 </div>
79 <div class="form-group generate-container">
b0818b31 80 <label class="col-sm-2 control-label"></label>
ab78acc6 81 <div class="col-sm-10">
b0818b31
IC
82 <div class="form-inline">
83 <div class="input-group-inline">
84 <button class="btn generate">Generate</button>
85 <span>a random</span>
86 <select id="strength" class="strength form-control">
87 <option value="3">3</option>
88 <option value="6">6</option>
89 <option value="9">9</option>
90 <option value="12">12</option>
91 <option value="15" selected>15</option>
92 <option value="18">18</option>
93 <option value="21">21</option>
94 <option value="24">24</option>
95 </select>
96 word mnemonic, or enter your own below.
97 </div>
98 </div>
ab78acc6 99 </div>
0515eeec 100 </div>
c6624d51
IC
101 <div class="entropy-container hidden">
102 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
103 <div class="col-sm-10">
104 <input id="entropy" class="entropy form-control" placeholder="Accepts binary, base 6, 6-sided dice, base 10, hexadecimal">
105 <span class="help-block">
106 <div class="text-danger">
107 This is an advanced feature.
108 Your mnemonic may be insecure if this feature is used incorrectly.
109 <a href="#entropy-notes">Read more</a>
110 </div>
111 <div class="text-danger entropy-error"></div>
112 </span>
113 </div>
114 </div>
115 <div class="form-group">
116 <div class="col-sm-2"></div>
117 <div class="col-sm-10 checkbox">
118 <label>
119 <input type="checkbox" class="use-entropy">
120 Supply my own source of entropy
121 </label>
122 </div>
123 </div>
124 <div class="form-group">
0515eeec
IC
125 <label class="col-sm-2 control-label"></label>
126 <div class="col-sm-10 languages">
127 <a href="#english">English</a>
128 <a href="#japanese" title="Japanese">日本語</a>
0515eeec
IC
129 <a href="#spanish" title="Spanish">Español</a>
130 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
131 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
132 <a href="#french" title="French">Français</a>
133 <a href="#italian" title="Italian">Italiano</a>
134 </div>
ab78acc6
IC
135 </div>
136 <div class="form-group">
b0818b31 137 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
ab78acc6 138 <div class="col-sm-10">
b0818b31 139 <textarea id="phrase" class="phrase form-control"></textarea>
ab78acc6
IC
140 </div>
141 </div>
142 <div class="form-group">
143 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
144 <div class="col-sm-10">
145 <textarea id="passphrase" class="passphrase form-control"></textarea>
146 </div>
147 </div>
73161a92
IC
148 <div class="form-group">
149 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
150 <div class="col-sm-10">
151 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
152 </div>
153 </div>
ab78acc6
IC
154 <div class="form-group">
155 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
156 <div class="col-sm-10">
157 <select id="network-phrase" class="network form-control">
158 <!-- populated by javascript -->
159 </select>
160 </div>
161 </div>
162 <div class="form-group">
163 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
164 <div class="col-sm-10">
efe41586 165 <textarea id="root-key" class="root-key form-control"></textarea>
ab78acc6
IC
166 </div>
167 </div>
168 </form>
169 </div>
170 </div>
3af2954a 171
ab78acc6 172 <hr>
3af2954a 173
ab78acc6
IC
174 <div class="row">
175 <div class="col-md-12">
176 <h2>Derivation Path</h2>
177 <ul class="derivation-type nav nav-tabs" role="tablist">
d5dc92fd 178 <li id="bip44-tab" class="active">
ab78acc6
IC
179 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
180 </li>
181 <li id="bip32-tab">
182 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
183 </li>
184 </ul>
185 <div class="derivation-type tab-content">
d5dc92fd 186 <div id="bip44" class="tab-pane active">
ab78acc6
IC
187 <form class="form-horizontal" role="form">
188 <br>
189 <div class="col-sm-2"></div>
190 <div class="col-sm-10">
191 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
192 </div>
193 <div class="form-group">
194 <label for="purpose" class="col-sm-2 control-label">
195 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
196 </label>
197 <div class="col-sm-10">
198 <input id="purpose" type="text" class="purpose form-control" value="44">
199 </div>
200 </div>
201 <div class="form-group">
202 <label for="coin" class="col-sm-2 control-label">
203 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
204 </label>
205 <div class="col-sm-10">
206 <input id="coin" type="text" class="coin form-control" value="0">
207 </div>
208 </div>
209 <div class="form-group">
210 <label for="account" class="col-sm-2 control-label">
211 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
212 </label>
213 <div class="col-sm-10">
214 <input id="account" type="text" class="account form-control" value="0">
215 </div>
216 </div>
217 <div class="form-group">
218 <label for="change" class="col-sm-2 control-label">
219 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
220 </label>
221 <div class="col-sm-10">
222 <input id="change" type="text" class="change form-control" value="0">
223 </div>
224 </div>
225 <div class="form-group">
226 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
227 <div class="col-sm-10">
228 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
229 </div>
230 </div>
231 </form>
232 </div>
233 <div id="bip32" class="tab-pane">
234 <form class="form-horizontal" role="form">
235 <br>
236 <div class="col-sm-2"></div>
237 <div class="col-sm-10">
238 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
239 </div>
240 <div class="form-group">
241 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
242 <div class="col-sm-10">
243 <input id="bip32-path" type="text" class="path form-control" value="m/0">
244 </div>
245 </div>
1975bfbc
IC
246 <div class="form-group">
247 <div class="col-sm-2"></div>
248 <label class="col-sm-10">
249 <input class="hardened-addresses" type="checkbox">
250 Use hardened addresses
251 </label>
252 </div>
d5dc92fd
IC
253 <div class="form-group">
254 <label class="col-sm-2 control-label">Hive Wallet</label>
255 <div class="col-sm-10">
256 <p class="form-control no-border">
257 Use path <code>m/0'/0</code>.
258 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
259 </p>
260 </div>
261 </div>
262 <div class="form-group">
263 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
264 <div class="col-sm-10">
265 <p class="form-control no-border">
266 Use path <code>m/44'/0'/0'/0</code>.
267 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
268 </p>
269 </div>
270 </div>
1975bfbc
IC
271 <div class="form-group">
272 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
273 <div class="col-sm-10">
274 <p class="form-control no-border">
275 Use path <code>m/0'/0'</code> with hardened addresses.
276 For more info see the <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
277 </p>
278 </div>
279 </div>
aa51da11
IC
280 <div class="form-group">
281 <label class="col-sm-2 control-label">Block Explorers</label>
282 <div class="col-sm-10">
283 <p class="form-control no-border">
284 Use path <code>m/44'/0'/0'</code>.
285 Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xpriv</code> key.
286 </p>
287 </div>
288 </div>
ab78acc6
IC
289 </form>
290 </div>
291 </div>
292 <form class="form-horizontal" role="form">
293 <div class="form-group">
294 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
295 <div class="col-sm-10">
296 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
297 </div>
298 </div>
299 <div class="form-group">
300 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
301 <div class="col-sm-10">
302 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
303 </div>
304 </div>
305 </form>
306 </div>
307 </div>
3af2954a 308
ab78acc6 309 <hr>
3af2954a 310
ab78acc6
IC
311 <div class="row">
312 <div class="col-md-12">
313 <h2>Derived Addresses</h2>
314 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
315 <table class="table table-striped">
316 <thead>
317 <th>
318 <div class="input-group">
ae30fed8 319 Path&nbsp;&nbsp;
ab78acc6
IC
320 <button class="index-toggle">Toggle</button>
321 </div>
322 </th>
323 <th>
324 <div class="input-group">
325 Address&nbsp;&nbsp;
326 <button class="address-toggle">Toggle</button>
327 </div>
328 </th>
1b12b2f5
IC
329 <th>
330 <div class="input-group">
331 Public Key&nbsp;&nbsp;
332 <button class="public-key-toggle">Toggle</button>
333 </div>
334 </th>
ab78acc6
IC
335 <th>
336 <div class="input-group">
337 Private Key&nbsp;&nbsp;
338 <button class="private-key-toggle">Toggle</button>
339 </div>
340 </th>
341 </thead>
d737abf6 342 <tbody class="addresses monospace">
ab78acc6
IC
343 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
344 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
345 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
346 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
347 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
348 </tbody>
349 </table>
350 </div>
351 </div>
352 <span>Show next </button>
353 <input type="number" class="rows-to-add" value="20">
354 <button class="more">Show</button>
3af2954a 355
ab78acc6 356 <hr>
3af2954a 357
ab78acc6
IC
358 <div class="row">
359 <div class="col-md-12">
360 <h2>More info</h2>
361 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
362 <p>
363 Read more at the
364 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
365 </p>
366 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
367 <p>
368 Read more at the
369 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
370 and see the demo at
371 <a href="http://bip32.org/" target="_blank">bip32.org</a>
372 </p>
373 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
374 <p>
375 Read more at the
376 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
377 </p>
378 <h3>Private Keys</h3>
379 <p>
380 Use private keys at
381 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
382 but be careful - it can be easy to make mistakes if you
383 don't know what you're doing
384 </p>
c6624d51
IC
385 <h3 id="entropy-notes">Entropy</h3>
386 <p>
387 Entropy values must be sourced from a
388 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
389 This means flipping a fair coin, rolling a fair dice, noise measurements etc. Do <strong>NOT</strong> use
390 phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i>
391 is random, because chances are <em>overwhelming</em> that it isn't random enough for the needs of this tool.
392 </p>
393 <p>
394 The random mnemonic generator on this page uses a
395 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>,
396 and can generally be trusted more than your own intuition about randomness.
397 If cryptographic randomness isn't available in your browser, this page will show a warning and <i>will not generate
398 random mnemonics</i>.
399 </p>
400 <p>
401 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank">You are not a good source of entropy.</a>
402 </p>
ab78acc6
IC
403 </div>
404 </div>
3af2954a 405
ab78acc6 406 <hr>
3af2954a 407
ab78acc6
IC
408 <div class="row">
409 <div class="col-md-12">
3af2954a 410
ab78acc6 411 <h2>Offline Usage</h2>
3af2954a 412
ab78acc6
IC
413 <p>
414 You can use this tool without having to be online.
415 </p>
416 <p>
417 In your browser, select file save-as, and save this page
418 as a file.
419 </p>
420 <p>
421 Double-click that file to open it in a browser
422 on any offline computer.
423 </p>
424 <p>
425 Alternatively, download it from
b630f83d
IC
426 <a href="https://github.com/iancoleman/bip39">
427 https://github.com/iancoleman/bip39
ab78acc6 428 </a>
3af2954a 429
ab78acc6
IC
430 </div>
431 </div>
3af2954a 432
ab78acc6 433 <hr>
3af2954a 434
ab78acc6
IC
435 <div class="row">
436 <div class="col-md-12">
3af2954a 437
ab78acc6 438 <h2>This project is 100% open-source code</h2>
3af2954a 439
ab78acc6
IC
440 <p>
441 <span>Get the source code at - </span>
b630f83d
IC
442 <a href="https://github.com/iancoleman/bip39" target="_blank">
443 https://github.com/iancoleman/bip39
ab78acc6
IC
444 </a>
445 </p>
3af2954a 446
ab78acc6 447 <h3>Libraries</h3>
3af2954a 448
ab78acc6
IC
449 <p>
450 <span>BitcoinJS - </span>
451 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
452 https://github.com/bitcoinjs/bitcoinjs-lib
453 </a>
454 </p>
3af2954a 455
ab78acc6
IC
456 <p>
457 <span>jsBIP39 - </span>
458 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
459 https://github.com/iancoleman/jsbip39
460 </a>
461 </p>
3af2954a 462
ab78acc6
IC
463 <p>
464 <span>sjcl - </span>
465 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
466 https://github.com/bitwiseshiftleft/sjcl
467 </a>
468 </p>
3af2954a 469
ab78acc6
IC
470 <p>
471 <span>jQuery - </span>
472 <a href="https://jquery.com/" target="_blank">
473 https://jquery.com/
474 </a>
475 </p>
3af2954a 476
ab78acc6
IC
477 <p>
478 <span>Twitter Bootstrap - </span>
479 <a href="http://getbootstrap.com/" target="_blank">
480 http://getbootstrap.com/
481 </a>
482 </p>
3af2954a 483
ab78acc6
IC
484 </div>
485 </div>
3af2954a 486
ab78acc6 487 </div>
3af2954a 488
ab78acc6
IC
489 <div class="feedback-container">
490 <div class="feedback">Loading...</div>
491 </div>
3af2954a 492
ab78acc6
IC
493 <script type="text/template" id="address-row-template">
494 <tr>
495 <td class="index"><span></span></td>
496 <td class="address"><span></span></td>
1b12b2f5 497 <td class="pubkey"><span></span></td>
ab78acc6
IC
498 <td class="privkey"><span></span></td>
499 </tr>
500 </script>
501 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
502!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)
503},_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))
504},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});
505</script>
506 <script>/*!
507 * Bootstrap v3.2.0 (http://getbootstrap.com)
3af2954a
IC
508 * Copyright 2011-2014 Twitter, Inc.
509 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
510 */
511if("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>
563e401a
IC
512 <script>(function() {
513 'use strict';
514
515 /**
516 * Extend an Object with another Object's properties.
517 *
518 * The source objects are specified as additional arguments.
519 *
520 * @param dst Object the object to extend.
521 *
522 * @return Object the final object.
523 */
524 var _extend = function(dst) {
525 var sources = Array.prototype.slice.call(arguments, 1);
526 for (var i=0; i<sources.length; ++i) {
527 var src = sources[i];
528 for (var p in src) {
529 if (src.hasOwnProperty(p)) dst[p] = src[p];
530 }
531 }
532 return dst;
533 };
534
535
536 /**
537 * Defer execution of given function.
538 * @param {Function} func
539 */
540 var _defer = function(func) {
541 if (typeof setImmediate === 'function') {
542 return setImmediate(func);
543 } else {
544 return setTimeout(func, 0);
545 }
546 };
547
548 /**
549 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
550 */
551 var Levenshtein = {
552 /**
553 * Calculate levenshtein distance of the two strings.
554 *
555 * @param str1 String the first string.
556 * @param str2 String the second string.
557 * @return Integer the levenshtein distance (0 and above).
558 */
559 get: function(str1, str2) {
560 // base cases
561 if (str1 === str2) return 0;
562 if (str1.length === 0) return str2.length;
563 if (str2.length === 0) return str1.length;
564
565 // two rows
566 var prevRow = new Array(str2.length + 1),
567 curCol, nextCol, i, j, tmp;
568
569 // initialise previous row
570 for (i=0; i<prevRow.length; ++i) {
571 prevRow[i] = i;
572 }
573
574 // calculate current row distance from previous row
575 for (i=0; i<str1.length; ++i) {
576 nextCol = i + 1;
577
578 for (j=0; j<str2.length; ++j) {
579 curCol = nextCol;
580
581 // substution
582 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
583 // insertion
584 tmp = curCol + 1;
585 if (nextCol > tmp) {
586 nextCol = tmp;
587 }
588 // deletion
589 tmp = prevRow[j + 1] + 1;
590 if (nextCol > tmp) {
591 nextCol = tmp;
592 }
593
594 // copy current col value into previous (in preparation for next iteration)
595 prevRow[j] = curCol;
596 }
597
598 // copy last col value into previous (in preparation for next iteration)
599 prevRow[j] = nextCol;
600 }
601
602 return nextCol;
603 },
604
605 /**
606 * Asynchronously calculate levenshtein distance of the two strings.
607 *
608 * @param str1 String the first string.
609 * @param str2 String the second string.
610 * @param cb Function callback function with signature: function(Error err, int distance)
611 * @param [options] Object additional options.
612 * @param [options.progress] Function progress callback with signature: function(percentComplete)
613 */
614 getAsync: function(str1, str2, cb, options) {
615 options = _extend({}, {
616 progress: null
617 }, options);
618
619 // base cases
620 if (str1 === str2) return cb(null, 0);
621 if (str1.length === 0) return cb(null, str2.length);
622 if (str2.length === 0) return cb(null, str1.length);
623
624 // two rows
625 var prevRow = new Array(str2.length + 1),
626 curCol, nextCol,
627 i, j, tmp,
628 startTime, currentTime;
629
630 // initialise previous row
631 for (i=0; i<prevRow.length; ++i) {
632 prevRow[i] = i;
633 }
634
635 nextCol = 1;
636 i = 0;
637 j = -1;
638
639 var __calculate = function() {
640 // reset timer
641 startTime = new Date().valueOf();
642 currentTime = startTime;
643
644 // keep going until one second has elapsed
645 while (currentTime - startTime < 1000) {
646 // reached end of current row?
647 if (str2.length <= (++j)) {
648 // copy current into previous (in preparation for next iteration)
649 prevRow[j] = nextCol;
650
651 // if already done all chars
652 if (str1.length <= (++i)) {
653 return cb(null, nextCol);
654 }
655 // else if we have more left to do
656 else {
657 nextCol = i + 1;
658 j = 0;
659 }
660 }
661
662 // calculation
663 curCol = nextCol;
664
665 // substution
666 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
667 // insertion
668 tmp = curCol + 1;
669 if (nextCol > tmp) {
670 nextCol = tmp;
671 }
672 // deletion
673 tmp = prevRow[j + 1] + 1;
674 if (nextCol > tmp) {
675 nextCol = tmp;
676 }
677
678 // copy current into previous (in preparation for next iteration)
679 prevRow[j] = curCol;
680
681 // get current time
682 currentTime = new Date().valueOf();
683 }
684
685 // send a progress update?
686 if (null !== options.progress) {
687 try {
688 options.progress.call(null, (i * 100.0/ str1.length));
689 } catch (err) {
690 return cb('Progress callback: ' + err.toString());
691 }
692 }
693
694 // next iteration
695 _defer(__calculate);
696 };
697
698 __calculate();
699 }
700
701 };
702
703 // amd
704 if (typeof define !== "undefined" && define !== null && define.amd) {
705 define(function() {
706 return Levenshtein;
707 });
708 }
709 // commonjs
710 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
711 module.exports = Levenshtein;
712 }
713 // web worker
714 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
715 self.Levenshtein = Levenshtein;
716 }
717 // browser main thread
718 else if (typeof window !== "undefined" && window !== null) {
719 window.Levenshtein = Levenshtein;
720 }
721}());
722
723</script>
ab78acc6
IC
724 <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){
725// (public) Constructor
726function BigInteger(a, b, c) {
727 if (!(this instanceof BigInteger))
728 return new BigInteger(a, b, c)
3af2954a 729
ab78acc6
IC
730 if (a != null) {
731 if ("number" == typeof a) this.fromNumber(a, b, c)
732 else if (b == null && "string" != typeof a) this.fromString(a, 256)
733 else this.fromString(a, b)
734 }
735}
3af2954a 736
ab78acc6 737var proto = BigInteger.prototype
3af2954a 738
ab78acc6
IC
739// duck-typed isBigInteger
740proto.__bigi = require('../package.json').version
741BigInteger.isBigInteger = function (obj, check_ver) {
742 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
743}
3af2954a 744
ab78acc6
IC
745// Bits per digit
746var dbits
3af2954a 747
ab78acc6
IC
748// am: Compute w_j += (x*this_i), propagate carries,
749// c is initial carry, returns final carry.
750// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
751// We need to select the fastest one that works in this environment.
3af2954a 752
ab78acc6
IC
753// am1: use a single mult and divide to get the high bits,
754// max digit bits should be 26 because
755// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
756function am1(i, x, w, j, c, n) {
757 while (--n >= 0) {
758 var v = x * this[i++] + w[j] + c
759 c = Math.floor(v / 0x4000000)
760 w[j++] = v & 0x3ffffff
3af2954a 761 }
ab78acc6
IC
762 return c
763}
764// am2 avoids a big mult-and-extract completely.
765// Max digit bits should be <= 30 because we do bitwise ops
766// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
767function am2(i, x, w, j, c, n) {
768 var xl = x & 0x7fff,
769 xh = x >> 15
770 while (--n >= 0) {
771 var l = this[i] & 0x7fff
772 var h = this[i++] >> 15
773 var m = xh * l + h * xl
774 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
775 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
776 w[j++] = l & 0x3fffffff
777 }
778 return c
779}
780// Alternately, set max digit bits to 28 since some
781// browsers slow down when dealing with 32-bit numbers.
782function am3(i, x, w, j, c, n) {
783 var xl = x & 0x3fff,
784 xh = x >> 14
785 while (--n >= 0) {
786 var l = this[i] & 0x3fff
787 var h = this[i++] >> 14
788 var m = xh * l + h * xl
789 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
790 c = (l >> 28) + (m >> 14) + xh * h
791 w[j++] = l & 0xfffffff
3af2954a 792 }
ab78acc6
IC
793 return c
794}
3af2954a 795
ab78acc6
IC
796// wtf?
797BigInteger.prototype.am = am1
798dbits = 26
3af2954a 799
ab78acc6
IC
800BigInteger.prototype.DB = dbits
801BigInteger.prototype.DM = ((1 << dbits) - 1)
802var DV = BigInteger.prototype.DV = (1 << dbits)
3af2954a 803
ab78acc6
IC
804var BI_FP = 52
805BigInteger.prototype.FV = Math.pow(2, BI_FP)
806BigInteger.prototype.F1 = BI_FP - dbits
807BigInteger.prototype.F2 = 2 * dbits - BI_FP
3af2954a 808
ab78acc6
IC
809// Digit conversions
810var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
811var BI_RC = new Array()
812var rr, vv
813rr = "0".charCodeAt(0)
814for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
815rr = "a".charCodeAt(0)
816for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
817rr = "A".charCodeAt(0)
818for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
3af2954a 819
ab78acc6
IC
820function int2char(n) {
821 return BI_RM.charAt(n)
822}
3af2954a 823
ab78acc6
IC
824function intAt(s, i) {
825 var c = BI_RC[s.charCodeAt(i)]
826 return (c == null) ? -1 : c
827}
3af2954a 828
ab78acc6
IC
829// (protected) copy this to r
830function bnpCopyTo(r) {
831 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
832 r.t = this.t
833 r.s = this.s
834}
3af2954a 835
ab78acc6
IC
836// (protected) set from integer value x, -DV <= x < DV
837function bnpFromInt(x) {
838 this.t = 1
839 this.s = (x < 0) ? -1 : 0
840 if (x > 0) this[0] = x
841 else if (x < -1) this[0] = x + DV
842 else this.t = 0
843}
3af2954a 844
ab78acc6
IC
845// return bigint initialized to value
846function nbv(i) {
847 var r = new BigInteger()
848 r.fromInt(i)
849 return r
850}
3af2954a 851
ab78acc6
IC
852// (protected) set from string and radix
853function bnpFromString(s, b) {
854 var self = this
3af2954a 855
ab78acc6
IC
856 var k
857 if (b == 16) k = 4
858 else if (b == 8) k = 3
859 else if (b == 256) k = 8; // byte array
860 else if (b == 2) k = 1
861 else if (b == 32) k = 5
862 else if (b == 4) k = 2
863 else {
864 self.fromRadix(s, b)
865 return
866 }
867 self.t = 0
868 self.s = 0
869 var i = s.length,
870 mi = false,
871 sh = 0
872 while (--i >= 0) {
873 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
874 if (x < 0) {
875 if (s.charAt(i) == "-") mi = true
876 continue
877 }
878 mi = false
879 if (sh == 0)
880 self[self.t++] = x
881 else if (sh + k > self.DB) {
882 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
883 self[self.t++] = (x >> (self.DB - sh))
884 } else
885 self[self.t - 1] |= x << sh
886 sh += k
887 if (sh >= self.DB) sh -= self.DB
888 }
889 if (k == 8 && (s[0] & 0x80) != 0) {
890 self.s = -1
891 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
892 }
893 self.clamp()
894 if (mi) BigInteger.ZERO.subTo(self, self)
895}
3af2954a 896
ab78acc6
IC
897// (protected) clamp off excess high words
898function bnpClamp() {
899 var c = this.s & this.DM
900 while (this.t > 0 && this[this.t - 1] == c)--this.t
901}
3af2954a 902
ab78acc6
IC
903// (public) return string representation in given radix
904function bnToString(b) {
905 var self = this
906 if (self.s < 0) return "-" + self.negate()
907 .toString(b)
908 var k
909 if (b == 16) k = 4
910 else if (b == 8) k = 3
911 else if (b == 2) k = 1
912 else if (b == 32) k = 5
913 else if (b == 4) k = 2
914 else return self.toRadix(b)
915 var km = (1 << k) - 1,
916 d, m = false,
917 r = "",
918 i = self.t
919 var p = self.DB - (i * self.DB) % k
920 if (i-- > 0) {
921 if (p < self.DB && (d = self[i] >> p) > 0) {
922 m = true
923 r = int2char(d)
924 }
925 while (i >= 0) {
926 if (p < k) {
927 d = (self[i] & ((1 << p) - 1)) << (k - p)
928 d |= self[--i] >> (p += self.DB - k)
929 } else {
930 d = (self[i] >> (p -= k)) & km
931 if (p <= 0) {
932 p += self.DB
933 --i
934 }
935 }
936 if (d > 0) m = true
937 if (m) r += int2char(d)
3af2954a 938 }
3af2954a 939 }
ab78acc6
IC
940 return m ? r : "0"
941}
3af2954a 942
ab78acc6
IC
943// (public) -this
944function bnNegate() {
945 var r = new BigInteger()
946 BigInteger.ZERO.subTo(this, r)
947 return r
948}
3af2954a 949
ab78acc6
IC
950// (public) |this|
951function bnAbs() {
952 return (this.s < 0) ? this.negate() : this
953}
3af2954a 954
ab78acc6
IC
955// (public) return + if this > a, - if this < a, 0 if equal
956function bnCompareTo(a) {
957 var r = this.s - a.s
958 if (r != 0) return r
959 var i = this.t
960 r = i - a.t
961 if (r != 0) return (this.s < 0) ? -r : r
962 while (--i >= 0)
963 if ((r = this[i] - a[i]) != 0) return r
964 return 0
965}
3af2954a 966
ab78acc6
IC
967// returns bit length of the integer x
968function nbits(x) {
969 var r = 1,
970 t
971 if ((t = x >>> 16) != 0) {
972 x = t
973 r += 16
974 }
975 if ((t = x >> 8) != 0) {
976 x = t
977 r += 8
978 }
979 if ((t = x >> 4) != 0) {
980 x = t
981 r += 4
982 }
983 if ((t = x >> 2) != 0) {
984 x = t
985 r += 2
3af2954a 986 }
ab78acc6
IC
987 if ((t = x >> 1) != 0) {
988 x = t
989 r += 1
990 }
991 return r
992}
993
994// (public) return the number of bits in "this"
995function bnBitLength() {
996 if (this.t <= 0) return 0
997 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
998}
3af2954a 999
ab78acc6
IC
1000// (public) return the number of bytes in "this"
1001function bnByteLength() {
1002 return this.bitLength() >> 3
1003}
3af2954a 1004
ab78acc6
IC
1005// (protected) r = this << n*DB
1006function bnpDLShiftTo(n, r) {
1007 var i
1008 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
1009 for (i = n - 1; i >= 0; --i) r[i] = 0
1010 r.t = this.t + n
1011 r.s = this.s
1012}
3af2954a 1013
ab78acc6
IC
1014// (protected) r = this >> n*DB
1015function bnpDRShiftTo(n, r) {
1016 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
1017 r.t = Math.max(this.t - n, 0)
1018 r.s = this.s
1019}
3af2954a 1020
ab78acc6
IC
1021// (protected) r = this << n
1022function bnpLShiftTo(n, r) {
1023 var self = this
1024 var bs = n % self.DB
1025 var cbs = self.DB - bs
1026 var bm = (1 << cbs) - 1
1027 var ds = Math.floor(n / self.DB),
1028 c = (self.s << bs) & self.DM,
1029 i
1030 for (i = self.t - 1; i >= 0; --i) {
1031 r[i + ds + 1] = (self[i] >> cbs) | c
1032 c = (self[i] & bm) << bs
1033 }
1034 for (i = ds - 1; i >= 0; --i) r[i] = 0
1035 r[ds] = c
1036 r.t = self.t + ds + 1
1037 r.s = self.s
1038 r.clamp()
1039}
3af2954a 1040
ab78acc6
IC
1041// (protected) r = this >> n
1042function bnpRShiftTo(n, r) {
1043 var self = this
1044 r.s = self.s
1045 var ds = Math.floor(n / self.DB)
1046 if (ds >= self.t) {
1047 r.t = 0
1048 return
3af2954a 1049 }
ab78acc6
IC
1050 var bs = n % self.DB
1051 var cbs = self.DB - bs
1052 var bm = (1 << bs) - 1
1053 r[0] = self[ds] >> bs
1054 for (var i = ds + 1; i < self.t; ++i) {
1055 r[i - ds - 1] |= (self[i] & bm) << cbs
1056 r[i - ds] = self[i] >> bs
1057 }
1058 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
1059 r.t = self.t - ds
1060 r.clamp()
1061}
3af2954a 1062
ab78acc6
IC
1063// (protected) r = this - a
1064function bnpSubTo(a, r) {
1065 var self = this
1066 var i = 0,
1067 c = 0,
1068 m = Math.min(a.t, self.t)
1069 while (i < m) {
1070 c += self[i] - a[i]
1071 r[i++] = c & self.DM
1072 c >>= self.DB
1073 }
1074 if (a.t < self.t) {
1075 c -= a.s
1076 while (i < self.t) {
1077 c += self[i]
1078 r[i++] = c & self.DM
1079 c >>= self.DB
1080 }
1081 c += self.s
1082 } else {
1083 c += self.s
1084 while (i < a.t) {
1085 c -= a[i]
1086 r[i++] = c & self.DM
1087 c >>= self.DB
1088 }
1089 c -= a.s
1090 }
1091 r.s = (c < 0) ? -1 : 0
1092 if (c < -1) r[i++] = self.DV + c
1093 else if (c > 0) r[i++] = c
1094 r.t = i
1095 r.clamp()
1096}
3af2954a 1097
ab78acc6
IC
1098// (protected) r = this * a, r != this,a (HAC 14.12)
1099// "this" should be the larger one if appropriate.
1100function bnpMultiplyTo(a, r) {
1101 var x = this.abs(),
1102 y = a.abs()
1103 var i = x.t
1104 r.t = i + y.t
1105 while (--i >= 0) r[i] = 0
1106 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1107 r.s = 0
1108 r.clamp()
1109 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1110}
3af2954a 1111
ab78acc6
IC
1112// (protected) r = this^2, r != this (HAC 14.16)
1113function bnpSquareTo(r) {
1114 var x = this.abs()
1115 var i = r.t = 2 * x.t
1116 while (--i >= 0) r[i] = 0
1117 for (i = 0; i < x.t - 1; ++i) {
1118 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1119 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1120 r[i + x.t] -= x.DV
1121 r[i + x.t + 1] = 1
1122 }
1123 }
1124 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1125 r.s = 0
1126 r.clamp()
1127}
3af2954a 1128
ab78acc6
IC
1129// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1130// r != q, this != m. q or r may be null.
1131function bnpDivRemTo(m, q, r) {
1132 var self = this
1133 var pm = m.abs()
1134 if (pm.t <= 0) return
1135 var pt = self.abs()
1136 if (pt.t < pm.t) {
1137 if (q != null) q.fromInt(0)
1138 if (r != null) self.copyTo(r)
1139 return
1140 }
1141 if (r == null) r = new BigInteger()
1142 var y = new BigInteger(),
1143 ts = self.s,
1144 ms = m.s
1145 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1146 if (nsh > 0) {
1147 pm.lShiftTo(nsh, y)
1148 pt.lShiftTo(nsh, r)
1149 } else {
1150 pm.copyTo(y)
1151 pt.copyTo(r)
1152 }
1153 var ys = y.t
1154 var y0 = y[ys - 1]
1155 if (y0 == 0) return
1156 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1157 var d1 = self.FV / yt,
1158 d2 = (1 << self.F1) / yt,
1159 e = 1 << self.F2
1160 var i = r.t,
1161 j = i - ys,
1162 t = (q == null) ? new BigInteger() : q
1163 y.dlShiftTo(j, t)
1164 if (r.compareTo(t) >= 0) {
1165 r[r.t++] = 1
1166 r.subTo(t, r)
1167 }
1168 BigInteger.ONE.dlShiftTo(ys, t)
1169 t.subTo(y, y); // "negative" y so we can replace sub with am later
1170 while (y.t < ys) y[y.t++] = 0
1171 while (--j >= 0) {
1172 // Estimate quotient digit
1173 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1174 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1175 y.dlShiftTo(j, t)
1176 r.subTo(t, r)
1177 while (r[i] < --qd) r.subTo(t, r)
3af2954a 1178 }
ab78acc6
IC
1179 }
1180 if (q != null) {
1181 r.drShiftTo(ys, q)
1182 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1183 }
1184 r.t = ys
1185 r.clamp()
1186 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1187 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1188}
3af2954a 1189
ab78acc6
IC
1190// (public) this mod a
1191function bnMod(a) {
1192 var r = new BigInteger()
1193 this.abs()
1194 .divRemTo(a, null, r)
1195 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1196 return r
1197}
3af2954a 1198
ab78acc6
IC
1199// Modular reduction using "classic" algorithm
1200function Classic(m) {
1201 this.m = m
1202}
3af2954a 1203
ab78acc6
IC
1204function cConvert(x) {
1205 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1206 else return x
1207}
1208
1209function cRevert(x) {
1210 return x
1211}
3af2954a 1212
ab78acc6
IC
1213function cReduce(x) {
1214 x.divRemTo(this.m, null, x)
1215}
3af2954a 1216
ab78acc6
IC
1217function cMulTo(x, y, r) {
1218 x.multiplyTo(y, r)
1219 this.reduce(r)
1220}
3af2954a 1221
ab78acc6
IC
1222function cSqrTo(x, r) {
1223 x.squareTo(r)
1224 this.reduce(r)
1225}
3af2954a 1226
ab78acc6
IC
1227Classic.prototype.convert = cConvert
1228Classic.prototype.revert = cRevert
1229Classic.prototype.reduce = cReduce
1230Classic.prototype.mulTo = cMulTo
1231Classic.prototype.sqrTo = cSqrTo
3af2954a 1232
ab78acc6
IC
1233// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1234// justification:
1235// xy == 1 (mod m)
1236// xy = 1+km
1237// xy(2-xy) = (1+km)(1-km)
1238// x[y(2-xy)] = 1-k^2m^2
1239// x[y(2-xy)] == 1 (mod m^2)
1240// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1241// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1242// JS multiply "overflows" differently from C/C++, so care is needed here.
1243function bnpInvDigit() {
1244 if (this.t < 1) return 0
1245 var x = this[0]
1246 if ((x & 1) == 0) return 0
1247 var y = x & 3; // y == 1/x mod 2^2
1248 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1249 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1250 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1251 // last step - calculate inverse mod DV directly
1252 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1253 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1254 // we really want the negative inverse, and -DV < y < DV
1255 return (y > 0) ? this.DV - y : -y
1256}
3af2954a 1257
ab78acc6
IC
1258// Montgomery reduction
1259function Montgomery(m) {
1260 this.m = m
1261 this.mp = m.invDigit()
1262 this.mpl = this.mp & 0x7fff
1263 this.mph = this.mp >> 15
1264 this.um = (1 << (m.DB - 15)) - 1
1265 this.mt2 = 2 * m.t
1266}
3af2954a 1267
ab78acc6
IC
1268// xR mod m
1269function montConvert(x) {
1270 var r = new BigInteger()
1271 x.abs()
1272 .dlShiftTo(this.m.t, r)
1273 r.divRemTo(this.m, null, r)
1274 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1275 return r
1276}
3af2954a 1277
ab78acc6
IC
1278// x/R mod m
1279function montRevert(x) {
1280 var r = new BigInteger()
1281 x.copyTo(r)
1282 this.reduce(r)
1283 return r
1284}
3af2954a 1285
ab78acc6
IC
1286// x = x/R mod m (HAC 14.32)
1287function montReduce(x) {
1288 while (x.t <= this.mt2) // pad x so am has enough room later
1289 x[x.t++] = 0
1290 for (var i = 0; i < this.m.t; ++i) {
1291 // faster way of calculating u0 = x[i]*mp mod DV
1292 var j = x[i] & 0x7fff
1293 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1294 // use am to combine the multiply-shift-add into one call
1295 j = i + this.m.t
1296 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1297 // propagate carry
1298 while (x[j] >= x.DV) {
1299 x[j] -= x.DV
1300 x[++j]++
1301 }
1302 }
1303 x.clamp()
1304 x.drShiftTo(this.m.t, x)
1305 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1306}
3af2954a 1307
ab78acc6
IC
1308// r = "x^2/R mod m"; x != r
1309function montSqrTo(x, r) {
1310 x.squareTo(r)
1311 this.reduce(r)
1312}
3af2954a 1313
ab78acc6
IC
1314// r = "xy/R mod m"; x,y != r
1315function montMulTo(x, y, r) {
1316 x.multiplyTo(y, r)
1317 this.reduce(r)
1318}
3af2954a 1319
ab78acc6
IC
1320Montgomery.prototype.convert = montConvert
1321Montgomery.prototype.revert = montRevert
1322Montgomery.prototype.reduce = montReduce
1323Montgomery.prototype.mulTo = montMulTo
1324Montgomery.prototype.sqrTo = montSqrTo
3af2954a 1325
ab78acc6
IC
1326// (protected) true iff this is even
1327function bnpIsEven() {
1328 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1329}
3af2954a 1330
ab78acc6
IC
1331// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1332function bnpExp(e, z) {
1333 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1334 var r = new BigInteger(),
1335 r2 = new BigInteger(),
1336 g = z.convert(this),
1337 i = nbits(e) - 1
1338 g.copyTo(r)
1339 while (--i >= 0) {
1340 z.sqrTo(r, r2)
1341 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1342 else {
1343 var t = r
1344 r = r2
1345 r2 = t
3af2954a 1346 }
3af2954a 1347 }
ab78acc6
IC
1348 return z.revert(r)
1349}
3af2954a 1350
ab78acc6
IC
1351// (public) this^e % m, 0 <= e < 2^32
1352function bnModPowInt(e, m) {
1353 var z
1354 if (e < 256 || m.isEven()) z = new Classic(m)
1355 else z = new Montgomery(m)
1356 return this.exp(e, z)
1357}
3af2954a 1358
ab78acc6
IC
1359// protected
1360proto.copyTo = bnpCopyTo
1361proto.fromInt = bnpFromInt
1362proto.fromString = bnpFromString
1363proto.clamp = bnpClamp
1364proto.dlShiftTo = bnpDLShiftTo
1365proto.drShiftTo = bnpDRShiftTo
1366proto.lShiftTo = bnpLShiftTo
1367proto.rShiftTo = bnpRShiftTo
1368proto.subTo = bnpSubTo
1369proto.multiplyTo = bnpMultiplyTo
1370proto.squareTo = bnpSquareTo
1371proto.divRemTo = bnpDivRemTo
1372proto.invDigit = bnpInvDigit
1373proto.isEven = bnpIsEven
1374proto.exp = bnpExp
3af2954a 1375
ab78acc6
IC
1376// public
1377proto.toString = bnToString
1378proto.negate = bnNegate
1379proto.abs = bnAbs
1380proto.compareTo = bnCompareTo
1381proto.bitLength = bnBitLength
1382proto.byteLength = bnByteLength
1383proto.mod = bnMod
1384proto.modPowInt = bnModPowInt
3af2954a 1385
ab78acc6
IC
1386// (public)
1387function bnClone() {
1388 var r = new BigInteger()
1389 this.copyTo(r)
1390 return r
1391}
3af2954a 1392
ab78acc6
IC
1393// (public) return value as integer
1394function bnIntValue() {
1395 if (this.s < 0) {
1396 if (this.t == 1) return this[0] - this.DV
1397 else if (this.t == 0) return -1
1398 } else if (this.t == 1) return this[0]
1399 else if (this.t == 0) return 0
1400 // assumes 16 < DB < 32
1401 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1402}
3af2954a 1403
ab78acc6
IC
1404// (public) return value as byte
1405function bnByteValue() {
1406 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1407}
3af2954a 1408
ab78acc6
IC
1409// (public) return value as short (assumes DB>=16)
1410function bnShortValue() {
1411 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1412}
3af2954a 1413
ab78acc6
IC
1414// (protected) return x s.t. r^x < DV
1415function bnpChunkSize(r) {
1416 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1417}
3af2954a 1418
ab78acc6
IC
1419// (public) 0 if this == 0, 1 if this > 0
1420function bnSigNum() {
1421 if (this.s < 0) return -1
1422 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1423 else return 1
1424}
3af2954a 1425
ab78acc6
IC
1426// (protected) convert to radix string
1427function bnpToRadix(b) {
1428 if (b == null) b = 10
1429 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1430 var cs = this.chunkSize(b)
1431 var a = Math.pow(b, cs)
1432 var d = nbv(a),
1433 y = new BigInteger(),
1434 z = new BigInteger(),
1435 r = ""
1436 this.divRemTo(d, y, z)
1437 while (y.signum() > 0) {
1438 r = (a + z.intValue())
1439 .toString(b)
1440 .substr(1) + r
1441 y.divRemTo(d, y, z)
1442 }
1443 return z.intValue()
1444 .toString(b) + r
1445}
3af2954a 1446
ab78acc6
IC
1447// (protected) convert from radix string
1448function bnpFromRadix(s, b) {
1449 var self = this
1450 self.fromInt(0)
1451 if (b == null) b = 10
1452 var cs = self.chunkSize(b)
1453 var d = Math.pow(b, cs),
1454 mi = false,
1455 j = 0,
1456 w = 0
1457 for (var i = 0; i < s.length; ++i) {
1458 var x = intAt(s, i)
1459 if (x < 0) {
1460 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1461 continue
1462 }
1463 w = b * w + x
1464 if (++j >= cs) {
1465 self.dMultiply(d)
1466 self.dAddOffset(w, 0)
1467 j = 0
1468 w = 0
1469 }
1470 }
1471 if (j > 0) {
1472 self.dMultiply(Math.pow(b, j))
1473 self.dAddOffset(w, 0)
1474 }
1475 if (mi) BigInteger.ZERO.subTo(self, self)
1476}
3af2954a 1477
ab78acc6
IC
1478// (protected) alternate constructor
1479function bnpFromNumber(a, b, c) {
1480 var self = this
1481 if ("number" == typeof b) {
1482 // new BigInteger(int,int,RNG)
1483 if (a < 2) self.fromInt(1)
1484 else {
1485 self.fromNumber(a, c)
1486 if (!self.testBit(a - 1)) // force MSB set
1487 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1488 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1489 while (!self.isProbablePrime(b)) {
1490 self.dAddOffset(2, 0)
1491 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1492 }
1493 }
1494 } else {
1495 // new BigInteger(int,RNG)
1496 var x = new Array(),
1497 t = a & 7
1498 x.length = (a >> 3) + 1
1499 b.nextBytes(x)
1500 if (t > 0) x[0] &= ((1 << t) - 1)
1501 else x[0] = 0
1502 self.fromString(x, 256)
3af2954a 1503 }
ab78acc6 1504}
3af2954a 1505
ab78acc6
IC
1506// (public) convert to bigendian byte array
1507function bnToByteArray() {
1508 var self = this
1509 var i = self.t,
1510 r = new Array()
1511 r[0] = self.s
1512 var p = self.DB - (i * self.DB) % 8,
1513 d, k = 0
1514 if (i-- > 0) {
1515 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1516 r[k++] = d | (self.s << (self.DB - p))
1517 while (i >= 0) {
1518 if (p < 8) {
1519 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1520 d |= self[--i] >> (p += self.DB - 8)
1521 } else {
1522 d = (self[i] >> (p -= 8)) & 0xff
1523 if (p <= 0) {
1524 p += self.DB
1525 --i
1526 }
1527 }
1528 if ((d & 0x80) != 0) d |= -256
1529 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1530 if (k > 0 || d != self.s) r[k++] = d
3af2954a 1531 }
3af2954a 1532 }
ab78acc6
IC
1533 return r
1534}
3af2954a 1535
ab78acc6
IC
1536function bnEquals(a) {
1537 return (this.compareTo(a) == 0)
1538}
3af2954a 1539
ab78acc6
IC
1540function bnMin(a) {
1541 return (this.compareTo(a) < 0) ? this : a
1542}
3af2954a 1543
ab78acc6
IC
1544function bnMax(a) {
1545 return (this.compareTo(a) > 0) ? this : a
1546}
3af2954a 1547
ab78acc6
IC
1548// (protected) r = this op a (bitwise)
1549function bnpBitwiseTo(a, op, r) {
1550 var self = this
1551 var i, f, m = Math.min(a.t, self.t)
1552 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1553 if (a.t < self.t) {
1554 f = a.s & self.DM
1555 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1556 r.t = self.t
1557 } else {
1558 f = self.s & self.DM
1559 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1560 r.t = a.t
3af2954a 1561 }
ab78acc6
IC
1562 r.s = op(self.s, a.s)
1563 r.clamp()
1564}
3af2954a 1565
ab78acc6
IC
1566// (public) this & a
1567function op_and(x, y) {
1568 return x & y
1569}
3af2954a 1570
ab78acc6
IC
1571function bnAnd(a) {
1572 var r = new BigInteger()
1573 this.bitwiseTo(a, op_and, r)
1574 return r
1575}
3af2954a 1576
ab78acc6
IC
1577// (public) this | a
1578function op_or(x, y) {
1579 return x | y
1580}
3af2954a 1581
ab78acc6
IC
1582function bnOr(a) {
1583 var r = new BigInteger()
1584 this.bitwiseTo(a, op_or, r)
1585 return r
1586}
3af2954a 1587
ab78acc6
IC
1588// (public) this ^ a
1589function op_xor(x, y) {
1590 return x ^ y
1591}
3af2954a 1592
ab78acc6
IC
1593function bnXor(a) {
1594 var r = new BigInteger()
1595 this.bitwiseTo(a, op_xor, r)
1596 return r
1597}
3af2954a 1598
ab78acc6
IC
1599// (public) this & ~a
1600function op_andnot(x, y) {
1601 return x & ~y
1602}
3af2954a 1603
ab78acc6
IC
1604function bnAndNot(a) {
1605 var r = new BigInteger()
1606 this.bitwiseTo(a, op_andnot, r)
1607 return r
1608}
3af2954a 1609
ab78acc6
IC
1610// (public) ~this
1611function bnNot() {
1612 var r = new BigInteger()
1613 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1614 r.t = this.t
1615 r.s = ~this.s
1616 return r
1617}
3af2954a 1618
ab78acc6
IC
1619// (public) this << n
1620function bnShiftLeft(n) {
1621 var r = new BigInteger()
1622 if (n < 0) this.rShiftTo(-n, r)
1623 else this.lShiftTo(n, r)
1624 return r
1625}
3af2954a 1626
ab78acc6
IC
1627// (public) this >> n
1628function bnShiftRight(n) {
1629 var r = new BigInteger()
1630 if (n < 0) this.lShiftTo(-n, r)
1631 else this.rShiftTo(n, r)
1632 return r
1633}
3af2954a 1634
ab78acc6
IC
1635// return index of lowest 1-bit in x, x < 2^31
1636function lbit(x) {
1637 if (x == 0) return -1
1638 var r = 0
1639 if ((x & 0xffff) == 0) {
1640 x >>= 16
1641 r += 16
3af2954a 1642 }
ab78acc6
IC
1643 if ((x & 0xff) == 0) {
1644 x >>= 8
1645 r += 8
1646 }
1647 if ((x & 0xf) == 0) {
1648 x >>= 4
1649 r += 4
1650 }
1651 if ((x & 3) == 0) {
1652 x >>= 2
1653 r += 2
1654 }
1655 if ((x & 1) == 0)++r
1656 return r
1657}
3af2954a 1658
ab78acc6
IC
1659// (public) returns index of lowest 1-bit (or -1 if none)
1660function bnGetLowestSetBit() {
1661 for (var i = 0; i < this.t; ++i)
1662 if (this[i] != 0) return i * this.DB + lbit(this[i])
1663 if (this.s < 0) return this.t * this.DB
1664 return -1
1665}
3af2954a 1666
ab78acc6
IC
1667// return number of 1 bits in x
1668function cbit(x) {
1669 var r = 0
1670 while (x != 0) {
1671 x &= x - 1
1672 ++r
3af2954a 1673 }
ab78acc6
IC
1674 return r
1675}
3af2954a 1676
ab78acc6
IC
1677// (public) return number of set bits
1678function bnBitCount() {
1679 var r = 0,
1680 x = this.s & this.DM
1681 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1682 return r
1683}
1684
1685// (public) true iff nth bit is set
1686function bnTestBit(n) {
1687 var j = Math.floor(n / this.DB)
1688 if (j >= this.t) return (this.s != 0)
1689 return ((this[j] & (1 << (n % this.DB))) != 0)
1690}
3af2954a 1691
ab78acc6
IC
1692// (protected) this op (1<<n)
1693function bnpChangeBit(n, op) {
1694 var r = BigInteger.ONE.shiftLeft(n)
1695 this.bitwiseTo(r, op, r)
1696 return r
1697}
3af2954a 1698
ab78acc6
IC
1699// (public) this | (1<<n)
1700function bnSetBit(n) {
1701 return this.changeBit(n, op_or)
1702}
3af2954a 1703
ab78acc6
IC
1704// (public) this & ~(1<<n)
1705function bnClearBit(n) {
1706 return this.changeBit(n, op_andnot)
1707}
3af2954a 1708
ab78acc6
IC
1709// (public) this ^ (1<<n)
1710function bnFlipBit(n) {
1711 return this.changeBit(n, op_xor)
1712}
3af2954a 1713
ab78acc6
IC
1714// (protected) r = this + a
1715function bnpAddTo(a, r) {
1716 var self = this
3af2954a 1717
ab78acc6
IC
1718 var i = 0,
1719 c = 0,
1720 m = Math.min(a.t, self.t)
1721 while (i < m) {
1722 c += self[i] + a[i]
1723 r[i++] = c & self.DM
1724 c >>= self.DB
1725 }
1726 if (a.t < self.t) {
1727 c += a.s
1728 while (i < self.t) {
1729 c += self[i]
1730 r[i++] = c & self.DM
1731 c >>= self.DB
1732 }
1733 c += self.s
1734 } else {
1735 c += self.s
1736 while (i < a.t) {
1737 c += a[i]
1738 r[i++] = c & self.DM
1739 c >>= self.DB
1740 }
1741 c += a.s
1742 }
1743 r.s = (c < 0) ? -1 : 0
1744 if (c > 0) r[i++] = c
1745 else if (c < -1) r[i++] = self.DV + c
1746 r.t = i
1747 r.clamp()
1748}
3af2954a 1749
ab78acc6
IC
1750// (public) this + a
1751function bnAdd(a) {
1752 var r = new BigInteger()
1753 this.addTo(a, r)
1754 return r
1755}
3af2954a 1756
ab78acc6
IC
1757// (public) this - a
1758function bnSubtract(a) {
1759 var r = new BigInteger()
1760 this.subTo(a, r)
1761 return r
1762}
3af2954a 1763
ab78acc6
IC
1764// (public) this * a
1765function bnMultiply(a) {
1766 var r = new BigInteger()
1767 this.multiplyTo(a, r)
1768 return r
1769}
3af2954a 1770
ab78acc6
IC
1771// (public) this^2
1772function bnSquare() {
1773 var r = new BigInteger()
1774 this.squareTo(r)
1775 return r
1776}
3af2954a 1777
ab78acc6
IC
1778// (public) this / a
1779function bnDivide(a) {
1780 var r = new BigInteger()
1781 this.divRemTo(a, r, null)
1782 return r
1783}
3af2954a 1784
ab78acc6
IC
1785// (public) this % a
1786function bnRemainder(a) {
1787 var r = new BigInteger()
1788 this.divRemTo(a, null, r)
1789 return r
1790}
3af2954a 1791
ab78acc6
IC
1792// (public) [this/a,this%a]
1793function bnDivideAndRemainder(a) {
1794 var q = new BigInteger(),
1795 r = new BigInteger()
1796 this.divRemTo(a, q, r)
1797 return new Array(q, r)
1798}
3af2954a 1799
ab78acc6
IC
1800// (protected) this *= n, this >= 0, 1 < n < DV
1801function bnpDMultiply(n) {
1802 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1803 ++this.t
1804 this.clamp()
1805}
3af2954a 1806
ab78acc6
IC
1807// (protected) this += n << w words, this >= 0
1808function bnpDAddOffset(n, w) {
1809 if (n == 0) return
1810 while (this.t <= w) this[this.t++] = 0
1811 this[w] += n
1812 while (this[w] >= this.DV) {
1813 this[w] -= this.DV
1814 if (++w >= this.t) this[this.t++] = 0
1815 ++this[w]
3af2954a 1816 }
ab78acc6 1817}
3af2954a 1818
ab78acc6
IC
1819// A "null" reducer
1820function NullExp() {}
3af2954a 1821
ab78acc6
IC
1822function nNop(x) {
1823 return x
1824}
3af2954a 1825
ab78acc6
IC
1826function nMulTo(x, y, r) {
1827 x.multiplyTo(y, r)
1828}
3af2954a 1829
ab78acc6
IC
1830function nSqrTo(x, r) {
1831 x.squareTo(r)
1832}
3af2954a 1833
ab78acc6
IC
1834NullExp.prototype.convert = nNop
1835NullExp.prototype.revert = nNop
1836NullExp.prototype.mulTo = nMulTo
1837NullExp.prototype.sqrTo = nSqrTo
3af2954a 1838
ab78acc6
IC
1839// (public) this^e
1840function bnPow(e) {
1841 return this.exp(e, new NullExp())
1842}
3af2954a 1843
ab78acc6
IC
1844// (protected) r = lower n words of "this * a", a.t <= n
1845// "this" should be the larger one if appropriate.
1846function bnpMultiplyLowerTo(a, n, r) {
1847 var i = Math.min(this.t + a.t, n)
1848 r.s = 0; // assumes a,this >= 0
1849 r.t = i
1850 while (i > 0) r[--i] = 0
1851 var j
1852 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1853 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1854 r.clamp()
1855}
3af2954a 1856
ab78acc6
IC
1857// (protected) r = "this * a" without lower n words, n > 0
1858// "this" should be the larger one if appropriate.
1859function bnpMultiplyUpperTo(a, n, r) {
1860 --n
1861 var i = r.t = this.t + a.t - n
1862 r.s = 0; // assumes a,this >= 0
1863 while (--i >= 0) r[i] = 0
1864 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1865 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1866 r.clamp()
1867 r.drShiftTo(1, r)
1868}
3af2954a 1869
ab78acc6
IC
1870// Barrett modular reduction
1871function Barrett(m) {
1872 // setup Barrett
1873 this.r2 = new BigInteger()
1874 this.q3 = new BigInteger()
1875 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1876 this.mu = this.r2.divide(m)
1877 this.m = m
1878}
3af2954a 1879
ab78acc6
IC
1880function barrettConvert(x) {
1881 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1882 else if (x.compareTo(this.m) < 0) return x
1883 else {
1884 var r = new BigInteger()
1885 x.copyTo(r)
1886 this.reduce(r)
1887 return r
3af2954a 1888 }
ab78acc6 1889}
3af2954a 1890
ab78acc6
IC
1891function barrettRevert(x) {
1892 return x
1893}
3af2954a 1894
ab78acc6
IC
1895// x = x mod m (HAC 14.42)
1896function barrettReduce(x) {
1897 var self = this
1898 x.drShiftTo(self.m.t - 1, self.r2)
1899 if (x.t > self.m.t + 1) {
1900 x.t = self.m.t + 1
1901 x.clamp()
3af2954a 1902 }
ab78acc6
IC
1903 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1904 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1905 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1906 x.subTo(self.r2, x)
1907 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1908}
3af2954a 1909
ab78acc6
IC
1910// r = x^2 mod m; x != r
1911function barrettSqrTo(x, r) {
1912 x.squareTo(r)
1913 this.reduce(r)
1914}
3af2954a 1915
ab78acc6
IC
1916// r = x*y mod m; x,y != r
1917function barrettMulTo(x, y, r) {
1918 x.multiplyTo(y, r)
1919 this.reduce(r)
1920}
3af2954a 1921
ab78acc6
IC
1922Barrett.prototype.convert = barrettConvert
1923Barrett.prototype.revert = barrettRevert
1924Barrett.prototype.reduce = barrettReduce
1925Barrett.prototype.mulTo = barrettMulTo
1926Barrett.prototype.sqrTo = barrettSqrTo
3af2954a 1927
ab78acc6
IC
1928// (public) this^e % m (HAC 14.85)
1929function bnModPow(e, m) {
1930 var i = e.bitLength(),
1931 k, r = nbv(1),
1932 z
1933 if (i <= 0) return r
1934 else if (i < 18) k = 1
1935 else if (i < 48) k = 3
1936 else if (i < 144) k = 4
1937 else if (i < 768) k = 5
1938 else k = 6
1939 if (i < 8)
1940 z = new Classic(m)
1941 else if (m.isEven())
1942 z = new Barrett(m)
1943 else
1944 z = new Montgomery(m)
3af2954a 1945
ab78acc6
IC
1946 // precomputation
1947 var g = new Array(),
1948 n = 3,
1949 k1 = k - 1,
1950 km = (1 << k) - 1
1951 g[1] = z.convert(this)
1952 if (k > 1) {
1953 var g2 = new BigInteger()
1954 z.sqrTo(g[1], g2)
1955 while (n <= km) {
1956 g[n] = new BigInteger()
1957 z.mulTo(g2, g[n - 2], g[n])
1958 n += 2
1959 }
1960 }
1961
1962 var j = e.t - 1,
1963 w, is1 = true,
1964 r2 = new BigInteger(),
1965 t
1966 i = nbits(e[j]) - 1
1967 while (j >= 0) {
1968 if (i >= k1) w = (e[j] >> (i - k1)) & km
1969 else {
1970 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1971 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1972 }
3af2954a 1973
ab78acc6
IC
1974 n = k
1975 while ((w & 1) == 0) {
1976 w >>= 1
1977 --n
1978 }
1979 if ((i -= n) < 0) {
1980 i += this.DB
1981 --j
1982 }
1983 if (is1) { // ret == 1, don't bother squaring or multiplying it
1984 g[w].copyTo(r)
1985 is1 = false
1986 } else {
1987 while (n > 1) {
1988 z.sqrTo(r, r2)
1989 z.sqrTo(r2, r)
1990 n -= 2
1991 }
1992 if (n > 0) z.sqrTo(r, r2)
1993 else {
1994 t = r
1995 r = r2
1996 r2 = t
1997 }
1998 z.mulTo(r2, g[w], r)
1999 }
3af2954a 2000
ab78acc6
IC
2001 while (j >= 0 && (e[j] & (1 << i)) == 0) {
2002 z.sqrTo(r, r2)
2003 t = r
2004 r = r2
2005 r2 = t
2006 if (--i < 0) {
2007 i = this.DB - 1
2008 --j
3af2954a 2009 }
3af2954a
IC
2010 }
2011 }
ab78acc6
IC
2012 return z.revert(r)
2013}
3af2954a 2014
ab78acc6
IC
2015// (public) gcd(this,a) (HAC 14.54)
2016function bnGCD(a) {
2017 var x = (this.s < 0) ? this.negate() : this.clone()
2018 var y = (a.s < 0) ? a.negate() : a.clone()
2019 if (x.compareTo(y) < 0) {
2020 var t = x
2021 x = y
2022 y = t
2023 }
2024 var i = x.getLowestSetBit(),
2025 g = y.getLowestSetBit()
2026 if (g < 0) return x
2027 if (i < g) g = i
2028 if (g > 0) {
2029 x.rShiftTo(g, x)
2030 y.rShiftTo(g, y)
2031 }
2032 while (x.signum() > 0) {
2033 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
2034 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
2035 if (x.compareTo(y) >= 0) {
2036 x.subTo(y, x)
2037 x.rShiftTo(1, x)
2038 } else {
2039 y.subTo(x, y)
2040 y.rShiftTo(1, y)
2041 }
3af2954a 2042 }
ab78acc6
IC
2043 if (g > 0) y.lShiftTo(g, y)
2044 return y
2045}
3af2954a 2046
ab78acc6
IC
2047// (protected) this % n, n < 2^26
2048function bnpModInt(n) {
2049 if (n <= 0) return 0
2050 var d = this.DV % n,
2051 r = (this.s < 0) ? n - 1 : 0
2052 if (this.t > 0)
2053 if (d == 0) r = this[0] % n
2054 else
2055 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
2056 return r
2057}
3af2954a 2058
ab78acc6
IC
2059// (public) 1/this % m (HAC 14.61)
2060function bnModInverse(m) {
2061 var ac = m.isEven()
2062 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
2063 var u = m.clone(),
2064 v = this.clone()
2065 var a = nbv(1),
2066 b = nbv(0),
2067 c = nbv(0),
2068 d = nbv(1)
2069 while (u.signum() != 0) {
2070 while (u.isEven()) {
2071 u.rShiftTo(1, u)
2072 if (ac) {
2073 if (!a.isEven() || !b.isEven()) {
2074 a.addTo(this, a)
2075 b.subTo(m, b)
2076 }
2077 a.rShiftTo(1, a)
2078 } else if (!b.isEven()) b.subTo(m, b)
2079 b.rShiftTo(1, b)
2080 }
2081 while (v.isEven()) {
2082 v.rShiftTo(1, v)
2083 if (ac) {
2084 if (!c.isEven() || !d.isEven()) {
2085 c.addTo(this, c)
2086 d.subTo(m, d)
2087 }
2088 c.rShiftTo(1, c)
2089 } else if (!d.isEven()) d.subTo(m, d)
2090 d.rShiftTo(1, d)
2091 }
2092 if (u.compareTo(v) >= 0) {
2093 u.subTo(v, u)
2094 if (ac) a.subTo(c, a)
2095 b.subTo(d, b)
2096 } else {
2097 v.subTo(u, v)
2098 if (ac) c.subTo(a, c)
2099 d.subTo(b, d)
2100 }
2101 }
2102 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2103 if (d.compareTo(m) >= 0) return d.subtract(m)
2104 if (d.signum() < 0) d.addTo(m, d)
2105 else return d
2106 if (d.signum() < 0) return d.add(m)
2107 else return d
2108}
2109
2110var lowprimes = [
2111 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2112 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2113 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2114 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2115 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2116 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2117 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2118 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2119 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2120 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2121 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2122]
2123
2124var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2125
2126// (public) test primality with certainty >= 1-.5^t
2127function bnIsProbablePrime(t) {
2128 var i, x = this.abs()
2129 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2130 for (i = 0; i < lowprimes.length; ++i)
2131 if (x[0] == lowprimes[i]) return true
2132 return false
3af2954a 2133 }
ab78acc6
IC
2134 if (x.isEven()) return false
2135 i = 1
2136 while (i < lowprimes.length) {
2137 var m = lowprimes[i],
2138 j = i + 1
2139 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2140 m = x.modInt(m)
2141 while (i < j) if (m % lowprimes[i++] == 0) return false
2142 }
2143 return x.millerRabin(t)
2144}
2145
2146// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2147function bnpMillerRabin(t) {
2148 var n1 = this.subtract(BigInteger.ONE)
2149 var k = n1.getLowestSetBit()
2150 if (k <= 0) return false
2151 var r = n1.shiftRight(k)
2152 t = (t + 1) >> 1
2153 if (t > lowprimes.length) t = lowprimes.length
2154 var a = new BigInteger(null)
2155 var j, bases = []
2156 for (var i = 0; i < t; ++i) {
2157 for (;;) {
2158 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2159 if (bases.indexOf(j) == -1) break
2160 }
2161 bases.push(j)
2162 a.fromInt(j)
2163 var y = a.modPow(r, this)
2164 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2165 var j = 1
2166 while (j++ < k && y.compareTo(n1) != 0) {
2167 y = y.modPowInt(2, this)
2168 if (y.compareTo(BigInteger.ONE) == 0) return false
2169 }
2170 if (y.compareTo(n1) != 0) return false
2171 }
3af2954a 2172 }
ab78acc6
IC
2173 return true
2174}
3af2954a 2175
ab78acc6
IC
2176// protected
2177proto.chunkSize = bnpChunkSize
2178proto.toRadix = bnpToRadix
2179proto.fromRadix = bnpFromRadix
2180proto.fromNumber = bnpFromNumber
2181proto.bitwiseTo = bnpBitwiseTo
2182proto.changeBit = bnpChangeBit
2183proto.addTo = bnpAddTo
2184proto.dMultiply = bnpDMultiply
2185proto.dAddOffset = bnpDAddOffset
2186proto.multiplyLowerTo = bnpMultiplyLowerTo
2187proto.multiplyUpperTo = bnpMultiplyUpperTo
2188proto.modInt = bnpModInt
2189proto.millerRabin = bnpMillerRabin
3af2954a 2190
ab78acc6
IC
2191// public
2192proto.clone = bnClone
2193proto.intValue = bnIntValue
2194proto.byteValue = bnByteValue
2195proto.shortValue = bnShortValue
2196proto.signum = bnSigNum
2197proto.toByteArray = bnToByteArray
2198proto.equals = bnEquals
2199proto.min = bnMin
2200proto.max = bnMax
2201proto.and = bnAnd
2202proto.or = bnOr
2203proto.xor = bnXor
2204proto.andNot = bnAndNot
2205proto.not = bnNot
2206proto.shiftLeft = bnShiftLeft
2207proto.shiftRight = bnShiftRight
2208proto.getLowestSetBit = bnGetLowestSetBit
2209proto.bitCount = bnBitCount
2210proto.testBit = bnTestBit
2211proto.setBit = bnSetBit
2212proto.clearBit = bnClearBit
2213proto.flipBit = bnFlipBit
2214proto.add = bnAdd
2215proto.subtract = bnSubtract
2216proto.multiply = bnMultiply
2217proto.divide = bnDivide
2218proto.remainder = bnRemainder
2219proto.divideAndRemainder = bnDivideAndRemainder
2220proto.modPow = bnModPow
2221proto.modInverse = bnModInverse
2222proto.pow = bnPow
2223proto.gcd = bnGCD
2224proto.isProbablePrime = bnIsProbablePrime
3af2954a 2225
ab78acc6
IC
2226// JSBN-specific extension
2227proto.square = bnSquare
3af2954a 2228
ab78acc6
IC
2229// constants
2230BigInteger.ZERO = nbv(0)
2231BigInteger.ONE = nbv(1)
2232BigInteger.valueOf = nbv
3af2954a 2233
ab78acc6 2234module.exports = BigInteger
3af2954a 2235
ab78acc6
IC
2236},{"../package.json":4}],2:[function(require,module,exports){
2237(function (Buffer){
2238// FIXME: Kind of a weird way to throw exceptions, consider removing
2239var assert = require('assert')
2240var BigInteger = require('./bigi')
3af2954a 2241
ab78acc6
IC
2242/**
2243 * Turns a byte array into a big integer.
2244 *
2245 * This function will interpret a byte array as a big integer in big
2246 * endian notation.
2247 */
2248BigInteger.fromByteArrayUnsigned = function(byteArray) {
2249 // BigInteger expects a DER integer conformant byte array
2250 if (byteArray[0] & 0x80) {
2251 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2252 }
2253
ab78acc6
IC
2254 return new BigInteger(byteArray)
2255}
3af2954a 2256
ab78acc6
IC
2257/**
2258 * Returns a byte array representation of the big integer.
2259 *
2260 * This returns the absolute of the contained value in big endian
2261 * form. A value of zero results in an empty array.
2262 */
2263BigInteger.prototype.toByteArrayUnsigned = function() {
2264 var byteArray = this.toByteArray()
2265 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2266}
3af2954a 2267
ab78acc6
IC
2268BigInteger.fromDERInteger = function(byteArray) {
2269 return new BigInteger(byteArray)
2270}
3af2954a 2271
ab78acc6
IC
2272/*
2273 * Converts BigInteger to a DER integer representation.
2274 *
2275 * The format for this value uses the most significant bit as a sign
2276 * bit. If the most significant bit is already set and the integer is
2277 * positive, a 0x00 is prepended.
2278 *
2279 * Examples:
2280 *
2281 * 0 => 0x00
2282 * 1 => 0x01
2283 * -1 => 0xff
2284 * 127 => 0x7f
2285 * -127 => 0x81
2286 * 128 => 0x0080
2287 * -128 => 0x80
2288 * 255 => 0x00ff
2289 * -255 => 0xff01
2290 * 16300 => 0x3fac
2291 * -16300 => 0xc054
2292 * 62300 => 0x00f35c
2293 * -62300 => 0xff0ca4
2294*/
2295BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
3af2954a 2296
ab78acc6
IC
2297BigInteger.fromBuffer = function(buffer) {
2298 // BigInteger expects a DER integer conformant byte array
2299 if (buffer[0] & 0x80) {
2300 var byteArray = Array.prototype.slice.call(buffer)
3af2954a 2301
ab78acc6 2302 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2303 }
2304
ab78acc6
IC
2305 return new BigInteger(buffer)
2306}
3af2954a 2307
ab78acc6
IC
2308BigInteger.fromHex = function(hex) {
2309 if (hex === '') return BigInteger.ZERO
3af2954a 2310
ab78acc6
IC
2311 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2312 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2313 return new BigInteger(hex, 16)
2314}
3af2954a 2315
ab78acc6
IC
2316BigInteger.prototype.toBuffer = function(size) {
2317 var byteArray = this.toByteArrayUnsigned()
2318 var zeros = []
3af2954a 2319
ab78acc6
IC
2320 var padding = size - byteArray.length
2321 while (zeros.length < padding) zeros.push(0)
3af2954a 2322
ab78acc6
IC
2323 return new Buffer(zeros.concat(byteArray))
2324}
3af2954a 2325
ab78acc6
IC
2326BigInteger.prototype.toHex = function(size) {
2327 return this.toBuffer(size).toString('hex')
2328}
3af2954a 2329
ab78acc6
IC
2330}).call(this,require("buffer").Buffer)
2331},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2332var BigInteger = require('./bigi')
3af2954a 2333
ab78acc6
IC
2334//addons
2335require('./convert')
3af2954a 2336
ab78acc6
IC
2337module.exports = BigInteger
2338},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2339module.exports={
2340 "name": "bigi",
2341 "version": "1.4.0",
2342 "description": "Big integers.",
2343 "keywords": [
2344 "cryptography",
2345 "math",
2346 "bitcoin",
2347 "arbitrary",
2348 "precision",
2349 "arithmetic",
2350 "big",
2351 "integer",
2352 "int",
2353 "number",
2354 "biginteger",
2355 "bigint",
2356 "bignumber",
2357 "decimal",
2358 "float"
2359 ],
2360 "devDependencies": {
2361 "mocha": "^1.20.1",
2362 "jshint": "^2.5.1",
2363 "coveralls": "^2.10.0",
2364 "istanbul": "^0.2.11"
2365 },
2366 "repository": {
2367 "url": "https://github.com/cryptocoinjs/bigi",
2368 "type": "git"
2369 },
2370 "main": "./lib/index.js",
2371 "scripts": {
2372 "test": "_mocha -- test/*.js",
2373 "jshint": "jshint --config jshint.json lib/*.js ; true",
2374 "unit": "mocha",
2375 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2376 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2377 },
2378 "dependencies": {},
2379 "testling": {
2380 "files": "test/*.js",
2381 "harness": "mocha",
2382 "browsers": [
2383 "ie/9..latest",
2384 "firefox/latest",
2385 "chrome/latest",
2386 "safari/6.0..latest",
2387 "iphone/6.0..latest",
2388 "android-browser/4.2..latest"
2389 ]
2390 },
2391 "bugs": {
2392 "url": "https://github.com/cryptocoinjs/bigi/issues"
2393 },
2394 "homepage": "https://github.com/cryptocoinjs/bigi",
2395 "_id": "bigi@1.4.0",
2396 "dist": {
2397 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2398 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2399 },
2400 "_from": "bigi@^1.4.0",
2401 "_npmVersion": "1.4.3",
2402 "_npmUser": {
2403 "name": "jp",
2404 "email": "jprichardson@gmail.com"
2405 },
2406 "maintainers": [
2407 {
2408 "name": "jp",
2409 "email": "jprichardson@gmail.com"
2410 },
2411 {
2412 "name": "midnightlightning",
2413 "email": "boydb@midnightdesign.ws"
2414 },
2415 {
2416 "name": "sidazhang",
2417 "email": "sidazhang89@gmail.com"
2418 },
2419 {
2420 "name": "nadav",
2421 "email": "npm@shesek.info"
3af2954a 2422 }
ab78acc6
IC
2423 ],
2424 "directories": {},
2425 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2426 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2427}
3af2954a 2428
ab78acc6
IC
2429},{}],5:[function(require,module,exports){
2430// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2431//
2432// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2433//
2434// Originally from narwhal.js (http://narwhaljs.org)
2435// Copyright (c) 2009 Thomas Robinson <280north.com>
2436//
2437// Permission is hereby granted, free of charge, to any person obtaining a copy
2438// of this software and associated documentation files (the 'Software'), to
2439// deal in the Software without restriction, including without limitation the
2440// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2441// sell copies of the Software, and to permit persons to whom the Software is
2442// furnished to do so, subject to the following conditions:
2443//
2444// The above copyright notice and this permission notice shall be included in
2445// all copies or substantial portions of the Software.
2446//
2447// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2448// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2449// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2450// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2451// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2452// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3af2954a 2453
ab78acc6
IC
2454// when used in node, this will actually load the util module we depend on
2455// versus loading the builtin util module as happens otherwise
2456// this is a bug in node module loading as far as I am concerned
2457var util = require('util/');
3af2954a 2458
ab78acc6
IC
2459var pSlice = Array.prototype.slice;
2460var hasOwn = Object.prototype.hasOwnProperty;
3af2954a 2461
ab78acc6
IC
2462// 1. The assert module provides functions that throw
2463// AssertionError's when particular conditions are not met. The
2464// assert module must conform to the following interface.
3af2954a 2465
ab78acc6 2466var assert = module.exports = ok;
3af2954a 2467
ab78acc6
IC
2468// 2. The AssertionError is defined in assert.
2469// new assert.AssertionError({ message: message,
2470// actual: actual,
2471// expected: expected })
3af2954a 2472
ab78acc6
IC
2473assert.AssertionError = function AssertionError(options) {
2474 this.name = 'AssertionError';
2475 this.actual = options.actual;
2476 this.expected = options.expected;
2477 this.operator = options.operator;
2478 if (options.message) {
2479 this.message = options.message;
2480 this.generatedMessage = false;
2481 } else {
2482 this.message = getMessage(this);
2483 this.generatedMessage = true;
2484 }
2485 var stackStartFunction = options.stackStartFunction || fail;
3af2954a 2486
ab78acc6
IC
2487 if (Error.captureStackTrace) {
2488 Error.captureStackTrace(this, stackStartFunction);
3af2954a 2489 }
ab78acc6
IC
2490 else {
2491 // non v8 browsers so we can have a stacktrace
2492 var err = new Error();
2493 if (err.stack) {
2494 var out = err.stack;
3af2954a 2495
ab78acc6
IC
2496 // try to strip useless frames
2497 var fn_name = stackStartFunction.name;
2498 var idx = out.indexOf('\n' + fn_name);
2499 if (idx >= 0) {
2500 // once we have located the function frame
2501 // we need to strip out everything before it (and its line)
2502 var next_line = out.indexOf('\n', idx + 1);
2503 out = out.substring(next_line + 1);
2504 }
3af2954a 2505
ab78acc6 2506 this.stack = out;
3af2954a 2507 }
3af2954a 2508 }
ab78acc6 2509};
3af2954a 2510
ab78acc6
IC
2511// assert.AssertionError instanceof Error
2512util.inherits(assert.AssertionError, Error);
3af2954a 2513
ab78acc6
IC
2514function replacer(key, value) {
2515 if (util.isUndefined(value)) {
2516 return '' + value;
2517 }
2518 if (util.isNumber(value) && !isFinite(value)) {
2519 return value.toString();
2520 }
2521 if (util.isFunction(value) || util.isRegExp(value)) {
2522 return value.toString();
2523 }
2524 return value;
2525}
3af2954a 2526
ab78acc6
IC
2527function truncate(s, n) {
2528 if (util.isString(s)) {
2529 return s.length < n ? s : s.slice(0, n);
2530 } else {
2531 return s;
2532 }
2533}
3af2954a 2534
ab78acc6
IC
2535function getMessage(self) {
2536 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2537 self.operator + ' ' +
2538 truncate(JSON.stringify(self.expected, replacer), 128);
2539}
3af2954a 2540
ab78acc6
IC
2541// At present only the three keys mentioned above are used and
2542// understood by the spec. Implementations or sub modules can pass
2543// other keys to the AssertionError's constructor - they will be
2544// ignored.
3af2954a 2545
ab78acc6
IC
2546// 3. All of the following functions must throw an AssertionError
2547// when a corresponding condition is not met, with a message that
2548// may be undefined if not provided. All assertion methods provide
2549// both the actual and expected values to the assertion error for
2550// display purposes.
3af2954a 2551
ab78acc6
IC
2552function fail(actual, expected, message, operator, stackStartFunction) {
2553 throw new assert.AssertionError({
2554 message: message,
2555 actual: actual,
2556 expected: expected,
2557 operator: operator,
2558 stackStartFunction: stackStartFunction
2559 });
2560}
3af2954a 2561
ab78acc6
IC
2562// EXTENSION! allows for well behaved errors defined elsewhere.
2563assert.fail = fail;
ebd8d4e8 2564
ab78acc6
IC
2565// 4. Pure assertion tests whether a value is truthy, as determined
2566// by !!guard.
2567// assert.ok(guard, message_opt);
2568// This statement is equivalent to assert.equal(true, !!guard,
2569// message_opt);. To test strictly for the value true, use
2570// assert.strictEqual(true, guard, message_opt);.
3af2954a 2571
ab78acc6
IC
2572function ok(value, message) {
2573 if (!value) fail(value, true, message, '==', assert.ok);
2574}
2575assert.ok = ok;
3af2954a 2576
ab78acc6
IC
2577// 5. The equality assertion tests shallow, coercive equality with
2578// ==.
2579// assert.equal(actual, expected, message_opt);
3af2954a 2580
ab78acc6
IC
2581assert.equal = function equal(actual, expected, message) {
2582 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2583};
3af2954a 2584
ab78acc6
IC
2585// 6. The non-equality assertion tests for whether two objects are not equal
2586// with != assert.notEqual(actual, expected, message_opt);
3af2954a 2587
ab78acc6
IC
2588assert.notEqual = function notEqual(actual, expected, message) {
2589 if (actual == expected) {
2590 fail(actual, expected, message, '!=', assert.notEqual);
3af2954a 2591 }
ab78acc6 2592};
3af2954a 2593
ab78acc6
IC
2594// 7. The equivalence assertion tests a deep equality relation.
2595// assert.deepEqual(actual, expected, message_opt);
3af2954a 2596
ab78acc6
IC
2597assert.deepEqual = function deepEqual(actual, expected, message) {
2598 if (!_deepEqual(actual, expected)) {
2599 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2600 }
2601};
3af2954a 2602
ab78acc6
IC
2603function _deepEqual(actual, expected) {
2604 // 7.1. All identical values are equivalent, as determined by ===.
2605 if (actual === expected) {
2606 return true;
3af2954a 2607
ab78acc6
IC
2608 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2609 if (actual.length != expected.length) return false;
3af2954a 2610
ab78acc6
IC
2611 for (var i = 0; i < actual.length; i++) {
2612 if (actual[i] !== expected[i]) return false;
3af2954a
IC
2613 }
2614
ab78acc6 2615 return true;
3af2954a 2616
ab78acc6
IC
2617 // 7.2. If the expected value is a Date object, the actual value is
2618 // equivalent if it is also a Date object that refers to the same time.
2619 } else if (util.isDate(actual) && util.isDate(expected)) {
2620 return actual.getTime() === expected.getTime();
3af2954a 2621
ab78acc6
IC
2622 // 7.3 If the expected value is a RegExp object, the actual value is
2623 // equivalent if it is also a RegExp object with the same source and
2624 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2625 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2626 return actual.source === expected.source &&
2627 actual.global === expected.global &&
2628 actual.multiline === expected.multiline &&
2629 actual.lastIndex === expected.lastIndex &&
2630 actual.ignoreCase === expected.ignoreCase;
3af2954a 2631
ab78acc6
IC
2632 // 7.4. Other pairs that do not both pass typeof value == 'object',
2633 // equivalence is determined by ==.
2634 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2635 return actual == expected;
3af2954a 2636
ab78acc6
IC
2637 // 7.5 For all other Object pairs, including Array objects, equivalence is
2638 // determined by having the same number of owned properties (as verified
2639 // with Object.prototype.hasOwnProperty.call), the same set of keys
2640 // (although not necessarily the same order), equivalent values for every
2641 // corresponding key, and an identical 'prototype' property. Note: this
2642 // accounts for both named and indexed properties on Arrays.
2643 } else {
2644 return objEquiv(actual, expected);
3af2954a 2645 }
ab78acc6 2646}
3af2954a 2647
ab78acc6
IC
2648function isArguments(object) {
2649 return Object.prototype.toString.call(object) == '[object Arguments]';
2650}
3af2954a 2651
ab78acc6
IC
2652function objEquiv(a, b) {
2653 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2654 return false;
2655 // an identical 'prototype' property.
2656 if (a.prototype !== b.prototype) return false;
2657 // if one is a primitive, the other must be same
2658 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2659 return a === b;
3af2954a 2660 }
ab78acc6
IC
2661 var aIsArgs = isArguments(a),
2662 bIsArgs = isArguments(b);
2663 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2664 return false;
2665 if (aIsArgs) {
2666 a = pSlice.call(a);
2667 b = pSlice.call(b);
2668 return _deepEqual(a, b);
3af2954a 2669 }
ab78acc6
IC
2670 var ka = objectKeys(a),
2671 kb = objectKeys(b),
2672 key, i;
2673 // having the same number of owned properties (keys incorporates
2674 // hasOwnProperty)
2675 if (ka.length != kb.length)
2676 return false;
2677 //the same set of keys (although not necessarily the same order),
2678 ka.sort();
2679 kb.sort();
2680 //~~~cheap key test
2681 for (i = ka.length - 1; i >= 0; i--) {
2682 if (ka[i] != kb[i])
2683 return false;
3af2954a 2684 }
ab78acc6
IC
2685 //equivalent values for every corresponding key, and
2686 //~~~possibly expensive deep test
2687 for (i = ka.length - 1; i >= 0; i--) {
2688 key = ka[i];
2689 if (!_deepEqual(a[key], b[key])) return false;
3af2954a 2690 }
ab78acc6
IC
2691 return true;
2692}
2693
2694// 8. The non-equivalence assertion tests for any deep inequality.
2695// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 2696
ab78acc6
IC
2697assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2698 if (_deepEqual(actual, expected)) {
2699 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 2700 }
ab78acc6 2701};
3af2954a 2702
ab78acc6
IC
2703// 9. The strict equality assertion tests strict equality, as determined by ===.
2704// assert.strictEqual(actual, expected, message_opt);
3af2954a 2705
ab78acc6
IC
2706assert.strictEqual = function strictEqual(actual, expected, message) {
2707 if (actual !== expected) {
2708 fail(actual, expected, message, '===', assert.strictEqual);
3af2954a 2709 }
ab78acc6 2710};
3af2954a 2711
ab78acc6
IC
2712// 10. The strict non-equality assertion tests for strict inequality, as
2713// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 2714
ab78acc6
IC
2715assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2716 if (actual === expected) {
2717 fail(actual, expected, message, '!==', assert.notStrictEqual);
2718 }
2719};
3af2954a 2720
ab78acc6
IC
2721function expectedException(actual, expected) {
2722 if (!actual || !expected) {
2723 return false;
2724 }
3af2954a 2725
ab78acc6
IC
2726 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2727 return expected.test(actual);
2728 } else if (actual instanceof expected) {
2729 return true;
2730 } else if (expected.call({}, actual) === true) {
2731 return true;
3af2954a
IC
2732 }
2733
ab78acc6
IC
2734 return false;
2735}
3af2954a 2736
ab78acc6
IC
2737function _throws(shouldThrow, block, expected, message) {
2738 var actual;
3af2954a 2739
ab78acc6
IC
2740 if (util.isString(expected)) {
2741 message = expected;
2742 expected = null;
3af2954a
IC
2743 }
2744
ab78acc6
IC
2745 try {
2746 block();
2747 } catch (e) {
2748 actual = e;
3af2954a
IC
2749 }
2750
ab78acc6
IC
2751 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2752 (message ? ' ' + message : '.');
3af2954a 2753
ab78acc6
IC
2754 if (shouldThrow && !actual) {
2755 fail(actual, expected, 'Missing expected exception' + message);
3af2954a
IC
2756 }
2757
ab78acc6
IC
2758 if (!shouldThrow && expectedException(actual, expected)) {
2759 fail(actual, expected, 'Got unwanted exception' + message);
3af2954a
IC
2760 }
2761
ab78acc6
IC
2762 if ((shouldThrow && actual && expected &&
2763 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2764 throw actual;
3af2954a 2765 }
ab78acc6 2766}
3af2954a 2767
ab78acc6
IC
2768// 11. Expected to throw an error:
2769// assert.throws(block, Error_opt, message_opt);
3af2954a 2770
ab78acc6
IC
2771assert.throws = function(block, /*optional*/error, /*optional*/message) {
2772 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2773};
3af2954a 2774
ab78acc6
IC
2775// EXTENSION! This is annoying to write outside this module.
2776assert.doesNotThrow = function(block, /*optional*/message) {
2777 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2778};
3af2954a 2779
ab78acc6 2780assert.ifError = function(err) { if (err) {throw err;}};
3af2954a 2781
ab78acc6
IC
2782var objectKeys = Object.keys || function (obj) {
2783 var keys = [];
2784 for (var key in obj) {
2785 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 2786 }
ab78acc6
IC
2787 return keys;
2788};
3af2954a 2789
ab78acc6 2790},{"util/":29}],6:[function(require,module,exports){
3af2954a 2791
ab78acc6
IC
2792},{}],7:[function(require,module,exports){
2793/*!
2794 * The buffer module from node.js, for the browser.
2795 *
2796 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2797 * @license MIT
2798 */
3af2954a 2799
ab78acc6
IC
2800var base64 = require('base64-js')
2801var ieee754 = require('ieee754')
2802var isArray = require('is-array')
3af2954a 2803
ab78acc6
IC
2804exports.Buffer = Buffer
2805exports.SlowBuffer = SlowBuffer
2806exports.INSPECT_MAX_BYTES = 50
2807Buffer.poolSize = 8192 // not used by this implementation
3af2954a 2808
ab78acc6 2809var rootParent = {}
3af2954a 2810
ab78acc6
IC
2811/**
2812 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2813 * === true Use Uint8Array implementation (fastest)
2814 * === false Use Object implementation (most compatible, even IE6)
2815 *
2816 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2817 * Opera 11.6+, iOS 4.2+.
2818 *
2819 * Due to various browser bugs, sometimes the Object implementation will be used even
2820 * when the browser supports typed arrays.
2821 *
2822 * Note:
2823 *
2824 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2825 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2826 *
2827 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2828 * on objects.
2829 *
2830 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2831 *
2832 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2833 * incorrect length in some situations.
3af2954a 2834
ab78acc6
IC
2835 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2836 * get the Object implementation, which is slower but behaves correctly.
2837 */
2838Buffer.TYPED_ARRAY_SUPPORT = (function () {
2839 function Bar () {}
2840 try {
2841 var arr = new Uint8Array(1)
2842 arr.foo = function () { return 42 }
2843 arr.constructor = Bar
2844 return arr.foo() === 42 && // typed array instances can be augmented
2845 arr.constructor === Bar && // constructor can be set
2846 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2847 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2848 } catch (e) {
2849 return false
2850 }
2851})()
3af2954a 2852
ab78acc6
IC
2853function kMaxLength () {
2854 return Buffer.TYPED_ARRAY_SUPPORT
2855 ? 0x7fffffff
2856 : 0x3fffffff
2857}
3af2954a 2858
ab78acc6
IC
2859/**
2860 * Class: Buffer
2861 * =============
2862 *
2863 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2864 * with function properties for all the node `Buffer` API functions. We use
2865 * `Uint8Array` so that square bracket notation works as expected -- it returns
2866 * a single octet.
2867 *
2868 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2869 * prototype.
2870 */
2871function Buffer (arg) {
2872 if (!(this instanceof Buffer)) {
2873 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2874 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2875 return new Buffer(arg)
3af2954a
IC
2876 }
2877
ab78acc6
IC
2878 this.length = 0
2879 this.parent = undefined
3af2954a 2880
ab78acc6
IC
2881 // Common case.
2882 if (typeof arg === 'number') {
2883 return fromNumber(this, arg)
2884 }
3af2954a 2885
ab78acc6
IC
2886 // Slightly less common case.
2887 if (typeof arg === 'string') {
2888 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2889 }
3af2954a 2890
ab78acc6
IC
2891 // Unusual.
2892 return fromObject(this, arg)
2893}
3af2954a 2894
ab78acc6
IC
2895function fromNumber (that, length) {
2896 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2897 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2898 for (var i = 0; i < length; i++) {
2899 that[i] = 0
2900 }
3af2954a 2901 }
ab78acc6
IC
2902 return that
2903}
3af2954a 2904
ab78acc6
IC
2905function fromString (that, string, encoding) {
2906 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
3af2954a 2907
ab78acc6
IC
2908 // Assumption: byteLength() return value is always < kMaxLength.
2909 var length = byteLength(string, encoding) | 0
2910 that = allocate(that, length)
3af2954a 2911
ab78acc6
IC
2912 that.write(string, encoding)
2913 return that
2914}
3af2954a 2915
ab78acc6
IC
2916function fromObject (that, object) {
2917 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
3af2954a 2918
ab78acc6 2919 if (isArray(object)) return fromArray(that, object)
3af2954a 2920
ab78acc6
IC
2921 if (object == null) {
2922 throw new TypeError('must start with number, buffer, array or string')
2923 }
3af2954a 2924
ab78acc6
IC
2925 if (typeof ArrayBuffer !== 'undefined') {
2926 if (object.buffer instanceof ArrayBuffer) {
2927 return fromTypedArray(that, object)
2928 }
2929 if (object instanceof ArrayBuffer) {
2930 return fromArrayBuffer(that, object)
2931 }
3af2954a
IC
2932 }
2933
ab78acc6 2934 if (object.length) return fromArrayLike(that, object)
3af2954a 2935
ab78acc6
IC
2936 return fromJsonObject(that, object)
2937}
3af2954a 2938
ab78acc6
IC
2939function fromBuffer (that, buffer) {
2940 var length = checked(buffer.length) | 0
2941 that = allocate(that, length)
2942 buffer.copy(that, 0, 0, length)
2943 return that
2944}
3af2954a 2945
ab78acc6
IC
2946function fromArray (that, array) {
2947 var length = checked(array.length) | 0
2948 that = allocate(that, length)
2949 for (var i = 0; i < length; i += 1) {
2950 that[i] = array[i] & 255
3af2954a 2951 }
ab78acc6
IC
2952 return that
2953}
3af2954a 2954
ab78acc6
IC
2955// Duplicate of fromArray() to keep fromArray() monomorphic.
2956function fromTypedArray (that, array) {
2957 var length = checked(array.length) | 0
2958 that = allocate(that, length)
2959 // Truncating the elements is probably not what people expect from typed
2960 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2961 // of the old Buffer constructor.
2962 for (var i = 0; i < length; i += 1) {
2963 that[i] = array[i] & 255
3af2954a 2964 }
ab78acc6
IC
2965 return that
2966}
3af2954a 2967
ab78acc6
IC
2968function fromArrayBuffer (that, array) {
2969 if (Buffer.TYPED_ARRAY_SUPPORT) {
2970 // Return an augmented `Uint8Array` instance, for best performance
2971 array.byteLength
2972 that = Buffer._augment(new Uint8Array(array))
2973 } else {
2974 // Fallback: Return an object instance of the Buffer class
2975 that = fromTypedArray(that, new Uint8Array(array))
2976 }
2977 return that
2978}
3af2954a 2979
ab78acc6
IC
2980function fromArrayLike (that, array) {
2981 var length = checked(array.length) | 0
2982 that = allocate(that, length)
2983 for (var i = 0; i < length; i += 1) {
2984 that[i] = array[i] & 255
3af2954a 2985 }
ab78acc6
IC
2986 return that
2987}
3af2954a 2988
ab78acc6
IC
2989// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2990// Returns a zero-length buffer for inputs that don't conform to the spec.
2991function fromJsonObject (that, object) {
2992 var array
2993 var length = 0
2994
2995 if (object.type === 'Buffer' && isArray(object.data)) {
2996 array = object.data
2997 length = checked(array.length) | 0
3af2954a 2998 }
ab78acc6 2999 that = allocate(that, length)
3af2954a 3000
ab78acc6
IC
3001 for (var i = 0; i < length; i += 1) {
3002 that[i] = array[i] & 255
3af2954a 3003 }
ab78acc6
IC
3004 return that
3005}
3af2954a 3006
ab78acc6
IC
3007function allocate (that, length) {
3008 if (Buffer.TYPED_ARRAY_SUPPORT) {
3009 // Return an augmented `Uint8Array` instance, for best performance
3010 that = Buffer._augment(new Uint8Array(length))
3011 } else {
3012 // Fallback: Return an object instance of the Buffer class
3013 that.length = length
3014 that._isBuffer = true
3015 }
3af2954a 3016
ab78acc6
IC
3017 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
3018 if (fromPool) that.parent = rootParent
3af2954a 3019
ab78acc6
IC
3020 return that
3021}
3af2954a 3022
ab78acc6
IC
3023function checked (length) {
3024 // Note: cannot use `length < kMaxLength` here because that fails when
3025 // length is NaN (which is otherwise coerced to zero.)
3026 if (length >= kMaxLength()) {
3027 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
3028 'size: 0x' + kMaxLength().toString(16) + ' bytes')
3af2954a 3029 }
ab78acc6
IC
3030 return length | 0
3031}
3af2954a 3032
ab78acc6
IC
3033function SlowBuffer (subject, encoding) {
3034 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
3af2954a 3035
ab78acc6
IC
3036 var buf = new Buffer(subject, encoding)
3037 delete buf.parent
3038 return buf
3039}
3af2954a 3040
ab78acc6
IC
3041Buffer.isBuffer = function isBuffer (b) {
3042 return !!(b != null && b._isBuffer)
3043}
3af2954a 3044
ab78acc6
IC
3045Buffer.compare = function compare (a, b) {
3046 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
3047 throw new TypeError('Arguments must be Buffers')
3af2954a
IC
3048 }
3049
ab78acc6 3050 if (a === b) return 0
3af2954a 3051
ab78acc6
IC
3052 var x = a.length
3053 var y = b.length
3af2954a 3054
ab78acc6
IC
3055 var i = 0
3056 var len = Math.min(x, y)
3057 while (i < len) {
3058 if (a[i] !== b[i]) break
3af2954a 3059
ab78acc6
IC
3060 ++i
3061 }
3af2954a 3062
ab78acc6
IC
3063 if (i !== len) {
3064 x = a[i]
3065 y = b[i]
3066 }
3af2954a 3067
ab78acc6
IC
3068 if (x < y) return -1
3069 if (y < x) return 1
3070 return 0
3071}
3af2954a 3072
ab78acc6
IC
3073Buffer.isEncoding = function isEncoding (encoding) {
3074 switch (String(encoding).toLowerCase()) {
3075 case 'hex':
3076 case 'utf8':
3077 case 'utf-8':
3078 case 'ascii':
3079 case 'binary':
3080 case 'base64':
3081 case 'raw':
3082 case 'ucs2':
3083 case 'ucs-2':
3084 case 'utf16le':
3085 case 'utf-16le':
3086 return true
3087 default:
3088 return false
3af2954a 3089 }
ab78acc6 3090}
3af2954a 3091
ab78acc6
IC
3092Buffer.concat = function concat (list, length) {
3093 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3af2954a 3094
ab78acc6
IC
3095 if (list.length === 0) {
3096 return new Buffer(0)
3af2954a
IC
3097 }
3098
ab78acc6
IC
3099 var i
3100 if (length === undefined) {
3101 length = 0
3102 for (i = 0; i < list.length; i++) {
3103 length += list[i].length
3104 }
3af2954a
IC
3105 }
3106
ab78acc6
IC
3107 var buf = new Buffer(length)
3108 var pos = 0
3109 for (i = 0; i < list.length; i++) {
3110 var item = list[i]
3111 item.copy(buf, pos)
3112 pos += item.length
3113 }
3114 return buf
3115}
3af2954a 3116
ab78acc6
IC
3117function byteLength (string, encoding) {
3118 if (typeof string !== 'string') string = '' + string
3119
3120 var len = string.length
3121 if (len === 0) return 0
3122
3123 // Use a for loop to avoid recursion
3124 var loweredCase = false
3125 for (;;) {
3126 switch (encoding) {
3127 case 'ascii':
3128 case 'binary':
3129 // Deprecated
3130 case 'raw':
3131 case 'raws':
3132 return len
3133 case 'utf8':
3134 case 'utf-8':
3135 return utf8ToBytes(string).length
3136 case 'ucs2':
3137 case 'ucs-2':
3138 case 'utf16le':
3139 case 'utf-16le':
3140 return len * 2
3141 case 'hex':
3142 return len >>> 1
3143 case 'base64':
3144 return base64ToBytes(string).length
3145 default:
3146 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3147 encoding = ('' + encoding).toLowerCase()
3148 loweredCase = true
3af2954a 3149 }
3af2954a 3150 }
ab78acc6
IC
3151}
3152Buffer.byteLength = byteLength
3af2954a 3153
ab78acc6
IC
3154// pre-set for values that may exist in the future
3155Buffer.prototype.length = undefined
3156Buffer.prototype.parent = undefined
3af2954a 3157
ab78acc6
IC
3158function slowToString (encoding, start, end) {
3159 var loweredCase = false
3af2954a 3160
ab78acc6
IC
3161 start = start | 0
3162 end = end === undefined || end === Infinity ? this.length : end | 0
3af2954a 3163
ab78acc6
IC
3164 if (!encoding) encoding = 'utf8'
3165 if (start < 0) start = 0
3166 if (end > this.length) end = this.length
3167 if (end <= start) return ''
3af2954a 3168
ab78acc6
IC
3169 while (true) {
3170 switch (encoding) {
3171 case 'hex':
3172 return hexSlice(this, start, end)
3af2954a 3173
ab78acc6
IC
3174 case 'utf8':
3175 case 'utf-8':
3176 return utf8Slice(this, start, end)
3af2954a 3177
ab78acc6
IC
3178 case 'ascii':
3179 return asciiSlice(this, start, end)
3af2954a 3180
ab78acc6
IC
3181 case 'binary':
3182 return binarySlice(this, start, end)
3af2954a 3183
ab78acc6
IC
3184 case 'base64':
3185 return base64Slice(this, start, end)
3af2954a 3186
ab78acc6
IC
3187 case 'ucs2':
3188 case 'ucs-2':
3189 case 'utf16le':
3190 case 'utf-16le':
3191 return utf16leSlice(this, start, end)
3af2954a 3192
ab78acc6
IC
3193 default:
3194 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3195 encoding = (encoding + '').toLowerCase()
3196 loweredCase = true
3197 }
3af2954a 3198 }
ab78acc6 3199}
3af2954a 3200
ab78acc6
IC
3201Buffer.prototype.toString = function toString () {
3202 var length = this.length | 0
3203 if (length === 0) return ''
3204 if (arguments.length === 0) return utf8Slice(this, 0, length)
3205 return slowToString.apply(this, arguments)
3206}
3af2954a 3207
ab78acc6
IC
3208Buffer.prototype.equals = function equals (b) {
3209 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3210 if (this === b) return true
3211 return Buffer.compare(this, b) === 0
3212}
3af2954a 3213
ab78acc6
IC
3214Buffer.prototype.inspect = function inspect () {
3215 var str = ''
3216 var max = exports.INSPECT_MAX_BYTES
3217 if (this.length > 0) {
3218 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3219 if (this.length > max) str += ' ... '
3af2954a 3220 }
ab78acc6
IC
3221 return '<Buffer ' + str + '>'
3222}
3af2954a 3223
ab78acc6
IC
3224Buffer.prototype.compare = function compare (b) {
3225 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3226 if (this === b) return 0
3227 return Buffer.compare(this, b)
3228}
3af2954a 3229
ab78acc6
IC
3230Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3231 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3232 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3233 byteOffset >>= 0
3af2954a 3234
ab78acc6
IC
3235 if (this.length === 0) return -1
3236 if (byteOffset >= this.length) return -1
3af2954a 3237
ab78acc6
IC
3238 // Negative offsets start from the end of the buffer
3239 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3af2954a 3240
ab78acc6
IC
3241 if (typeof val === 'string') {
3242 if (val.length === 0) return -1 // special case: looking for empty string always fails
3243 return String.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3244 }
ab78acc6
IC
3245 if (Buffer.isBuffer(val)) {
3246 return arrayIndexOf(this, val, byteOffset)
3af2954a 3247 }
ab78acc6
IC
3248 if (typeof val === 'number') {
3249 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3250 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3251 }
ab78acc6 3252 return arrayIndexOf(this, [ val ], byteOffset)
3af2954a
IC
3253 }
3254
ab78acc6
IC
3255 function arrayIndexOf (arr, val, byteOffset) {
3256 var foundIndex = -1
3257 for (var i = 0; byteOffset + i < arr.length; i++) {
3258 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3259 if (foundIndex === -1) foundIndex = i
3260 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3af2954a 3261 } else {
ab78acc6 3262 foundIndex = -1
3af2954a 3263 }
3af2954a 3264 }
ab78acc6
IC
3265 return -1
3266 }
3af2954a 3267
ab78acc6
IC
3268 throw new TypeError('val must be string, number or Buffer')
3269}
3af2954a 3270
ab78acc6
IC
3271// `get` is deprecated
3272Buffer.prototype.get = function get (offset) {
3273 console.log('.get() is deprecated. Access using array indexes instead.')
3274 return this.readUInt8(offset)
3275}
3af2954a 3276
ab78acc6
IC
3277// `set` is deprecated
3278Buffer.prototype.set = function set (v, offset) {
3279 console.log('.set() is deprecated. Access using array indexes instead.')
3280 return this.writeUInt8(v, offset)
3281}
3af2954a 3282
ab78acc6
IC
3283function hexWrite (buf, string, offset, length) {
3284 offset = Number(offset) || 0
3285 var remaining = buf.length - offset
3286 if (!length) {
3287 length = remaining
3288 } else {
3289 length = Number(length)
3290 if (length > remaining) {
3291 length = remaining
3292 }
3293 }
3af2954a 3294
ab78acc6
IC
3295 // must be an even number of digits
3296 var strLen = string.length
3297 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3af2954a 3298
ab78acc6
IC
3299 if (length > strLen / 2) {
3300 length = strLen / 2
3301 }
3302 for (var i = 0; i < length; i++) {
3303 var parsed = parseInt(string.substr(i * 2, 2), 16)
3304 if (isNaN(parsed)) throw new Error('Invalid hex string')
3305 buf[offset + i] = parsed
3af2954a 3306 }
ab78acc6
IC
3307 return i
3308}
3309
3310function utf8Write (buf, string, offset, length) {
3311 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3312}
3af2954a 3313
ab78acc6
IC
3314function asciiWrite (buf, string, offset, length) {
3315 return blitBuffer(asciiToBytes(string), buf, offset, length)
3316}
3af2954a 3317
ab78acc6
IC
3318function binaryWrite (buf, string, offset, length) {
3319 return asciiWrite(buf, string, offset, length)
3320}
3af2954a 3321
ab78acc6
IC
3322function base64Write (buf, string, offset, length) {
3323 return blitBuffer(base64ToBytes(string), buf, offset, length)
3324}
3af2954a 3325
ab78acc6
IC
3326function ucs2Write (buf, string, offset, length) {
3327 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3328}
3af2954a 3329
ab78acc6
IC
3330Buffer.prototype.write = function write (string, offset, length, encoding) {
3331 // Buffer#write(string)
3332 if (offset === undefined) {
3333 encoding = 'utf8'
3334 length = this.length
3335 offset = 0
3336 // Buffer#write(string, encoding)
3337 } else if (length === undefined && typeof offset === 'string') {
3338 encoding = offset
3339 length = this.length
3340 offset = 0
3341 // Buffer#write(string, offset[, length][, encoding])
3342 } else if (isFinite(offset)) {
3343 offset = offset | 0
3344 if (isFinite(length)) {
3345 length = length | 0
3346 if (encoding === undefined) encoding = 'utf8'
3347 } else {
3348 encoding = length
3349 length = undefined
3350 }
3351 // legacy write(string, encoding, offset, length) - remove in v0.13
3352 } else {
3353 var swap = encoding
3354 encoding = offset
3355 offset = length | 0
3356 length = swap
3af2954a
IC
3357 }
3358
ab78acc6
IC
3359 var remaining = this.length - offset
3360 if (length === undefined || length > remaining) length = remaining
3af2954a 3361
ab78acc6
IC
3362 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3363 throw new RangeError('attempt to write outside buffer bounds')
3364 }
3af2954a 3365
ab78acc6 3366 if (!encoding) encoding = 'utf8'
3af2954a 3367
ab78acc6
IC
3368 var loweredCase = false
3369 for (;;) {
3370 switch (encoding) {
3371 case 'hex':
3372 return hexWrite(this, string, offset, length)
ebd8d4e8 3373
ab78acc6
IC
3374 case 'utf8':
3375 case 'utf-8':
3376 return utf8Write(this, string, offset, length)
ebd8d4e8 3377
ab78acc6
IC
3378 case 'ascii':
3379 return asciiWrite(this, string, offset, length)
ebd8d4e8 3380
ab78acc6
IC
3381 case 'binary':
3382 return binaryWrite(this, string, offset, length)
ebd8d4e8 3383
ab78acc6
IC
3384 case 'base64':
3385 // Warning: maxLength not taken into account in base64Write
3386 return base64Write(this, string, offset, length)
ebd8d4e8 3387
ab78acc6
IC
3388 case 'ucs2':
3389 case 'ucs-2':
3390 case 'utf16le':
3391 case 'utf-16le':
3392 return ucs2Write(this, string, offset, length)
ebd8d4e8 3393
ab78acc6
IC
3394 default:
3395 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3396 encoding = ('' + encoding).toLowerCase()
3397 loweredCase = true
3398 }
3399 }
3400}
212b1b46 3401
ab78acc6
IC
3402Buffer.prototype.toJSON = function toJSON () {
3403 return {
3404 type: 'Buffer',
3405 data: Array.prototype.slice.call(this._arr || this, 0)
3406 }
3407}
212b1b46 3408
ab78acc6
IC
3409function base64Slice (buf, start, end) {
3410 if (start === 0 && end === buf.length) {
3411 return base64.fromByteArray(buf)
3412 } else {
3413 return base64.fromByteArray(buf.slice(start, end))
3af2954a 3414 }
ab78acc6
IC
3415}
3416
3417function utf8Slice (buf, start, end) {
3418 end = Math.min(buf.length, end)
3419 var firstByte
3420 var secondByte
3421 var thirdByte
3422 var fourthByte
3423 var bytesPerSequence
3424 var tempCodePoint
3425 var codePoint
3426 var res = []
3427 var i = start
3428
3429 for (; i < end; i += bytesPerSequence) {
3430 firstByte = buf[i]
3431 codePoint = 0xFFFD
3432
3433 if (firstByte > 0xEF) {
3434 bytesPerSequence = 4
3435 } else if (firstByte > 0xDF) {
3436 bytesPerSequence = 3
3437 } else if (firstByte > 0xBF) {
3438 bytesPerSequence = 2
3439 } else {
3440 bytesPerSequence = 1
3441 }
212b1b46 3442
ab78acc6
IC
3443 if (i + bytesPerSequence <= end) {
3444 switch (bytesPerSequence) {
3445 case 1:
3446 if (firstByte < 0x80) {
3447 codePoint = firstByte
3448 }
3449 break
3450 case 2:
3451 secondByte = buf[i + 1]
3452 if ((secondByte & 0xC0) === 0x80) {
3453 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3454 if (tempCodePoint > 0x7F) {
3455 codePoint = tempCodePoint
3456 }
3457 }
3458 break
3459 case 3:
3460 secondByte = buf[i + 1]
3461 thirdByte = buf[i + 2]
3462 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3463 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3464 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3465 codePoint = tempCodePoint
3466 }
3467 }
3468 break
3469 case 4:
3470 secondByte = buf[i + 1]
3471 thirdByte = buf[i + 2]
3472 fourthByte = buf[i + 3]
3473 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3474 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3475 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3476 codePoint = tempCodePoint
3477 }
3478 }
3479 }
3480 }
212b1b46 3481
ab78acc6
IC
3482 if (codePoint === 0xFFFD) {
3483 // we generated an invalid codePoint so make sure to only advance by 1 byte
3484 bytesPerSequence = 1
3485 } else if (codePoint > 0xFFFF) {
3486 // encode to utf16 (surrogate pair dance)
3487 codePoint -= 0x10000
3488 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3489 codePoint = 0xDC00 | codePoint & 0x3FF
3490 }
212b1b46 3491
ab78acc6 3492 res.push(codePoint)
3af2954a 3493 }
212b1b46 3494
ab78acc6
IC
3495 return String.fromCharCode.apply(String, res)
3496}
212b1b46 3497
ab78acc6
IC
3498function asciiSlice (buf, start, end) {
3499 var ret = ''
3500 end = Math.min(buf.length, end)
3501
3502 for (var i = start; i < end; i++) {
3503 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 3504 }
ab78acc6
IC
3505 return ret
3506}
212b1b46 3507
ab78acc6
IC
3508function binarySlice (buf, start, end) {
3509 var ret = ''
3510 end = Math.min(buf.length, end)
212b1b46 3511
ab78acc6
IC
3512 for (var i = start; i < end; i++) {
3513 ret += String.fromCharCode(buf[i])
3514 }
3515 return ret
3516}
212b1b46 3517
ab78acc6
IC
3518function hexSlice (buf, start, end) {
3519 var len = buf.length
212b1b46 3520
ab78acc6
IC
3521 if (!start || start < 0) start = 0
3522 if (!end || end < 0 || end > len) end = len
212b1b46 3523
ab78acc6
IC
3524 var out = ''
3525 for (var i = start; i < end; i++) {
3526 out += toHex(buf[i])
3527 }
3528 return out
3529}
212b1b46 3530
ab78acc6
IC
3531function utf16leSlice (buf, start, end) {
3532 var bytes = buf.slice(start, end)
3533 var res = ''
3534 for (var i = 0; i < bytes.length; i += 2) {
3535 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3536 }
3537 return res
3538}
212b1b46 3539
ab78acc6
IC
3540Buffer.prototype.slice = function slice (start, end) {
3541 var len = this.length
3542 start = ~~start
3543 end = end === undefined ? len : ~~end
212b1b46 3544
ab78acc6
IC
3545 if (start < 0) {
3546 start += len
3547 if (start < 0) start = 0
3548 } else if (start > len) {
3549 start = len
3550 }
212b1b46 3551
ab78acc6
IC
3552 if (end < 0) {
3553 end += len
3554 if (end < 0) end = 0
3555 } else if (end > len) {
3556 end = len
3557 }
212b1b46 3558
ab78acc6 3559 if (end < start) end = start
212b1b46 3560
ab78acc6
IC
3561 var newBuf
3562 if (Buffer.TYPED_ARRAY_SUPPORT) {
3563 newBuf = Buffer._augment(this.subarray(start, end))
3564 } else {
3565 var sliceLen = end - start
3566 newBuf = new Buffer(sliceLen, undefined)
3567 for (var i = 0; i < sliceLen; i++) {
3568 newBuf[i] = this[i + start]
3af2954a
IC
3569 }
3570 }
212b1b46 3571
ab78acc6 3572 if (newBuf.length) newBuf.parent = this.parent || this
ebd8d4e8 3573
ab78acc6
IC
3574 return newBuf
3575}
ebd8d4e8 3576
ab78acc6
IC
3577/*
3578 * Need to make sure that buffer isn't trying to write out of bounds.
3579 */
3580function checkOffset (offset, ext, length) {
3581 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3582 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3583}
ebd8d4e8 3584
ab78acc6
IC
3585Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3586 offset = offset | 0
3587 byteLength = byteLength | 0
3588 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 3589
ab78acc6
IC
3590 var val = this[offset]
3591 var mul = 1
3592 var i = 0
3593 while (++i < byteLength && (mul *= 0x100)) {
3594 val += this[offset + i] * mul
3595 }
3af2954a 3596
ab78acc6
IC
3597 return val
3598}
3af2954a 3599
ab78acc6
IC
3600Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3601 offset = offset | 0
3602 byteLength = byteLength | 0
3603 if (!noAssert) {
3604 checkOffset(offset, byteLength, this.length)
3605 }
3af2954a 3606
ab78acc6
IC
3607 var val = this[offset + --byteLength]
3608 var mul = 1
3609 while (byteLength > 0 && (mul *= 0x100)) {
3610 val += this[offset + --byteLength] * mul
3af2954a
IC
3611 }
3612
ab78acc6
IC
3613 return val
3614}
3af2954a 3615
ab78acc6
IC
3616Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3617 if (!noAssert) checkOffset(offset, 1, this.length)
3618 return this[offset]
3619}
3af2954a 3620
ab78acc6
IC
3621Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3622 if (!noAssert) checkOffset(offset, 2, this.length)
3623 return this[offset] | (this[offset + 1] << 8)
3624}
3af2954a 3625
ab78acc6
IC
3626Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3627 if (!noAssert) checkOffset(offset, 2, this.length)
3628 return (this[offset] << 8) | this[offset + 1]
3629}
ebd8d4e8 3630
ab78acc6
IC
3631Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3632 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 3633
ab78acc6
IC
3634 return ((this[offset]) |
3635 (this[offset + 1] << 8) |
3636 (this[offset + 2] << 16)) +
3637 (this[offset + 3] * 0x1000000)
3638}
3af2954a 3639
ab78acc6
IC
3640Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3641 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3642
ab78acc6
IC
3643 return (this[offset] * 0x1000000) +
3644 ((this[offset + 1] << 16) |
3645 (this[offset + 2] << 8) |
3646 this[offset + 3])
3647}
ebd8d4e8 3648
ab78acc6
IC
3649Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3650 offset = offset | 0
3651 byteLength = byteLength | 0
3652 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3653
ab78acc6
IC
3654 var val = this[offset]
3655 var mul = 1
3656 var i = 0
3657 while (++i < byteLength && (mul *= 0x100)) {
3658 val += this[offset + i] * mul
ebd8d4e8 3659 }
ab78acc6 3660 mul *= 0x80
ebd8d4e8 3661
ab78acc6
IC
3662 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3663
3664 return val
ebd8d4e8
IC
3665}
3666
ab78acc6
IC
3667Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3668 offset = offset | 0
3669 byteLength = byteLength | 0
3670 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3671
ab78acc6
IC
3672 var i = byteLength
3673 var mul = 1
3674 var val = this[offset + --i]
3675 while (i > 0 && (mul *= 0x100)) {
3676 val += this[offset + --i] * mul
3677 }
3678 mul *= 0x80
ebd8d4e8 3679
ab78acc6 3680 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
ebd8d4e8 3681
ab78acc6
IC
3682 return val
3683}
ebd8d4e8 3684
ab78acc6
IC
3685Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3686 if (!noAssert) checkOffset(offset, 1, this.length)
3687 if (!(this[offset] & 0x80)) return (this[offset])
3688 return ((0xff - this[offset] + 1) * -1)
ebd8d4e8 3689}
ab78acc6
IC
3690
3691Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3692 if (!noAssert) checkOffset(offset, 2, this.length)
3693 var val = this[offset] | (this[offset + 1] << 8)
3694 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8 3695}
ab78acc6
IC
3696
3697Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3698 if (!noAssert) checkOffset(offset, 2, this.length)
3699 var val = this[offset + 1] | (this[offset] << 8)
3700 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8
IC
3701}
3702
ab78acc6
IC
3703Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3704 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3705
ab78acc6
IC
3706 return (this[offset]) |
3707 (this[offset + 1] << 8) |
3708 (this[offset + 2] << 16) |
3709 (this[offset + 3] << 24)
ebd8d4e8 3710}
ebd8d4e8 3711
ab78acc6
IC
3712Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3713 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3714
ab78acc6
IC
3715 return (this[offset] << 24) |
3716 (this[offset + 1] << 16) |
3717 (this[offset + 2] << 8) |
3718 (this[offset + 3])
ebd8d4e8
IC
3719}
3720
ab78acc6
IC
3721Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3722 if (!noAssert) checkOffset(offset, 4, this.length)
3723 return ieee754.read(this, offset, true, 23, 4)
ebd8d4e8
IC
3724}
3725
ab78acc6
IC
3726Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3727 if (!noAssert) checkOffset(offset, 4, this.length)
3728 return ieee754.read(this, offset, false, 23, 4)
ebd8d4e8
IC
3729}
3730
ab78acc6
IC
3731Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3732 if (!noAssert) checkOffset(offset, 8, this.length)
3733 return ieee754.read(this, offset, true, 52, 8)
ebd8d4e8
IC
3734}
3735
ab78acc6
IC
3736Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3737 if (!noAssert) checkOffset(offset, 8, this.length)
3738 return ieee754.read(this, offset, false, 52, 8)
ebd8d4e8
IC
3739}
3740
ab78acc6
IC
3741function checkInt (buf, value, offset, ext, max, min) {
3742 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3743 if (value > max || value < min) throw new RangeError('value is out of bounds')
3744 if (offset + ext > buf.length) throw new RangeError('index out of range')
ebd8d4e8
IC
3745}
3746
ab78acc6
IC
3747Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3748 value = +value
3749 offset = offset | 0
3750 byteLength = byteLength | 0
3751 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3752
ab78acc6
IC
3753 var mul = 1
3754 var i = 0
3755 this[offset] = value & 0xFF
3756 while (++i < byteLength && (mul *= 0x100)) {
3757 this[offset + i] = (value / mul) & 0xFF
3758 }
ebd8d4e8 3759
ab78acc6 3760 return offset + byteLength
ebd8d4e8
IC
3761}
3762
ab78acc6
IC
3763Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3764 value = +value
3765 offset = offset | 0
3766 byteLength = byteLength | 0
3767 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3768
ab78acc6
IC
3769 var i = byteLength - 1
3770 var mul = 1
3771 this[offset + i] = value & 0xFF
3772 while (--i >= 0 && (mul *= 0x100)) {
3773 this[offset + i] = (value / mul) & 0xFF
3774 }
ebd8d4e8 3775
ab78acc6 3776 return offset + byteLength
ebd8d4e8
IC
3777}
3778
ab78acc6
IC
3779Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3780 value = +value
3781 offset = offset | 0
3782 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3783 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3784 this[offset] = value
3785 return offset + 1
ebd8d4e8
IC
3786}
3787
ab78acc6
IC
3788function objectWriteUInt16 (buf, value, offset, littleEndian) {
3789 if (value < 0) value = 0xffff + value + 1
3790 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3791 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3792 (littleEndian ? i : 1 - i) * 8
ebd8d4e8 3793 }
ebd8d4e8
IC
3794}
3795
ab78acc6
IC
3796Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3797 value = +value
3798 offset = offset | 0
3799 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3800 if (Buffer.TYPED_ARRAY_SUPPORT) {
3801 this[offset] = value
3802 this[offset + 1] = (value >>> 8)
3803 } else {
3804 objectWriteUInt16(this, value, offset, true)
3805 }
3806 return offset + 2
ebd8d4e8
IC
3807}
3808
ab78acc6
IC
3809Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3810 value = +value
3811 offset = offset | 0
3812 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3813 if (Buffer.TYPED_ARRAY_SUPPORT) {
3814 this[offset] = (value >>> 8)
3815 this[offset + 1] = value
3816 } else {
3817 objectWriteUInt16(this, value, offset, false)
ebd8d4e8 3818 }
ab78acc6 3819 return offset + 2
ebd8d4e8
IC
3820}
3821
ab78acc6
IC
3822function objectWriteUInt32 (buf, value, offset, littleEndian) {
3823 if (value < 0) value = 0xffffffff + value + 1
3824 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3825 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3826 }
ebd8d4e8
IC
3827}
3828
ab78acc6
IC
3829Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3830 value = +value
3831 offset = offset | 0
3832 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3833 if (Buffer.TYPED_ARRAY_SUPPORT) {
3834 this[offset + 3] = (value >>> 24)
3835 this[offset + 2] = (value >>> 16)
3836 this[offset + 1] = (value >>> 8)
3837 this[offset] = value
3838 } else {
3839 objectWriteUInt32(this, value, offset, true)
ebd8d4e8 3840 }
ab78acc6 3841 return offset + 4
ebd8d4e8
IC
3842}
3843
ab78acc6
IC
3844Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3845 value = +value
3846 offset = offset | 0
3847 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3848 if (Buffer.TYPED_ARRAY_SUPPORT) {
3849 this[offset] = (value >>> 24)
3850 this[offset + 1] = (value >>> 16)
3851 this[offset + 2] = (value >>> 8)
3852 this[offset + 3] = value
3853 } else {
3854 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3855 }
ab78acc6
IC
3856 return offset + 4
3857}
3858
3859Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3860 value = +value
3861 offset = offset | 0
3862 if (!noAssert) {
3863 var limit = Math.pow(2, 8 * byteLength - 1)
3864
3865 checkInt(this, value, offset, byteLength, limit - 1, -limit)
ebd8d4e8 3866 }
ab78acc6
IC
3867
3868 var i = 0
3869 var mul = 1
3870 var sub = value < 0 ? 1 : 0
3871 this[offset] = value & 0xFF
3872 while (++i < byteLength && (mul *= 0x100)) {
3873 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
ebd8d4e8 3874 }
ebd8d4e8 3875
ab78acc6 3876 return offset + byteLength
ebd8d4e8
IC
3877}
3878
ab78acc6
IC
3879Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3880 value = +value
3881 offset = offset | 0
3882 if (!noAssert) {
3883 var limit = Math.pow(2, 8 * byteLength - 1)
ebd8d4e8 3884
ab78acc6
IC
3885 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3886 }
ebd8d4e8 3887
ab78acc6
IC
3888 var i = byteLength - 1
3889 var mul = 1
3890 var sub = value < 0 ? 1 : 0
3891 this[offset + i] = value & 0xFF
3892 while (--i >= 0 && (mul *= 0x100)) {
3893 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3894 }
3895
3896 return offset + byteLength
ebd8d4e8
IC
3897}
3898
ab78acc6
IC
3899Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3900 value = +value
3901 offset = offset | 0
3902 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3903 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3904 if (value < 0) value = 0xff + value + 1
3905 this[offset] = value
3906 return offset + 1
ebd8d4e8
IC
3907}
3908
ab78acc6
IC
3909Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3910 value = +value
3911 offset = offset | 0
3912 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3913 if (Buffer.TYPED_ARRAY_SUPPORT) {
3914 this[offset] = value
3915 this[offset + 1] = (value >>> 8)
3916 } else {
3917 objectWriteUInt16(this, value, offset, true)
3918 }
3919 return offset + 2
ebd8d4e8
IC
3920}
3921
ab78acc6
IC
3922Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3923 value = +value
3924 offset = offset | 0
3925 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3926 if (Buffer.TYPED_ARRAY_SUPPORT) {
3927 this[offset] = (value >>> 8)
3928 this[offset + 1] = value
3929 } else {
3930 objectWriteUInt16(this, value, offset, false)
3931 }
3932 return offset + 2
ebd8d4e8
IC
3933}
3934
ab78acc6
IC
3935Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3936 value = +value
3937 offset = offset | 0
3938 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3939 if (Buffer.TYPED_ARRAY_SUPPORT) {
3940 this[offset] = value
3941 this[offset + 1] = (value >>> 8)
3942 this[offset + 2] = (value >>> 16)
3943 this[offset + 3] = (value >>> 24)
3944 } else {
3945 objectWriteUInt32(this, value, offset, true)
3946 }
3947 return offset + 4
3948}
3949
3950Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3951 value = +value
3952 offset = offset | 0
3953 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3954 if (value < 0) value = 0xffffffff + value + 1
3955 if (Buffer.TYPED_ARRAY_SUPPORT) {
3956 this[offset] = (value >>> 24)
3957 this[offset + 1] = (value >>> 16)
3958 this[offset + 2] = (value >>> 8)
3959 this[offset + 3] = value
3960 } else {
3961 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3962 }
ab78acc6 3963 return offset + 4
ebd8d4e8
IC
3964}
3965
ab78acc6
IC
3966function checkIEEE754 (buf, value, offset, ext, max, min) {
3967 if (value > max || value < min) throw new RangeError('value is out of bounds')
3968 if (offset + ext > buf.length) throw new RangeError('index out of range')
3969 if (offset < 0) throw new RangeError('index out of range')
3970}
ebd8d4e8 3971
ab78acc6
IC
3972function writeFloat (buf, value, offset, littleEndian, noAssert) {
3973 if (!noAssert) {
3974 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3975 }
3976 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3977 return offset + 4
3978}
ebd8d4e8 3979
ab78acc6
IC
3980Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3981 return writeFloat(this, value, offset, true, noAssert)
3982}
ebd8d4e8 3983
ab78acc6
IC
3984Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3985 return writeFloat(this, value, offset, false, noAssert)
3986}
ebd8d4e8 3987
ab78acc6
IC
3988function writeDouble (buf, value, offset, littleEndian, noAssert) {
3989 if (!noAssert) {
3990 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
ebd8d4e8 3991 }
ab78acc6
IC
3992 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3993 return offset + 8
ebd8d4e8
IC
3994}
3995
ab78acc6
IC
3996Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3997 return writeDouble(this, value, offset, true, noAssert)
ebd8d4e8
IC
3998}
3999
ab78acc6
IC
4000Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
4001 return writeDouble(this, value, offset, false, noAssert)
4002}
ebd8d4e8 4003
ab78acc6
IC
4004// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
4005Buffer.prototype.copy = function copy (target, targetStart, start, end) {
4006 if (!start) start = 0
4007 if (!end && end !== 0) end = this.length
4008 if (targetStart >= target.length) targetStart = target.length
4009 if (!targetStart) targetStart = 0
4010 if (end > 0 && end < start) end = start
4011
4012 // Copy 0 bytes; we're done
4013 if (end === start) return 0
4014 if (target.length === 0 || this.length === 0) return 0
ebd8d4e8 4015
ab78acc6
IC
4016 // Fatal error conditions
4017 if (targetStart < 0) {
4018 throw new RangeError('targetStart out of bounds')
4019 }
4020 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
4021 if (end < 0) throw new RangeError('sourceEnd out of bounds')
ebd8d4e8 4022
ab78acc6
IC
4023 // Are we oob?
4024 if (end > this.length) end = this.length
4025 if (target.length - targetStart < end - start) {
4026 end = target.length - targetStart + start
4027 }
ebd8d4e8 4028
ab78acc6
IC
4029 var len = end - start
4030 var i
ebd8d4e8 4031
ab78acc6
IC
4032 if (this === target && start < targetStart && targetStart < end) {
4033 // descending copy from end
4034 for (i = len - 1; i >= 0; i--) {
4035 target[i + targetStart] = this[i + start]
4036 }
4037 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
4038 // ascending copy from start
4039 for (i = 0; i < len; i++) {
4040 target[i + targetStart] = this[i + start]
4041 }
4042 } else {
4043 target._set(this.subarray(start, start + len), targetStart)
ebd8d4e8 4044 }
ebd8d4e8 4045
ab78acc6
IC
4046 return len
4047}
ebd8d4e8 4048
ab78acc6
IC
4049// fill(value, start=0, end=buffer.length)
4050Buffer.prototype.fill = function fill (value, start, end) {
4051 if (!value) value = 0
4052 if (!start) start = 0
4053 if (!end) end = this.length
ebd8d4e8 4054
ab78acc6 4055 if (end < start) throw new RangeError('end < start')
ebd8d4e8 4056
ab78acc6
IC
4057 // Fill 0 bytes; we're done
4058 if (end === start) return
4059 if (this.length === 0) return
ebd8d4e8 4060
ab78acc6
IC
4061 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
4062 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
ebd8d4e8 4063
ab78acc6
IC
4064 var i
4065 if (typeof value === 'number') {
4066 for (i = start; i < end; i++) {
4067 this[i] = value
ebd8d4e8 4068 }
ab78acc6
IC
4069 } else {
4070 var bytes = utf8ToBytes(value.toString())
4071 var len = bytes.length
4072 for (i = start; i < end; i++) {
4073 this[i] = bytes[i % len]
ebd8d4e8
IC
4074 }
4075 }
ebd8d4e8 4076
ab78acc6 4077 return this
ebd8d4e8
IC
4078}
4079
ab78acc6
IC
4080/**
4081 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4082 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
4083 */
4084Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4085 if (typeof Uint8Array !== 'undefined') {
4086 if (Buffer.TYPED_ARRAY_SUPPORT) {
4087 return (new Buffer(this)).buffer
4088 } else {
4089 var buf = new Uint8Array(this.length)
4090 for (var i = 0, len = buf.length; i < len; i += 1) {
4091 buf[i] = this[i]
ebd8d4e8 4092 }
ab78acc6 4093 return buf.buffer
ebd8d4e8 4094 }
ab78acc6
IC
4095 } else {
4096 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
ebd8d4e8 4097 }
ebd8d4e8
IC
4098}
4099
ab78acc6
IC
4100// HELPER FUNCTIONS
4101// ================
ebd8d4e8 4102
ab78acc6 4103var BP = Buffer.prototype
ebd8d4e8 4104
ab78acc6
IC
4105/**
4106 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4107 */
4108Buffer._augment = function _augment (arr) {
4109 arr.constructor = Buffer
4110 arr._isBuffer = true
ebd8d4e8 4111
ab78acc6
IC
4112 // save reference to original Uint8Array set method before overwriting
4113 arr._set = arr.set
ebd8d4e8 4114
ab78acc6
IC
4115 // deprecated
4116 arr.get = BP.get
4117 arr.set = BP.set
ebd8d4e8 4118
ab78acc6
IC
4119 arr.write = BP.write
4120 arr.toString = BP.toString
4121 arr.toLocaleString = BP.toString
4122 arr.toJSON = BP.toJSON
4123 arr.equals = BP.equals
4124 arr.compare = BP.compare
4125 arr.indexOf = BP.indexOf
4126 arr.copy = BP.copy
4127 arr.slice = BP.slice
4128 arr.readUIntLE = BP.readUIntLE
4129 arr.readUIntBE = BP.readUIntBE
4130 arr.readUInt8 = BP.readUInt8
4131 arr.readUInt16LE = BP.readUInt16LE
4132 arr.readUInt16BE = BP.readUInt16BE
4133 arr.readUInt32LE = BP.readUInt32LE
4134 arr.readUInt32BE = BP.readUInt32BE
4135 arr.readIntLE = BP.readIntLE
4136 arr.readIntBE = BP.readIntBE
4137 arr.readInt8 = BP.readInt8
4138 arr.readInt16LE = BP.readInt16LE
4139 arr.readInt16BE = BP.readInt16BE
4140 arr.readInt32LE = BP.readInt32LE
4141 arr.readInt32BE = BP.readInt32BE
4142 arr.readFloatLE = BP.readFloatLE
4143 arr.readFloatBE = BP.readFloatBE
4144 arr.readDoubleLE = BP.readDoubleLE
4145 arr.readDoubleBE = BP.readDoubleBE
4146 arr.writeUInt8 = BP.writeUInt8
4147 arr.writeUIntLE = BP.writeUIntLE
4148 arr.writeUIntBE = BP.writeUIntBE
4149 arr.writeUInt16LE = BP.writeUInt16LE
4150 arr.writeUInt16BE = BP.writeUInt16BE
4151 arr.writeUInt32LE = BP.writeUInt32LE
4152 arr.writeUInt32BE = BP.writeUInt32BE
4153 arr.writeIntLE = BP.writeIntLE
4154 arr.writeIntBE = BP.writeIntBE
4155 arr.writeInt8 = BP.writeInt8
4156 arr.writeInt16LE = BP.writeInt16LE
4157 arr.writeInt16BE = BP.writeInt16BE
4158 arr.writeInt32LE = BP.writeInt32LE
4159 arr.writeInt32BE = BP.writeInt32BE
4160 arr.writeFloatLE = BP.writeFloatLE
4161 arr.writeFloatBE = BP.writeFloatBE
4162 arr.writeDoubleLE = BP.writeDoubleLE
4163 arr.writeDoubleBE = BP.writeDoubleBE
4164 arr.fill = BP.fill
4165 arr.inspect = BP.inspect
4166 arr.toArrayBuffer = BP.toArrayBuffer
ebd8d4e8 4167
ab78acc6 4168 return arr
ebd8d4e8
IC
4169}
4170
ab78acc6 4171var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
ebd8d4e8 4172
ab78acc6
IC
4173function base64clean (str) {
4174 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4175 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4176 // Node converts strings with length < 2 to ''
4177 if (str.length < 2) return ''
4178 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4179 while (str.length % 4 !== 0) {
4180 str = str + '='
4181 }
4182 return str
ebd8d4e8
IC
4183}
4184
ab78acc6
IC
4185function stringtrim (str) {
4186 if (str.trim) return str.trim()
4187 return str.replace(/^\s+|\s+$/g, '')
ebd8d4e8
IC
4188}
4189
ab78acc6
IC
4190function toHex (n) {
4191 if (n < 16) return '0' + n.toString(16)
4192 return n.toString(16)
ebd8d4e8
IC
4193}
4194
ab78acc6
IC
4195function utf8ToBytes (string, units) {
4196 units = units || Infinity
4197 var codePoint
4198 var length = string.length
4199 var leadSurrogate = null
4200 var bytes = []
ebd8d4e8 4201
ab78acc6
IC
4202 for (var i = 0; i < length; i++) {
4203 codePoint = string.charCodeAt(i)
ebd8d4e8 4204
ab78acc6
IC
4205 // is surrogate component
4206 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4207 // last char was a lead
4208 if (!leadSurrogate) {
4209 // no lead yet
4210 if (codePoint > 0xDBFF) {
4211 // unexpected trail
4212 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4213 continue
ebd8d4e8 4214
ab78acc6
IC
4215 } else if (i + 1 === length) {
4216 // unpaired lead
4217 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4218 continue
4219 }
ebd8d4e8 4220
ab78acc6
IC
4221 // valid lead
4222 leadSurrogate = codePoint
ebd8d4e8 4223
ab78acc6
IC
4224 continue
4225 }
ebd8d4e8 4226
ab78acc6
IC
4227 // 2 leads in a row
4228 if (codePoint < 0xDC00) {
4229 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4230 leadSurrogate = codePoint
4231 continue
4232 }
ebd8d4e8 4233
ab78acc6
IC
4234 // valid surrogate pair
4235 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4236
4237 } else if (leadSurrogate) {
4238 // valid bmp char, but last char was a lead
4239 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4240 }
4241
4242 leadSurrogate = null
4243
4244 // encode utf8
4245 if (codePoint < 0x80) {
4246 if ((units -= 1) < 0) break
4247 bytes.push(codePoint)
4248 } else if (codePoint < 0x800) {
4249 if ((units -= 2) < 0) break
4250 bytes.push(
4251 codePoint >> 0x6 | 0xC0,
4252 codePoint & 0x3F | 0x80
4253 )
4254 } else if (codePoint < 0x10000) {
4255 if ((units -= 3) < 0) break
4256 bytes.push(
4257 codePoint >> 0xC | 0xE0,
4258 codePoint >> 0x6 & 0x3F | 0x80,
4259 codePoint & 0x3F | 0x80
4260 )
4261 } else if (codePoint < 0x110000) {
4262 if ((units -= 4) < 0) break
4263 bytes.push(
4264 codePoint >> 0x12 | 0xF0,
4265 codePoint >> 0xC & 0x3F | 0x80,
4266 codePoint >> 0x6 & 0x3F | 0x80,
4267 codePoint & 0x3F | 0x80
4268 )
4269 } else {
4270 throw new Error('Invalid code point')
ebd8d4e8 4271 }
ebd8d4e8 4272 }
ab78acc6
IC
4273
4274 return bytes
4275}
4276
4277function asciiToBytes (str) {
4278 var byteArray = []
4279 for (var i = 0; i < str.length; i++) {
4280 // Node's code seems to be doing this and not & 0x7F..
4281 byteArray.push(str.charCodeAt(i) & 0xFF)
ebd8d4e8 4282 }
ab78acc6 4283 return byteArray
ebd8d4e8
IC
4284}
4285
ab78acc6
IC
4286function utf16leToBytes (str, units) {
4287 var c, hi, lo
4288 var byteArray = []
4289 for (var i = 0; i < str.length; i++) {
4290 if ((units -= 2) < 0) break
ebd8d4e8 4291
ab78acc6
IC
4292 c = str.charCodeAt(i)
4293 hi = c >> 8
4294 lo = c % 256
4295 byteArray.push(lo)
4296 byteArray.push(hi)
4297 }
ebd8d4e8 4298
ab78acc6
IC
4299 return byteArray
4300}
ebd8d4e8 4301
ab78acc6
IC
4302function base64ToBytes (str) {
4303 return base64.toByteArray(base64clean(str))
4304}
ebd8d4e8 4305
ab78acc6
IC
4306function blitBuffer (src, dst, offset, length) {
4307 for (var i = 0; i < length; i++) {
4308 if ((i + offset >= dst.length) || (i >= src.length)) break
4309 dst[i + offset] = src[i]
4310 }
4311 return i
4312}
4313
4314},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4315var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4316
4317;(function (exports) {
4318 'use strict';
4319
4320 var Arr = (typeof Uint8Array !== 'undefined')
4321 ? Uint8Array
4322 : Array
ebd8d4e8 4323
ab78acc6
IC
4324 var PLUS = '+'.charCodeAt(0)
4325 var SLASH = '/'.charCodeAt(0)
4326 var NUMBER = '0'.charCodeAt(0)
4327 var LOWER = 'a'.charCodeAt(0)
4328 var UPPER = 'A'.charCodeAt(0)
4329 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4330 var SLASH_URL_SAFE = '_'.charCodeAt(0)
ebd8d4e8 4331
ab78acc6
IC
4332 function decode (elt) {
4333 var code = elt.charCodeAt(0)
4334 if (code === PLUS ||
4335 code === PLUS_URL_SAFE)
4336 return 62 // '+'
4337 if (code === SLASH ||
4338 code === SLASH_URL_SAFE)
4339 return 63 // '/'
4340 if (code < NUMBER)
4341 return -1 //no match
4342 if (code < NUMBER + 10)
4343 return code - NUMBER + 26 + 26
4344 if (code < UPPER + 26)
4345 return code - UPPER
4346 if (code < LOWER + 26)
4347 return code - LOWER + 26
4348 }
ebd8d4e8 4349
ab78acc6
IC
4350 function b64ToByteArray (b64) {
4351 var i, j, l, tmp, placeHolders, arr
ebd8d4e8 4352
ab78acc6
IC
4353 if (b64.length % 4 > 0) {
4354 throw new Error('Invalid string. Length must be a multiple of 4')
4355 }
ebd8d4e8 4356
ab78acc6
IC
4357 // the number of equal signs (place holders)
4358 // if there are two placeholders, than the two characters before it
4359 // represent one byte
4360 // if there is only one, then the three characters before it represent 2 bytes
4361 // this is just a cheap hack to not do indexOf twice
4362 var len = b64.length
4363 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
ebd8d4e8 4364
ab78acc6
IC
4365 // base64 is 4/3 + up to two characters of the original data
4366 arr = new Arr(b64.length * 3 / 4 - placeHolders)
ebd8d4e8 4367
ab78acc6
IC
4368 // if there are placeholders, only get up to the last complete 4 chars
4369 l = placeHolders > 0 ? b64.length - 4 : b64.length
ebd8d4e8 4370
ab78acc6 4371 var L = 0
ebd8d4e8 4372
ab78acc6
IC
4373 function push (v) {
4374 arr[L++] = v
4375 }
ebd8d4e8 4376
ab78acc6
IC
4377 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4378 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4379 push((tmp & 0xFF0000) >> 16)
4380 push((tmp & 0xFF00) >> 8)
4381 push(tmp & 0xFF)
4382 }
ebd8d4e8 4383
ab78acc6
IC
4384 if (placeHolders === 2) {
4385 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4386 push(tmp & 0xFF)
4387 } else if (placeHolders === 1) {
4388 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4389 push((tmp >> 8) & 0xFF)
4390 push(tmp & 0xFF)
4391 }
ebd8d4e8 4392
ab78acc6
IC
4393 return arr
4394 }
ebd8d4e8 4395
ab78acc6
IC
4396 function uint8ToBase64 (uint8) {
4397 var i,
4398 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4399 output = "",
4400 temp, length
ebd8d4e8 4401
ab78acc6
IC
4402 function encode (num) {
4403 return lookup.charAt(num)
4404 }
ebd8d4e8 4405
ab78acc6
IC
4406 function tripletToBase64 (num) {
4407 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4408 }
ebd8d4e8 4409
ab78acc6
IC
4410 // go through the array every three bytes, we'll deal with trailing stuff later
4411 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4412 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4413 output += tripletToBase64(temp)
4414 }
ebd8d4e8 4415
ab78acc6
IC
4416 // pad the end with zeros, but make sure to not forget the extra bytes
4417 switch (extraBytes) {
4418 case 1:
4419 temp = uint8[uint8.length - 1]
4420 output += encode(temp >> 2)
4421 output += encode((temp << 4) & 0x3F)
4422 output += '=='
4423 break
4424 case 2:
4425 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4426 output += encode(temp >> 10)
4427 output += encode((temp >> 4) & 0x3F)
4428 output += encode((temp << 2) & 0x3F)
4429 output += '='
4430 break
4431 }
ebd8d4e8 4432
ab78acc6
IC
4433 return output
4434 }
ebd8d4e8 4435
ab78acc6
IC
4436 exports.toByteArray = b64ToByteArray
4437 exports.fromByteArray = uint8ToBase64
4438}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
ebd8d4e8 4439
ab78acc6
IC
4440},{}],9:[function(require,module,exports){
4441exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4442 var e, m
4443 var eLen = nBytes * 8 - mLen - 1
4444 var eMax = (1 << eLen) - 1
4445 var eBias = eMax >> 1
4446 var nBits = -7
4447 var i = isLE ? (nBytes - 1) : 0
4448 var d = isLE ? -1 : 1
4449 var s = buffer[offset + i]
4450
4451 i += d
4452
4453 e = s & ((1 << (-nBits)) - 1)
4454 s >>= (-nBits)
4455 nBits += eLen
4456 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4457
4458 m = e & ((1 << (-nBits)) - 1)
4459 e >>= (-nBits)
4460 nBits += mLen
4461 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 4462
ab78acc6
IC
4463 if (e === 0) {
4464 e = 1 - eBias
4465 } else if (e === eMax) {
4466 return m ? NaN : ((s ? -1 : 1) * Infinity)
4467 } else {
4468 m = m + Math.pow(2, mLen)
4469 e = e - eBias
ebd8d4e8 4470 }
ab78acc6 4471 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
4472}
4473
ab78acc6
IC
4474exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4475 var e, m, c
4476 var eLen = nBytes * 8 - mLen - 1
4477 var eMax = (1 << eLen) - 1
4478 var eBias = eMax >> 1
4479 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4480 var i = isLE ? 0 : (nBytes - 1)
4481 var d = isLE ? 1 : -1
4482 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 4483
ab78acc6 4484 value = Math.abs(value)
ebd8d4e8 4485
ab78acc6
IC
4486 if (isNaN(value) || value === Infinity) {
4487 m = isNaN(value) ? 1 : 0
4488 e = eMax
4489 } else {
4490 e = Math.floor(Math.log(value) / Math.LN2)
4491 if (value * (c = Math.pow(2, -e)) < 1) {
4492 e--
4493 c *= 2
ebd8d4e8 4494 }
ab78acc6
IC
4495 if (e + eBias >= 1) {
4496 value += rt / c
4497 } else {
4498 value += rt * Math.pow(2, 1 - eBias)
ebd8d4e8 4499 }
ab78acc6
IC
4500 if (value * c >= 2) {
4501 e++
4502 c /= 2
ebd8d4e8 4503 }
ab78acc6
IC
4504
4505 if (e + eBias >= eMax) {
4506 m = 0
4507 e = eMax
4508 } else if (e + eBias >= 1) {
4509 m = (value * c - 1) * Math.pow(2, mLen)
4510 e = e + eBias
4511 } else {
4512 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4513 e = 0
ebd8d4e8
IC
4514 }
4515 }
ebd8d4e8 4516
ab78acc6 4517 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 4518
ab78acc6
IC
4519 e = (e << mLen) | m
4520 eLen += mLen
4521 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 4522
ab78acc6
IC
4523 buffer[offset + i - d] |= s * 128
4524}
ebd8d4e8 4525
ab78acc6 4526},{}],10:[function(require,module,exports){
ebd8d4e8 4527
ab78acc6
IC
4528/**
4529 * isArray
4530 */
ebd8d4e8 4531
ab78acc6 4532var isArray = Array.isArray;
ebd8d4e8
IC
4533
4534/**
ab78acc6 4535 * toString
ebd8d4e8 4536 */
ebd8d4e8 4537
ab78acc6 4538var str = Object.prototype.toString;
ebd8d4e8
IC
4539
4540/**
ab78acc6
IC
4541 * Whether or not the given `val`
4542 * is an array.
ebd8d4e8 4543 *
ab78acc6
IC
4544 * example:
4545 *
4546 * isArray([]);
4547 * // > true
4548 * isArray(arguments);
4549 * // > false
4550 * isArray('');
4551 * // > false
4552 *
4553 * @param {mixed} val
4554 * @return {bool}
ebd8d4e8 4555 */
ebd8d4e8 4556
ab78acc6
IC
4557module.exports = isArray || function (val) {
4558 return !! val && '[object Array]' == str.call(val);
4559};
4560
4561},{}],11:[function(require,module,exports){
4562// Copyright Joyent, Inc. and other Node contributors.
4563//
4564// Permission is hereby granted, free of charge, to any person obtaining a
4565// copy of this software and associated documentation files (the
4566// "Software"), to deal in the Software without restriction, including
4567// without limitation the rights to use, copy, modify, merge, publish,
4568// distribute, sublicense, and/or sell copies of the Software, and to permit
4569// persons to whom the Software is furnished to do so, subject to the
4570// following conditions:
4571//
4572// The above copyright notice and this permission notice shall be included
4573// in all copies or substantial portions of the Software.
4574//
4575// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4576// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4577// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4578// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4579// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4580// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4581// USE OR OTHER DEALINGS IN THE SOFTWARE.
4582
4583function EventEmitter() {
4584 this._events = this._events || {};
4585 this._maxListeners = this._maxListeners || undefined;
ebd8d4e8 4586}
ab78acc6 4587module.exports = EventEmitter;
ebd8d4e8 4588
ab78acc6
IC
4589// Backwards-compat with node 0.10.x
4590EventEmitter.EventEmitter = EventEmitter;
ebd8d4e8 4591
ab78acc6
IC
4592EventEmitter.prototype._events = undefined;
4593EventEmitter.prototype._maxListeners = undefined;
4594
4595// By default EventEmitters will print a warning if more than 10 listeners are
4596// added to it. This is a useful default which helps finding memory leaks.
4597EventEmitter.defaultMaxListeners = 10;
4598
4599// Obviously not all Emitters should be limited to 10. This function allows
4600// that to be increased. Set to zero for unlimited.
4601EventEmitter.prototype.setMaxListeners = function(n) {
4602 if (!isNumber(n) || n < 0 || isNaN(n))
4603 throw TypeError('n must be a positive number');
4604 this._maxListeners = n;
4605 return this;
4606};
4607
4608EventEmitter.prototype.emit = function(type) {
4609 var er, handler, len, args, i, listeners;
4610
4611 if (!this._events)
4612 this._events = {};
4613
4614 // If there is no 'error' event listener then throw.
4615 if (type === 'error') {
4616 if (!this._events.error ||
4617 (isObject(this._events.error) && !this._events.error.length)) {
4618 er = arguments[1];
4619 if (er instanceof Error) {
4620 throw er; // Unhandled 'error' event
4621 }
4622 throw TypeError('Uncaught, unspecified "error" event.');
4623 }
4624 }
4625
4626 handler = this._events[type];
4627
4628 if (isUndefined(handler))
4629 return false;
4630
4631 if (isFunction(handler)) {
4632 switch (arguments.length) {
4633 // fast cases
4634 case 1:
4635 handler.call(this);
4636 break;
4637 case 2:
4638 handler.call(this, arguments[1]);
4639 break;
4640 case 3:
4641 handler.call(this, arguments[1], arguments[2]);
4642 break;
4643 // slower
4644 default:
4645 len = arguments.length;
4646 args = new Array(len - 1);
4647 for (i = 1; i < len; i++)
4648 args[i - 1] = arguments[i];
4649 handler.apply(this, args);
4650 }
4651 } else if (isObject(handler)) {
4652 len = arguments.length;
4653 args = new Array(len - 1);
4654 for (i = 1; i < len; i++)
4655 args[i - 1] = arguments[i];
ebd8d4e8 4656
ab78acc6
IC
4657 listeners = handler.slice();
4658 len = listeners.length;
4659 for (i = 0; i < len; i++)
4660 listeners[i].apply(this, args);
ebd8d4e8
IC
4661 }
4662
ab78acc6
IC
4663 return true;
4664};
ebd8d4e8 4665
ab78acc6
IC
4666EventEmitter.prototype.addListener = function(type, listener) {
4667 var m;
ebd8d4e8 4668
ab78acc6
IC
4669 if (!isFunction(listener))
4670 throw TypeError('listener must be a function');
ebd8d4e8 4671
ab78acc6
IC
4672 if (!this._events)
4673 this._events = {};
ebd8d4e8 4674
ab78acc6
IC
4675 // To avoid recursion in the case that type === "newListener"! Before
4676 // adding it to the listeners, first emit "newListener".
4677 if (this._events.newListener)
4678 this.emit('newListener', type,
4679 isFunction(listener.listener) ?
4680 listener.listener : listener);
ebd8d4e8 4681
ab78acc6
IC
4682 if (!this._events[type])
4683 // Optimize the case of one listener. Don't need the extra array object.
4684 this._events[type] = listener;
4685 else if (isObject(this._events[type]))
4686 // If we've already got an array, just append.
4687 this._events[type].push(listener);
4688 else
4689 // Adding the second element, need to change to array.
4690 this._events[type] = [this._events[type], listener];
4691
4692 // Check for listener leak
4693 if (isObject(this._events[type]) && !this._events[type].warned) {
4694 var m;
4695 if (!isUndefined(this._maxListeners)) {
4696 m = this._maxListeners;
4697 } else {
4698 m = EventEmitter.defaultMaxListeners;
4699 }
4700
4701 if (m && m > 0 && this._events[type].length > m) {
4702 this._events[type].warned = true;
4703 console.error('(node) warning: possible EventEmitter memory ' +
4704 'leak detected. %d listeners added. ' +
4705 'Use emitter.setMaxListeners() to increase limit.',
4706 this._events[type].length);
4707 if (typeof console.trace === 'function') {
4708 // not supported in IE 10
4709 console.trace();
4710 }
4711 }
4712 }
ebd8d4e8 4713
ab78acc6
IC
4714 return this;
4715};
ebd8d4e8 4716
ab78acc6 4717EventEmitter.prototype.on = EventEmitter.prototype.addListener;
ebd8d4e8 4718
ab78acc6
IC
4719EventEmitter.prototype.once = function(type, listener) {
4720 if (!isFunction(listener))
4721 throw TypeError('listener must be a function');
ebd8d4e8 4722
ab78acc6 4723 var fired = false;
ebd8d4e8 4724
ab78acc6
IC
4725 function g() {
4726 this.removeListener(type, g);
ebd8d4e8 4727
ab78acc6
IC
4728 if (!fired) {
4729 fired = true;
4730 listener.apply(this, arguments);
4731 }
4732 }
ebd8d4e8 4733
ab78acc6
IC
4734 g.listener = listener;
4735 this.on(type, g);
ebd8d4e8 4736
ab78acc6
IC
4737 return this;
4738};
ebd8d4e8 4739
ab78acc6
IC
4740// emits a 'removeListener' event iff the listener was removed
4741EventEmitter.prototype.removeListener = function(type, listener) {
4742 var list, position, length, i;
ebd8d4e8 4743
ab78acc6
IC
4744 if (!isFunction(listener))
4745 throw TypeError('listener must be a function');
ebd8d4e8 4746
ab78acc6
IC
4747 if (!this._events || !this._events[type])
4748 return this;
ebd8d4e8 4749
ab78acc6
IC
4750 list = this._events[type];
4751 length = list.length;
4752 position = -1;
4753
4754 if (list === listener ||
4755 (isFunction(list.listener) && list.listener === listener)) {
4756 delete this._events[type];
4757 if (this._events.removeListener)
4758 this.emit('removeListener', type, listener);
4759
4760 } else if (isObject(list)) {
4761 for (i = length; i-- > 0;) {
4762 if (list[i] === listener ||
4763 (list[i].listener && list[i].listener === listener)) {
4764 position = i;
4765 break;
ebd8d4e8 4766 }
ab78acc6 4767 }
ebd8d4e8 4768
ab78acc6
IC
4769 if (position < 0)
4770 return this;
4771
4772 if (list.length === 1) {
4773 list.length = 0;
4774 delete this._events[type];
4775 } else {
4776 list.splice(position, 1);
ebd8d4e8 4777 }
ab78acc6
IC
4778
4779 if (this._events.removeListener)
4780 this.emit('removeListener', type, listener);
ebd8d4e8 4781 }
ab78acc6
IC
4782
4783 return this;
ebd8d4e8
IC
4784};
4785
ab78acc6
IC
4786EventEmitter.prototype.removeAllListeners = function(type) {
4787 var key, listeners;
ebd8d4e8 4788
ab78acc6
IC
4789 if (!this._events)
4790 return this;
4791
4792 // not listening for removeListener, no need to emit
4793 if (!this._events.removeListener) {
4794 if (arguments.length === 0)
4795 this._events = {};
4796 else if (this._events[type])
4797 delete this._events[type];
4798 return this;
ebd8d4e8 4799 }
ab78acc6
IC
4800
4801 // emit removeListener for all listeners on all events
4802 if (arguments.length === 0) {
4803 for (key in this._events) {
4804 if (key === 'removeListener') continue;
4805 this.removeAllListeners(key);
4806 }
4807 this.removeAllListeners('removeListener');
4808 this._events = {};
4809 return this;
ebd8d4e8 4810 }
ebd8d4e8 4811
ab78acc6
IC
4812 listeners = this._events[type];
4813
4814 if (isFunction(listeners)) {
4815 this.removeListener(type, listeners);
ebd8d4e8 4816 } else {
ab78acc6
IC
4817 // LIFO order
4818 while (listeners.length)
4819 this.removeListener(type, listeners[listeners.length - 1]);
ebd8d4e8 4820 }
ab78acc6 4821 delete this._events[type];
ebd8d4e8 4822
ab78acc6
IC
4823 return this;
4824};
ebd8d4e8 4825
ab78acc6
IC
4826EventEmitter.prototype.listeners = function(type) {
4827 var ret;
4828 if (!this._events || !this._events[type])
4829 ret = [];
4830 else if (isFunction(this._events[type]))
4831 ret = [this._events[type]];
4832 else
4833 ret = this._events[type].slice();
4834 return ret;
4835};
ebd8d4e8 4836
ab78acc6
IC
4837EventEmitter.listenerCount = function(emitter, type) {
4838 var ret;
4839 if (!emitter._events || !emitter._events[type])
4840 ret = 0;
4841 else if (isFunction(emitter._events[type]))
4842 ret = 1;
4843 else
4844 ret = emitter._events[type].length;
4845 return ret;
4846};
ebd8d4e8 4847
ab78acc6
IC
4848function isFunction(arg) {
4849 return typeof arg === 'function';
ebd8d4e8
IC
4850}
4851
ab78acc6
IC
4852function isNumber(arg) {
4853 return typeof arg === 'number';
4854}
ebd8d4e8 4855
ab78acc6
IC
4856function isObject(arg) {
4857 return typeof arg === 'object' && arg !== null;
4858}
ebd8d4e8 4859
ab78acc6
IC
4860function isUndefined(arg) {
4861 return arg === void 0;
ebd8d4e8 4862}
ebd8d4e8 4863
ab78acc6
IC
4864},{}],12:[function(require,module,exports){
4865if (typeof Object.create === 'function') {
4866 // implementation from standard node.js 'util' module
4867 module.exports = function inherits(ctor, superCtor) {
4868 ctor.super_ = superCtor
4869 ctor.prototype = Object.create(superCtor.prototype, {
4870 constructor: {
4871 value: ctor,
4872 enumerable: false,
4873 writable: true,
4874 configurable: true
4875 }
4876 });
4877 };
4878} else {
4879 // old school shim for old browsers
4880 module.exports = function inherits(ctor, superCtor) {
4881 ctor.super_ = superCtor
4882 var TempCtor = function () {}
4883 TempCtor.prototype = superCtor.prototype
4884 ctor.prototype = new TempCtor()
4885 ctor.prototype.constructor = ctor
4886 }
4887}
ebd8d4e8 4888
ab78acc6
IC
4889},{}],13:[function(require,module,exports){
4890module.exports = Array.isArray || function (arr) {
4891 return Object.prototype.toString.call(arr) == '[object Array]';
ebd8d4e8
IC
4892};
4893
ab78acc6
IC
4894},{}],14:[function(require,module,exports){
4895// shim for using process in browser
ebd8d4e8 4896
ab78acc6
IC
4897var process = module.exports = {};
4898var queue = [];
4899var draining = false;
4900var currentQueue;
4901var queueIndex = -1;
4902
4903function cleanUpNextTick() {
4904 draining = false;
4905 if (currentQueue.length) {
4906 queue = currentQueue.concat(queue);
4907 } else {
4908 queueIndex = -1;
4909 }
4910 if (queue.length) {
4911 drainQueue();
4912 }
4913}
ebd8d4e8 4914
ab78acc6
IC
4915function drainQueue() {
4916 if (draining) {
4917 return;
4918 }
4919 var timeout = setTimeout(cleanUpNextTick);
4920 draining = true;
ebd8d4e8 4921
ab78acc6
IC
4922 var len = queue.length;
4923 while(len) {
4924 currentQueue = queue;
4925 queue = [];
4926 while (++queueIndex < len) {
4927 currentQueue[queueIndex].run();
4928 }
4929 queueIndex = -1;
4930 len = queue.length;
4931 }
4932 currentQueue = null;
4933 draining = false;
4934 clearTimeout(timeout);
4935}
4936
4937process.nextTick = function (fun) {
4938 var args = new Array(arguments.length - 1);
4939 if (arguments.length > 1) {
4940 for (var i = 1; i < arguments.length; i++) {
4941 args[i - 1] = arguments[i];
4942 }
4943 }
4944 queue.push(new Item(fun, args));
4945 if (queue.length === 1 && !draining) {
4946 setTimeout(drainQueue, 0);
4947 }
ebd8d4e8
IC
4948};
4949
ab78acc6
IC
4950// v8 likes predictible objects
4951function Item(fun, array) {
4952 this.fun = fun;
4953 this.array = array;
4954}
4955Item.prototype.run = function () {
4956 this.fun.apply(null, this.array);
4957};
4958process.title = 'browser';
4959process.browser = true;
4960process.env = {};
4961process.argv = [];
4962process.version = ''; // empty string to avoid regexp issues
4963process.versions = {};
ebd8d4e8 4964
ab78acc6
IC
4965function noop() {}
4966
4967process.on = noop;
4968process.addListener = noop;
4969process.once = noop;
4970process.off = noop;
4971process.removeListener = noop;
4972process.removeAllListeners = noop;
4973process.emit = noop;
4974
4975process.binding = function (name) {
4976 throw new Error('process.binding is not supported');
4977};
ebd8d4e8 4978
ab78acc6
IC
4979// TODO(shtylman)
4980process.cwd = function () { return '/' };
4981process.chdir = function (dir) {
4982 throw new Error('process.chdir is not supported');
4983};
4984process.umask = function() { return 0; };
ebd8d4e8 4985
ab78acc6
IC
4986},{}],15:[function(require,module,exports){
4987module.exports = require("./lib/_stream_duplex.js")
ebd8d4e8 4988
ab78acc6
IC
4989},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4990(function (process){
4991// Copyright Joyent, Inc. and other Node contributors.
4992//
4993// Permission is hereby granted, free of charge, to any person obtaining a
4994// copy of this software and associated documentation files (the
4995// "Software"), to deal in the Software without restriction, including
4996// without limitation the rights to use, copy, modify, merge, publish,
4997// distribute, sublicense, and/or sell copies of the Software, and to permit
4998// persons to whom the Software is furnished to do so, subject to the
4999// following conditions:
5000//
5001// The above copyright notice and this permission notice shall be included
5002// in all copies or substantial portions of the Software.
5003//
5004// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5005// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5006// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5007// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5008// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5009// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5010// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5011
ab78acc6
IC
5012// a duplex stream is just a stream that is both readable and writable.
5013// Since JS doesn't have multiple prototypal inheritance, this class
5014// prototypally inherits from Readable, and then parasitically from
5015// Writable.
ebd8d4e8 5016
ab78acc6 5017module.exports = Duplex;
ebd8d4e8 5018
ab78acc6
IC
5019/*<replacement>*/
5020var objectKeys = Object.keys || function (obj) {
5021 var keys = [];
5022 for (var key in obj) keys.push(key);
5023 return keys;
ebd8d4e8 5024}
ab78acc6 5025/*</replacement>*/
ebd8d4e8 5026
ebd8d4e8 5027
ab78acc6
IC
5028/*<replacement>*/
5029var util = require('core-util-is');
5030util.inherits = require('inherits');
5031/*</replacement>*/
ebd8d4e8 5032
ab78acc6
IC
5033var Readable = require('./_stream_readable');
5034var Writable = require('./_stream_writable');
ebd8d4e8 5035
ab78acc6 5036util.inherits(Duplex, Readable);
ebd8d4e8 5037
ab78acc6
IC
5038forEach(objectKeys(Writable.prototype), function(method) {
5039 if (!Duplex.prototype[method])
5040 Duplex.prototype[method] = Writable.prototype[method];
5041});
ebd8d4e8 5042
ab78acc6
IC
5043function Duplex(options) {
5044 if (!(this instanceof Duplex))
5045 return new Duplex(options);
ebd8d4e8 5046
ab78acc6
IC
5047 Readable.call(this, options);
5048 Writable.call(this, options);
ebd8d4e8 5049
ab78acc6
IC
5050 if (options && options.readable === false)
5051 this.readable = false;
ebd8d4e8 5052
ab78acc6
IC
5053 if (options && options.writable === false)
5054 this.writable = false;
ebd8d4e8 5055
ab78acc6
IC
5056 this.allowHalfOpen = true;
5057 if (options && options.allowHalfOpen === false)
5058 this.allowHalfOpen = false;
ebd8d4e8 5059
ab78acc6 5060 this.once('end', onend);
ebd8d4e8
IC
5061}
5062
ab78acc6
IC
5063// the no-half-open enforcer
5064function onend() {
5065 // if we allow half-open state, or if the writable side ended,
5066 // then we're ok.
5067 if (this.allowHalfOpen || this._writableState.ended)
5068 return;
ebd8d4e8 5069
ab78acc6
IC
5070 // no more data can be written.
5071 // But allow more writes to happen in this tick.
5072 process.nextTick(this.end.bind(this));
5073}
ebd8d4e8 5074
ab78acc6
IC
5075function forEach (xs, f) {
5076 for (var i = 0, l = xs.length; i < l; i++) {
5077 f(xs[i], i);
ebd8d4e8 5078 }
ab78acc6 5079}
ebd8d4e8 5080
ab78acc6
IC
5081}).call(this,require('_process'))
5082},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
5083// Copyright Joyent, Inc. and other Node contributors.
5084//
5085// Permission is hereby granted, free of charge, to any person obtaining a
5086// copy of this software and associated documentation files (the
5087// "Software"), to deal in the Software without restriction, including
5088// without limitation the rights to use, copy, modify, merge, publish,
5089// distribute, sublicense, and/or sell copies of the Software, and to permit
5090// persons to whom the Software is furnished to do so, subject to the
5091// following conditions:
5092//
5093// The above copyright notice and this permission notice shall be included
5094// in all copies or substantial portions of the Software.
5095//
5096// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5097// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5098// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5099// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5100// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5101// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5102// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5103
ab78acc6
IC
5104// a passthrough stream.
5105// basically just the most minimal sort of Transform stream.
5106// Every written chunk gets output as-is.
ebd8d4e8 5107
ab78acc6 5108module.exports = PassThrough;
ebd8d4e8 5109
ab78acc6 5110var Transform = require('./_stream_transform');
ebd8d4e8 5111
ab78acc6
IC
5112/*<replacement>*/
5113var util = require('core-util-is');
5114util.inherits = require('inherits');
5115/*</replacement>*/
ebd8d4e8 5116
ab78acc6 5117util.inherits(PassThrough, Transform);
ebd8d4e8 5118
ab78acc6
IC
5119function PassThrough(options) {
5120 if (!(this instanceof PassThrough))
5121 return new PassThrough(options);
ebd8d4e8 5122
ab78acc6
IC
5123 Transform.call(this, options);
5124}
ebd8d4e8 5125
ab78acc6
IC
5126PassThrough.prototype._transform = function(chunk, encoding, cb) {
5127 cb(null, chunk);
ebd8d4e8
IC
5128};
5129
ab78acc6
IC
5130},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5131(function (process){
ebd8d4e8
IC
5132// Copyright Joyent, Inc. and other Node contributors.
5133//
5134// Permission is hereby granted, free of charge, to any person obtaining a
5135// copy of this software and associated documentation files (the
5136// "Software"), to deal in the Software without restriction, including
5137// without limitation the rights to use, copy, modify, merge, publish,
5138// distribute, sublicense, and/or sell copies of the Software, and to permit
5139// persons to whom the Software is furnished to do so, subject to the
5140// following conditions:
5141//
5142// The above copyright notice and this permission notice shall be included
5143// in all copies or substantial portions of the Software.
5144//
5145// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5146// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5147// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5148// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5149// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5150// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5151// USE OR OTHER DEALINGS IN THE SOFTWARE.
5152
ab78acc6 5153module.exports = Readable;
ebd8d4e8 5154
ab78acc6
IC
5155/*<replacement>*/
5156var isArray = require('isarray');
5157/*</replacement>*/
5158
5159
5160/*<replacement>*/
5161var Buffer = require('buffer').Buffer;
5162/*</replacement>*/
5163
5164Readable.ReadableState = ReadableState;
5165
5166var EE = require('events').EventEmitter;
5167
5168/*<replacement>*/
5169if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5170 return emitter.listeners(type).length;
ebd8d4e8 5171};
ab78acc6
IC
5172/*</replacement>*/
5173
5174var Stream = require('stream');
5175
5176/*<replacement>*/
5177var util = require('core-util-is');
5178util.inherits = require('inherits');
5179/*</replacement>*/
5180
5181var StringDecoder;
5182
5183
5184/*<replacement>*/
5185var debug = require('util');
5186if (debug && debug.debuglog) {
5187 debug = debug.debuglog('stream');
5188} else {
5189 debug = function () {};
5190}
5191/*</replacement>*/
5192
5193
5194util.inherits(Readable, Stream);
5195
5196function ReadableState(options, stream) {
5197 var Duplex = require('./_stream_duplex');
5198
5199 options = options || {};
5200
5201 // the point at which it stops calling _read() to fill the buffer
5202 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5203 var hwm = options.highWaterMark;
5204 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5205 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5206
5207 // cast to ints.
5208 this.highWaterMark = ~~this.highWaterMark;
5209
5210 this.buffer = [];
5211 this.length = 0;
5212 this.pipes = null;
5213 this.pipesCount = 0;
5214 this.flowing = null;
5215 this.ended = false;
5216 this.endEmitted = false;
5217 this.reading = false;
ebd8d4e8 5218
ab78acc6
IC
5219 // a flag to be able to tell if the onwrite cb is called immediately,
5220 // or on a later tick. We set this to true at first, because any
5221 // actions that shouldn't happen until "later" should generally also
5222 // not happen before the first write call.
5223 this.sync = true;
ebd8d4e8 5224
ab78acc6
IC
5225 // whenever we return null, then we set a flag to say
5226 // that we're awaiting a 'readable' event emission.
5227 this.needReadable = false;
5228 this.emittedReadable = false;
5229 this.readableListening = false;
ebd8d4e8 5230
ab78acc6
IC
5231
5232 // object stream flag. Used to make read(n) ignore n and to
5233 // make all the buffer merging and length checks go away
5234 this.objectMode = !!options.objectMode;
5235
5236 if (stream instanceof Duplex)
5237 this.objectMode = this.objectMode || !!options.readableObjectMode;
5238
5239 // Crypto is kind of old and crusty. Historically, its default string
5240 // encoding is 'binary' so we have to make this configurable.
5241 // Everything else in the universe uses 'utf8', though.
5242 this.defaultEncoding = options.defaultEncoding || 'utf8';
5243
5244 // when piping, we only care about 'readable' events that happen
5245 // after read()ing all the bytes and not getting any pushback.
5246 this.ranOut = false;
5247
5248 // the number of writers that are awaiting a drain event in .pipe()s
5249 this.awaitDrain = 0;
5250
5251 // if true, a maybeReadMore has been scheduled
5252 this.readingMore = false;
5253
5254 this.decoder = null;
5255 this.encoding = null;
5256 if (options.encoding) {
5257 if (!StringDecoder)
5258 StringDecoder = require('string_decoder/').StringDecoder;
5259 this.decoder = new StringDecoder(options.encoding);
5260 this.encoding = options.encoding;
ebd8d4e8 5261 }
ab78acc6 5262}
ebd8d4e8 5263
ab78acc6
IC
5264function Readable(options) {
5265 var Duplex = require('./_stream_duplex');
5266
5267 if (!(this instanceof Readable))
5268 return new Readable(options);
5269
5270 this._readableState = new ReadableState(options, this);
5271
5272 // legacy
5273 this.readable = true;
5274
5275 Stream.call(this);
5276}
5277
5278// Manually shove something into the read() buffer.
5279// This returns true if the highWaterMark has not been hit yet,
5280// similar to how Writable.write() returns true if you should
5281// write() some more.
5282Readable.prototype.push = function(chunk, encoding) {
5283 var state = this._readableState;
5284
5285 if (util.isString(chunk) && !state.objectMode) {
5286 encoding = encoding || state.defaultEncoding;
5287 if (encoding !== state.encoding) {
5288 chunk = new Buffer(chunk, encoding);
5289 encoding = '';
ebd8d4e8 5290 }
ebd8d4e8
IC
5291 }
5292
ab78acc6 5293 return readableAddChunk(this, state, chunk, encoding, false);
ebd8d4e8
IC
5294};
5295
ab78acc6
IC
5296// Unshift should *always* be something directly out of read()
5297Readable.prototype.unshift = function(chunk) {
5298 var state = this._readableState;
5299 return readableAddChunk(this, state, chunk, '', true);
5300};
ebd8d4e8 5301
ab78acc6
IC
5302function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5303 var er = chunkInvalid(state, chunk);
5304 if (er) {
5305 stream.emit('error', er);
5306 } else if (util.isNullOrUndefined(chunk)) {
5307 state.reading = false;
5308 if (!state.ended)
5309 onEofChunk(stream, state);
5310 } else if (state.objectMode || chunk && chunk.length > 0) {
5311 if (state.ended && !addToFront) {
5312 var e = new Error('stream.push() after EOF');
5313 stream.emit('error', e);
5314 } else if (state.endEmitted && addToFront) {
5315 var e = new Error('stream.unshift() after end event');
5316 stream.emit('error', e);
ebd8d4e8 5317 } else {
ab78acc6
IC
5318 if (state.decoder && !addToFront && !encoding)
5319 chunk = state.decoder.write(chunk);
5320
5321 if (!addToFront)
5322 state.reading = false;
5323
5324 // if we want the data now, just emit it.
5325 if (state.flowing && state.length === 0 && !state.sync) {
5326 stream.emit('data', chunk);
5327 stream.read(0);
5328 } else {
5329 // update the buffer info.
5330 state.length += state.objectMode ? 1 : chunk.length;
5331 if (addToFront)
5332 state.buffer.unshift(chunk);
5333 else
5334 state.buffer.push(chunk);
5335
5336 if (state.needReadable)
5337 emitReadable(stream);
5338 }
5339
5340 maybeReadMore(stream, state);
ebd8d4e8 5341 }
ab78acc6
IC
5342 } else if (!addToFront) {
5343 state.reading = false;
ebd8d4e8 5344 }
ebd8d4e8 5345
ab78acc6
IC
5346 return needMoreData(state);
5347}
ebd8d4e8 5348
ab78acc6
IC
5349
5350
5351// if it's past the high water mark, we can push in some more.
5352// Also, if we have no data yet, we can stand some
5353// more bytes. This is to work around cases where hwm=0,
5354// such as the repl. Also, if the push() triggered a
5355// readable event, and the user called read(largeNumber) such that
5356// needReadable was set, then we ought to push more, so that another
5357// 'readable' event will be triggered.
5358function needMoreData(state) {
5359 return !state.ended &&
5360 (state.needReadable ||
5361 state.length < state.highWaterMark ||
5362 state.length === 0);
5363}
5364
5365// backwards compatibility.
5366Readable.prototype.setEncoding = function(enc) {
5367 if (!StringDecoder)
5368 StringDecoder = require('string_decoder/').StringDecoder;
5369 this._readableState.decoder = new StringDecoder(enc);
5370 this._readableState.encoding = enc;
5371 return this;
5372};
5373
5374// Don't raise the hwm > 128MB
5375var MAX_HWM = 0x800000;
5376function roundUpToNextPowerOf2(n) {
5377 if (n >= MAX_HWM) {
5378 n = MAX_HWM;
5379 } else {
5380 // Get the next highest power of 2
5381 n--;
5382 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5383 n++;
ebd8d4e8 5384 }
ab78acc6 5385 return n;
ebd8d4e8 5386}
ebd8d4e8 5387
ab78acc6
IC
5388function howMuchToRead(n, state) {
5389 if (state.length === 0 && state.ended)
5390 return 0;
ebd8d4e8 5391
ab78acc6
IC
5392 if (state.objectMode)
5393 return n === 0 ? 0 : 1;
ebd8d4e8 5394
ab78acc6
IC
5395 if (isNaN(n) || util.isNull(n)) {
5396 // only flow one buffer at a time
5397 if (state.flowing && state.buffer.length)
5398 return state.buffer[0].length;
5399 else
5400 return state.length;
5401 }
ebd8d4e8 5402
ab78acc6
IC
5403 if (n <= 0)
5404 return 0;
ebd8d4e8 5405
ab78acc6
IC
5406 // If we're asking for more than the target buffer level,
5407 // then raise the water mark. Bump up to the next highest
5408 // power of 2, to prevent increasing it excessively in tiny
5409 // amounts.
5410 if (n > state.highWaterMark)
5411 state.highWaterMark = roundUpToNextPowerOf2(n);
ebd8d4e8 5412
ab78acc6
IC
5413 // don't have that much. return null, unless we've ended.
5414 if (n > state.length) {
5415 if (!state.ended) {
5416 state.needReadable = true;
5417 return 0;
5418 } else
5419 return state.length;
ebd8d4e8 5420 }
ab78acc6
IC
5421
5422 return n;
ebd8d4e8
IC
5423}
5424
ab78acc6
IC
5425// you can override either this method, or the async _read(n) below.
5426Readable.prototype.read = function(n) {
5427 debug('read', n);
5428 var state = this._readableState;
5429 var nOrig = n;
ebd8d4e8 5430
ab78acc6
IC
5431 if (!util.isNumber(n) || n > 0)
5432 state.emittedReadable = false;
5433
5434 // if we're doing read(0) to trigger a readable event, but we
5435 // already have a bunch of data in the buffer, then just trigger
5436 // the 'readable' event and move on.
5437 if (n === 0 &&
5438 state.needReadable &&
5439 (state.length >= state.highWaterMark || state.ended)) {
5440 debug('read: emitReadable', state.length, state.ended);
5441 if (state.length === 0 && state.ended)
5442 endReadable(this);
5443 else
5444 emitReadable(this);
5445 return null;
5446 }
5447
5448 n = howMuchToRead(n, state);
5449
5450 // if we've ended, and we're now clear, then finish it up.
5451 if (n === 0 && state.ended) {
5452 if (state.length === 0)
5453 endReadable(this);
5454 return null;
5455 }
5456
5457 // All the actual chunk generation logic needs to be
5458 // *below* the call to _read. The reason is that in certain
5459 // synthetic stream cases, such as passthrough streams, _read
5460 // may be a completely synchronous operation which may change
5461 // the state of the read buffer, providing enough data when
5462 // before there was *not* enough.
5463 //
5464 // So, the steps are:
5465 // 1. Figure out what the state of things will be after we do
5466 // a read from the buffer.
5467 //
5468 // 2. If that resulting state will trigger a _read, then call _read.
5469 // Note that this may be asynchronous, or synchronous. Yes, it is
5470 // deeply ugly to write APIs this way, but that still doesn't mean
5471 // that the Readable class should behave improperly, as streams are
5472 // designed to be sync/async agnostic.
5473 // Take note if the _read call is sync or async (ie, if the read call
5474 // has returned yet), so that we know whether or not it's safe to emit
5475 // 'readable' etc.
5476 //
5477 // 3. Actually pull the requested chunks out of the buffer and return.
5478
5479 // if we need a readable event, then we need to do some reading.
5480 var doRead = state.needReadable;
5481 debug('need readable', doRead);
5482
5483 // if we currently have less than the highWaterMark, then also read some
5484 if (state.length === 0 || state.length - n < state.highWaterMark) {
5485 doRead = true;
5486 debug('length less than watermark', doRead);
5487 }
5488
5489 // however, if we've ended, then there's no point, and if we're already
5490 // reading, then it's unnecessary.
5491 if (state.ended || state.reading) {
5492 doRead = false;
5493 debug('reading or ended', doRead);
5494 }
5495
5496 if (doRead) {
5497 debug('do read');
5498 state.reading = true;
5499 state.sync = true;
5500 // if the length is currently zero, then we *need* a readable event.
5501 if (state.length === 0)
5502 state.needReadable = true;
5503 // call internal read method
5504 this._read(state.highWaterMark);
5505 state.sync = false;
5506 }
5507
5508 // If _read pushed data synchronously, then `reading` will be false,
5509 // and we need to re-evaluate how much data we can return to the user.
5510 if (doRead && !state.reading)
5511 n = howMuchToRead(nOrig, state);
5512
5513 var ret;
5514 if (n > 0)
5515 ret = fromList(n, state);
5516 else
5517 ret = null;
ebd8d4e8 5518
ab78acc6
IC
5519 if (util.isNull(ret)) {
5520 state.needReadable = true;
5521 n = 0;
5522 }
ebd8d4e8 5523
ab78acc6 5524 state.length -= n;
ebd8d4e8 5525
ab78acc6
IC
5526 // If we have nothing in the buffer, then we want to know
5527 // as soon as we *do* get something into the buffer.
5528 if (state.length === 0 && !state.ended)
5529 state.needReadable = true;
ebd8d4e8 5530
ab78acc6
IC
5531 // If we tried to read() past the EOF, then emit end on the next tick.
5532 if (nOrig !== n && state.ended && state.length === 0)
5533 endReadable(this);
5534
5535 if (!util.isNull(ret))
5536 this.emit('data', ret);
5537
5538 return ret;
5539};
5540
5541function chunkInvalid(state, chunk) {
5542 var er = null;
5543 if (!util.isBuffer(chunk) &&
5544 !util.isString(chunk) &&
5545 !util.isNullOrUndefined(chunk) &&
5546 !state.objectMode) {
5547 er = new TypeError('Invalid non-string/buffer chunk');
5548 }
5549 return er;
ebd8d4e8
IC
5550}
5551
5552
ab78acc6
IC
5553function onEofChunk(stream, state) {
5554 if (state.decoder && !state.ended) {
5555 var chunk = state.decoder.end();
5556 if (chunk && chunk.length) {
5557 state.buffer.push(chunk);
5558 state.length += state.objectMode ? 1 : chunk.length;
ebd8d4e8 5559 }
ebd8d4e8 5560 }
ab78acc6 5561 state.ended = true;
ebd8d4e8 5562
ab78acc6
IC
5563 // emit 'readable' now to make sure it gets picked up.
5564 emitReadable(stream);
5565}
5566
5567// Don't emit readable right away in sync mode, because this can trigger
5568// another read() call => stack overflow. This way, it might trigger
5569// a nextTick recursion warning, but that's not so bad.
5570function emitReadable(stream) {
5571 var state = stream._readableState;
5572 state.needReadable = false;
5573 if (!state.emittedReadable) {
5574 debug('emitReadable', state.flowing);
5575 state.emittedReadable = true;
5576 if (state.sync)
5577 process.nextTick(function() {
5578 emitReadable_(stream);
5579 });
5580 else
5581 emitReadable_(stream);
ebd8d4e8 5582 }
ab78acc6 5583}
ebd8d4e8 5584
ab78acc6
IC
5585function emitReadable_(stream) {
5586 debug('emit readable');
5587 stream.emit('readable');
5588 flow(stream);
5589}
ebd8d4e8 5590
ab78acc6
IC
5591
5592// at this point, the user has presumably seen the 'readable' event,
5593// and called read() to consume some data. that may have triggered
5594// in turn another _read(n) call, in which case reading = true if
5595// it's in progress.
5596// However, if we're not ended, or reading, and the length < hwm,
5597// then go ahead and try to read some more preemptively.
5598function maybeReadMore(stream, state) {
5599 if (!state.readingMore) {
5600 state.readingMore = true;
5601 process.nextTick(function() {
5602 maybeReadMore_(stream, state);
5603 });
ebd8d4e8 5604 }
ab78acc6 5605}
ebd8d4e8 5606
ab78acc6
IC
5607function maybeReadMore_(stream, state) {
5608 var len = state.length;
5609 while (!state.reading && !state.flowing && !state.ended &&
5610 state.length < state.highWaterMark) {
5611 debug('maybeReadMore read 0');
5612 stream.read(0);
5613 if (len === state.length)
5614 // didn't get any data, stop spinning.
5615 break;
5616 else
5617 len = state.length;
ebd8d4e8 5618 }
ab78acc6
IC
5619 state.readingMore = false;
5620}
ebd8d4e8 5621
ab78acc6
IC
5622// abstract method. to be overridden in specific implementation classes.
5623// call cb(er, data) where data is <= n in length.
5624// for virtual (non-string, non-buffer) streams, "length" is somewhat
5625// arbitrary, and perhaps not very meaningful.
5626Readable.prototype._read = function(n) {
5627 this.emit('error', new Error('not implemented'));
5628};
5629
5630Readable.prototype.pipe = function(dest, pipeOpts) {
5631 var src = this;
5632 var state = this._readableState;
5633
5634 switch (state.pipesCount) {
5635 case 0:
5636 state.pipes = dest;
5637 break;
5638 case 1:
5639 state.pipes = [state.pipes, dest];
5640 break;
5641 default:
5642 state.pipes.push(dest);
5643 break;
ebd8d4e8 5644 }
ab78acc6
IC
5645 state.pipesCount += 1;
5646 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ebd8d4e8 5647
ab78acc6
IC
5648 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5649 dest !== process.stdout &&
5650 dest !== process.stderr;
ebd8d4e8 5651
ab78acc6
IC
5652 var endFn = doEnd ? onend : cleanup;
5653 if (state.endEmitted)
5654 process.nextTick(endFn);
5655 else
5656 src.once('end', endFn);
5657
5658 dest.on('unpipe', onunpipe);
5659 function onunpipe(readable) {
5660 debug('onunpipe');
5661 if (readable === src) {
5662 cleanup();
5663 }
5664 }
5665
5666 function onend() {
5667 debug('onend');
5668 dest.end();
5669 }
5670
5671 // when the dest drains, it reduces the awaitDrain counter
5672 // on the source. This would be more elegant with a .once()
5673 // handler in flow(), but adding and removing repeatedly is
5674 // too slow.
5675 var ondrain = pipeOnDrain(src);
5676 dest.on('drain', ondrain);
5677
5678 function cleanup() {
5679 debug('cleanup');
5680 // cleanup event handlers once the pipe is broken
5681 dest.removeListener('close', onclose);
5682 dest.removeListener('finish', onfinish);
5683 dest.removeListener('drain', ondrain);
5684 dest.removeListener('error', onerror);
5685 dest.removeListener('unpipe', onunpipe);
5686 src.removeListener('end', onend);
5687 src.removeListener('end', cleanup);
5688 src.removeListener('data', ondata);
5689
5690 // if the reader is waiting for a drain event from this
5691 // specific writer, then it would cause it to never start
5692 // flowing again.
5693 // So, if this is awaiting a drain, then we just call it now.
5694 // If we don't know, then assume that we are waiting for one.
5695 if (state.awaitDrain &&
5696 (!dest._writableState || dest._writableState.needDrain))
5697 ondrain();
5698 }
5699
5700 src.on('data', ondata);
5701 function ondata(chunk) {
5702 debug('ondata');
5703 var ret = dest.write(chunk);
5704 if (false === ret) {
5705 debug('false write response, pause',
5706 src._readableState.awaitDrain);
5707 src._readableState.awaitDrain++;
5708 src.pause();
5709 }
5710 }
5711
5712 // if the dest has an error, then stop piping into it.
5713 // however, don't suppress the throwing behavior for this.
5714 function onerror(er) {
5715 debug('onerror', er);
5716 unpipe();
5717 dest.removeListener('error', onerror);
5718 if (EE.listenerCount(dest, 'error') === 0)
5719 dest.emit('error', er);
5720 }
5721 // This is a brutally ugly hack to make sure that our error handler
5722 // is attached before any userland ones. NEVER DO THIS.
5723 if (!dest._events || !dest._events.error)
5724 dest.on('error', onerror);
5725 else if (isArray(dest._events.error))
5726 dest._events.error.unshift(onerror);
5727 else
5728 dest._events.error = [onerror, dest._events.error];
5729
5730
5731
5732 // Both close and finish should trigger unpipe, but only once.
5733 function onclose() {
5734 dest.removeListener('finish', onfinish);
5735 unpipe();
ebd8d4e8 5736 }
ab78acc6
IC
5737 dest.once('close', onclose);
5738 function onfinish() {
5739 debug('onfinish');
5740 dest.removeListener('close', onclose);
5741 unpipe();
5742 }
5743 dest.once('finish', onfinish);
ebd8d4e8 5744
ab78acc6
IC
5745 function unpipe() {
5746 debug('unpipe');
5747 src.unpipe(dest);
ebd8d4e8
IC
5748 }
5749
ab78acc6
IC
5750 // tell the dest that it's being piped to
5751 dest.emit('pipe', src);
5752
5753 // start the flow if it hasn't been started already.
5754 if (!state.flowing) {
5755 debug('pipe resume');
5756 src.resume();
ebd8d4e8
IC
5757 }
5758
ab78acc6
IC
5759 return dest;
5760};
5761
5762function pipeOnDrain(src) {
5763 return function() {
5764 var state = src._readableState;
5765 debug('pipeOnDrain', state.awaitDrain);
5766 if (state.awaitDrain)
5767 state.awaitDrain--;
5768 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5769 state.flowing = true;
5770 flow(src);
5771 }
5772 };
5773}
5774
5775
5776Readable.prototype.unpipe = function(dest) {
5777 var state = this._readableState;
5778
5779 // if we're not piping anywhere, then do nothing.
5780 if (state.pipesCount === 0)
5781 return this;
5782
5783 // just one destination. most common case.
5784 if (state.pipesCount === 1) {
5785 // passed in one, but it's not the right one.
5786 if (dest && dest !== state.pipes)
5787 return this;
5788
5789 if (!dest)
5790 dest = state.pipes;
5791
5792 // got a match.
5793 state.pipes = null;
5794 state.pipesCount = 0;
5795 state.flowing = false;
5796 if (dest)
5797 dest.emit('unpipe', this);
5798 return this;
ebd8d4e8
IC
5799 }
5800
ab78acc6
IC
5801 // slow case. multiple pipe destinations.
5802
5803 if (!dest) {
5804 // remove all.
5805 var dests = state.pipes;
5806 var len = state.pipesCount;
5807 state.pipes = null;
5808 state.pipesCount = 0;
5809 state.flowing = false;
5810
5811 for (var i = 0; i < len; i++)
5812 dests[i].emit('unpipe', this);
5813 return this;
ebd8d4e8
IC
5814 }
5815
ab78acc6
IC
5816 // try to find the right one.
5817 var i = indexOf(state.pipes, dest);
5818 if (i === -1)
5819 return this;
5820
5821 state.pipes.splice(i, 1);
5822 state.pipesCount -= 1;
5823 if (state.pipesCount === 1)
5824 state.pipes = state.pipes[0];
5825
5826 dest.emit('unpipe', this);
ebd8d4e8 5827
ab78acc6
IC
5828 return this;
5829};
5830
5831// set up data events if they are asked for
5832// Ensure readable listeners eventually get something
5833Readable.prototype.on = function(ev, fn) {
5834 var res = Stream.prototype.on.call(this, ev, fn);
5835
5836 // If listening to data, and it has not explicitly been paused,
5837 // then call resume to start the flow of data on the next tick.
5838 if (ev === 'data' && false !== this._readableState.flowing) {
5839 this.resume();
5840 }
5841
5842 if (ev === 'readable' && this.readable) {
5843 var state = this._readableState;
5844 if (!state.readableListening) {
5845 state.readableListening = true;
5846 state.emittedReadable = false;
5847 state.needReadable = true;
5848 if (!state.reading) {
5849 var self = this;
5850 process.nextTick(function() {
5851 debug('readable nexttick read 0');
5852 self.read(0);
5853 });
5854 } else if (state.length) {
5855 emitReadable(this, state);
5856 }
ebd8d4e8
IC
5857 }
5858 }
5859
ab78acc6
IC
5860 return res;
5861};
5862Readable.prototype.addListener = Readable.prototype.on;
5863
5864// pause() and resume() are remnants of the legacy readable stream API
5865// If the user uses them, then switch into old mode.
5866Readable.prototype.resume = function() {
5867 var state = this._readableState;
5868 if (!state.flowing) {
5869 debug('resume');
5870 state.flowing = true;
5871 if (!state.reading) {
5872 debug('resume read 0');
5873 this.read(0);
5874 }
5875 resume(this, state);
5876 }
5877 return this;
5878};
ebd8d4e8 5879
ab78acc6
IC
5880function resume(stream, state) {
5881 if (!state.resumeScheduled) {
5882 state.resumeScheduled = true;
5883 process.nextTick(function() {
5884 resume_(stream, state);
ebd8d4e8
IC
5885 });
5886 }
ebd8d4e8
IC
5887}
5888
ab78acc6
IC
5889function resume_(stream, state) {
5890 state.resumeScheduled = false;
5891 stream.emit('resume');
5892 flow(stream);
5893 if (state.flowing && !state.reading)
5894 stream.read(0);
ebd8d4e8
IC
5895}
5896
ab78acc6
IC
5897Readable.prototype.pause = function() {
5898 debug('call pause flowing=%j', this._readableState.flowing);
5899 if (false !== this._readableState.flowing) {
5900 debug('pause');
5901 this._readableState.flowing = false;
5902 this.emit('pause');
5903 }
5904 return this;
5905};
ebd8d4e8 5906
ab78acc6
IC
5907function flow(stream) {
5908 var state = stream._readableState;
5909 debug('flow', state.flowing);
5910 if (state.flowing) {
5911 do {
5912 var chunk = stream.read();
5913 } while (null !== chunk && state.flowing);
5914 }
ebd8d4e8
IC
5915}
5916
ab78acc6
IC
5917// wrap an old-style stream as the async data source.
5918// This is *not* part of the readable stream interface.
5919// It is an ugly unfortunate mess of history.
5920Readable.prototype.wrap = function(stream) {
5921 var state = this._readableState;
5922 var paused = false;
ebd8d4e8 5923
ab78acc6
IC
5924 var self = this;
5925 stream.on('end', function() {
5926 debug('wrapped end');
5927 if (state.decoder && !state.ended) {
5928 var chunk = state.decoder.end();
5929 if (chunk && chunk.length)
5930 self.push(chunk);
ebd8d4e8 5931 }
ab78acc6
IC
5932
5933 self.push(null);
ebd8d4e8 5934 });
ebd8d4e8 5935
ab78acc6
IC
5936 stream.on('data', function(chunk) {
5937 debug('wrapped data');
5938 if (state.decoder)
5939 chunk = state.decoder.write(chunk);
5940 if (!chunk || !state.objectMode && !chunk.length)
5941 return;
ebd8d4e8 5942
ab78acc6
IC
5943 var ret = self.push(chunk);
5944 if (!ret) {
5945 paused = true;
5946 stream.pause();
ebd8d4e8 5947 }
ab78acc6
IC
5948 });
5949
5950 // proxy all the other methods.
5951 // important when wrapping filters and duplexes.
5952 for (var i in stream) {
5953 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5954 this[i] = function(method) { return function() {
5955 return stream[method].apply(stream, arguments);
5956 }}(i);
ebd8d4e8
IC
5957 }
5958 }
ab78acc6
IC
5959
5960 // proxy certain important events.
5961 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5962 forEach(events, function(ev) {
5963 stream.on(ev, self.emit.bind(self, ev));
5964 });
5965
5966 // when we try to consume some more bytes, simply unpause the
5967 // underlying stream.
5968 self._read = function(n) {
5969 debug('wrapped _read', n);
5970 if (paused) {
5971 paused = false;
5972 stream.resume();
ebd8d4e8 5973 }
ab78acc6
IC
5974 };
5975
5976 return self;
5977};
5978
5979
5980
5981// exposed for testing purposes only.
5982Readable._fromList = fromList;
5983
5984// Pluck off n bytes from an array of buffers.
5985// Length is the combined lengths of all the buffers in the list.
5986function fromList(n, state) {
5987 var list = state.buffer;
5988 var length = state.length;
5989 var stringMode = !!state.decoder;
5990 var objectMode = !!state.objectMode;
5991 var ret;
5992
5993 // nothing in the list, definitely empty.
5994 if (list.length === 0)
5995 return null;
5996
5997 if (length === 0)
5998 ret = null;
5999 else if (objectMode)
6000 ret = list.shift();
6001 else if (!n || n >= length) {
6002 // read it all, truncate the array.
6003 if (stringMode)
6004 ret = list.join('');
6005 else
6006 ret = Buffer.concat(list, length);
6007 list.length = 0;
6008 } else {
6009 // read just some of it.
6010 if (n < list[0].length) {
6011 // just take a part of the first list item.
6012 // slice is the same for buffers and strings.
6013 var buf = list[0];
6014 ret = buf.slice(0, n);
6015 list[0] = buf.slice(n);
6016 } else if (n === list[0].length) {
6017 // first list is a perfect match
6018 ret = list.shift();
ebd8d4e8 6019 } else {
ab78acc6
IC
6020 // complex case.
6021 // we have enough to cover it, but it spans past the first buffer.
6022 if (stringMode)
6023 ret = '';
6024 else
6025 ret = new Buffer(n);
ebd8d4e8 6026
ab78acc6
IC
6027 var c = 0;
6028 for (var i = 0, l = list.length; i < l && c < n; i++) {
6029 var buf = list[0];
6030 var cpy = Math.min(n - c, buf.length);
ebd8d4e8 6031
ab78acc6
IC
6032 if (stringMode)
6033 ret += buf.slice(0, cpy);
6034 else
6035 buf.copy(ret, c, 0, cpy);
ebd8d4e8 6036
ab78acc6
IC
6037 if (cpy < buf.length)
6038 list[0] = buf.slice(cpy);
6039 else
6040 list.shift();
ebd8d4e8 6041
ab78acc6
IC
6042 c += cpy;
6043 }
6044 }
ebd8d4e8
IC
6045 }
6046
ab78acc6 6047 return ret;
ebd8d4e8
IC
6048}
6049
ab78acc6
IC
6050function endReadable(stream) {
6051 var state = stream._readableState;
ebd8d4e8 6052
ab78acc6
IC
6053 // If we get here before consuming all the bytes, then that is a
6054 // bug in node. Should never happen.
6055 if (state.length > 0)
6056 throw new Error('endReadable called on non-empty stream');
ebd8d4e8 6057
ab78acc6
IC
6058 if (!state.endEmitted) {
6059 state.ended = true;
6060 process.nextTick(function() {
6061 // Check that we didn't get one last unshift.
6062 if (!state.endEmitted && state.length === 0) {
6063 state.endEmitted = true;
6064 stream.readable = false;
6065 stream.emit('end');
6066 }
6067 });
6068 }
ebd8d4e8 6069}
ebd8d4e8 6070
ab78acc6
IC
6071function forEach (xs, f) {
6072 for (var i = 0, l = xs.length; i < l; i++) {
6073 f(xs[i], i);
6074 }
ebd8d4e8 6075}
ebd8d4e8 6076
ab78acc6
IC
6077function indexOf (xs, x) {
6078 for (var i = 0, l = xs.length; i < l; i++) {
6079 if (xs[i] === x) return i;
6080 }
6081 return -1;
ebd8d4e8 6082}
ebd8d4e8 6083
ab78acc6
IC
6084}).call(this,require('_process'))
6085},{"./_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){
6086// Copyright Joyent, Inc. and other Node contributors.
6087//
6088// Permission is hereby granted, free of charge, to any person obtaining a
6089// copy of this software and associated documentation files (the
6090// "Software"), to deal in the Software without restriction, including
6091// without limitation the rights to use, copy, modify, merge, publish,
6092// distribute, sublicense, and/or sell copies of the Software, and to permit
6093// persons to whom the Software is furnished to do so, subject to the
6094// following conditions:
6095//
6096// The above copyright notice and this permission notice shall be included
6097// in all copies or substantial portions of the Software.
6098//
6099// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6100// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6101// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6102// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6103// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6104// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6105// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6106
ebd8d4e8 6107
ab78acc6
IC
6108// a transform stream is a readable/writable stream where you do
6109// something with the data. Sometimes it's called a "filter",
6110// but that's not a great name for it, since that implies a thing where
6111// some bits pass through, and others are simply ignored. (That would
6112// be a valid example of a transform, of course.)
6113//
6114// While the output is causally related to the input, it's not a
6115// necessarily symmetric or synchronous transformation. For example,
6116// a zlib stream might take multiple plain-text writes(), and then
6117// emit a single compressed chunk some time in the future.
6118//
6119// Here's how this works:
6120//
6121// The Transform stream has all the aspects of the readable and writable
6122// stream classes. When you write(chunk), that calls _write(chunk,cb)
6123// internally, and returns false if there's a lot of pending writes
6124// buffered up. When you call read(), that calls _read(n) until
6125// there's enough pending readable data buffered up.
6126//
6127// In a transform stream, the written data is placed in a buffer. When
6128// _read(n) is called, it transforms the queued up data, calling the
6129// buffered _write cb's as it consumes chunks. If consuming a single
6130// written chunk would result in multiple output chunks, then the first
6131// outputted bit calls the readcb, and subsequent chunks just go into
6132// the read buffer, and will cause it to emit 'readable' if necessary.
6133//
6134// This way, back-pressure is actually determined by the reading side,
6135// since _read has to be called to start processing a new chunk. However,
6136// a pathological inflate type of transform can cause excessive buffering
6137// here. For example, imagine a stream where every byte of input is
6138// interpreted as an integer from 0-255, and then results in that many
6139// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6140// 1kb of data being output. In this case, you could write a very small
6141// amount of input, and end up with a very large amount of output. In
6142// such a pathological inflating mechanism, there'd be no way to tell
6143// the system to stop doing the transform. A single 4MB write could
6144// cause the system to run out of memory.
6145//
6146// However, even in such a pathological case, only a single written chunk
6147// would be consumed, and then the rest would wait (un-transformed) until
6148// the results of the previous transformed chunk were consumed.
ebd8d4e8 6149
ab78acc6 6150module.exports = Transform;
ebd8d4e8 6151
ab78acc6 6152var Duplex = require('./_stream_duplex');
ebd8d4e8 6153
ab78acc6
IC
6154/*<replacement>*/
6155var util = require('core-util-is');
6156util.inherits = require('inherits');
6157/*</replacement>*/
6158
6159util.inherits(Transform, Duplex);
6160
6161
6162function TransformState(options, stream) {
6163 this.afterTransform = function(er, data) {
6164 return afterTransform(stream, er, data);
6165 };
6166
6167 this.needTransform = false;
6168 this.transforming = false;
6169 this.writecb = null;
6170 this.writechunk = null;
ebd8d4e8 6171}
ebd8d4e8 6172
ab78acc6
IC
6173function afterTransform(stream, er, data) {
6174 var ts = stream._transformState;
6175 ts.transforming = false;
6176
6177 var cb = ts.writecb;
6178
6179 if (!cb)
6180 return stream.emit('error', new Error('no writecb in Transform class'));
6181
6182 ts.writechunk = null;
6183 ts.writecb = null;
6184
6185 if (!util.isNullOrUndefined(data))
6186 stream.push(data);
6187
6188 if (cb)
6189 cb(er);
6190
6191 var rs = stream._readableState;
6192 rs.reading = false;
6193 if (rs.needReadable || rs.length < rs.highWaterMark) {
6194 stream._read(rs.highWaterMark);
6195 }
ebd8d4e8 6196}
ebd8d4e8 6197
ab78acc6
IC
6198
6199function Transform(options) {
6200 if (!(this instanceof Transform))
6201 return new Transform(options);
6202
6203 Duplex.call(this, options);
6204
6205 this._transformState = new TransformState(options, this);
6206
6207 // when the writable side finishes, then flush out anything remaining.
6208 var stream = this;
6209
6210 // start out asking for a readable event once data is transformed.
6211 this._readableState.needReadable = true;
6212
6213 // we have implemented the _read method, and done the other things
6214 // that Readable wants before the first _read call, so unset the
6215 // sync guard flag.
6216 this._readableState.sync = false;
6217
6218 this.once('prefinish', function() {
6219 if (util.isFunction(this._flush))
6220 this._flush(function(er) {
6221 done(stream, er);
6222 });
6223 else
6224 done(stream);
6225 });
ebd8d4e8 6226}
ebd8d4e8 6227
ab78acc6
IC
6228Transform.prototype.push = function(chunk, encoding) {
6229 this._transformState.needTransform = false;
6230 return Duplex.prototype.push.call(this, chunk, encoding);
6231};
6232
6233// This is the part where you do stuff!
6234// override this function in implementation classes.
6235// 'chunk' is an input chunk.
6236//
6237// Call `push(newChunk)` to pass along transformed output
6238// to the readable side. You may call 'push' zero or more times.
6239//
6240// Call `cb(err)` when you are done with this chunk. If you pass
6241// an error, then that'll put the hurt on the whole operation. If you
6242// never call cb(), then you'll never get another chunk.
6243Transform.prototype._transform = function(chunk, encoding, cb) {
6244 throw new Error('not implemented');
6245};
6246
6247Transform.prototype._write = function(chunk, encoding, cb) {
6248 var ts = this._transformState;
6249 ts.writecb = cb;
6250 ts.writechunk = chunk;
6251 ts.writeencoding = encoding;
6252 if (!ts.transforming) {
6253 var rs = this._readableState;
6254 if (ts.needTransform ||
6255 rs.needReadable ||
6256 rs.length < rs.highWaterMark)
6257 this._read(rs.highWaterMark);
6258 }
6259};
6260
6261// Doesn't matter what the args are here.
6262// _transform does all the work.
6263// That we got here means that the readable side wants more data.
6264Transform.prototype._read = function(n) {
6265 var ts = this._transformState;
ebd8d4e8 6266
ab78acc6
IC
6267 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6268 ts.transforming = true;
6269 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6270 } else {
6271 // mark that we need a transform, so that any data that comes in
6272 // will get processed, now that we've asked for it.
6273 ts.needTransform = true;
6274 }
6275};
ebd8d4e8 6276
ebd8d4e8 6277
ab78acc6
IC
6278function done(stream, er) {
6279 if (er)
6280 return stream.emit('error', er);
ebd8d4e8 6281
ab78acc6
IC
6282 // if there's nothing in the write buffer, then that means
6283 // that nothing more will ever be provided
6284 var ws = stream._writableState;
6285 var ts = stream._transformState;
ebd8d4e8 6286
ab78acc6
IC
6287 if (ws.length)
6288 throw new Error('calling transform done when ws.length != 0');
6289
6290 if (ts.transforming)
6291 throw new Error('calling transform done when still transforming');
6292
6293 return stream.push(null);
ebd8d4e8
IC
6294}
6295
ab78acc6
IC
6296},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6297(function (process){
6298// Copyright Joyent, Inc. and other Node contributors.
6299//
6300// Permission is hereby granted, free of charge, to any person obtaining a
6301// copy of this software and associated documentation files (the
6302// "Software"), to deal in the Software without restriction, including
6303// without limitation the rights to use, copy, modify, merge, publish,
6304// distribute, sublicense, and/or sell copies of the Software, and to permit
6305// persons to whom the Software is furnished to do so, subject to the
6306// following conditions:
6307//
6308// The above copyright notice and this permission notice shall be included
6309// in all copies or substantial portions of the Software.
6310//
6311// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6312// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6313// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6314// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6315// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6316// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6317// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6318
ab78acc6
IC
6319// A bit simpler than readable streams.
6320// Implement an async ._write(chunk, cb), and it'll handle all
6321// the drain event emission and buffering.
ebd8d4e8 6322
ab78acc6 6323module.exports = Writable;
ebd8d4e8 6324
ab78acc6
IC
6325/*<replacement>*/
6326var Buffer = require('buffer').Buffer;
6327/*</replacement>*/
ebd8d4e8 6328
ab78acc6 6329Writable.WritableState = WritableState;
ebd8d4e8
IC
6330
6331
ab78acc6
IC
6332/*<replacement>*/
6333var util = require('core-util-is');
6334util.inherits = require('inherits');
6335/*</replacement>*/
ebd8d4e8 6336
ab78acc6 6337var Stream = require('stream');
ebd8d4e8 6338
ab78acc6 6339util.inherits(Writable, Stream);
ebd8d4e8 6340
ab78acc6
IC
6341function WriteReq(chunk, encoding, cb) {
6342 this.chunk = chunk;
6343 this.encoding = encoding;
6344 this.callback = cb;
ebd8d4e8
IC
6345}
6346
ab78acc6
IC
6347function WritableState(options, stream) {
6348 var Duplex = require('./_stream_duplex');
ebd8d4e8 6349
ab78acc6 6350 options = options || {};
ebd8d4e8 6351
ab78acc6
IC
6352 // the point at which write() starts returning false
6353 // Note: 0 is a valid value, means that we always return false if
6354 // the entire buffer is not flushed immediately on write()
6355 var hwm = options.highWaterMark;
6356 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6357 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
ebd8d4e8 6358
ab78acc6
IC
6359 // object stream flag to indicate whether or not this stream
6360 // contains buffers or objects.
6361 this.objectMode = !!options.objectMode;
ebd8d4e8 6362
ab78acc6
IC
6363 if (stream instanceof Duplex)
6364 this.objectMode = this.objectMode || !!options.writableObjectMode;
ebd8d4e8 6365
ab78acc6
IC
6366 // cast to ints.
6367 this.highWaterMark = ~~this.highWaterMark;
ebd8d4e8 6368
ab78acc6
IC
6369 this.needDrain = false;
6370 // at the start of calling end()
6371 this.ending = false;
6372 // when end() has been called, and returned
6373 this.ended = false;
6374 // when 'finish' is emitted
6375 this.finished = false;
ebd8d4e8 6376
ab78acc6
IC
6377 // should we decode strings into buffers before passing to _write?
6378 // this is here so that some node-core streams can optimize string
6379 // handling at a lower level.
6380 var noDecode = options.decodeStrings === false;
6381 this.decodeStrings = !noDecode;
ebd8d4e8 6382
ab78acc6
IC
6383 // Crypto is kind of old and crusty. Historically, its default string
6384 // encoding is 'binary' so we have to make this configurable.
6385 // Everything else in the universe uses 'utf8', though.
6386 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 6387
ab78acc6
IC
6388 // not an actual buffer we keep track of, but a measurement
6389 // of how much we're waiting to get pushed to some underlying
6390 // socket or file.
6391 this.length = 0;
ebd8d4e8 6392
ab78acc6
IC
6393 // a flag to see when we're in the middle of a write.
6394 this.writing = false;
ebd8d4e8 6395
ab78acc6
IC
6396 // when true all writes will be buffered until .uncork() call
6397 this.corked = 0;
ebd8d4e8 6398
ab78acc6
IC
6399 // a flag to be able to tell if the onwrite cb is called immediately,
6400 // or on a later tick. We set this to true at first, because any
6401 // actions that shouldn't happen until "later" should generally also
6402 // not happen before the first write call.
6403 this.sync = true;
ebd8d4e8 6404
ab78acc6
IC
6405 // a flag to know if we're processing previously buffered items, which
6406 // may call the _write() callback in the same tick, so that we don't
6407 // end up in an overlapped onwrite situation.
6408 this.bufferProcessing = false;
ebd8d4e8 6409
ab78acc6
IC
6410 // the callback that's passed to _write(chunk,cb)
6411 this.onwrite = function(er) {
6412 onwrite(stream, er);
6413 };
ebd8d4e8 6414
ab78acc6
IC
6415 // the callback that the user supplies to write(chunk,encoding,cb)
6416 this.writecb = null;
ebd8d4e8 6417
ab78acc6
IC
6418 // the amount that is being written when _write is called.
6419 this.writelen = 0;
ebd8d4e8 6420
ab78acc6 6421 this.buffer = [];
ebd8d4e8 6422
ab78acc6
IC
6423 // number of pending user-supplied write callbacks
6424 // this must be 0 before 'finish' can be emitted
6425 this.pendingcb = 0;
ebd8d4e8 6426
ab78acc6
IC
6427 // emit prefinish if the only thing we're waiting for is _write cbs
6428 // This is relevant for synchronous Transform streams
6429 this.prefinished = false;
ebd8d4e8 6430
ab78acc6
IC
6431 // True if the error was already emitted and should not be thrown again
6432 this.errorEmitted = false;
ebd8d4e8
IC
6433}
6434
ab78acc6
IC
6435function Writable(options) {
6436 var Duplex = require('./_stream_duplex');
ebd8d4e8 6437
ab78acc6
IC
6438 // Writable ctor is applied to Duplexes, though they're not
6439 // instanceof Writable, they're instanceof Readable.
6440 if (!(this instanceof Writable) && !(this instanceof Duplex))
6441 return new Writable(options);
ebd8d4e8 6442
ab78acc6 6443 this._writableState = new WritableState(options, this);
ebd8d4e8 6444
ab78acc6
IC
6445 // legacy.
6446 this.writable = true;
ebd8d4e8 6447
ab78acc6 6448 Stream.call(this);
ebd8d4e8
IC
6449}
6450
ab78acc6
IC
6451// Otherwise people can pipe Writable streams, which is just wrong.
6452Writable.prototype.pipe = function() {
6453 this.emit('error', new Error('Cannot pipe. Not readable.'));
6454};
ebd8d4e8 6455
ebd8d4e8 6456
ab78acc6
IC
6457function writeAfterEnd(stream, state, cb) {
6458 var er = new Error('write after end');
6459 // TODO: defer error events consistently everywhere, not just the cb
6460 stream.emit('error', er);
6461 process.nextTick(function() {
6462 cb(er);
6463 });
ebd8d4e8
IC
6464}
6465
ab78acc6
IC
6466// If we get something that is not a buffer, string, null, or undefined,
6467// and we're not in objectMode, then that's an error.
6468// Otherwise stream chunks are all considered to be of length=1, and the
6469// watermarks determine how many objects to keep in the buffer, rather than
6470// how many bytes or characters.
6471function validChunk(stream, state, chunk, cb) {
6472 var valid = true;
6473 if (!util.isBuffer(chunk) &&
6474 !util.isString(chunk) &&
6475 !util.isNullOrUndefined(chunk) &&
6476 !state.objectMode) {
6477 var er = new TypeError('Invalid non-string/buffer chunk');
6478 stream.emit('error', er);
6479 process.nextTick(function() {
6480 cb(er);
6481 });
6482 valid = false;
6483 }
6484 return valid;
ebd8d4e8
IC
6485}
6486
ab78acc6
IC
6487Writable.prototype.write = function(chunk, encoding, cb) {
6488 var state = this._writableState;
6489 var ret = false;
ebd8d4e8 6490
ab78acc6
IC
6491 if (util.isFunction(encoding)) {
6492 cb = encoding;
6493 encoding = null;
ebd8d4e8 6494 }
ebd8d4e8 6495
ab78acc6
IC
6496 if (util.isBuffer(chunk))
6497 encoding = 'buffer';
6498 else if (!encoding)
6499 encoding = state.defaultEncoding;
6500
6501 if (!util.isFunction(cb))
6502 cb = function() {};
6503
6504 if (state.ended)
6505 writeAfterEnd(this, state, cb);
6506 else if (validChunk(this, state, chunk, cb)) {
6507 state.pendingcb++;
6508 ret = writeOrBuffer(this, state, chunk, encoding, cb);
ebd8d4e8 6509 }
ebd8d4e8 6510
ab78acc6
IC
6511 return ret;
6512};
6513
6514Writable.prototype.cork = function() {
6515 var state = this._writableState;
6516
6517 state.corked++;
6518};
ebd8d4e8 6519
ab78acc6
IC
6520Writable.prototype.uncork = function() {
6521 var state = this._writableState;
ebd8d4e8 6522
ab78acc6
IC
6523 if (state.corked) {
6524 state.corked--;
ebd8d4e8 6525
ab78acc6
IC
6526 if (!state.writing &&
6527 !state.corked &&
6528 !state.finished &&
6529 !state.bufferProcessing &&
6530 state.buffer.length)
6531 clearBuffer(this, state);
ebd8d4e8 6532 }
ab78acc6 6533};
ebd8d4e8 6534
ab78acc6
IC
6535function decodeChunk(state, chunk, encoding) {
6536 if (!state.objectMode &&
6537 state.decodeStrings !== false &&
6538 util.isString(chunk)) {
6539 chunk = new Buffer(chunk, encoding);
ebd8d4e8 6540 }
ab78acc6 6541 return chunk;
ebd8d4e8
IC
6542}
6543
ab78acc6
IC
6544// if we're already writing something, then just put this
6545// in the queue, and wait our turn. Otherwise, call _write
6546// If we return false, then we need a drain event, so set that flag.
6547function writeOrBuffer(stream, state, chunk, encoding, cb) {
6548 chunk = decodeChunk(state, chunk, encoding);
6549 if (util.isBuffer(chunk))
6550 encoding = 'buffer';
6551 var len = state.objectMode ? 1 : chunk.length;
6552
6553 state.length += len;
6554
6555 var ret = state.length < state.highWaterMark;
6556 // we must ensure that previous needDrain will not be reset to false.
6557 if (!ret)
6558 state.needDrain = true;
6559
6560 if (state.writing || state.corked)
6561 state.buffer.push(new WriteReq(chunk, encoding, cb));
6562 else
6563 doWrite(stream, state, false, len, chunk, encoding, cb);
6564
6565 return ret;
ebd8d4e8
IC
6566}
6567
ab78acc6
IC
6568function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6569 state.writelen = len;
6570 state.writecb = cb;
6571 state.writing = true;
6572 state.sync = true;
6573 if (writev)
6574 stream._writev(chunk, state.onwrite);
6575 else
6576 stream._write(chunk, encoding, state.onwrite);
6577 state.sync = false;
ebd8d4e8
IC
6578}
6579
ab78acc6
IC
6580function onwriteError(stream, state, sync, er, cb) {
6581 if (sync)
6582 process.nextTick(function() {
6583 state.pendingcb--;
6584 cb(er);
6585 });
6586 else {
6587 state.pendingcb--;
6588 cb(er);
6589 }
ebd8d4e8 6590
ab78acc6
IC
6591 stream._writableState.errorEmitted = true;
6592 stream.emit('error', er);
6593}
ebd8d4e8 6594
ab78acc6
IC
6595function onwriteStateUpdate(state) {
6596 state.writing = false;
6597 state.writecb = null;
6598 state.length -= state.writelen;
6599 state.writelen = 0;
6600}
ebd8d4e8 6601
ab78acc6
IC
6602function onwrite(stream, er) {
6603 var state = stream._writableState;
6604 var sync = state.sync;
6605 var cb = state.writecb;
ebd8d4e8 6606
ab78acc6 6607 onwriteStateUpdate(state);
ebd8d4e8 6608
ab78acc6
IC
6609 if (er)
6610 onwriteError(stream, state, sync, er, cb);
6611 else {
6612 // Check if we're actually ready to finish, but don't emit yet
6613 var finished = needFinish(stream, state);
ebd8d4e8 6614
ab78acc6
IC
6615 if (!finished &&
6616 !state.corked &&
6617 !state.bufferProcessing &&
6618 state.buffer.length) {
6619 clearBuffer(stream, state);
6620 }
6621
6622 if (sync) {
6623 process.nextTick(function() {
6624 afterWrite(stream, state, finished, cb);
6625 });
6626 } else {
6627 afterWrite(stream, state, finished, cb);
ebd8d4e8 6628 }
ebd8d4e8
IC
6629 }
6630}
6631
ab78acc6
IC
6632function afterWrite(stream, state, finished, cb) {
6633 if (!finished)
6634 onwriteDrain(stream, state);
6635 state.pendingcb--;
6636 cb();
6637 finishMaybe(stream, state);
6638}
6639
6640// Must force callback to be called on nextTick, so that we don't
6641// emit 'drain' before the write() consumer gets the 'false' return
6642// value, and has a chance to attach a 'drain' listener.
6643function onwriteDrain(stream, state) {
6644 if (state.length === 0 && state.needDrain) {
6645 state.needDrain = false;
6646 stream.emit('drain');
ebd8d4e8
IC
6647 }
6648}
6649
ebd8d4e8 6650
ab78acc6
IC
6651// if there's something in the buffer waiting, then process it
6652function clearBuffer(stream, state) {
6653 state.bufferProcessing = true;
6654
6655 if (stream._writev && state.buffer.length > 1) {
6656 // Fast case, write everything using _writev()
6657 var cbs = [];
6658 for (var c = 0; c < state.buffer.length; c++)
6659 cbs.push(state.buffer[c].callback);
6660
6661 // count the one we are adding, as well.
6662 // TODO(isaacs) clean this up
6663 state.pendingcb++;
6664 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6665 for (var i = 0; i < cbs.length; i++) {
6666 state.pendingcb--;
6667 cbs[i](err);
6668 }
6669 });
6670
6671 // Clear buffer
6672 state.buffer = [];
6673 } else {
6674 // Slow case, write chunks one-by-one
6675 for (var c = 0; c < state.buffer.length; c++) {
6676 var entry = state.buffer[c];
6677 var chunk = entry.chunk;
6678 var encoding = entry.encoding;
6679 var cb = entry.callback;
6680 var len = state.objectMode ? 1 : chunk.length;
6681
6682 doWrite(stream, state, false, len, chunk, encoding, cb);
6683
6684 // if we didn't call the onwrite immediately, then
6685 // it means that we need to wait until it does.
6686 // also, that means that the chunk and cb are currently
6687 // being processed, so move the buffer counter past them.
6688 if (state.writing) {
6689 c++;
6690 break;
6691 }
ebd8d4e8 6692 }
ab78acc6
IC
6693
6694 if (c < state.buffer.length)
6695 state.buffer = state.buffer.slice(c);
6696 else
6697 state.buffer.length = 0;
ebd8d4e8
IC
6698 }
6699
ab78acc6 6700 state.bufferProcessing = false;
ebd8d4e8
IC
6701}
6702
ab78acc6
IC
6703Writable.prototype._write = function(chunk, encoding, cb) {
6704 cb(new Error('not implemented'));
ebd8d4e8 6705
ab78acc6 6706};
ebd8d4e8 6707
ab78acc6 6708Writable.prototype._writev = null;
ebd8d4e8 6709
ab78acc6
IC
6710Writable.prototype.end = function(chunk, encoding, cb) {
6711 var state = this._writableState;
ebd8d4e8 6712
ab78acc6
IC
6713 if (util.isFunction(chunk)) {
6714 cb = chunk;
6715 chunk = null;
6716 encoding = null;
6717 } else if (util.isFunction(encoding)) {
6718 cb = encoding;
6719 encoding = null;
6720 }
ebd8d4e8 6721
ab78acc6
IC
6722 if (!util.isNullOrUndefined(chunk))
6723 this.write(chunk, encoding);
6724
6725 // .end() fully uncorks
6726 if (state.corked) {
6727 state.corked = 1;
6728 this.uncork();
ebd8d4e8 6729 }
ab78acc6
IC
6730
6731 // ignore unnecessary end() calls.
6732 if (!state.ending && !state.finished)
6733 endWritable(this, state, cb);
6734};
6735
6736
6737function needFinish(stream, state) {
6738 return (state.ending &&
6739 state.length === 0 &&
6740 !state.finished &&
6741 !state.writing);
ebd8d4e8
IC
6742}
6743
ab78acc6
IC
6744function prefinish(stream, state) {
6745 if (!state.prefinished) {
6746 state.prefinished = true;
6747 stream.emit('prefinish');
ebd8d4e8 6748 }
ebd8d4e8
IC
6749}
6750
ab78acc6
IC
6751function finishMaybe(stream, state) {
6752 var need = needFinish(stream, state);
6753 if (need) {
6754 if (state.pendingcb === 0) {
6755 prefinish(stream, state);
6756 state.finished = true;
6757 stream.emit('finish');
6758 } else
6759 prefinish(stream, state);
6760 }
6761 return need;
6762}
ebd8d4e8 6763
ab78acc6
IC
6764function endWritable(stream, state, cb) {
6765 state.ending = true;
6766 finishMaybe(stream, state);
6767 if (cb) {
6768 if (state.finished)
6769 process.nextTick(cb);
6770 else
6771 stream.once('finish', cb);
ebd8d4e8 6772 }
ab78acc6 6773 state.ended = true;
ebd8d4e8
IC
6774}
6775
ab78acc6
IC
6776}).call(this,require('_process'))
6777},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6778(function (Buffer){
6779// Copyright Joyent, Inc. and other Node contributors.
6780//
6781// Permission is hereby granted, free of charge, to any person obtaining a
6782// copy of this software and associated documentation files (the
6783// "Software"), to deal in the Software without restriction, including
6784// without limitation the rights to use, copy, modify, merge, publish,
6785// distribute, sublicense, and/or sell copies of the Software, and to permit
6786// persons to whom the Software is furnished to do so, subject to the
6787// following conditions:
6788//
6789// The above copyright notice and this permission notice shall be included
6790// in all copies or substantial portions of the Software.
6791//
6792// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6793// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6794// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6795// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6796// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6797// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6798// USE OR OTHER DEALINGS IN THE SOFTWARE.
6799
6800// NOTE: These type checking functions intentionally don't use `instanceof`
6801// because it is fragile and can be easily faked with `Object.create()`.
6802function isArray(ar) {
6803 return Array.isArray(ar);
ebd8d4e8 6804}
ab78acc6 6805exports.isArray = isArray;
ebd8d4e8 6806
ab78acc6
IC
6807function isBoolean(arg) {
6808 return typeof arg === 'boolean';
ebd8d4e8 6809}
ab78acc6 6810exports.isBoolean = isBoolean;
ebd8d4e8 6811
ab78acc6
IC
6812function isNull(arg) {
6813 return arg === null;
6814}
6815exports.isNull = isNull;
ebd8d4e8 6816
ab78acc6
IC
6817function isNullOrUndefined(arg) {
6818 return arg == null;
6819}
6820exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 6821
ab78acc6
IC
6822function isNumber(arg) {
6823 return typeof arg === 'number';
ebd8d4e8 6824}
ab78acc6 6825exports.isNumber = isNumber;
ebd8d4e8 6826
ab78acc6
IC
6827function isString(arg) {
6828 return typeof arg === 'string';
6829}
6830exports.isString = isString;
ebd8d4e8 6831
ab78acc6
IC
6832function isSymbol(arg) {
6833 return typeof arg === 'symbol';
6834}
6835exports.isSymbol = isSymbol;
ebd8d4e8 6836
ab78acc6
IC
6837function isUndefined(arg) {
6838 return arg === void 0;
ebd8d4e8 6839}
ab78acc6 6840exports.isUndefined = isUndefined;
ebd8d4e8 6841
ab78acc6
IC
6842function isRegExp(re) {
6843 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 6844}
ab78acc6 6845exports.isRegExp = isRegExp;
ebd8d4e8 6846
ab78acc6
IC
6847function isObject(arg) {
6848 return typeof arg === 'object' && arg !== null;
ebd8d4e8 6849}
ab78acc6 6850exports.isObject = isObject;
ebd8d4e8 6851
ab78acc6
IC
6852function isDate(d) {
6853 return isObject(d) && objectToString(d) === '[object Date]';
6854}
6855exports.isDate = isDate;
ebd8d4e8 6856
ab78acc6
IC
6857function isError(e) {
6858 return isObject(e) &&
6859 (objectToString(e) === '[object Error]' || e instanceof Error);
6860}
6861exports.isError = isError;
ebd8d4e8 6862
ab78acc6
IC
6863function isFunction(arg) {
6864 return typeof arg === 'function';
6865}
6866exports.isFunction = isFunction;
6867
6868function isPrimitive(arg) {
6869 return arg === null ||
6870 typeof arg === 'boolean' ||
6871 typeof arg === 'number' ||
6872 typeof arg === 'string' ||
6873 typeof arg === 'symbol' || // ES6 symbol
6874 typeof arg === 'undefined';
ebd8d4e8 6875}
ab78acc6 6876exports.isPrimitive = isPrimitive;
ebd8d4e8 6877
ab78acc6
IC
6878function isBuffer(arg) {
6879 return Buffer.isBuffer(arg);
ebd8d4e8 6880}
ab78acc6 6881exports.isBuffer = isBuffer;
ebd8d4e8 6882
ab78acc6
IC
6883function objectToString(o) {
6884 return Object.prototype.toString.call(o);
ebd8d4e8 6885}
ab78acc6
IC
6886}).call(this,require("buffer").Buffer)
6887},{"buffer":7}],22:[function(require,module,exports){
6888module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 6889
ab78acc6
IC
6890},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6891exports = module.exports = require('./lib/_stream_readable.js');
6892exports.Stream = require('stream');
6893exports.Readable = exports;
6894exports.Writable = require('./lib/_stream_writable.js');
6895exports.Duplex = require('./lib/_stream_duplex.js');
6896exports.Transform = require('./lib/_stream_transform.js');
6897exports.PassThrough = require('./lib/_stream_passthrough.js');
ebd8d4e8 6898
ab78acc6
IC
6899},{"./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){
6900module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 6901
ab78acc6
IC
6902},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6903module.exports = require("./lib/_stream_writable.js")
6904
6905},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6906// Copyright Joyent, Inc. and other Node contributors.
6907//
6908// Permission is hereby granted, free of charge, to any person obtaining a
6909// copy of this software and associated documentation files (the
6910// "Software"), to deal in the Software without restriction, including
6911// without limitation the rights to use, copy, modify, merge, publish,
6912// distribute, sublicense, and/or sell copies of the Software, and to permit
6913// persons to whom the Software is furnished to do so, subject to the
6914// following conditions:
6915//
6916// The above copyright notice and this permission notice shall be included
6917// in all copies or substantial portions of the Software.
6918//
6919// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6920// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6921// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6922// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6923// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6924// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6925// USE OR OTHER DEALINGS IN THE SOFTWARE.
6926
6927module.exports = Stream;
6928
6929var EE = require('events').EventEmitter;
6930var inherits = require('inherits');
6931
6932inherits(Stream, EE);
6933Stream.Readable = require('readable-stream/readable.js');
6934Stream.Writable = require('readable-stream/writable.js');
6935Stream.Duplex = require('readable-stream/duplex.js');
6936Stream.Transform = require('readable-stream/transform.js');
6937Stream.PassThrough = require('readable-stream/passthrough.js');
6938
6939// Backwards-compat with node 0.4.x
6940Stream.Stream = Stream;
6941
6942
6943
6944// old-style streams. Note that the pipe method (the only relevant
6945// part of this class) is overridden in the Readable class.
6946
6947function Stream() {
6948 EE.call(this);
ebd8d4e8
IC
6949}
6950
ab78acc6
IC
6951Stream.prototype.pipe = function(dest, options) {
6952 var source = this;
ebd8d4e8 6953
ab78acc6
IC
6954 function ondata(chunk) {
6955 if (dest.writable) {
6956 if (false === dest.write(chunk) && source.pause) {
6957 source.pause();
6958 }
6959 }
6960 }
ebd8d4e8 6961
ab78acc6 6962 source.on('data', ondata);
ebd8d4e8 6963
ab78acc6
IC
6964 function ondrain() {
6965 if (source.readable && source.resume) {
6966 source.resume();
6967 }
6968 }
ebd8d4e8 6969
ab78acc6 6970 dest.on('drain', ondrain);
ebd8d4e8 6971
ab78acc6
IC
6972 // If the 'end' option is not supplied, dest.end() will be called when
6973 // source gets the 'end' or 'close' events. Only dest.end() once.
6974 if (!dest._isStdio && (!options || options.end !== false)) {
6975 source.on('end', onend);
6976 source.on('close', onclose);
ebd8d4e8
IC
6977 }
6978
ab78acc6
IC
6979 var didOnEnd = false;
6980 function onend() {
6981 if (didOnEnd) return;
6982 didOnEnd = true;
ebd8d4e8 6983
ab78acc6
IC
6984 dest.end();
6985 }
ebd8d4e8 6986
ebd8d4e8 6987
ab78acc6
IC
6988 function onclose() {
6989 if (didOnEnd) return;
6990 didOnEnd = true;
ebd8d4e8 6991
ab78acc6 6992 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
6993 }
6994
ab78acc6
IC
6995 // don't leave dangling pipes when there are errors.
6996 function onerror(er) {
6997 cleanup();
6998 if (EE.listenerCount(this, 'error') === 0) {
6999 throw er; // Unhandled stream error in pipe.
7000 }
7001 }
ebd8d4e8 7002
ab78acc6
IC
7003 source.on('error', onerror);
7004 dest.on('error', onerror);
ebd8d4e8 7005
ab78acc6
IC
7006 // remove all the event listeners that were added.
7007 function cleanup() {
7008 source.removeListener('data', ondata);
7009 dest.removeListener('drain', ondrain);
ebd8d4e8 7010
ab78acc6
IC
7011 source.removeListener('end', onend);
7012 source.removeListener('close', onclose);
7013
7014 source.removeListener('error', onerror);
7015 dest.removeListener('error', onerror);
7016
7017 source.removeListener('end', cleanup);
7018 source.removeListener('close', cleanup);
7019
7020 dest.removeListener('close', cleanup);
ebd8d4e8
IC
7021 }
7022
ab78acc6
IC
7023 source.on('end', cleanup);
7024 source.on('close', cleanup);
ebd8d4e8 7025
ab78acc6 7026 dest.on('close', cleanup);
ebd8d4e8 7027
ab78acc6 7028 dest.emit('pipe', source);
ebd8d4e8 7029
ab78acc6
IC
7030 // Allow for unix-like usage: A.pipe(B).pipe(C)
7031 return dest;
7032};
ebd8d4e8 7033
ab78acc6
IC
7034},{"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){
7035// Copyright Joyent, Inc. and other Node contributors.
7036//
7037// Permission is hereby granted, free of charge, to any person obtaining a
7038// copy of this software and associated documentation files (the
7039// "Software"), to deal in the Software without restriction, including
7040// without limitation the rights to use, copy, modify, merge, publish,
7041// distribute, sublicense, and/or sell copies of the Software, and to permit
7042// persons to whom the Software is furnished to do so, subject to the
7043// following conditions:
7044//
7045// The above copyright notice and this permission notice shall be included
7046// in all copies or substantial portions of the Software.
7047//
7048// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7049// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7050// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7051// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7052// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7053// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7054// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 7055
ab78acc6 7056var Buffer = require('buffer').Buffer;
ebd8d4e8 7057
ab78acc6
IC
7058var isBufferEncoding = Buffer.isEncoding
7059 || function(encoding) {
7060 switch (encoding && encoding.toLowerCase()) {
7061 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;
7062 default: return false;
7063 }
7064 }
ebd8d4e8 7065
ebd8d4e8 7066
ab78acc6
IC
7067function assertEncoding(encoding) {
7068 if (encoding && !isBufferEncoding(encoding)) {
7069 throw new Error('Unknown encoding: ' + encoding);
ebd8d4e8 7070 }
ebd8d4e8
IC
7071}
7072
ab78acc6
IC
7073// StringDecoder provides an interface for efficiently splitting a series of
7074// buffers into a series of JS strings without breaking apart multi-byte
7075// characters. CESU-8 is handled as part of the UTF-8 encoding.
7076//
7077// @TODO Handling all encodings inside a single object makes it very difficult
7078// to reason about this code, so it should be split up in the future.
7079// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
7080// points as used by CESU-8.
7081var StringDecoder = exports.StringDecoder = function(encoding) {
7082 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7083 assertEncoding(encoding);
7084 switch (this.encoding) {
7085 case 'utf8':
7086 // CESU-8 represents each of Surrogate Pair by 3-bytes
7087 this.surrogateSize = 3;
7088 break;
7089 case 'ucs2':
7090 case 'utf16le':
7091 // UTF-16 represents each of Surrogate Pair by 2-bytes
7092 this.surrogateSize = 2;
7093 this.detectIncompleteChar = utf16DetectIncompleteChar;
7094 break;
7095 case 'base64':
7096 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
7097 this.surrogateSize = 3;
7098 this.detectIncompleteChar = base64DetectIncompleteChar;
7099 break;
7100 default:
7101 this.write = passThroughWrite;
7102 return;
7103 }
ebd8d4e8 7104
ab78acc6
IC
7105 // Enough space to store all bytes of a single character. UTF-8 needs 4
7106 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7107 this.charBuffer = new Buffer(6);
7108 // Number of bytes received for the current incomplete multi-byte character.
7109 this.charReceived = 0;
7110 // Number of bytes expected for the current incomplete multi-byte character.
7111 this.charLength = 0;
7112};
ebd8d4e8 7113
ebd8d4e8 7114
ab78acc6
IC
7115// write decodes the given buffer and returns it as JS string that is
7116// guaranteed to not contain any partial multi-byte characters. Any partial
7117// character found at the end of the buffer is buffered up, and will be
7118// returned when calling write again with the remaining bytes.
7119//
7120// Note: Converting a Buffer containing an orphan surrogate to a String
7121// currently works, but converting a String to a Buffer (via `new Buffer`, or
7122// Buffer#write) will replace incomplete surrogates with the unicode
7123// replacement character. See https://codereview.chromium.org/121173009/ .
7124StringDecoder.prototype.write = function(buffer) {
7125 var charStr = '';
7126 // if our last write ended with an incomplete multibyte character
7127 while (this.charLength) {
7128 // determine how many remaining bytes this buffer has to offer for this char
7129 var available = (buffer.length >= this.charLength - this.charReceived) ?
7130 this.charLength - this.charReceived :
7131 buffer.length;
7132
7133 // add the new bytes to the char buffer
7134 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7135 this.charReceived += available;
7136
7137 if (this.charReceived < this.charLength) {
7138 // still not enough chars in this buffer? wait for more ...
7139 return '';
7140 }
7141
7142 // remove bytes belonging to the current character from the buffer
7143 buffer = buffer.slice(available, buffer.length);
7144
7145 // get the character that was split
7146 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7147
7148 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7149 var charCode = charStr.charCodeAt(charStr.length - 1);
7150 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7151 this.charLength += this.surrogateSize;
7152 charStr = '';
7153 continue;
7154 }
7155 this.charReceived = this.charLength = 0;
ebd8d4e8 7156
ab78acc6
IC
7157 // if there are no more bytes in this buffer, just emit our char
7158 if (buffer.length === 0) {
7159 return charStr;
7160 }
7161 break;
ebd8d4e8 7162 }
ebd8d4e8 7163
ab78acc6
IC
7164 // determine and set charLength / charReceived
7165 this.detectIncompleteChar(buffer);
ebd8d4e8 7166
ab78acc6
IC
7167 var end = buffer.length;
7168 if (this.charLength) {
7169 // buffer the incomplete character bytes we got
7170 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7171 end -= this.charReceived;
ebd8d4e8
IC
7172 }
7173
ab78acc6 7174 charStr += buffer.toString(this.encoding, 0, end);
ebd8d4e8 7175
ab78acc6
IC
7176 var end = charStr.length - 1;
7177 var charCode = charStr.charCodeAt(end);
7178 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7179 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7180 var size = this.surrogateSize;
7181 this.charLength += size;
7182 this.charReceived += size;
7183 this.charBuffer.copy(this.charBuffer, size, 0, size);
7184 buffer.copy(this.charBuffer, 0, 0, size);
7185 return charStr.substring(0, end);
ebd8d4e8
IC
7186 }
7187
ab78acc6
IC
7188 // or just emit the charStr
7189 return charStr;
7190};
ebd8d4e8 7191
ab78acc6
IC
7192// detectIncompleteChar determines if there is an incomplete UTF-8 character at
7193// the end of the given buffer. If so, it sets this.charLength to the byte
7194// length that character, and sets this.charReceived to the number of bytes
7195// that are available for this character.
7196StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7197 // determine how many bytes we have to check at the end of this buffer
7198 var i = (buffer.length >= 3) ? 3 : buffer.length;
ebd8d4e8 7199
ab78acc6
IC
7200 // Figure out if one of the last i bytes of our buffer announces an
7201 // incomplete char.
7202 for (; i > 0; i--) {
7203 var c = buffer[buffer.length - i];
ebd8d4e8 7204
ab78acc6 7205 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 7206
ab78acc6
IC
7207 // 110XXXXX
7208 if (i == 1 && c >> 5 == 0x06) {
7209 this.charLength = 2;
7210 break;
7211 }
ebd8d4e8 7212
ab78acc6
IC
7213 // 1110XXXX
7214 if (i <= 2 && c >> 4 == 0x0E) {
7215 this.charLength = 3;
7216 break;
7217 }
ebd8d4e8 7218
ab78acc6
IC
7219 // 11110XXX
7220 if (i <= 3 && c >> 3 == 0x1E) {
7221 this.charLength = 4;
7222 break;
7223 }
7224 }
7225 this.charReceived = i;
7226};
ebd8d4e8 7227
ab78acc6
IC
7228StringDecoder.prototype.end = function(buffer) {
7229 var res = '';
7230 if (buffer && buffer.length)
7231 res = this.write(buffer);
ebd8d4e8 7232
ab78acc6
IC
7233 if (this.charReceived) {
7234 var cr = this.charReceived;
7235 var buf = this.charBuffer;
7236 var enc = this.encoding;
7237 res += buf.slice(0, cr).toString(enc);
ebd8d4e8
IC
7238 }
7239
ab78acc6
IC
7240 return res;
7241};
ebd8d4e8 7242
ab78acc6
IC
7243function passThroughWrite(buffer) {
7244 return buffer.toString(this.encoding);
ebd8d4e8
IC
7245}
7246
ab78acc6
IC
7247function utf16DetectIncompleteChar(buffer) {
7248 this.charReceived = buffer.length % 2;
7249 this.charLength = this.charReceived ? 2 : 0;
ebd8d4e8
IC
7250}
7251
ab78acc6
IC
7252function base64DetectIncompleteChar(buffer) {
7253 this.charReceived = buffer.length % 3;
7254 this.charLength = this.charReceived ? 3 : 0;
ebd8d4e8
IC
7255}
7256
ab78acc6
IC
7257},{"buffer":7}],28:[function(require,module,exports){
7258module.exports = function isBuffer(arg) {
7259 return arg && typeof arg === 'object'
7260 && typeof arg.copy === 'function'
7261 && typeof arg.fill === 'function'
7262 && typeof arg.readUInt8 === 'function';
7263}
7264},{}],29:[function(require,module,exports){
7265(function (process,global){
7266// Copyright Joyent, Inc. and other Node contributors.
7267//
7268// Permission is hereby granted, free of charge, to any person obtaining a
7269// copy of this software and associated documentation files (the
7270// "Software"), to deal in the Software without restriction, including
7271// without limitation the rights to use, copy, modify, merge, publish,
7272// distribute, sublicense, and/or sell copies of the Software, and to permit
7273// persons to whom the Software is furnished to do so, subject to the
7274// following conditions:
7275//
7276// The above copyright notice and this permission notice shall be included
7277// in all copies or substantial portions of the Software.
7278//
7279// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7280// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7281// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7282// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7283// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7284// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7285// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 7286
ab78acc6
IC
7287var formatRegExp = /%[sdj%]/g;
7288exports.format = function(f) {
7289 if (!isString(f)) {
7290 var objects = [];
7291 for (var i = 0; i < arguments.length; i++) {
7292 objects.push(inspect(arguments[i]));
7293 }
7294 return objects.join(' ');
7295 }
ebd8d4e8 7296
ab78acc6
IC
7297 var i = 1;
7298 var args = arguments;
7299 var len = args.length;
7300 var str = String(f).replace(formatRegExp, function(x) {
7301 if (x === '%%') return '%';
7302 if (i >= len) return x;
7303 switch (x) {
7304 case '%s': return String(args[i++]);
7305 case '%d': return Number(args[i++]);
7306 case '%j':
7307 try {
7308 return JSON.stringify(args[i++]);
7309 } catch (_) {
7310 return '[Circular]';
7311 }
7312 default:
7313 return x;
7314 }
7315 });
7316 for (var x = args[i]; i < len; x = args[++i]) {
7317 if (isNull(x) || !isObject(x)) {
7318 str += ' ' + x;
7319 } else {
7320 str += ' ' + inspect(x);
7321 }
7322 }
7323 return str;
7324};
ebd8d4e8 7325
ebd8d4e8 7326
ab78acc6
IC
7327// Mark that a method should not be used.
7328// Returns a modified function which warns once by default.
7329// If --no-deprecation is set, then it is a no-op.
7330exports.deprecate = function(fn, msg) {
7331 // Allow for deprecating things in the process of starting up.
7332 if (isUndefined(global.process)) {
7333 return function() {
7334 return exports.deprecate(fn, msg).apply(this, arguments);
7335 };
7336 }
ebd8d4e8 7337
ab78acc6
IC
7338 if (process.noDeprecation === true) {
7339 return fn;
7340 }
ebd8d4e8 7341
ab78acc6
IC
7342 var warned = false;
7343 function deprecated() {
7344 if (!warned) {
7345 if (process.throwDeprecation) {
7346 throw new Error(msg);
7347 } else if (process.traceDeprecation) {
7348 console.trace(msg);
7349 } else {
7350 console.error(msg);
7351 }
7352 warned = true;
7353 }
7354 return fn.apply(this, arguments);
7355 }
ebd8d4e8 7356
ab78acc6
IC
7357 return deprecated;
7358};
ebd8d4e8 7359
ebd8d4e8 7360
ab78acc6
IC
7361var debugs = {};
7362var debugEnviron;
7363exports.debuglog = function(set) {
7364 if (isUndefined(debugEnviron))
7365 debugEnviron = process.env.NODE_DEBUG || '';
7366 set = set.toUpperCase();
7367 if (!debugs[set]) {
7368 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7369 var pid = process.pid;
7370 debugs[set] = function() {
7371 var msg = exports.format.apply(exports, arguments);
7372 console.error('%s %d: %s', set, pid, msg);
7373 };
7374 } else {
7375 debugs[set] = function() {};
ebd8d4e8
IC
7376 }
7377 }
ab78acc6
IC
7378 return debugs[set];
7379};
ebd8d4e8 7380
ebd8d4e8
IC
7381
7382/**
ab78acc6
IC
7383 * Echos the value of a value. Trys to print the value out
7384 * in the best way possible given the different types.
7385 *
7386 * @param {Object} obj The object to print out.
7387 * @param {Object} opts Optional options object that alters the output.
ebd8d4e8 7388 */
ab78acc6
IC
7389/* legacy: obj, showHidden, depth, colors*/
7390function inspect(obj, opts) {
7391 // default options
7392 var ctx = {
7393 seen: [],
7394 stylize: stylizeNoColor
7395 };
7396 // legacy...
7397 if (arguments.length >= 3) ctx.depth = arguments[2];
7398 if (arguments.length >= 4) ctx.colors = arguments[3];
7399 if (isBoolean(opts)) {
7400 // legacy...
7401 ctx.showHidden = opts;
7402 } else if (opts) {
7403 // got an "options" object
7404 exports._extend(ctx, opts);
ebd8d4e8 7405 }
ab78acc6
IC
7406 // set default options
7407 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7408 if (isUndefined(ctx.depth)) ctx.depth = 2;
7409 if (isUndefined(ctx.colors)) ctx.colors = false;
7410 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7411 if (ctx.colors) ctx.stylize = stylizeWithColor;
7412 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 7413}
ab78acc6 7414exports.inspect = inspect;
ebd8d4e8 7415
ebd8d4e8 7416
ab78acc6
IC
7417// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7418inspect.colors = {
7419 'bold' : [1, 22],
7420 'italic' : [3, 23],
7421 'underline' : [4, 24],
7422 'inverse' : [7, 27],
7423 'white' : [37, 39],
7424 'grey' : [90, 39],
7425 'black' : [30, 39],
7426 'blue' : [34, 39],
7427 'cyan' : [36, 39],
7428 'green' : [32, 39],
7429 'magenta' : [35, 39],
7430 'red' : [31, 39],
7431 'yellow' : [33, 39]
7432};
ebd8d4e8 7433
ab78acc6
IC
7434// Don't use 'blue' not visible on cmd.exe
7435inspect.styles = {
7436 'special': 'cyan',
7437 'number': 'yellow',
7438 'boolean': 'yellow',
7439 'undefined': 'grey',
7440 'null': 'bold',
7441 'string': 'green',
7442 'date': 'magenta',
7443 // "name": intentionally not styling
7444 'regexp': 'red'
7445};
ebd8d4e8 7446
ebd8d4e8 7447
ab78acc6
IC
7448function stylizeWithColor(str, styleType) {
7449 var style = inspect.styles[styleType];
ebd8d4e8 7450
ab78acc6
IC
7451 if (style) {
7452 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7453 '\u001b[' + inspect.colors[style][1] + 'm';
7454 } else {
7455 return str;
ebd8d4e8 7456 }
ebd8d4e8
IC
7457}
7458
ebd8d4e8 7459
ab78acc6
IC
7460function stylizeNoColor(str, styleType) {
7461 return str;
ebd8d4e8
IC
7462}
7463
ebd8d4e8 7464
ab78acc6
IC
7465function arrayToHash(array) {
7466 var hash = {};
ebd8d4e8 7467
ab78acc6
IC
7468 array.forEach(function(val, idx) {
7469 hash[val] = true;
7470 });
ebd8d4e8 7471
ab78acc6 7472 return hash;
ebd8d4e8
IC
7473}
7474
ebd8d4e8 7475
ab78acc6
IC
7476function formatValue(ctx, value, recurseTimes) {
7477 // Provide a hook for user-specified inspect functions.
7478 // Check that value is an object with an inspect function on it
7479 if (ctx.customInspect &&
7480 value &&
7481 isFunction(value.inspect) &&
7482 // Filter out the util module, it's inspect function is special
7483 value.inspect !== exports.inspect &&
7484 // Also filter out any prototype objects using the circular check.
7485 !(value.constructor && value.constructor.prototype === value)) {
7486 var ret = value.inspect(recurseTimes, ctx);
7487 if (!isString(ret)) {
7488 ret = formatValue(ctx, ret, recurseTimes);
7489 }
7490 return ret;
ebd8d4e8 7491 }
ebd8d4e8 7492
ab78acc6
IC
7493 // Primitive types cannot have properties
7494 var primitive = formatPrimitive(ctx, value);
7495 if (primitive) {
7496 return primitive;
ebd8d4e8
IC
7497 }
7498
ab78acc6
IC
7499 // Look up the keys of the object.
7500 var keys = Object.keys(value);
7501 var visibleKeys = arrayToHash(keys);
ebd8d4e8 7502
ab78acc6
IC
7503 if (ctx.showHidden) {
7504 keys = Object.getOwnPropertyNames(value);
7505 }
ebd8d4e8 7506
ab78acc6
IC
7507 // IE doesn't make error fields non-enumerable
7508 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7509 if (isError(value)
7510 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7511 return formatError(value);
ebd8d4e8 7512 }
ebd8d4e8 7513
ab78acc6
IC
7514 // Some type of object without properties can be shortcutted.
7515 if (keys.length === 0) {
7516 if (isFunction(value)) {
7517 var name = value.name ? ': ' + value.name : '';
7518 return ctx.stylize('[Function' + name + ']', 'special');
7519 }
7520 if (isRegExp(value)) {
7521 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7522 }
7523 if (isDate(value)) {
7524 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7525 }
7526 if (isError(value)) {
7527 return formatError(value);
7528 }
ebd8d4e8 7529 }
ebd8d4e8 7530
ab78acc6 7531 var base = '', array = false, braces = ['{', '}'];
ebd8d4e8 7532
ab78acc6
IC
7533 // Make Array say that they are Array
7534 if (isArray(value)) {
7535 array = true;
7536 braces = ['[', ']'];
7537 }
ebd8d4e8 7538
ab78acc6
IC
7539 // Make functions say that they are functions
7540 if (isFunction(value)) {
7541 var n = value.name ? ': ' + value.name : '';
7542 base = ' [Function' + n + ']';
7543 }
ebd8d4e8 7544
ab78acc6
IC
7545 // Make RegExps say that they are RegExps
7546 if (isRegExp(value)) {
7547 base = ' ' + RegExp.prototype.toString.call(value);
7548 }
ebd8d4e8 7549
ab78acc6
IC
7550 // Make dates with properties first say the date
7551 if (isDate(value)) {
7552 base = ' ' + Date.prototype.toUTCString.call(value);
7553 }
ebd8d4e8 7554
ab78acc6
IC
7555 // Make error with message first say the error
7556 if (isError(value)) {
7557 base = ' ' + formatError(value);
7558 }
ebd8d4e8 7559
ab78acc6
IC
7560 if (keys.length === 0 && (!array || value.length == 0)) {
7561 return braces[0] + base + braces[1];
7562 }
ebd8d4e8 7563
ab78acc6
IC
7564 if (recurseTimes < 0) {
7565 if (isRegExp(value)) {
7566 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7567 } else {
7568 return ctx.stylize('[Object]', 'special');
7569 }
7570 }
ebd8d4e8 7571
ab78acc6 7572 ctx.seen.push(value);
ebd8d4e8 7573
ab78acc6
IC
7574 var output;
7575 if (array) {
7576 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7577 } else {
7578 output = keys.map(function(key) {
7579 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7580 });
7581 }
ebd8d4e8 7582
ab78acc6 7583 ctx.seen.pop();
ebd8d4e8 7584
ab78acc6
IC
7585 return reduceToSingleString(output, base, braces);
7586}
ebd8d4e8 7587
ebd8d4e8 7588
ab78acc6
IC
7589function formatPrimitive(ctx, value) {
7590 if (isUndefined(value))
7591 return ctx.stylize('undefined', 'undefined');
7592 if (isString(value)) {
7593 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7594 .replace(/'/g, "\\'")
7595 .replace(/\\"/g, '"') + '\'';
7596 return ctx.stylize(simple, 'string');
7597 }
7598 if (isNumber(value))
7599 return ctx.stylize('' + value, 'number');
7600 if (isBoolean(value))
7601 return ctx.stylize('' + value, 'boolean');
7602 // For some reason typeof null is "object", so special case here.
7603 if (isNull(value))
7604 return ctx.stylize('null', 'null');
7605}
ebd8d4e8 7606
ebd8d4e8 7607
ab78acc6
IC
7608function formatError(value) {
7609 return '[' + Error.prototype.toString.call(value) + ']';
7610}
ebd8d4e8 7611
ebd8d4e8 7612
ab78acc6
IC
7613function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7614 var output = [];
7615 for (var i = 0, l = value.length; i < l; ++i) {
7616 if (hasOwnProperty(value, String(i))) {
7617 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7618 String(i), true));
7619 } else {
7620 output.push('');
7621 }
7622 }
7623 keys.forEach(function(key) {
7624 if (!key.match(/^\d+$/)) {
7625 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7626 key, true));
7627 }
7628 });
7629 return output;
7630}
ebd8d4e8 7631
ebd8d4e8 7632
ab78acc6
IC
7633function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7634 var name, str, desc;
7635 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7636 if (desc.get) {
7637 if (desc.set) {
7638 str = ctx.stylize('[Getter/Setter]', 'special');
7639 } else {
7640 str = ctx.stylize('[Getter]', 'special');
7641 }
7642 } else {
7643 if (desc.set) {
7644 str = ctx.stylize('[Setter]', 'special');
7645 }
7646 }
7647 if (!hasOwnProperty(visibleKeys, key)) {
7648 name = '[' + key + ']';
7649 }
7650 if (!str) {
7651 if (ctx.seen.indexOf(desc.value) < 0) {
7652 if (isNull(recurseTimes)) {
7653 str = formatValue(ctx, desc.value, null);
7654 } else {
7655 str = formatValue(ctx, desc.value, recurseTimes - 1);
7656 }
7657 if (str.indexOf('\n') > -1) {
7658 if (array) {
7659 str = str.split('\n').map(function(line) {
7660 return ' ' + line;
7661 }).join('\n').substr(2);
7662 } else {
7663 str = '\n' + str.split('\n').map(function(line) {
7664 return ' ' + line;
7665 }).join('\n');
7666 }
7667 }
7668 } else {
7669 str = ctx.stylize('[Circular]', 'special');
7670 }
7671 }
7672 if (isUndefined(name)) {
7673 if (array && key.match(/^\d+$/)) {
7674 return str;
7675 }
7676 name = JSON.stringify('' + key);
7677 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7678 name = name.substr(1, name.length - 2);
7679 name = ctx.stylize(name, 'name');
7680 } else {
7681 name = name.replace(/'/g, "\\'")
7682 .replace(/\\"/g, '"')
7683 .replace(/(^"|"$)/g, "'");
7684 name = ctx.stylize(name, 'string');
7685 }
7686 }
ebd8d4e8 7687
ab78acc6
IC
7688 return name + ': ' + str;
7689}
ebd8d4e8 7690
ebd8d4e8 7691
ab78acc6
IC
7692function reduceToSingleString(output, base, braces) {
7693 var numLinesEst = 0;
7694 var length = output.reduce(function(prev, cur) {
7695 numLinesEst++;
7696 if (cur.indexOf('\n') >= 0) numLinesEst++;
7697 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7698 }, 0);
ebd8d4e8 7699
ab78acc6
IC
7700 if (length > 60) {
7701 return braces[0] +
7702 (base === '' ? '' : base + '\n ') +
7703 ' ' +
7704 output.join(',\n ') +
7705 ' ' +
7706 braces[1];
7707 }
ebd8d4e8 7708
ab78acc6
IC
7709 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7710}
ebd8d4e8 7711
ebd8d4e8 7712
ab78acc6
IC
7713// NOTE: These type checking functions intentionally don't use `instanceof`
7714// because it is fragile and can be easily faked with `Object.create()`.
7715function isArray(ar) {
7716 return Array.isArray(ar);
7717}
7718exports.isArray = isArray;
ebd8d4e8 7719
ab78acc6
IC
7720function isBoolean(arg) {
7721 return typeof arg === 'boolean';
7722}
7723exports.isBoolean = isBoolean;
ebd8d4e8 7724
ab78acc6
IC
7725function isNull(arg) {
7726 return arg === null;
7727}
7728exports.isNull = isNull;
ebd8d4e8 7729
ab78acc6
IC
7730function isNullOrUndefined(arg) {
7731 return arg == null;
7732}
7733exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 7734
ab78acc6
IC
7735function isNumber(arg) {
7736 return typeof arg === 'number';
7737}
7738exports.isNumber = isNumber;
ebd8d4e8 7739
ab78acc6
IC
7740function isString(arg) {
7741 return typeof arg === 'string';
7742}
7743exports.isString = isString;
ebd8d4e8 7744
ab78acc6
IC
7745function isSymbol(arg) {
7746 return typeof arg === 'symbol';
7747}
7748exports.isSymbol = isSymbol;
ebd8d4e8 7749
ab78acc6
IC
7750function isUndefined(arg) {
7751 return arg === void 0;
7752}
7753exports.isUndefined = isUndefined;
ebd8d4e8 7754
ab78acc6
IC
7755function isRegExp(re) {
7756 return isObject(re) && objectToString(re) === '[object RegExp]';
7757}
7758exports.isRegExp = isRegExp;
ebd8d4e8 7759
ab78acc6
IC
7760function isObject(arg) {
7761 return typeof arg === 'object' && arg !== null;
ebd8d4e8 7762}
ab78acc6 7763exports.isObject = isObject;
ebd8d4e8 7764
ab78acc6
IC
7765function isDate(d) {
7766 return isObject(d) && objectToString(d) === '[object Date]';
7767}
7768exports.isDate = isDate;
ebd8d4e8 7769
ab78acc6
IC
7770function isError(e) {
7771 return isObject(e) &&
7772 (objectToString(e) === '[object Error]' || e instanceof Error);
7773}
7774exports.isError = isError;
ebd8d4e8 7775
ab78acc6
IC
7776function isFunction(arg) {
7777 return typeof arg === 'function';
7778}
7779exports.isFunction = isFunction;
ebd8d4e8 7780
ab78acc6
IC
7781function isPrimitive(arg) {
7782 return arg === null ||
7783 typeof arg === 'boolean' ||
7784 typeof arg === 'number' ||
7785 typeof arg === 'string' ||
7786 typeof arg === 'symbol' || // ES6 symbol
7787 typeof arg === 'undefined';
7788}
7789exports.isPrimitive = isPrimitive;
ebd8d4e8 7790
ab78acc6 7791exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 7792
ab78acc6
IC
7793function objectToString(o) {
7794 return Object.prototype.toString.call(o);
7795}
ebd8d4e8 7796
ebd8d4e8 7797
ab78acc6
IC
7798function pad(n) {
7799 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7800}
ebd8d4e8 7801
ebd8d4e8 7802
ab78acc6
IC
7803var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7804 'Oct', 'Nov', 'Dec'];
ebd8d4e8 7805
ab78acc6
IC
7806// 26 Feb 16:19:34
7807function timestamp() {
7808 var d = new Date();
7809 var time = [pad(d.getHours()),
7810 pad(d.getMinutes()),
7811 pad(d.getSeconds())].join(':');
7812 return [d.getDate(), months[d.getMonth()], time].join(' ');
ebd8d4e8
IC
7813}
7814
ab78acc6
IC
7815
7816// log is just a thin wrapper to console.log that prepends a timestamp
7817exports.log = function() {
7818 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ebd8d4e8
IC
7819};
7820
ab78acc6
IC
7821
7822/**
7823 * Inherit the prototype methods from one constructor into another.
7824 *
7825 * The Function.prototype.inherits from lang.js rewritten as a standalone
7826 * function (not on Function.prototype). NOTE: If this file is to be loaded
7827 * during bootstrapping this function needs to be rewritten using some native
7828 * functions as prototype setup using normal JavaScript does not work as
7829 * expected during bootstrapping (see mirror.js in r114903).
7830 *
7831 * @param {function} ctor Constructor function which needs to inherit the
7832 * prototype.
7833 * @param {function} superCtor Constructor function to inherit prototype from.
7834 */
7835exports.inherits = require('inherits');
7836
7837exports._extend = function(origin, add) {
7838 // Don't do anything if add isn't an object
7839 if (!add || !isObject(add)) return origin;
7840
7841 var keys = Object.keys(add);
7842 var i = keys.length;
7843 while (i--) {
7844 origin[keys[i]] = add[keys[i]];
7845 }
7846 return origin;
7847};
7848
7849function hasOwnProperty(obj, prop) {
7850 return Object.prototype.hasOwnProperty.call(obj, prop);
7851}
7852
7853}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7854},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
ebd8d4e8
IC
7855// Base58 encoding/decoding
7856// Originally written by Mike Hearn for BitcoinJ
7857// Copyright (c) 2011 Google Inc
7858// Ported to JavaScript by Stefan Thomas
7859// Merged Buffer refactorings from base58-native by Stephen Pair
7860// Copyright (c) 2013 BitPay Inc
7861
ebd8d4e8 7862var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
ebd8d4e8
IC
7863var ALPHABET_MAP = {}
7864for(var i = 0; i < ALPHABET.length; i++) {
ab78acc6 7865 ALPHABET_MAP[ALPHABET.charAt(i)] = i
ebd8d4e8 7866}
ab78acc6 7867var BASE = 58
ebd8d4e8
IC
7868
7869function encode(buffer) {
ab78acc6
IC
7870 if (buffer.length === 0) return ''
7871
7872 var i, j, digits = [0]
7873 for (i = 0; i < buffer.length; i++) {
7874 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7875
7876 digits[0] += buffer[i]
ebd8d4e8 7877
ab78acc6
IC
7878 var carry = 0
7879 for (j = 0; j < digits.length; ++j) {
7880 digits[j] += carry
ebd8d4e8 7881
ab78acc6
IC
7882 carry = (digits[j] / BASE) | 0
7883 digits[j] %= BASE
7884 }
7885
7886 while (carry) {
7887 digits.push(carry % BASE)
7888
7889 carry = (carry / BASE) | 0
7890 }
ebd8d4e8
IC
7891 }
7892
7893 // deal with leading zeros
ab78acc6 7894 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
ebd8d4e8 7895
ab78acc6
IC
7896 // convert digits to a string
7897 var stringOutput = ""
7898 for (var i = digits.length - 1; i >= 0; i--) {
7899 stringOutput = stringOutput + ALPHABET[digits[i]]
7900 }
7901 return stringOutput
ebd8d4e8
IC
7902}
7903
7904function decode(string) {
ab78acc6 7905 if (string.length === 0) return []
ebd8d4e8 7906
ab78acc6
IC
7907 var i, j, bytes = [0]
7908 for (i = 0; i < string.length; i++) {
7909 var c = string[i]
7910 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
ebd8d4e8 7911
ab78acc6
IC
7912 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7913 bytes[0] += ALPHABET_MAP[c]
ebd8d4e8 7914
ab78acc6
IC
7915 var carry = 0
7916 for (j = 0; j < bytes.length; ++j) {
7917 bytes[j] += carry
ebd8d4e8 7918
ab78acc6
IC
7919 carry = bytes[j] >> 8
7920 bytes[j] &= 0xff
7921 }
ebd8d4e8 7922
ab78acc6
IC
7923 while (carry) {
7924 bytes.push(carry & 0xff)
7925
7926 carry >>= 8
7927 }
ebd8d4e8
IC
7928 }
7929
ab78acc6
IC
7930 // deal with leading zeros
7931 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
ebd8d4e8 7932
ab78acc6 7933 return bytes.reverse()
ebd8d4e8
IC
7934}
7935
7936module.exports = {
7937 encode: encode,
7938 decode: decode
7939}
7940
ab78acc6 7941},{}],31:[function(require,module,exports){
ebd8d4e8 7942(function (Buffer){
ab78acc6
IC
7943'use strict'
7944
7945var base58 = require('bs58')
7946var createHash = require('create-hash')
7947
7948// SHA256(SHA256(buffer))
7949function sha256x2 (buffer) {
7950 buffer = createHash('sha256').update(buffer).digest()
7951 return createHash('sha256').update(buffer).digest()
7952}
7953
7954// Encode a buffer as a base58-check encoded string
7955function encode (payload) {
7956 var checksum = sha256x2(payload).slice(0, 4)
7957
7958 return base58.encode(Buffer.concat([
7959 payload,
7960 checksum
7961 ]))
7962}
7963
7964// Decode a base58-check encoded string to a buffer
7965function decode (string) {
7966 var buffer = new Buffer(base58.decode(string))
7967
7968 var payload = buffer.slice(0, -4)
7969 var checksum = buffer.slice(-4)
7970 var newChecksum = sha256x2(payload).slice(0, 4)
7971
7972 for (var i = 0; i < newChecksum.length; ++i) {
7973 if (newChecksum[i] === checksum[i]) continue
7974
7975 throw new Error('Invalid checksum')
ebd8d4e8 7976 }
ab78acc6
IC
7977
7978 return payload
ebd8d4e8
IC
7979}
7980
ab78acc6
IC
7981module.exports = {
7982 encode: encode,
7983 decode: decode
ebd8d4e8
IC
7984}
7985
ab78acc6
IC
7986}).call(this,require("buffer").Buffer)
7987},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
ebd8d4e8 7988(function (Buffer){
ab78acc6
IC
7989'use strict';
7990var inherits = require('inherits')
7991var md5 = require('./md5')
7992var rmd160 = require('ripemd160')
7993var sha = require('sha.js')
ebd8d4e8 7994
ab78acc6 7995var Transform = require('stream').Transform
ebd8d4e8 7996
ab78acc6
IC
7997function HashNoConstructor(hash) {
7998 Transform.call(this)
ebd8d4e8 7999
ab78acc6
IC
8000 this._hash = hash
8001 this.buffers = []
8002}
ebd8d4e8 8003
ab78acc6 8004inherits(HashNoConstructor, Transform)
ebd8d4e8 8005
ab78acc6
IC
8006HashNoConstructor.prototype._transform = function (data, _, next) {
8007 this.buffers.push(data)
ebd8d4e8 8008
ab78acc6
IC
8009 next()
8010}
ebd8d4e8 8011
ab78acc6
IC
8012HashNoConstructor.prototype._flush = function (next) {
8013 this.push(this.digest())
8014 next()
8015}
8016
8017HashNoConstructor.prototype.update = function (data, enc) {
8018 if (typeof data === 'string') {
8019 data = new Buffer(data, enc)
ebd8d4e8
IC
8020 }
8021
ab78acc6
IC
8022 this.buffers.push(data)
8023 return this
8024}
8025
8026HashNoConstructor.prototype.digest = function (enc) {
8027 var buf = Buffer.concat(this.buffers)
8028 var r = this._hash(buf)
8029 this.buffers = null
8030
8031 return enc ? r.toString(enc) : r
8032}
8033
8034function Hash(hash) {
8035 Transform.call(this)
8036
8037 this._hash = hash
8038}
8039
8040inherits(Hash, Transform)
8041
8042Hash.prototype._transform = function (data, enc, next) {
8043 if (enc) data = new Buffer(data, enc)
8044
8045 this._hash.update(data)
8046
8047 next()
ebd8d4e8
IC
8048}
8049
ab78acc6
IC
8050Hash.prototype._flush = function (next) {
8051 this.push(this._hash.digest())
8052 this._hash = null
8053
8054 next()
8055}
8056
8057Hash.prototype.update = function (data, enc) {
8058 if (typeof data === 'string') {
8059 data = new Buffer(data, enc)
8060 }
8061
8062 this._hash.update(data)
ebd8d4e8
IC
8063 return this
8064}
8065
ab78acc6
IC
8066Hash.prototype.digest = function (enc) {
8067 var outData = this._hash.digest()
8068
8069 return enc ? outData.toString(enc) : outData
ebd8d4e8
IC
8070}
8071
ab78acc6
IC
8072module.exports = function createHash (alg) {
8073 if ('md5' === alg) return new HashNoConstructor(md5)
8074 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8075
8076 return new Hash(sha(alg))
8077}
ebd8d4e8 8078
ab78acc6
IC
8079}).call(this,require("buffer").Buffer)
8080},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
ebd8d4e8 8081(function (Buffer){
ab78acc6 8082'use strict';
ebd8d4e8
IC
8083var intSize = 4;
8084var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
8085var chrsz = 8;
8086
8087function toArray(buf, bigEndian) {
8088 if ((buf.length % intSize) !== 0) {
8089 var len = buf.length + (intSize - (buf.length % intSize));
8090 buf = Buffer.concat([buf, zeroBuffer], len);
8091 }
8092
8093 var arr = [];
8094 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8095 for (var i = 0; i < buf.length; i += intSize) {
8096 arr.push(fn.call(buf, i));
8097 }
8098 return arr;
8099}
8100
8101function toBuffer(arr, size, bigEndian) {
8102 var buf = new Buffer(size);
8103 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8104 for (var i = 0; i < arr.length; i++) {
8105 fn.call(buf, arr[i], i * 4, true);
8106 }
8107 return buf;
8108}
8109
8110function hash(buf, fn, hashSize, bigEndian) {
8111 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8112 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8113 return toBuffer(arr, hashSize, bigEndian);
8114}
ab78acc6
IC
8115exports.hash = hash;
8116}).call(this,require("buffer").Buffer)
8117},{"buffer":7}],34:[function(require,module,exports){
8118'use strict';
ebd8d4e8
IC
8119/*
8120 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8121 * Digest Algorithm, as defined in RFC 1321.
8122 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8123 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8124 * Distributed under the BSD License
8125 * See http://pajhome.org.uk/crypt/md5 for more info.
8126 */
8127
ab78acc6 8128var helpers = require('./helpers');
ebd8d4e8
IC
8129
8130/*
8131 * Calculate the MD5 of an array of little-endian words, and a bit length
8132 */
8133function core_md5(x, len)
8134{
8135 /* append padding */
8136 x[len >> 5] |= 0x80 << ((len) % 32);
8137 x[(((len + 64) >>> 9) << 4) + 14] = len;
8138
8139 var a = 1732584193;
8140 var b = -271733879;
8141 var c = -1732584194;
8142 var d = 271733878;
8143
8144 for(var i = 0; i < x.length; i += 16)
8145 {
8146 var olda = a;
8147 var oldb = b;
8148 var oldc = c;
8149 var oldd = d;
8150
8151 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8152 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8153 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8154 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8155 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8156 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8157 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8158 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8159 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8160 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8161 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8162 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8163 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8164 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8165 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8166 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8167
8168 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8169 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8170 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8171 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8172 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8173 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8174 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8175 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8176 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8177 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8178 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8179 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8180 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8181 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8182 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8183 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8184
8185 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8186 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8187 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8188 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8189 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8190 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8191 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8192 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8193 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8194 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8195 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8196 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8197 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8198 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8199 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8200 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8201
8202 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8203 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8204 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8205 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8206 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8207 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8208 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8209 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8210 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8211 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8212 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8213 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8214 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8215 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8216 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8217 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8218
8219 a = safe_add(a, olda);
8220 b = safe_add(b, oldb);
8221 c = safe_add(c, oldc);
8222 d = safe_add(d, oldd);
8223 }
8224 return Array(a, b, c, d);
8225
8226}
8227
8228/*
8229 * These functions implement the four basic operations the algorithm uses.
8230 */
8231function md5_cmn(q, a, b, x, s, t)
8232{
8233 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8234}
8235function md5_ff(a, b, c, d, x, s, t)
8236{
8237 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8238}
8239function md5_gg(a, b, c, d, x, s, t)
8240{
8241 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8242}
8243function md5_hh(a, b, c, d, x, s, t)
8244{
8245 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8246}
8247function md5_ii(a, b, c, d, x, s, t)
8248{
8249 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8250}
8251
8252/*
8253 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8254 * to work around bugs in some JS interpreters.
8255 */
8256function safe_add(x, y)
8257{
8258 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8259 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8260 return (msw << 16) | (lsw & 0xFFFF);
8261}
8262
8263/*
8264 * Bitwise rotate a 32-bit number to the left.
8265 */
8266function bit_rol(num, cnt)
8267{
8268 return (num << cnt) | (num >>> (32 - cnt));
8269}
8270
8271module.exports = function md5(buf) {
8272 return helpers.hash(buf, core_md5, 16);
8273};
ab78acc6
IC
8274},{"./helpers":33}],35:[function(require,module,exports){
8275arguments[4][12][0].apply(exports,arguments)
8276},{"dup":12}],36:[function(require,module,exports){
ebd8d4e8 8277(function (Buffer){
ebd8d4e8
IC
8278/*
8279CryptoJS v3.1.2
8280code.google.com/p/crypto-js
8281(c) 2009-2013 by Jeff Mott. All rights reserved.
8282code.google.com/p/crypto-js/wiki/License
8283*/
8284/** @preserve
8285(c) 2012 by Cédric Mesnil. All rights reserved.
8286
8287Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8288
8289 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8290 - 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.
8291
8292THIS 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.
8293*/
8294
ab78acc6 8295// constants table
ebd8d4e8 8296var zl = [
ab78acc6
IC
8297 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8298 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8299 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8300 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8301 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8302]
8303
ebd8d4e8 8304var zr = [
ab78acc6
IC
8305 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8306 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8307 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8308 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8309 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8310]
8311
ebd8d4e8 8312var sl = [
ab78acc6
IC
8313 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8314 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8315 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8316 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8317 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8318]
8319
ebd8d4e8 8320var sr = [
ab78acc6
IC
8321 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8322 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8323 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8324 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8325 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8326]
ebd8d4e8 8327
ab78acc6
IC
8328var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8329var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
ebd8d4e8 8330
ab78acc6
IC
8331function bytesToWords (bytes) {
8332 var words = []
ebd8d4e8 8333 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
ab78acc6 8334 words[b >>> 5] |= bytes[i] << (24 - b % 32)
ebd8d4e8 8335 }
ab78acc6
IC
8336 return words
8337}
ebd8d4e8 8338
ab78acc6
IC
8339function wordsToBytes (words) {
8340 var bytes = []
ebd8d4e8 8341 for (var b = 0; b < words.length * 32; b += 8) {
ab78acc6 8342 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
ebd8d4e8 8343 }
ab78acc6
IC
8344 return bytes
8345}
ebd8d4e8 8346
ab78acc6
IC
8347function processBlock (H, M, offset) {
8348 // swap endian
ebd8d4e8 8349 for (var i = 0; i < 16; i++) {
ab78acc6
IC
8350 var offset_i = offset + i
8351 var M_offset_i = M[offset_i]
ebd8d4e8
IC
8352
8353 // Swap
8354 M[offset_i] = (
ab78acc6
IC
8355 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8356 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8357 )
ebd8d4e8
IC
8358 }
8359
8360 // Working variables
ab78acc6
IC
8361 var al, bl, cl, dl, el
8362 var ar, br, cr, dr, er
8363
8364 ar = al = H[0]
8365 br = bl = H[1]
8366 cr = cl = H[2]
8367 dr = dl = H[3]
8368 er = el = H[4]
8369
8370 // computation
8371 var t
8372 for (i = 0; i < 80; i += 1) {
8373 t = (al + M[offset + zl[i]]) | 0
8374 if (i < 16) {
8375 t += f1(bl, cl, dl) + hl[0]
8376 } else if (i < 32) {
8377 t += f2(bl, cl, dl) + hl[1]
8378 } else if (i < 48) {
8379 t += f3(bl, cl, dl) + hl[2]
8380 } else if (i < 64) {
8381 t += f4(bl, cl, dl) + hl[3]
ebd8d4e8 8382 } else {// if (i<80) {
ab78acc6
IC
8383 t += f5(bl, cl, dl) + hl[4]
8384 }
8385 t = t | 0
8386 t = rotl(t, sl[i])
8387 t = (t + el) | 0
8388 al = el
8389 el = dl
8390 dl = rotl(cl, 10)
8391 cl = bl
8392 bl = t
8393
8394 t = (ar + M[offset + zr[i]]) | 0
8395 if (i < 16) {
8396 t += f5(br, cr, dr) + hr[0]
8397 } else if (i < 32) {
8398 t += f4(br, cr, dr) + hr[1]
8399 } else if (i < 48) {
8400 t += f3(br, cr, dr) + hr[2]
8401 } else if (i < 64) {
8402 t += f2(br, cr, dr) + hr[3]
ebd8d4e8 8403 } else {// if (i<80) {
ab78acc6 8404 t += f1(br, cr, dr) + hr[4]
ebd8d4e8 8405 }
ebd8d4e8 8406
ab78acc6
IC
8407 t = t | 0
8408 t = rotl(t, sr[i])
8409 t = (t + er) | 0
8410 ar = er
8411 er = dr
8412 dr = rotl(cr, 10)
8413 cr = br
8414 br = t
8415 }
8416
8417 // intermediate hash value
8418 t = (H[1] + cl + dr) | 0
8419 H[1] = (H[2] + dl + er) | 0
8420 H[2] = (H[3] + el + ar) | 0
8421 H[3] = (H[4] + al + br) | 0
8422 H[4] = (H[0] + bl + cr) | 0
8423 H[0] = t
ebd8d4e8
IC
8424}
8425
ab78acc6
IC
8426function f1 (x, y, z) {
8427 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
8428}
8429
ab78acc6
IC
8430function f2 (x, y, z) {
8431 return (((x) & (y)) | ((~x) & (z)))
ebd8d4e8
IC
8432}
8433
ab78acc6
IC
8434function f3 (x, y, z) {
8435 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
8436}
8437
ab78acc6
IC
8438function f4 (x, y, z) {
8439 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
8440}
8441
ab78acc6
IC
8442function f5 (x, y, z) {
8443 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
8444}
8445
ab78acc6
IC
8446function rotl (x, n) {
8447 return (x << n) | (x >>> (32 - n))
8448}
8449
8450function ripemd160 (message) {
8451 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 8452
ab78acc6
IC
8453 if (typeof message === 'string') {
8454 message = new Buffer(message, 'utf8')
8455 }
ebd8d4e8 8456
ab78acc6 8457 var m = bytesToWords(message)
ebd8d4e8 8458
ab78acc6
IC
8459 var nBitsLeft = message.length * 8
8460 var nBitsTotal = message.length * 8
ebd8d4e8
IC
8461
8462 // Add padding
ab78acc6 8463 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
ebd8d4e8 8464 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
ab78acc6
IC
8465 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8466 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8467 )
ebd8d4e8 8468
ab78acc6
IC
8469 for (var i = 0; i < m.length; i += 16) {
8470 processBlock(H, m, i)
ebd8d4e8
IC
8471 }
8472
ab78acc6
IC
8473 // swap endian
8474 for (i = 0; i < 5; i++) {
8475 // shortcut
8476 var H_i = H[i]
ebd8d4e8
IC
8477
8478 // Swap
ab78acc6
IC
8479 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8480 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
8481 }
8482
ab78acc6
IC
8483 var digestbytes = wordsToBytes(H)
8484 return new Buffer(digestbytes)
ebd8d4e8
IC
8485}
8486
ab78acc6
IC
8487module.exports = ripemd160
8488
8489}).call(this,require("buffer").Buffer)
8490},{"buffer":7}],37:[function(require,module,exports){
8491(function (Buffer){
8492// prototype class for hash functions
8493function Hash (blockSize, finalSize) {
8494 this._block = new Buffer(blockSize)
8495 this._finalSize = finalSize
8496 this._blockSize = blockSize
8497 this._len = 0
8498 this._s = 0
8499}
ebd8d4e8 8500
ab78acc6
IC
8501Hash.prototype.update = function (data, enc) {
8502 if (typeof data === 'string') {
8503 enc = enc || 'utf8'
8504 data = new Buffer(data, enc)
8505 }
ebd8d4e8 8506
ab78acc6
IC
8507 var l = this._len += data.length
8508 var s = this._s || 0
8509 var f = 0
8510 var buffer = this._block
ebd8d4e8 8511
ab78acc6
IC
8512 while (s < l) {
8513 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8514 var ch = (t - f)
ebd8d4e8 8515
ab78acc6
IC
8516 for (var i = 0; i < ch; i++) {
8517 buffer[(s % this._blockSize) + i] = data[i + f]
8518 }
8519
8520 s += ch
8521 f += ch
ebd8d4e8 8522
ab78acc6
IC
8523 if ((s % this._blockSize) === 0) {
8524 this._update(buffer)
8525 }
ebd8d4e8 8526 }
ab78acc6
IC
8527 this._s = s
8528
8529 return this
8530}
ebd8d4e8 8531
ab78acc6
IC
8532Hash.prototype.digest = function (enc) {
8533 // Suppose the length of the message M, in bits, is l
8534 var l = this._len * 8
8535
8536 // Append the bit 1 to the end of the message
8537 this._block[this._len % this._blockSize] = 0x80
8538
8539 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8540 this._block.fill(0, this._len % this._blockSize + 1)
8541
8542 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8543 this._update(this._block)
8544 this._block.fill(0)
ebd8d4e8
IC
8545 }
8546
ab78acc6
IC
8547 // to this append the block which is equal to the number l written in binary
8548 // TODO: handle case where l is > Math.pow(2, 29)
8549 this._block.writeInt32BE(l, this._blockSize - 4)
8550
8551 var hash = this._update(this._block) || this._hash()
ebd8d4e8 8552
ab78acc6
IC
8553 return enc ? hash.toString(enc) : hash
8554}
ebd8d4e8 8555
ab78acc6
IC
8556Hash.prototype._update = function () {
8557 throw new Error('_update must be implemented by subclass')
8558}
ebd8d4e8 8559
ab78acc6 8560module.exports = Hash
ebd8d4e8 8561
ab78acc6
IC
8562}).call(this,require("buffer").Buffer)
8563},{"buffer":7}],38:[function(require,module,exports){
8564var exports = module.exports = function SHA (algorithm) {
8565 algorithm = algorithm.toLowerCase()
ebd8d4e8 8566
ab78acc6
IC
8567 var Algorithm = exports[algorithm]
8568 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
ebd8d4e8 8569
ab78acc6
IC
8570 return new Algorithm()
8571}
8572
8573exports.sha = require('./sha')
8574exports.sha1 = require('./sha1')
8575exports.sha224 = require('./sha224')
8576exports.sha256 = require('./sha256')
8577exports.sha384 = require('./sha384')
8578exports.sha512 = require('./sha512')
8579
8580},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8581(function (Buffer){
8582/*
8583 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8584 * in FIPS PUB 180-1
8585 * This source code is derived from sha1.js of the same repository.
8586 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8587 * operation was added.
8588 */
ebd8d4e8 8589
ab78acc6
IC
8590var inherits = require('inherits')
8591var Hash = require('./hash')
ebd8d4e8 8592
ab78acc6 8593var W = new Array(80)
ebd8d4e8 8594
ab78acc6
IC
8595function Sha () {
8596 this.init()
8597 this._w = W
ebd8d4e8 8598
ab78acc6
IC
8599 Hash.call(this, 64, 56)
8600}
ebd8d4e8 8601
ab78acc6 8602inherits(Sha, Hash)
ebd8d4e8 8603
ab78acc6
IC
8604Sha.prototype.init = function () {
8605 this._a = 0x67452301 | 0
8606 this._b = 0xefcdab89 | 0
8607 this._c = 0x98badcfe | 0
8608 this._d = 0x10325476 | 0
8609 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8610
ab78acc6
IC
8611 return this
8612}
8613
8614/*
8615 * Bitwise rotate a 32-bit number to the left.
8616 */
8617function rol (num, cnt) {
8618 return (num << cnt) | (num >>> (32 - cnt))
8619}
8620
8621Sha.prototype._update = function (M) {
8622 var W = this._w
8623
8624 var a = this._a
8625 var b = this._b
8626 var c = this._c
8627 var d = this._d
8628 var e = this._e
ebd8d4e8 8629
ab78acc6
IC
8630 var j = 0, k
8631
8632 /*
8633 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8634 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8635 */
8636 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8637 function loop (w, f) {
8638 W[j] = w
8639
8640 var t = rol(a, 5) + f + e + w + k
8641
8642 e = d
8643 d = c
8644 c = rol(b, 30)
8645 b = a
8646 a = t
8647 j++
ebd8d4e8
IC
8648 }
8649
ab78acc6
IC
8650 k = 1518500249
8651 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8652 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8653 k = 1859775393
8654 while (j < 40) loop(calcW(), b ^ c ^ d)
8655 k = -1894007588
8656 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8657 k = -899497514
8658 while (j < 80) loop(calcW(), b ^ c ^ d)
8659
8660 this._a = (a + this._a) | 0
8661 this._b = (b + this._b) | 0
8662 this._c = (c + this._c) | 0
8663 this._d = (d + this._d) | 0
8664 this._e = (e + this._e) | 0
ebd8d4e8
IC
8665}
8666
ab78acc6
IC
8667Sha.prototype._hash = function () {
8668 var H = new Buffer(20)
8669
8670 H.writeInt32BE(this._a | 0, 0)
8671 H.writeInt32BE(this._b | 0, 4)
8672 H.writeInt32BE(this._c | 0, 8)
8673 H.writeInt32BE(this._d | 0, 12)
8674 H.writeInt32BE(this._e | 0, 16)
8675
8676 return H
ebd8d4e8
IC
8677}
8678
ab78acc6 8679module.exports = Sha
ebd8d4e8 8680
ebd8d4e8 8681
ab78acc6
IC
8682}).call(this,require("buffer").Buffer)
8683},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8684(function (Buffer){
ebd8d4e8
IC
8685/*
8686 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8687 * in FIPS PUB 180-1
8688 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8689 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8690 * Distributed under the BSD License
8691 * See http://pajhome.org.uk/crypt/md5 for details.
8692 */
ebd8d4e8 8693
ab78acc6
IC
8694var inherits = require('inherits')
8695var Hash = require('./hash')
ebd8d4e8 8696
ab78acc6 8697var W = new Array(80)
ebd8d4e8 8698
ab78acc6
IC
8699function Sha1 () {
8700 this.init()
8701 this._w = W
ebd8d4e8 8702
ab78acc6
IC
8703 Hash.call(this, 64, 56)
8704}
ebd8d4e8 8705
ab78acc6 8706inherits(Sha1, Hash)
ebd8d4e8 8707
ab78acc6
IC
8708Sha1.prototype.init = function () {
8709 this._a = 0x67452301 | 0
8710 this._b = 0xefcdab89 | 0
8711 this._c = 0x98badcfe | 0
8712 this._d = 0x10325476 | 0
8713 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8714
ab78acc6
IC
8715 return this
8716}
ebd8d4e8 8717
ab78acc6
IC
8718/*
8719 * Bitwise rotate a 32-bit number to the left.
8720 */
8721function rol (num, cnt) {
8722 return (num << cnt) | (num >>> (32 - cnt))
8723}
ebd8d4e8 8724
ab78acc6
IC
8725Sha1.prototype._update = function (M) {
8726 var W = this._w
ebd8d4e8 8727
ab78acc6
IC
8728 var a = this._a
8729 var b = this._b
8730 var c = this._c
8731 var d = this._d
8732 var e = this._e
ebd8d4e8 8733
ab78acc6 8734 var j = 0, k
ebd8d4e8 8735
ab78acc6
IC
8736 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8737 function loop (w, f) {
8738 W[j] = w
ebd8d4e8 8739
ab78acc6 8740 var t = rol(a, 5) + f + e + w + k
ebd8d4e8 8741
ab78acc6
IC
8742 e = d
8743 d = c
8744 c = rol(b, 30)
8745 b = a
8746 a = t
8747 j++
ebd8d4e8
IC
8748 }
8749
ab78acc6
IC
8750 k = 1518500249
8751 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8752 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8753 k = 1859775393
8754 while (j < 40) loop(calcW(), b ^ c ^ d)
8755 k = -1894007588
8756 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8757 k = -899497514
8758 while (j < 80) loop(calcW(), b ^ c ^ d)
ebd8d4e8 8759
ab78acc6
IC
8760 this._a = (a + this._a) | 0
8761 this._b = (b + this._b) | 0
8762 this._c = (c + this._c) | 0
8763 this._d = (d + this._d) | 0
8764 this._e = (e + this._e) | 0
8765}
ebd8d4e8 8766
ab78acc6
IC
8767Sha1.prototype._hash = function () {
8768 var H = new Buffer(20)
ebd8d4e8 8769
ab78acc6
IC
8770 H.writeInt32BE(this._a | 0, 0)
8771 H.writeInt32BE(this._b | 0, 4)
8772 H.writeInt32BE(this._c | 0, 8)
8773 H.writeInt32BE(this._d | 0, 12)
8774 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 8775
ab78acc6
IC
8776 return H
8777}
ebd8d4e8 8778
ab78acc6 8779module.exports = Sha1
ebd8d4e8 8780
ab78acc6
IC
8781}).call(this,require("buffer").Buffer)
8782},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8783(function (Buffer){
8784/**
8785 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8786 * in FIPS 180-2
8787 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8788 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8789 *
8790 */
ebd8d4e8 8791
ab78acc6
IC
8792var inherits = require('inherits')
8793var Sha256 = require('./sha256')
8794var Hash = require('./hash')
ebd8d4e8 8795
ab78acc6 8796var W = new Array(64)
ebd8d4e8 8797
ab78acc6
IC
8798function Sha224 () {
8799 this.init()
ebd8d4e8 8800
ab78acc6 8801 this._w = W // new Array(64)
ebd8d4e8 8802
ab78acc6
IC
8803 Hash.call(this, 64, 56)
8804}
ebd8d4e8 8805
ab78acc6 8806inherits(Sha224, Sha256)
ebd8d4e8 8807
ab78acc6
IC
8808Sha224.prototype.init = function () {
8809 this._a = 0xc1059ed8 | 0
8810 this._b = 0x367cd507 | 0
8811 this._c = 0x3070dd17 | 0
8812 this._d = 0xf70e5939 | 0
8813 this._e = 0xffc00b31 | 0
8814 this._f = 0x68581511 | 0
8815 this._g = 0x64f98fa7 | 0
8816 this._h = 0xbefa4fa4 | 0
8817
8818 return this
8819}
8820
8821Sha224.prototype._hash = function () {
8822 var H = new Buffer(28)
8823
8824 H.writeInt32BE(this._a, 0)
8825 H.writeInt32BE(this._b, 4)
8826 H.writeInt32BE(this._c, 8)
8827 H.writeInt32BE(this._d, 12)
8828 H.writeInt32BE(this._e, 16)
8829 H.writeInt32BE(this._f, 20)
8830 H.writeInt32BE(this._g, 24)
8831
8832 return H
ebd8d4e8
IC
8833}
8834
ab78acc6 8835module.exports = Sha224
ebd8d4e8 8836
ab78acc6
IC
8837}).call(this,require("buffer").Buffer)
8838},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8839(function (Buffer){
ebd8d4e8
IC
8840/**
8841 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8842 * in FIPS 180-2
8843 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8844 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8845 *
8846 */
8847
ab78acc6
IC
8848var inherits = require('inherits')
8849var Hash = require('./hash')
8850
8851var K = [
8852 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8853 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8854 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8855 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8856 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8857 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8858 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8859 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8860 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8861 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8862 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8863 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8864 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8865 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8866 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8867 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8868]
8869
8870var W = new Array(64)
8871
8872function Sha256 () {
8873 this.init()
8874
8875 this._w = W // new Array(64)
8876
8877 Hash.call(this, 64, 56)
8878}
8879
8880inherits(Sha256, Hash)
8881
8882Sha256.prototype.init = function () {
8883 this._a = 0x6a09e667 | 0
8884 this._b = 0xbb67ae85 | 0
8885 this._c = 0x3c6ef372 | 0
8886 this._d = 0xa54ff53a | 0
8887 this._e = 0x510e527f | 0
8888 this._f = 0x9b05688c | 0
8889 this._g = 0x1f83d9ab | 0
8890 this._h = 0x5be0cd19 | 0
ebd8d4e8 8891
ab78acc6
IC
8892 return this
8893}
ebd8d4e8 8894
ab78acc6
IC
8895function S (X, n) {
8896 return (X >>> n) | (X << (32 - n))
8897}
ebd8d4e8 8898
ab78acc6
IC
8899function R (X, n) {
8900 return (X >>> n)
8901}
ebd8d4e8 8902
ab78acc6
IC
8903function Ch (x, y, z) {
8904 return ((x & y) ^ ((~x) & z))
8905}
ebd8d4e8 8906
ab78acc6
IC
8907function Maj (x, y, z) {
8908 return ((x & y) ^ (x & z) ^ (y & z))
8909}
ebd8d4e8 8910
ab78acc6
IC
8911function Sigma0256 (x) {
8912 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8913}
ebd8d4e8 8914
ab78acc6
IC
8915function Sigma1256 (x) {
8916 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8917}
ebd8d4e8 8918
ab78acc6
IC
8919function Gamma0256 (x) {
8920 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8921}
ebd8d4e8 8922
ab78acc6
IC
8923function Gamma1256 (x) {
8924 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8925}
ebd8d4e8 8926
ab78acc6
IC
8927Sha256.prototype._update = function (M) {
8928 var W = this._w
ebd8d4e8 8929
ab78acc6
IC
8930 var a = this._a | 0
8931 var b = this._b | 0
8932 var c = this._c | 0
8933 var d = this._d | 0
8934 var e = this._e | 0
8935 var f = this._f | 0
8936 var g = this._g | 0
8937 var h = this._h | 0
ebd8d4e8 8938
ab78acc6 8939 var j = 0
ebd8d4e8 8940
ab78acc6
IC
8941 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8942 function loop (w) {
8943 W[j] = w
ebd8d4e8 8944
ab78acc6
IC
8945 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8946 var T2 = Sigma0256(a) + Maj(a, b, c)
ebd8d4e8 8947
ab78acc6
IC
8948 h = g
8949 g = f
8950 f = e
8951 e = d + T1
8952 d = c
8953 c = b
8954 b = a
8955 a = T1 + T2
ebd8d4e8 8956
ab78acc6 8957 j++
ebd8d4e8
IC
8958 }
8959
ab78acc6
IC
8960 while (j < 16) loop(M.readInt32BE(j * 4))
8961 while (j < 64) loop(calcW())
ebd8d4e8 8962
ab78acc6
IC
8963 this._a = (a + this._a) | 0
8964 this._b = (b + this._b) | 0
8965 this._c = (c + this._c) | 0
8966 this._d = (d + this._d) | 0
8967 this._e = (e + this._e) | 0
8968 this._f = (f + this._f) | 0
8969 this._g = (g + this._g) | 0
8970 this._h = (h + this._h) | 0
8971}
ebd8d4e8 8972
ab78acc6
IC
8973Sha256.prototype._hash = function () {
8974 var H = new Buffer(32)
ebd8d4e8 8975
ab78acc6
IC
8976 H.writeInt32BE(this._a, 0)
8977 H.writeInt32BE(this._b, 4)
8978 H.writeInt32BE(this._c, 8)
8979 H.writeInt32BE(this._d, 12)
8980 H.writeInt32BE(this._e, 16)
8981 H.writeInt32BE(this._f, 20)
8982 H.writeInt32BE(this._g, 24)
8983 H.writeInt32BE(this._h, 28)
ebd8d4e8 8984
ab78acc6
IC
8985 return H
8986}
ebd8d4e8 8987
ab78acc6 8988module.exports = Sha256
ebd8d4e8 8989
ab78acc6
IC
8990}).call(this,require("buffer").Buffer)
8991},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8992(function (Buffer){
8993var inherits = require('inherits')
8994var SHA512 = require('./sha512')
8995var Hash = require('./hash')
ebd8d4e8 8996
ab78acc6 8997var W = new Array(160)
ebd8d4e8 8998
ab78acc6
IC
8999function Sha384 () {
9000 this.init()
9001 this._w = W
ebd8d4e8 9002
ab78acc6
IC
9003 Hash.call(this, 128, 112)
9004}
ebd8d4e8 9005
ab78acc6 9006inherits(Sha384, SHA512)
ebd8d4e8 9007
ab78acc6
IC
9008Sha384.prototype.init = function () {
9009 this._a = 0xcbbb9d5d | 0
9010 this._b = 0x629a292a | 0
9011 this._c = 0x9159015a | 0
9012 this._d = 0x152fecd8 | 0
9013 this._e = 0x67332667 | 0
9014 this._f = 0x8eb44a87 | 0
9015 this._g = 0xdb0c2e0d | 0
9016 this._h = 0x47b5481d | 0
ebd8d4e8 9017
ab78acc6
IC
9018 this._al = 0xc1059ed8 | 0
9019 this._bl = 0x367cd507 | 0
9020 this._cl = 0x3070dd17 | 0
9021 this._dl = 0xf70e5939 | 0
9022 this._el = 0xffc00b31 | 0
9023 this._fl = 0x68581511 | 0
9024 this._gl = 0x64f98fa7 | 0
9025 this._hl = 0xbefa4fa4 | 0
ebd8d4e8 9026
ab78acc6 9027 return this
ebd8d4e8
IC
9028}
9029
ab78acc6
IC
9030Sha384.prototype._hash = function () {
9031 var H = new Buffer(48)
ebd8d4e8 9032
ab78acc6
IC
9033 function writeInt64BE (h, l, offset) {
9034 H.writeInt32BE(h, offset)
9035 H.writeInt32BE(l, offset + 4)
ebd8d4e8 9036 }
ebd8d4e8 9037
ab78acc6
IC
9038 writeInt64BE(this._a, this._al, 0)
9039 writeInt64BE(this._b, this._bl, 8)
9040 writeInt64BE(this._c, this._cl, 16)
9041 writeInt64BE(this._d, this._dl, 24)
9042 writeInt64BE(this._e, this._el, 32)
9043 writeInt64BE(this._f, this._fl, 40)
9044
9045 return H
ebd8d4e8
IC
9046}
9047
ab78acc6 9048module.exports = Sha384
ebd8d4e8 9049
ab78acc6
IC
9050}).call(this,require("buffer").Buffer)
9051},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
ebd8d4e8 9052(function (Buffer){
ab78acc6
IC
9053var inherits = require('inherits')
9054var Hash = require('./hash')
9055
9056var K = [
9057 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
9058 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
9059 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
9060 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
9061 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
9062 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
9063 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
9064 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
9065 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
9066 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
9067 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
9068 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
9069 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
9070 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
9071 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
9072 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
9073 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
9074 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
9075 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
9076 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
9077 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
9078 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
9079 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
9080 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
9081 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
9082 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
9083 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
9084 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
9085 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
9086 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
9087 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
9088 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
9089 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
9090 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
9091 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
9092 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
9093 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
9094 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
9095 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
9096 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
9097]
9098
9099var W = new Array(160)
9100
9101function Sha512 () {
9102 this.init()
9103 this._w = W
9104
9105 Hash.call(this, 128, 112)
9106}
9107
9108inherits(Sha512, Hash)
9109
9110Sha512.prototype.init = function () {
9111 this._a = 0x6a09e667 | 0
9112 this._b = 0xbb67ae85 | 0
9113 this._c = 0x3c6ef372 | 0
9114 this._d = 0xa54ff53a | 0
9115 this._e = 0x510e527f | 0
9116 this._f = 0x9b05688c | 0
9117 this._g = 0x1f83d9ab | 0
9118 this._h = 0x5be0cd19 | 0
9119
9120 this._al = 0xf3bcc908 | 0
9121 this._bl = 0x84caa73b | 0
9122 this._cl = 0xfe94f82b | 0
9123 this._dl = 0x5f1d36f1 | 0
9124 this._el = 0xade682d1 | 0
9125 this._fl = 0x2b3e6c1f | 0
9126 this._gl = 0xfb41bd6b | 0
9127 this._hl = 0x137e2179 | 0
ebd8d4e8 9128
ab78acc6 9129 return this
ebd8d4e8
IC
9130}
9131
ab78acc6
IC
9132function S (X, Xl, n) {
9133 return (X >>> n) | (Xl << (32 - n))
9134}
9135
9136function Ch (x, y, z) {
9137 return ((x & y) ^ ((~x) & z))
9138}
9139
9140function Maj (x, y, z) {
9141 return ((x & y) ^ (x & z) ^ (y & z))
9142}
9143
9144Sha512.prototype._update = function (M) {
9145 var W = this._w
9146
9147 var a = this._a | 0
9148 var b = this._b | 0
9149 var c = this._c | 0
9150 var d = this._d | 0
9151 var e = this._e | 0
9152 var f = this._f | 0
9153 var g = this._g | 0
9154 var h = this._h | 0
9155
9156 var al = this._al | 0
9157 var bl = this._bl | 0
9158 var cl = this._cl | 0
9159 var dl = this._dl | 0
9160 var el = this._el | 0
9161 var fl = this._fl | 0
9162 var gl = this._gl | 0
9163 var hl = this._hl | 0
9164
9165 var i = 0, j = 0
9166 var Wi, Wil
9167 function calcW () {
9168 var x = W[j - 15 * 2]
9169 var xl = W[j - 15 * 2 + 1]
9170 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9171 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9172
9173 x = W[j - 2 * 2]
9174 xl = W[j - 2 * 2 + 1]
9175 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9176 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9177
9178 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9179 var Wi7 = W[j - 7 * 2]
9180 var Wi7l = W[j - 7 * 2 + 1]
9181
9182 var Wi16 = W[j - 16 * 2]
9183 var Wi16l = W[j - 16 * 2 + 1]
ebd8d4e8 9184
ab78acc6
IC
9185 Wil = gamma0l + Wi7l
9186 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9187 Wil = Wil + gamma1l
9188 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9189 Wil = Wil + Wi16l
9190 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9191 }
9192
9193 function loop () {
9194 W[j] = Wi
9195 W[j + 1] = Wil
ebd8d4e8 9196
ab78acc6
IC
9197 var maj = Maj(a, b, c)
9198 var majl = Maj(al, bl, cl)
ebd8d4e8 9199
ab78acc6
IC
9200 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9201 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9202 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9203 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
ebd8d4e8 9204
ab78acc6
IC
9205 // t1 = h + sigma1 + ch + K[i] + W[i]
9206 var Ki = K[j]
9207 var Kil = K[j + 1]
ebd8d4e8 9208
ab78acc6
IC
9209 var ch = Ch(e, f, g)
9210 var chl = Ch(el, fl, gl)
ebd8d4e8 9211
ab78acc6
IC
9212 var t1l = hl + sigma1l
9213 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9214 t1l = t1l + chl
9215 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9216 t1l = t1l + Kil
9217 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9218 t1l = t1l + Wil
9219 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
ebd8d4e8 9220
ab78acc6
IC
9221 // t2 = sigma0 + maj
9222 var t2l = sigma0l + majl
9223 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
ebd8d4e8 9224
ab78acc6
IC
9225 h = g
9226 hl = gl
9227 g = f
9228 gl = fl
9229 f = e
9230 fl = el
9231 el = (dl + t1l) | 0
9232 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9233 d = c
9234 dl = cl
9235 c = b
9236 cl = bl
9237 b = a
9238 bl = al
9239 al = (t1l + t2l) | 0
9240 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9241
9242 i++
9243 j += 2
9244 }
9245
9246 while (i < 16) {
9247 Wi = M.readInt32BE(j * 4)
9248 Wil = M.readInt32BE(j * 4 + 4)
9249
9250 loop()
9251 }
9252
9253 while (i < 80) {
9254 calcW()
9255 loop()
9256 }
9257
9258 this._al = (this._al + al) | 0
9259 this._bl = (this._bl + bl) | 0
9260 this._cl = (this._cl + cl) | 0
9261 this._dl = (this._dl + dl) | 0
9262 this._el = (this._el + el) | 0
9263 this._fl = (this._fl + fl) | 0
9264 this._gl = (this._gl + gl) | 0
9265 this._hl = (this._hl + hl) | 0
9266
9267 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9268 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9269 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9270 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9271 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9272 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9273 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9274 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9275}
9276
9277Sha512.prototype._hash = function () {
9278 var H = new Buffer(64)
9279
9280 function writeInt64BE (h, l, offset) {
9281 H.writeInt32BE(h, offset)
9282 H.writeInt32BE(l, offset + 4)
9283 }
9284
9285 writeInt64BE(this._a, this._al, 0)
9286 writeInt64BE(this._b, this._bl, 8)
9287 writeInt64BE(this._c, this._cl, 16)
9288 writeInt64BE(this._d, this._dl, 24)
9289 writeInt64BE(this._e, this._el, 32)
9290 writeInt64BE(this._f, this._fl, 40)
9291 writeInt64BE(this._g, this._gl, 48)
9292 writeInt64BE(this._h, this._hl, 56)
9293
9294 return H
9295}
9296
9297module.exports = Sha512
9298
9299}).call(this,require("buffer").Buffer)
9300},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9301(function (Buffer){
9302'use strict';
9303var createHash = require('create-hash/browser');
9304var inherits = require('inherits')
ebd8d4e8 9305
ab78acc6 9306var Transform = require('stream').Transform
ebd8d4e8 9307
ab78acc6
IC
9308var ZEROS = new Buffer(128)
9309ZEROS.fill(0)
ebd8d4e8 9310
ab78acc6
IC
9311function Hmac(alg, key) {
9312 Transform.call(this)
ebd8d4e8 9313
ab78acc6
IC
9314 if (typeof key === 'string') {
9315 key = new Buffer(key)
9316 }
ebd8d4e8 9317
ab78acc6 9318 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
ebd8d4e8 9319
ab78acc6
IC
9320 this._alg = alg
9321 this._key = key
ebd8d4e8 9322
ab78acc6
IC
9323 if (key.length > blocksize) {
9324 key = createHash(alg).update(key).digest()
ebd8d4e8 9325
ab78acc6
IC
9326 } else if (key.length < blocksize) {
9327 key = Buffer.concat([key, ZEROS], blocksize)
9328 }
ebd8d4e8 9329
ab78acc6
IC
9330 var ipad = this._ipad = new Buffer(blocksize)
9331 var opad = this._opad = new Buffer(blocksize)
ebd8d4e8 9332
ab78acc6
IC
9333 for (var i = 0; i < blocksize; i++) {
9334 ipad[i] = key[i] ^ 0x36
9335 opad[i] = key[i] ^ 0x5C
9336 }
ebd8d4e8 9337
ab78acc6
IC
9338 this._hash = createHash(alg).update(ipad)
9339}
ebd8d4e8 9340
ab78acc6 9341inherits(Hmac, Transform)
ebd8d4e8 9342
ab78acc6
IC
9343Hmac.prototype.update = function (data, enc) {
9344 this._hash.update(data, enc)
ebd8d4e8 9345
ab78acc6
IC
9346 return this
9347}
ebd8d4e8 9348
ab78acc6
IC
9349Hmac.prototype._transform = function (data, _, next) {
9350 this._hash.update(data)
ebd8d4e8 9351
ab78acc6
IC
9352 next()
9353}
ebd8d4e8 9354
ab78acc6
IC
9355Hmac.prototype._flush = function (next) {
9356 this.push(this.digest())
ebd8d4e8 9357
ab78acc6
IC
9358 next()
9359}
ebd8d4e8 9360
ab78acc6
IC
9361Hmac.prototype.digest = function (enc) {
9362 var h = this._hash.digest()
ebd8d4e8 9363
ab78acc6
IC
9364 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9365}
ebd8d4e8 9366
ab78acc6
IC
9367module.exports = function createHmac(alg, key) {
9368 return new Hmac(alg, key)
9369}
ebd8d4e8 9370
ab78acc6
IC
9371}).call(this,require("buffer").Buffer)
9372},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9373arguments[4][12][0].apply(exports,arguments)
9374},{"dup":12}],47:[function(require,module,exports){
9375var assert = require('assert')
9376var BigInteger = require('bigi')
ebd8d4e8 9377
ab78acc6 9378var Point = require('./point')
ebd8d4e8
IC
9379
9380function Curve(p, a, b, Gx, Gy, n, h) {
9381 this.p = p
9382 this.a = a
9383 this.b = b
9384 this.G = Point.fromAffine(this, Gx, Gy)
9385 this.n = n
9386 this.h = h
9387
9388 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9389
9390 // result caching
9391 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9392}
9393
9394Curve.prototype.pointFromX = function(isOdd, x) {
9395 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
ab78acc6 9396 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
ebd8d4e8
IC
9397
9398 var y = beta
9399 if (beta.isEven() ^ !isOdd) {
9400 y = this.p.subtract(y) // -y % p
9401 }
9402
9403 return Point.fromAffine(this, x, y)
9404}
9405
9406Curve.prototype.isInfinity = function(Q) {
9407 if (Q === this.infinity) return true
9408
9409 return Q.z.signum() === 0 && Q.y.signum() !== 0
9410}
9411
9412Curve.prototype.isOnCurve = function(Q) {
9413 if (this.isInfinity(Q)) return true
9414
9415 var x = Q.affineX
9416 var y = Q.affineY
9417 var a = this.a
9418 var b = this.b
9419 var p = this.p
9420
9421 // Check that xQ and yQ are integers in the interval [0, p - 1]
9422 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9423 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9424
9425 // and check that y^2 = x^3 + ax + b (mod p)
9426 var lhs = y.square().mod(p)
9427 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9428 return lhs.equals(rhs)
9429}
9430
9431/**
9432 * Validate an elliptic curve point.
9433 *
9434 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9435 */
9436Curve.prototype.validate = function(Q) {
9437 // Check Q != O
9438 assert(!this.isInfinity(Q), 'Point is at infinity')
9439 assert(this.isOnCurve(Q), 'Point is not on the curve')
9440
9441 // Check nQ = O (where Q is a scalar multiple of G)
9442 var nQ = Q.multiply(this.n)
9443 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9444
9445 return true
9446}
9447
9448module.exports = Curve
9449
ab78acc6 9450},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
ebd8d4e8
IC
9451module.exports={
9452 "secp128r1": {
9453 "p": "fffffffdffffffffffffffffffffffff",
9454 "a": "fffffffdfffffffffffffffffffffffc",
9455 "b": "e87579c11079f43dd824993c2cee5ed3",
9456 "n": "fffffffe0000000075a30d1b9038a115",
9457 "h": "01",
9458 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9459 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9460 },
9461 "secp160k1": {
9462 "p": "fffffffffffffffffffffffffffffffeffffac73",
9463 "a": "00",
9464 "b": "07",
9465 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9466 "h": "01",
9467 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9468 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9469 },
9470 "secp160r1": {
9471 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9472 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9473 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9474 "n": "0100000000000000000001f4c8f927aed3ca752257",
9475 "h": "01",
9476 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9477 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9478 },
9479 "secp192k1": {
9480 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9481 "a": "00",
9482 "b": "03",
9483 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9484 "h": "01",
9485 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9486 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9487 },
9488 "secp192r1": {
9489 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9490 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9491 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9492 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9493 "h": "01",
9494 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9495 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9496 },
ebd8d4e8
IC
9497 "secp256k1": {
9498 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9499 "a": "00",
9500 "b": "07",
9501 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9502 "h": "01",
9503 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9504 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9505 },
9506 "secp256r1": {
9507 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9508 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9509 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9510 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9511 "h": "01",
9512 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9513 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9514 }
9515}
9516
ab78acc6
IC
9517},{}],49:[function(require,module,exports){
9518var Point = require('./point')
9519var Curve = require('./curve')
ebd8d4e8 9520
ab78acc6 9521var getCurveByName = require('./names')
ebd8d4e8
IC
9522
9523module.exports = {
9524 Curve: Curve,
9525 Point: Point,
9526 getCurveByName: getCurveByName
9527}
9528
ab78acc6
IC
9529},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9530var BigInteger = require('bigi')
ebd8d4e8 9531
ab78acc6
IC
9532var curves = require('./curves')
9533var Curve = require('./curve')
ebd8d4e8
IC
9534
9535function getCurveByName(name) {
9536 var curve = curves[name]
9537 if (!curve) return null
9538
9539 var p = new BigInteger(curve.p, 16)
9540 var a = new BigInteger(curve.a, 16)
9541 var b = new BigInteger(curve.b, 16)
9542 var n = new BigInteger(curve.n, 16)
9543 var h = new BigInteger(curve.h, 16)
9544 var Gx = new BigInteger(curve.Gx, 16)
9545 var Gy = new BigInteger(curve.Gy, 16)
9546
9547 return new Curve(p, a, b, Gx, Gy, n, h)
9548}
9549
9550module.exports = getCurveByName
9551
ab78acc6 9552},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
ebd8d4e8 9553(function (Buffer){
ab78acc6
IC
9554var assert = require('assert')
9555var BigInteger = require('bigi')
ebd8d4e8
IC
9556
9557var THREE = BigInteger.valueOf(3)
9558
9559function Point(curve, x, y, z) {
9560 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9561
9562 this.curve = curve
9563 this.x = x
9564 this.y = y
9565 this.z = z
9566 this._zInv = null
9567
9568 this.compressed = true
9569}
9570
9571Object.defineProperty(Point.prototype, 'zInv', {
9572 get: function() {
9573 if (this._zInv === null) {
9574 this._zInv = this.z.modInverse(this.curve.p)
9575 }
9576
9577 return this._zInv
9578 }
9579})
9580
9581Object.defineProperty(Point.prototype, 'affineX', {
9582 get: function() {
9583 return this.x.multiply(this.zInv).mod(this.curve.p)
9584 }
9585})
9586
9587Object.defineProperty(Point.prototype, 'affineY', {
9588 get: function() {
9589 return this.y.multiply(this.zInv).mod(this.curve.p)
9590 }
9591})
9592
9593Point.fromAffine = function(curve, x, y) {
9594 return new Point(curve, x, y, BigInteger.ONE)
9595}
9596
9597Point.prototype.equals = function(other) {
9598 if (other === this) return true
9599 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9600 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9601
9602 // u = Y2 * Z1 - Y1 * Z2
9603 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9604
9605 if (u.signum() !== 0) return false
9606
9607 // v = X2 * Z1 - X1 * Z2
9608 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9609
9610 return v.signum() === 0
9611}
9612
9613Point.prototype.negate = function() {
9614 var y = this.curve.p.subtract(this.y)
9615
9616 return new Point(this.curve, this.x, y, this.z)
9617}
9618
9619Point.prototype.add = function(b) {
9620 if (this.curve.isInfinity(this)) return b
9621 if (this.curve.isInfinity(b)) return this
9622
9623 var x1 = this.x
9624 var y1 = this.y
9625 var x2 = b.x
9626 var y2 = b.y
9627
9628 // u = Y2 * Z1 - Y1 * Z2
9629 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9630 // v = X2 * Z1 - X1 * Z2
9631 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9632
9633 if (v.signum() === 0) {
9634 if (u.signum() === 0) {
9635 return this.twice() // this == b, so double
9636 }
9637
9638 return this.curve.infinity // this = -b, so infinity
9639 }
9640
9641 var v2 = v.square()
9642 var v3 = v2.multiply(v)
9643 var x1v2 = x1.multiply(v2)
9644 var zu2 = u.square().multiply(this.z)
9645
9646 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9647 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9648 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9649 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)
9650 // z3 = v^3 * z1 * z2
9651 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9652
9653 return new Point(this.curve, x3, y3, z3)
9654}
9655
9656Point.prototype.twice = function() {
9657 if (this.curve.isInfinity(this)) return this
9658 if (this.y.signum() === 0) return this.curve.infinity
9659
9660 var x1 = this.x
9661 var y1 = this.y
9662
9663 var y1z1 = y1.multiply(this.z)
9664 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9665 var a = this.curve.a
9666
9667 // w = 3 * x1^2 + a * z1^2
9668 var w = x1.square().multiply(THREE)
9669
9670 if (a.signum() !== 0) {
9671 w = w.add(this.z.square().multiply(a))
9672 }
9673
9674 w = w.mod(this.curve.p)
9675 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9676 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9677 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9678 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9679 // z3 = 8 * (y1 * z1)^3
9680 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9681
9682 return new Point(this.curve, x3, y3, z3)
9683}
9684
9685// Simple NAF (Non-Adjacent Form) multiplication algorithm
9686// TODO: modularize the multiplication algorithm
9687Point.prototype.multiply = function(k) {
9688 if (this.curve.isInfinity(this)) return this
9689 if (k.signum() === 0) return this.curve.infinity
9690
9691 var e = k
9692 var h = e.multiply(THREE)
9693
9694 var neg = this.negate()
9695 var R = this
9696
9697 for (var i = h.bitLength() - 2; i > 0; --i) {
9698 R = R.twice()
9699
9700 var hBit = h.testBit(i)
9701 var eBit = e.testBit(i)
9702
9703 if (hBit != eBit) {
9704 R = R.add(hBit ? this : neg)
9705 }
9706 }
9707
9708 return R
9709}
9710
9711// Compute this*j + x*k (simultaneous multiplication)
9712Point.prototype.multiplyTwo = function(j, x, k) {
9713 var i
9714
9715 if (j.bitLength() > k.bitLength())
9716 i = j.bitLength() - 1
9717 else
9718 i = k.bitLength() - 1
9719
9720 var R = this.curve.infinity
9721 var both = this.add(x)
9722
9723 while (i >= 0) {
9724 R = R.twice()
9725
9726 var jBit = j.testBit(i)
9727 var kBit = k.testBit(i)
9728
9729 if (jBit) {
9730 if (kBit) {
9731 R = R.add(both)
9732
9733 } else {
9734 R = R.add(this)
9735 }
9736
9737 } else {
9738 if (kBit) {
9739 R = R.add(x)
9740 }
9741 }
9742 --i
9743 }
9744
9745 return R
9746}
9747
9748Point.prototype.getEncoded = function(compressed) {
9749 if (compressed == undefined) compressed = this.compressed
9750 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9751
9752 var x = this.affineX
9753 var y = this.affineY
9754
9755 var buffer
9756
9757 // Determine size of q in bytes
9758 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9759
9760 // 0x02/0x03 | X
9761 if (compressed) {
9762 buffer = new Buffer(1 + byteLength)
9763 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9764
9765 // 0x04 | X | Y
9766 } else {
9767 buffer = new Buffer(1 + byteLength + byteLength)
9768 buffer.writeUInt8(0x04, 0)
9769
9770 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9771 }
9772
9773 x.toBuffer(byteLength).copy(buffer, 1)
9774
9775 return buffer
9776}
9777
9778Point.decodeFrom = function(curve, buffer) {
9779 var type = buffer.readUInt8(0)
9780 var compressed = (type !== 4)
9781
ebd8d4e8 9782 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
ab78acc6 9783 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
ebd8d4e8
IC
9784
9785 var Q
9786 if (compressed) {
9787 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9788 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9789
9790 var isOdd = (type === 0x03)
9791 Q = curve.pointFromX(isOdd, x)
9792
9793 } else {
9794 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9795
9796 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9797 Q = Point.fromAffine(curve, x, y)
9798 }
9799
9800 Q.compressed = compressed
9801 return Q
9802}
9803
9804Point.prototype.toString = function () {
9805 if (this.curve.isInfinity(this)) return '(INFINITY)'
9806
9807 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9808}
9809
9810module.exports = Point
9811
ab78acc6
IC
9812}).call(this,require("buffer").Buffer)
9813},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9814(function (process,global,Buffer){
9815'use strict';
ebd8d4e8 9816
ab78acc6
IC
9817var crypto = global.crypto || global.msCrypto
9818if(crypto && crypto.getRandomValues) {
9819 module.exports = randomBytes;
9820} else {
9821 module.exports = oldBrowser;
9822}
9823function randomBytes(size, cb) {
9824 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9825 /* This will not work in older browsers.
9826 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9827 */
9828
9829 crypto.getRandomValues(bytes);
9830 if (typeof cb === 'function') {
9831 return process.nextTick(function () {
9832 cb(null, bytes);
9833 });
ebd8d4e8 9834 }
ab78acc6
IC
9835 return bytes;
9836}
9837function oldBrowser() {
9838 throw new Error(
9839 'secure random number generation not supported by this browser\n'+
9840 'use chrome, FireFox or Internet Explorer 11'
9841 )
ebd8d4e8
IC
9842}
9843
ab78acc6
IC
9844}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9845},{"_process":14,"buffer":7}],53:[function(require,module,exports){
9846(function (Buffer){
9847'use strict';
ebd8d4e8 9848
ab78acc6
IC
9849function getFunctionName(fn) {
9850 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9851}
9852
9853function getTypeTypeName(type) {
9854 if (nativeTypes.Function(type)) {
9855 type = type.toJSON ? type.toJSON() : getFunctionName(type);
ebd8d4e8 9856 }
ab78acc6
IC
9857 if (nativeTypes.Object(type)) return JSON.stringify(type);
9858
9859 return type;
ebd8d4e8
IC
9860}
9861
ab78acc6
IC
9862function getValueTypeName(value) {
9863 if (nativeTypes.Null(value)) return '';
ebd8d4e8 9864
ab78acc6
IC
9865 return getFunctionName(value.constructor);
9866}
9867
9868function tfErrorString(type, value) {
9869 var typeTypeName = getTypeTypeName(type);
9870 var valueTypeName = getValueTypeName(value);
9871
9872 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9873}
9874
9875function tfPropertyErrorString(type, name, value) {
9876 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9877}
9878
9879var nativeTypes = {
9880 Array: (function (_Array) {
9881 function Array(_x) {
9882 return _Array.apply(this, arguments);
9883 }
9884
9885 Array.toString = function () {
9886 return _Array.toString();
9887 };
9888
9889 return Array;
9890 })(function (value) {
9891 return value !== null && value !== undefined && value.constructor === Array;
9892 }),
9893 Boolean: function Boolean(value) {
9894 return typeof value === 'boolean';
9895 },
9896 Buffer: (function (_Buffer) {
9897 function Buffer(_x2) {
9898 return _Buffer.apply(this, arguments);
9899 }
9900
9901 Buffer.toString = function () {
9902 return _Buffer.toString();
9903 };
9904
9905 return Buffer;
9906 })(function (value) {
9907 return Buffer.isBuffer(value);
9908 }),
9909 Function: function Function(value) {
9910 return typeof value === 'function';
9911 },
9912 Null: function Null(value) {
9913 return value === undefined || value === null;
9914 },
9915 Number: function Number(value) {
9916 return typeof value === 'number';
9917 },
9918 Object: function Object(value) {
9919 return typeof value === 'object';
9920 },
9921 String: function String(value) {
9922 return typeof value === 'string';
9923 },
9924 '': function _() {
9925 return true;
ebd8d4e8 9926 }
ab78acc6
IC
9927};
9928
9929function tJSON(type) {
9930 return type && type.toJSON ? type.toJSON() : type;
ebd8d4e8
IC
9931}
9932
ab78acc6
IC
9933function sJSON(type) {
9934 var json = tJSON(type);
9935 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
ebd8d4e8
IC
9936}
9937
ab78acc6
IC
9938var otherTypes = {
9939 arrayOf: function arrayOf(type) {
9940 function arrayOf(value, strict) {
9941 try {
9942 return nativeTypes.Array(value) && value.every(function (x) {
9943 return typeforce(type, x, strict);
9944 });
9945 } catch (e) {
9946 return false;
9947 }
9948 }
9949 arrayOf.toJSON = function () {
9950 return [tJSON(type)];
9951 };
9952
9953 return arrayOf;
9954 },
9955
9956 maybe: function maybe(type) {
9957 function maybe(value, strict) {
9958 return nativeTypes.Null(value) || typeforce(type, value, strict);
9959 }
9960 maybe.toJSON = function () {
9961 return '?' + sJSON(type);
9962 };
9963
9964 return maybe;
9965 },
9966
9967 object: function object(type) {
9968 function object(value, strict) {
9969 typeforce(nativeTypes.Object, value, strict);
9970
9971 var propertyName, propertyType, propertyValue;
9972
9973 try {
9974 for (propertyName in type) {
9975 propertyType = type[propertyName];
9976 propertyValue = value[propertyName];
9977
9978 typeforce(propertyType, propertyValue, strict);
9979 }
9980 } catch (e) {
9981 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9982 }
9983
9984 if (strict) {
9985 for (propertyName in value) {
9986 if (type[propertyName]) continue;
9987
9988 throw new TypeError('Unexpected property "' + propertyName + '"');
9989 }
9990 }
9991
9992 return true;
9993 }
9994 object.toJSON = function () {
9995 return type;
9996 };
9997
9998 return object;
9999 },
10000
10001 oneOf: function oneOf() {
10002 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
10003 types[_key] = arguments[_key];
10004 }
10005
10006 function oneOf(value, strict) {
10007 return types.some(function (type) {
10008 try {
10009 return typeforce(type, value, strict);
10010 } catch (e) {
10011 return false;
10012 }
10013 });
10014 }
10015 oneOf.toJSON = function () {
10016 return types.map(sJSON).join('|');
10017 };
10018
10019 return oneOf;
10020 },
10021
10022 quacksLike: function quacksLike(type) {
10023 function quacksLike(value, strict) {
10024 return type === getValueTypeName(value);
10025 }
10026 quacksLike.toJSON = function () {
10027 return type;
10028 };
10029
10030 return quacksLike;
10031 },
10032
10033 tuple: function tuple() {
10034 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
10035 types[_key2] = arguments[_key2];
10036 }
10037
10038 function tuple(value, strict) {
10039 return types.every(function (type, i) {
10040 return typeforce(type, value[i], strict);
10041 });
10042 }
10043 tuple.toJSON = function () {
10044 return '(' + types.map(sJSON).join(', ') + ')';
10045 };
10046
10047 return tuple;
10048 },
10049
10050 value: function value(expected) {
10051 function value(actual) {
10052 return actual === expected;
10053 }
10054 value.toJSON = function () {
10055 return expected;
10056 };
10057
10058 return value;
10059 }
10060};
10061
10062function compile(type) {
10063 if (nativeTypes.String(type)) {
10064 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
10065
10066 return nativeTypes[type] || otherTypes.quacksLike(type);
10067 } else if (type && nativeTypes.Object(type)) {
10068 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
10069
10070 var compiled = {};
10071
10072 for (var propertyName in type) {
10073 compiled[propertyName] = compile(type[propertyName]);
10074 }
10075
10076 return otherTypes.object(compiled);
10077 } else if (nativeTypes.Function(type)) {
10078 return type;
10079 }
10080
10081 return otherTypes.value(type);
ebd8d4e8
IC
10082}
10083
ab78acc6
IC
10084function typeforce(_x3, _x4, _x5) {
10085 var _again = true;
10086
10087 _function: while (_again) {
10088 var type = _x3,
10089 value = _x4,
10090 strict = _x5;
10091 _again = false;
10092
10093 if (nativeTypes.Function(type)) {
10094 if (type(value, strict)) return true;
10095
10096 throw new TypeError(tfErrorString(type, value));
10097 }
10098
10099 // JIT
10100 _x3 = compile(type);
10101 _x4 = value;
10102 _x5 = strict;
10103 _again = true;
10104 continue _function;
10105 }
ebd8d4e8
IC
10106}
10107
ab78acc6
IC
10108// assign all types to typeforce function
10109var typeName;
10110Object.keys(nativeTypes).forEach(function (typeName) {
10111 var nativeType = nativeTypes[typeName];
10112 nativeType.toJSON = function () {
10113 return typeName;
10114 };
10115
10116 typeforce[typeName] = nativeType;
10117});
ebd8d4e8 10118
ab78acc6
IC
10119for (typeName in otherTypes) {
10120 typeforce[typeName] = otherTypes[typeName];
10121}
ebd8d4e8 10122
ab78acc6
IC
10123module.exports = typeforce;
10124module.exports.compile = compile;
10125}).call(this,require("buffer").Buffer)
10126},{"buffer":7}],54:[function(require,module,exports){
ebd8d4e8 10127(function (Buffer){
ab78acc6
IC
10128var assert = require('assert')
10129var base58check = require('bs58check')
10130var typeForce = require('typeforce')
10131var networks = require('./networks')
10132var scripts = require('./scripts')
ebd8d4e8 10133
ab78acc6 10134function findScriptTypeByVersion (version) {
ebd8d4e8
IC
10135 for (var networkName in networks) {
10136 var network = networks[networkName]
10137
10138 if (version === network.pubKeyHash) return 'pubkeyhash'
10139 if (version === network.scriptHash) return 'scripthash'
10140 }
10141}
10142
ab78acc6
IC
10143function Address (hash, version) {
10144 typeForce('Buffer', hash)
10145
ebd8d4e8
IC
10146 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10147 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10148
10149 this.hash = hash
10150 this.version = version
10151}
10152
ab78acc6 10153Address.fromBase58Check = function (string) {
ebd8d4e8
IC
10154 var payload = base58check.decode(string)
10155 var version = payload.readUInt8(0)
10156 var hash = payload.slice(1)
10157
10158 return new Address(hash, version)
10159}
10160
ab78acc6 10161Address.fromOutputScript = function (script, network) {
ebd8d4e8
IC
10162 network = network || networks.bitcoin
10163
ab78acc6
IC
10164 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10165 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
ebd8d4e8 10166
ab78acc6 10167 assert(false, script.toASM() + ' has no matching Address')
ebd8d4e8
IC
10168}
10169
ebd8d4e8
IC
10170Address.prototype.toBase58Check = function () {
10171 var payload = new Buffer(21)
10172 payload.writeUInt8(this.version, 0)
10173 this.hash.copy(payload, 1)
10174
10175 return base58check.encode(payload)
10176}
10177
ab78acc6 10178Address.prototype.toOutputScript = function () {
ebd8d4e8
IC
10179 var scriptType = findScriptTypeByVersion(this.version)
10180
10181 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10182 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10183
ab78acc6
IC
10184 assert(false, this.toString() + ' has no matching Script')
10185}
10186
10187Address.prototype.toString = Address.prototype.toBase58Check
10188
10189module.exports = Address
10190
10191}).call(this,require("buffer").Buffer)
10192},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10193var bs58check = require('bs58check')
10194
10195function decode () {
10196 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10197
10198 return bs58check.decode.apply(undefined, arguments)
10199}
10200
10201function encode () {
10202 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10203
10204 return bs58check.encode.apply(undefined, arguments)
10205}
10206
10207module.exports = {
10208 decode: decode,
10209 encode: encode
10210}
10211
10212},{"bs58check":31}],56:[function(require,module,exports){
10213(function (Buffer){
10214var assert = require('assert')
10215var bufferutils = require('./bufferutils')
10216var crypto = require('./crypto')
10217
10218var Transaction = require('./transaction')
10219
10220function Block () {
10221 this.version = 1
10222 this.prevHash = null
10223 this.merkleRoot = null
10224 this.timestamp = 0
10225 this.bits = 0
10226 this.nonce = 0
10227}
10228
10229Block.fromBuffer = function (buffer) {
10230 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10231
10232 var offset = 0
10233 function readSlice (n) {
10234 offset += n
10235 return buffer.slice(offset - n, offset)
10236 }
10237
10238 function readUInt32 () {
10239 var i = buffer.readUInt32LE(offset)
10240 offset += 4
10241 return i
10242 }
10243
10244 var block = new Block()
10245 block.version = readUInt32()
10246 block.prevHash = readSlice(32)
10247 block.merkleRoot = readSlice(32)
10248 block.timestamp = readUInt32()
10249 block.bits = readUInt32()
10250 block.nonce = readUInt32()
10251
10252 if (buffer.length === 80) return block
10253
10254 function readVarInt () {
10255 var vi = bufferutils.readVarInt(buffer, offset)
10256 offset += vi.size
10257 return vi.number
10258 }
10259
10260 // FIXME: poor performance
10261 function readTransaction () {
10262 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10263
10264 offset += tx.toBuffer().length
10265 return tx
10266 }
10267
10268 var nTransactions = readVarInt()
10269 block.transactions = []
10270
10271 for (var i = 0; i < nTransactions; ++i) {
10272 var tx = readTransaction()
10273 block.transactions.push(tx)
10274 }
10275
10276 return block
10277}
10278
10279Block.fromHex = function (hex) {
10280 return Block.fromBuffer(new Buffer(hex, 'hex'))
10281}
10282
10283Block.prototype.getHash = function () {
10284 return crypto.hash256(this.toBuffer(true))
10285}
10286
10287Block.prototype.getId = function () {
10288 return bufferutils.reverse(this.getHash()).toString('hex')
ebd8d4e8
IC
10289}
10290
ab78acc6
IC
10291Block.prototype.getUTCDate = function () {
10292 var date = new Date(0) // epoch
10293 date.setUTCSeconds(this.timestamp)
ebd8d4e8 10294
ab78acc6
IC
10295 return date
10296}
ebd8d4e8 10297
ab78acc6
IC
10298Block.prototype.toBuffer = function (headersOnly) {
10299 var buffer = new Buffer(80)
ebd8d4e8 10300
ab78acc6
IC
10301 var offset = 0
10302 function writeSlice (slice) {
10303 slice.copy(buffer, offset)
10304 offset += slice.length
10305 }
ebd8d4e8 10306
ab78acc6
IC
10307 function writeUInt32 (i) {
10308 buffer.writeUInt32LE(i, offset)
10309 offset += 4
10310 }
ebd8d4e8 10311
ab78acc6
IC
10312 writeUInt32(this.version)
10313 writeSlice(this.prevHash)
10314 writeSlice(this.merkleRoot)
10315 writeUInt32(this.timestamp)
10316 writeUInt32(this.bits)
10317 writeUInt32(this.nonce)
ebd8d4e8 10318
ab78acc6 10319 if (headersOnly || !this.transactions) return buffer
ebd8d4e8 10320
ab78acc6
IC
10321 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10322 var txBuffers = this.transactions.map(function (tx) {
10323 return tx.toBuffer()
10324 })
ebd8d4e8 10325
ab78acc6 10326 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
ebd8d4e8
IC
10327}
10328
ab78acc6
IC
10329Block.prototype.toHex = function (headersOnly) {
10330 return this.toBuffer(headersOnly).toString('hex')
ebd8d4e8
IC
10331}
10332
ab78acc6
IC
10333module.exports = Block
10334
10335}).call(this,require("buffer").Buffer)
10336},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10337(function (Buffer){
10338var assert = require('assert')
10339var opcodes = require('./opcodes')
ebd8d4e8
IC
10340
10341// https://github.com/feross/buffer/blob/master/index.js#L1127
ab78acc6 10342function verifuint (value, max) {
ebd8d4e8
IC
10343 assert(typeof value === 'number', 'cannot write a non-number as a number')
10344 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10345 assert(value <= max, 'value is larger than maximum value for type')
10346 assert(Math.floor(value) === value, 'value has a fractional component')
10347}
10348
ab78acc6 10349function pushDataSize (i) {
ebd8d4e8 10350 return i < opcodes.OP_PUSHDATA1 ? 1
ab78acc6
IC
10351 : i < 0xff ? 2
10352 : i < 0xffff ? 3
10353 : 5
ebd8d4e8
IC
10354}
10355
ab78acc6 10356function readPushDataInt (buffer, offset) {
ebd8d4e8
IC
10357 var opcode = buffer.readUInt8(offset)
10358 var number, size
10359
10360 // ~6 bit
10361 if (opcode < opcodes.OP_PUSHDATA1) {
10362 number = opcode
10363 size = 1
10364
10365 // 8 bit
10366 } else if (opcode === opcodes.OP_PUSHDATA1) {
ab78acc6 10367 if (offset + 2 > buffer.length) return null
ebd8d4e8
IC
10368 number = buffer.readUInt8(offset + 1)
10369 size = 2
10370
10371 // 16 bit
10372 } else if (opcode === opcodes.OP_PUSHDATA2) {
ab78acc6 10373 if (offset + 3 > buffer.length) return null
ebd8d4e8
IC
10374 number = buffer.readUInt16LE(offset + 1)
10375 size = 3
10376
10377 // 32 bit
10378 } else {
ab78acc6 10379 if (offset + 5 > buffer.length) return null
ebd8d4e8
IC
10380 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10381
10382 number = buffer.readUInt32LE(offset + 1)
10383 size = 5
ebd8d4e8
IC
10384 }
10385
10386 return {
10387 opcode: opcode,
10388 number: number,
10389 size: size
10390 }
10391}
10392
ab78acc6 10393function readUInt64LE (buffer, offset) {
ebd8d4e8
IC
10394 var a = buffer.readUInt32LE(offset)
10395 var b = buffer.readUInt32LE(offset + 4)
10396 b *= 0x100000000
10397
10398 verifuint(b + a, 0x001fffffffffffff)
10399
10400 return b + a
10401}
10402
ab78acc6 10403function readVarInt (buffer, offset) {
ebd8d4e8
IC
10404 var t = buffer.readUInt8(offset)
10405 var number, size
10406
10407 // 8 bit
10408 if (t < 253) {
10409 number = t
10410 size = 1
10411
10412 // 16 bit
10413 } else if (t < 254) {
10414 number = buffer.readUInt16LE(offset + 1)
10415 size = 3
10416
10417 // 32 bit
10418 } else if (t < 255) {
10419 number = buffer.readUInt32LE(offset + 1)
10420 size = 5
10421
10422 // 64 bit
10423 } else {
10424 number = readUInt64LE(buffer, offset + 1)
10425 size = 9
10426 }
10427
10428 return {
10429 number: number,
10430 size: size
10431 }
10432}
10433
ab78acc6 10434function writePushDataInt (buffer, number, offset) {
ebd8d4e8
IC
10435 var size = pushDataSize(number)
10436
10437 // ~6 bit
10438 if (size === 1) {
10439 buffer.writeUInt8(number, offset)
10440
10441 // 8 bit
10442 } else if (size === 2) {
10443 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10444 buffer.writeUInt8(number, offset + 1)
10445
10446 // 16 bit
10447 } else if (size === 3) {
10448 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10449 buffer.writeUInt16LE(number, offset + 1)
10450
10451 // 32 bit
10452 } else {
10453 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10454 buffer.writeUInt32LE(number, offset + 1)
ebd8d4e8
IC
10455 }
10456
10457 return size
10458}
10459
ab78acc6 10460function writeUInt64LE (buffer, value, offset) {
ebd8d4e8
IC
10461 verifuint(value, 0x001fffffffffffff)
10462
10463 buffer.writeInt32LE(value & -1, offset)
10464 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10465}
10466
ab78acc6
IC
10467function varIntSize (i) {
10468 return i < 253 ? 1
10469 : i < 0x10000 ? 3
10470 : i < 0x100000000 ? 5
10471 : 9
ebd8d4e8
IC
10472}
10473
ab78acc6 10474function writeVarInt (buffer, number, offset) {
ebd8d4e8
IC
10475 var size = varIntSize(number)
10476
10477 // 8 bit
10478 if (size === 1) {
10479 buffer.writeUInt8(number, offset)
10480
10481 // 16 bit
10482 } else if (size === 3) {
10483 buffer.writeUInt8(253, offset)
10484 buffer.writeUInt16LE(number, offset + 1)
10485
10486 // 32 bit
10487 } else if (size === 5) {
10488 buffer.writeUInt8(254, offset)
10489 buffer.writeUInt32LE(number, offset + 1)
10490
10491 // 64 bit
10492 } else {
10493 buffer.writeUInt8(255, offset)
10494 writeUInt64LE(buffer, number, offset + 1)
10495 }
10496
10497 return size
10498}
10499
ab78acc6
IC
10500function varIntBuffer (i) {
10501 var size = varIntSize(i)
10502 var buffer = new Buffer(size)
10503 writeVarInt(buffer, i, 0)
10504
10505 return buffer
10506}
10507
10508function reverse (buffer) {
10509 var buffer2 = new Buffer(buffer)
10510 Array.prototype.reverse.call(buffer2)
10511 return buffer2
10512}
10513
ebd8d4e8
IC
10514module.exports = {
10515 pushDataSize: pushDataSize,
10516 readPushDataInt: readPushDataInt,
10517 readUInt64LE: readUInt64LE,
10518 readVarInt: readVarInt,
ab78acc6
IC
10519 reverse: reverse,
10520 varIntBuffer: varIntBuffer,
ebd8d4e8
IC
10521 varIntSize: varIntSize,
10522 writePushDataInt: writePushDataInt,
10523 writeUInt64LE: writeUInt64LE,
10524 writeVarInt: writeVarInt
10525}
10526
ab78acc6
IC
10527}).call(this,require("buffer").Buffer)
10528},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10529var createHash = require('create-hash')
ebd8d4e8 10530
ab78acc6 10531function hash160 (buffer) {
ebd8d4e8
IC
10532 return ripemd160(sha256(buffer))
10533}
10534
ab78acc6 10535function hash256 (buffer) {
ebd8d4e8
IC
10536 return sha256(sha256(buffer))
10537}
10538
ab78acc6
IC
10539function ripemd160 (buffer) {
10540 return createHash('rmd160').update(buffer).digest()
ebd8d4e8
IC
10541}
10542
ab78acc6
IC
10543function sha1 (buffer) {
10544 return createHash('sha1').update(buffer).digest()
ebd8d4e8
IC
10545}
10546
ab78acc6
IC
10547function sha256 (buffer) {
10548 return createHash('sha256').update(buffer).digest()
ebd8d4e8
IC
10549}
10550
10551// FIXME: Name not consistent with others
ab78acc6 10552var createHmac = require('create-hmac')
ebd8d4e8 10553
ab78acc6
IC
10554function HmacSHA256 (buffer, secret) {
10555 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10556 return createHmac('sha256', secret).update(buffer).digest()
10557}
ebd8d4e8 10558
ab78acc6
IC
10559function HmacSHA512 (buffer, secret) {
10560 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10561 return createHmac('sha512', secret).update(buffer).digest()
ebd8d4e8
IC
10562}
10563
10564module.exports = {
10565 ripemd160: ripemd160,
10566 sha1: sha1,
10567 sha256: sha256,
10568 hash160: hash160,
10569 hash256: hash256,
10570 HmacSHA256: HmacSHA256,
10571 HmacSHA512: HmacSHA512
10572}
10573
ab78acc6 10574},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
ebd8d4e8 10575(function (Buffer){
ab78acc6
IC
10576var assert = require('assert')
10577var createHmac = require('create-hmac')
10578var typeForce = require('typeforce')
ebd8d4e8 10579
ab78acc6
IC
10580var BigInteger = require('bigi')
10581var ECSignature = require('./ecsignature')
10582
10583var ZERO = new Buffer([0])
10584var ONE = new Buffer([1])
ebd8d4e8
IC
10585
10586// https://tools.ietf.org/html/rfc6979#section-3.2
ab78acc6
IC
10587function deterministicGenerateK (curve, hash, d, checkSig) {
10588 typeForce('Buffer', hash)
10589 typeForce('BigInteger', d)
10590
10591 // FIXME: remove/uncomment for 2.0.0
10592 // typeForce('Function', checkSig)
10593
10594 if (typeof checkSig !== 'function') {
10595 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10596
10597 checkSig = function (k) {
10598 var G = curve.G
10599 var n = curve.n
10600 var e = BigInteger.fromBuffer(hash)
10601
10602 var Q = G.multiply(k)
10603
10604 if (curve.isInfinity(Q))
10605 return false
10606
10607 var r = Q.affineX.mod(n)
10608 if (r.signum() === 0)
10609 return false
10610
10611 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10612 if (s.signum() === 0)
10613 return false
10614
10615 return true
10616 }
10617 }
10618
10619 // sanity check
ebd8d4e8 10620 assert.equal(hash.length, 32, 'Hash must be 256 bit')
ebd8d4e8
IC
10621
10622 var x = d.toBuffer(32)
10623 var k = new Buffer(32)
10624 var v = new Buffer(32)
10625
ab78acc6 10626 // Step A, ignored as hash already provided
ebd8d4e8
IC
10627 // Step B
10628 v.fill(1)
10629
10630 // Step C
10631 k.fill(0)
10632
10633 // Step D
ab78acc6
IC
10634 k = createHmac('sha256', k)
10635 .update(v)
10636 .update(ZERO)
10637 .update(x)
10638 .update(hash)
10639 .digest()
ebd8d4e8
IC
10640
10641 // Step E
ab78acc6 10642 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10643
10644 // Step F
ab78acc6
IC
10645 k = createHmac('sha256', k)
10646 .update(v)
10647 .update(ONE)
10648 .update(x)
10649 .update(hash)
10650 .digest()
ebd8d4e8
IC
10651
10652 // Step G
ab78acc6 10653 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10654
10655 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10656 // Step H2b
ab78acc6 10657 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10658
10659 var T = BigInteger.fromBuffer(v)
10660
ab78acc6
IC
10661 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10662 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10663 k = createHmac('sha256', k)
10664 .update(v)
10665 .update(ZERO)
10666 .digest()
10667
10668 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8 10669
ab78acc6
IC
10670 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10671 // Step H2b again
10672 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10673 T = BigInteger.fromBuffer(v)
10674 }
10675
10676 return T
10677}
10678
ab78acc6
IC
10679function sign (curve, hash, d) {
10680 var r, s
ebd8d4e8 10681
ab78acc6 10682 var e = BigInteger.fromBuffer(hash)
ebd8d4e8
IC
10683 var n = curve.n
10684 var G = curve.G
ebd8d4e8 10685
ab78acc6
IC
10686 deterministicGenerateK(curve, hash, d, function (k) {
10687 var Q = G.multiply(k)
10688
10689 if (curve.isInfinity(Q))
10690 return false
10691
10692 r = Q.affineX.mod(n)
10693 if (r.signum() === 0)
10694 return false
10695
10696 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10697 if (s.signum() === 0)
10698 return false
ebd8d4e8 10699
ab78acc6
IC
10700 return true
10701 })
ebd8d4e8
IC
10702
10703 var N_OVER_TWO = n.shiftRight(1)
10704
10705 // enforce low S values, see bip62: 'low s values in signatures'
10706 if (s.compareTo(N_OVER_TWO) > 0) {
10707 s = n.subtract(s)
10708 }
10709
10710 return new ECSignature(r, s)
10711}
10712
ab78acc6 10713function verifyRaw (curve, e, signature, Q) {
ebd8d4e8
IC
10714 var n = curve.n
10715 var G = curve.G
10716
10717 var r = signature.r
10718 var s = signature.s
10719
ab78acc6
IC
10720 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10721 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10722 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
ebd8d4e8 10723
ab78acc6 10724 // c = s^-1 mod n
ebd8d4e8
IC
10725 var c = s.modInverse(n)
10726
ab78acc6
IC
10727 // 1.4.4 Compute u1 = es^−1 mod n
10728 // u2 = rs^−1 mod n
ebd8d4e8
IC
10729 var u1 = e.multiply(c).mod(n)
10730 var u2 = r.multiply(c).mod(n)
10731
ab78acc6
IC
10732 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10733 var R = G.multiplyTwo(u1, Q, u2)
10734 var v = R.affineX.mod(n)
ebd8d4e8 10735
ab78acc6
IC
10736 // 1.4.5 (cont.) Enforce R is not at infinity
10737 if (curve.isInfinity(R)) return false
10738
10739 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
ebd8d4e8
IC
10740 return v.equals(r)
10741}
10742
ab78acc6
IC
10743function verify (curve, hash, signature, Q) {
10744 // 1.4.2 H = Hash(M), already done by the user
10745 // 1.4.3 e = H
10746 var e = BigInteger.fromBuffer(hash)
10747
10748 return verifyRaw(curve, e, signature, Q)
10749}
10750
ebd8d4e8
IC
10751/**
10752 * Recover a public key from a signature.
10753 *
10754 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10755 * Key Recovery Operation".
10756 *
10757 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10758 */
ab78acc6 10759function recoverPubKey (curve, e, signature, i) {
ebd8d4e8
IC
10760 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10761
ab78acc6
IC
10762 var n = curve.n
10763 var G = curve.G
10764
ebd8d4e8
IC
10765 var r = signature.r
10766 var s = signature.s
10767
ab78acc6
IC
10768 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10769 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10770
ebd8d4e8
IC
10771 // A set LSB signifies that the y-coordinate is odd
10772 var isYOdd = i & 1
10773
10774 // The more significant bit specifies whether we should use the
10775 // first or second candidate key.
10776 var isSecondKey = i >> 1
10777
ebd8d4e8
IC
10778 // 1.1 Let x = r + jn
10779 var x = isSecondKey ? r.add(n) : r
10780 var R = curve.pointFromX(isYOdd, x)
10781
10782 // 1.4 Check that nR is at infinity
10783 var nR = R.multiply(n)
10784 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10785
10786 // Compute -e from e
10787 var eNeg = e.negate().mod(n)
10788
10789 // 1.6.1 Compute Q = r^-1 (sR - eG)
10790 // Q = r^-1 (sR + -eG)
10791 var rInv = r.modInverse(n)
10792
10793 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10794 curve.validate(Q)
10795
10796 return Q
10797}
10798
10799/**
10800 * Calculate pubkey extraction parameter.
10801 *
10802 * When extracting a pubkey from a signature, we have to
10803 * distinguish four different cases. Rather than putting this
10804 * burden on the verifier, Bitcoin includes a 2-bit value with the
10805 * signature.
10806 *
10807 * This function simply tries all four cases and returns the value
10808 * that resulted in a successful pubkey recovery.
10809 */
ab78acc6 10810function calcPubKeyRecoveryParam (curve, e, signature, Q) {
ebd8d4e8
IC
10811 for (var i = 0; i < 4; i++) {
10812 var Qprime = recoverPubKey(curve, e, signature, i)
10813
10814 // 1.6.2 Verify Q
10815 if (Qprime.equals(Q)) {
10816 return i
10817 }
10818 }
10819
10820 throw new Error('Unable to find valid recovery factor')
10821}
10822
10823module.exports = {
10824 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10825 deterministicGenerateK: deterministicGenerateK,
10826 recoverPubKey: recoverPubKey,
10827 sign: sign,
10828 verify: verify,
10829 verifyRaw: verifyRaw
10830}
10831
ab78acc6
IC
10832}).call(this,require("buffer").Buffer)
10833},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
ebd8d4e8 10834(function (Buffer){
ab78acc6
IC
10835var assert = require('assert')
10836var base58check = require('bs58check')
10837var ecdsa = require('./ecdsa')
10838var networks = require('./networks')
10839var randomBytes = require('randombytes')
10840var typeForce = require('typeforce')
ebd8d4e8 10841
ab78acc6
IC
10842var BigInteger = require('bigi')
10843var ECPubKey = require('./ecpubkey')
ebd8d4e8 10844
ab78acc6
IC
10845var ecurve = require('ecurve')
10846var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10847
ab78acc6 10848function ECKey (d, compressed) {
ebd8d4e8 10849 assert(d.signum() > 0, 'Private key must be greater than 0')
ab78acc6 10850 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
ebd8d4e8 10851
ab78acc6 10852 var Q = ECKey.curve.G.multiply(d)
ebd8d4e8
IC
10853
10854 this.d = d
10855 this.pub = new ECPubKey(Q, compressed)
10856}
10857
ab78acc6
IC
10858// Constants
10859ECKey.curve = secp256k1
10860
ebd8d4e8 10861// Static constructors
ab78acc6 10862ECKey.fromWIF = function (string) {
ebd8d4e8
IC
10863 var payload = base58check.decode(string)
10864 var compressed = false
10865
10866 // Ignore the version byte
10867 payload = payload.slice(1)
10868
10869 if (payload.length === 33) {
10870 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10871
10872 // Truncate the compression flag
10873 payload = payload.slice(0, -1)
10874 compressed = true
10875 }
10876
10877 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10878
10879 var d = BigInteger.fromBuffer(payload)
10880 return new ECKey(d, compressed)
10881}
10882
ab78acc6
IC
10883ECKey.makeRandom = function (compressed, rng) {
10884 rng = rng || randomBytes
ebd8d4e8
IC
10885
10886 var buffer = rng(32)
ab78acc6
IC
10887 typeForce('Buffer', buffer)
10888 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
ebd8d4e8
IC
10889
10890 var d = BigInteger.fromBuffer(buffer)
ab78acc6 10891 d = d.mod(ECKey.curve.n)
ebd8d4e8
IC
10892
10893 return new ECKey(d, compressed)
10894}
10895
10896// Export functions
ab78acc6 10897ECKey.prototype.toWIF = function (network) {
ebd8d4e8
IC
10898 network = network || networks.bitcoin
10899
10900 var bufferLen = this.pub.compressed ? 34 : 33
10901 var buffer = new Buffer(bufferLen)
10902
10903 buffer.writeUInt8(network.wif, 0)
10904 this.d.toBuffer(32).copy(buffer, 1)
10905
10906 if (this.pub.compressed) {
10907 buffer.writeUInt8(0x01, 33)
10908 }
10909
10910 return base58check.encode(buffer)
10911}
10912
10913// Operations
ab78acc6
IC
10914ECKey.prototype.sign = function (hash) {
10915 return ecdsa.sign(ECKey.curve, hash, this.d)
ebd8d4e8
IC
10916}
10917
10918module.exports = ECKey
10919
ab78acc6
IC
10920}).call(this,require("buffer").Buffer)
10921},{"./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){
ebd8d4e8 10922(function (Buffer){
ab78acc6
IC
10923var crypto = require('./crypto')
10924var ecdsa = require('./ecdsa')
10925var typeForce = require('typeforce')
10926var networks = require('./networks')
ebd8d4e8 10927
ab78acc6 10928var Address = require('./address')
ebd8d4e8 10929
ab78acc6
IC
10930var ecurve = require('ecurve')
10931var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10932
ab78acc6
IC
10933function ECPubKey (Q, compressed) {
10934 if (compressed === undefined) {
10935 compressed = true
10936 }
ebd8d4e8 10937
ab78acc6
IC
10938 typeForce('Point', Q)
10939 typeForce('Boolean', compressed)
ebd8d4e8
IC
10940
10941 this.compressed = compressed
10942 this.Q = Q
10943}
10944
ab78acc6
IC
10945// Constants
10946ECPubKey.curve = secp256k1
10947
ebd8d4e8 10948// Static constructors
ab78acc6
IC
10949ECPubKey.fromBuffer = function (buffer) {
10950 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
ebd8d4e8
IC
10951 return new ECPubKey(Q, Q.compressed)
10952}
10953
ab78acc6 10954ECPubKey.fromHex = function (hex) {
ebd8d4e8
IC
10955 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10956}
10957
10958// Operations
ab78acc6 10959ECPubKey.prototype.getAddress = function (network) {
ebd8d4e8
IC
10960 network = network || networks.bitcoin
10961
10962 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10963}
10964
ab78acc6
IC
10965ECPubKey.prototype.verify = function (hash, signature) {
10966 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
ebd8d4e8
IC
10967}
10968
10969// Export functions
ab78acc6 10970ECPubKey.prototype.toBuffer = function () {
ebd8d4e8
IC
10971 return this.Q.getEncoded(this.compressed)
10972}
10973
ab78acc6 10974ECPubKey.prototype.toHex = function () {
ebd8d4e8
IC
10975 return this.toBuffer().toString('hex')
10976}
10977
10978module.exports = ECPubKey
10979
ab78acc6
IC
10980}).call(this,require("buffer").Buffer)
10981},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
ebd8d4e8 10982(function (Buffer){
ab78acc6
IC
10983var assert = require('assert')
10984var typeForce = require('typeforce')
10985
10986var BigInteger = require('bigi')
10987
10988function ECSignature (r, s) {
10989 typeForce('BigInteger', r)
10990 typeForce('BigInteger', s)
ebd8d4e8 10991
ebd8d4e8
IC
10992 this.r = r
10993 this.s = s
10994}
10995
ab78acc6 10996ECSignature.parseCompact = function (buffer) {
ebd8d4e8
IC
10997 assert.equal(buffer.length, 65, 'Invalid signature length')
10998 var i = buffer.readUInt8(0) - 27
10999
11000 // At most 3 bits
11001 assert.equal(i, i & 7, 'Invalid signature parameter')
11002 var compressed = !!(i & 4)
11003
11004 // Recovery param only
11005 i = i & 3
11006
11007 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
11008 var s = BigInteger.fromBuffer(buffer.slice(33))
11009
11010 return {
11011 compressed: compressed,
11012 i: i,
11013 signature: new ECSignature(r, s)
11014 }
11015}
11016
ab78acc6 11017ECSignature.fromDER = function (buffer) {
ebd8d4e8
IC
11018 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
11019 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
11020 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
11021
11022 var rLen = buffer.readUInt8(3)
11023 assert(rLen > 0, 'R length is zero')
11024
11025 var offset = 4 + rLen
11026 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
11027
11028 var sLen = buffer.readUInt8(offset + 1)
11029 assert(sLen > 0, 'S length is zero')
11030
11031 var rB = buffer.slice(4, offset)
11032 var sB = buffer.slice(offset + 2)
11033 offset += 2 + sLen
11034
11035 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
11036 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
11037 }
11038
11039 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
11040 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
11041 }
11042
11043 assert.equal(offset, buffer.length, 'Invalid DER encoding')
11044 var r = BigInteger.fromDERInteger(rB)
11045 var s = BigInteger.fromDERInteger(sB)
11046
11047 assert(r.signum() >= 0, 'R value is negative')
11048 assert(s.signum() >= 0, 'S value is negative')
11049
11050 return new ECSignature(r, s)
11051}
11052
ab78acc6
IC
11053// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
11054ECSignature.parseScriptSignature = function (buffer) {
ebd8d4e8
IC
11055 var hashType = buffer.readUInt8(buffer.length - 1)
11056 var hashTypeMod = hashType & ~0x80
11057
ab78acc6 11058 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
ebd8d4e8
IC
11059
11060 return {
11061 signature: ECSignature.fromDER(buffer.slice(0, -1)),
11062 hashType: hashType
11063 }
11064}
11065
ab78acc6
IC
11066ECSignature.prototype.toCompact = function (i, compressed) {
11067 if (compressed) {
11068 i += 4
11069 }
11070
ebd8d4e8
IC
11071 i += 27
11072
11073 var buffer = new Buffer(65)
11074 buffer.writeUInt8(i, 0)
11075
11076 this.r.toBuffer(32).copy(buffer, 1)
11077 this.s.toBuffer(32).copy(buffer, 33)
11078
11079 return buffer
11080}
11081
ab78acc6 11082ECSignature.prototype.toDER = function () {
ebd8d4e8
IC
11083 var rBa = this.r.toDERInteger()
11084 var sBa = this.s.toDERInteger()
11085
11086 var sequence = []
ab78acc6
IC
11087
11088 // INTEGER
11089 sequence.push(0x02, rBa.length)
ebd8d4e8
IC
11090 sequence = sequence.concat(rBa)
11091
ab78acc6
IC
11092 // INTEGER
11093 sequence.push(0x02, sBa.length)
ebd8d4e8
IC
11094 sequence = sequence.concat(sBa)
11095
ab78acc6
IC
11096 // SEQUENCE
11097 sequence.unshift(0x30, sequence.length)
ebd8d4e8
IC
11098
11099 return new Buffer(sequence)
11100}
11101
ab78acc6
IC
11102ECSignature.prototype.toScriptSignature = function (hashType) {
11103 var hashTypeMod = hashType & ~0x80
11104 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11105
ebd8d4e8
IC
11106 var hashTypeBuffer = new Buffer(1)
11107 hashTypeBuffer.writeUInt8(hashType, 0)
11108
11109 return Buffer.concat([this.toDER(), hashTypeBuffer])
11110}
11111
11112module.exports = ECSignature
11113
ab78acc6
IC
11114}).call(this,require("buffer").Buffer)
11115},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
ebd8d4e8 11116(function (Buffer){
ab78acc6
IC
11117var assert = require('assert')
11118var base58check = require('bs58check')
11119var bcrypto = require('./crypto')
11120var createHmac = require('create-hmac')
11121var typeForce = require('typeforce')
11122var networks = require('./networks')
11123
11124var BigInteger = require('bigi')
11125var ECKey = require('./eckey')
11126var ECPubKey = require('./ecpubkey')
11127
11128var ecurve = require('ecurve')
ebd8d4e8
IC
11129var curve = ecurve.getCurveByName('secp256k1')
11130
ab78acc6 11131function findBIP32NetworkByVersion (version) {
ebd8d4e8
IC
11132 for (var name in networks) {
11133 var network = networks[name]
11134
ab78acc6
IC
11135 if (version === network.bip32.private || version === network.bip32.public) {
11136 return network
ebd8d4e8
IC
11137 }
11138 }
11139
ab78acc6 11140 assert(false, 'Could not find network for ' + version.toString(16))
ebd8d4e8
IC
11141}
11142
ab78acc6 11143function HDNode (K, chainCode, network) {
ebd8d4e8
IC
11144 network = network || networks.bitcoin
11145
ab78acc6
IC
11146 typeForce('Buffer', chainCode)
11147
11148 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
ebd8d4e8
IC
11149 assert(network.bip32, 'Unknown BIP32 constants for network')
11150
11151 this.chainCode = chainCode
11152 this.depth = 0
11153 this.index = 0
ab78acc6 11154 this.parentFingerprint = 0x00000000
ebd8d4e8
IC
11155 this.network = network
11156
11157 if (K instanceof BigInteger) {
11158 this.privKey = new ECKey(K, true)
11159 this.pubKey = this.privKey.pub
ab78acc6
IC
11160 } else if (K instanceof ECKey) {
11161 assert(K.pub.compressed, 'ECKey must be compressed')
11162 this.privKey = K
11163 this.pubKey = K.pub
11164 } else if (K instanceof ECPubKey) {
11165 assert(K.compressed, 'ECPubKey must be compressed')
11166 this.pubKey = K
ebd8d4e8
IC
11167 } else {
11168 this.pubKey = new ECPubKey(K, true)
11169 }
11170}
11171
11172HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11173HDNode.HIGHEST_BIT = 0x80000000
11174HDNode.LENGTH = 78
11175
ab78acc6
IC
11176HDNode.fromSeedBuffer = function (seed, network) {
11177 typeForce('Buffer', seed)
11178
11179 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11180 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11181
11182 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
ebd8d4e8
IC
11183 var IL = I.slice(0, 32)
11184 var IR = I.slice(32)
11185
11186 // In case IL is 0 or >= n, the master key is invalid
11187 // This is handled by `new ECKey` in the HDNode constructor
11188 var pIL = BigInteger.fromBuffer(IL)
11189
11190 return new HDNode(pIL, IR, network)
11191}
11192
ab78acc6 11193HDNode.fromSeedHex = function (hex, network) {
ebd8d4e8
IC
11194 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11195}
11196
ab78acc6
IC
11197HDNode.fromBase58 = function (string, network) {
11198 return HDNode.fromBuffer(base58check.decode(string), network, true)
ebd8d4e8
IC
11199}
11200
ab78acc6
IC
11201// FIXME: remove in 2.x.y
11202HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11203 if (!__ignoreDeprecation) {
11204 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11205 }
11206
ebd8d4e8
IC
11207 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11208
11209 // 4 byte: version bytes
11210 var version = buffer.readUInt32BE(0)
ab78acc6
IC
11211
11212 if (network) {
11213 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11214
11215 // auto-detect
11216 } else {
11217 network = findBIP32NetworkByVersion(version)
11218 }
ebd8d4e8
IC
11219
11220 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11221 var depth = buffer.readUInt8(4)
11222
11223 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11224 var parentFingerprint = buffer.readUInt32BE(5)
11225 if (depth === 0) {
11226 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11227 }
11228
11229 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11230 // This is encoded in MSB order. (0x00000000 if master key)
11231 var index = buffer.readUInt32BE(9)
11232 assert(depth > 0 || index === 0, 'Invalid index')
11233
11234 // 32 bytes: the chain code
11235 var chainCode = buffer.slice(13, 45)
ab78acc6 11236 var data, hd
ebd8d4e8
IC
11237
11238 // 33 bytes: private key data (0x00 + k)
ab78acc6 11239 if (version === network.bip32.private) {
ebd8d4e8 11240 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
ab78acc6 11241 data = buffer.slice(46, 78)
ebd8d4e8 11242 var d = BigInteger.fromBuffer(data)
ab78acc6 11243 hd = new HDNode(d, chainCode, network)
ebd8d4e8
IC
11244
11245 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11246 } else {
ab78acc6 11247 data = buffer.slice(45, 78)
ebd8d4e8
IC
11248 var Q = ecurve.Point.decodeFrom(curve, data)
11249 assert.equal(Q.compressed, true, 'Invalid public key')
11250
11251 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11252 // If not, the extended public key is invalid.
11253 curve.validate(Q)
11254
ab78acc6 11255 hd = new HDNode(Q, chainCode, network)
ebd8d4e8
IC
11256 }
11257
11258 hd.depth = depth
11259 hd.index = index
11260 hd.parentFingerprint = parentFingerprint
11261
11262 return hd
11263}
11264
ab78acc6
IC
11265// FIXME: remove in 2.x.y
11266HDNode.fromHex = function (hex, network) {
11267 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
ebd8d4e8
IC
11268}
11269
ab78acc6
IC
11270HDNode.prototype.getIdentifier = function () {
11271 return bcrypto.hash160(this.pubKey.toBuffer())
ebd8d4e8
IC
11272}
11273
ab78acc6 11274HDNode.prototype.getFingerprint = function () {
ebd8d4e8
IC
11275 return this.getIdentifier().slice(0, 4)
11276}
11277
ab78acc6 11278HDNode.prototype.getAddress = function () {
ebd8d4e8
IC
11279 return this.pubKey.getAddress(this.network)
11280}
11281
ab78acc6
IC
11282HDNode.prototype.neutered = function () {
11283 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11284 neutered.depth = this.depth
11285 neutered.index = this.index
11286 neutered.parentFingerprint = this.parentFingerprint
11287
11288 return neutered
11289}
11290
11291HDNode.prototype.toBase58 = function (isPrivate) {
11292 return base58check.encode(this.toBuffer(isPrivate, true))
ebd8d4e8
IC
11293}
11294
ab78acc6
IC
11295// FIXME: remove in 2.x.y
11296HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11297 if (isPrivate === undefined) {
11298 isPrivate = !!this.privKey
11299
11300 // FIXME: remove in 2.x.y
11301 } else {
11302 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11303 }
11304
11305 if (!__ignoreDeprecation) {
11306 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11307 }
ebd8d4e8
IC
11308
11309 // Version
11310 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11311 var buffer = new Buffer(HDNode.LENGTH)
11312
11313 // 4 bytes: version bytes
11314 buffer.writeUInt32BE(version, 0)
11315
11316 // Depth
11317 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11318 buffer.writeUInt8(this.depth, 4)
11319
11320 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
ab78acc6 11321 buffer.writeUInt32BE(this.parentFingerprint, 5)
ebd8d4e8
IC
11322
11323 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11324 // This is encoded in Big endian. (0x00000000 if master key)
11325 buffer.writeUInt32BE(this.index, 9)
11326
11327 // 32 bytes: the chain code
11328 this.chainCode.copy(buffer, 13)
11329
11330 // 33 bytes: the public key or private key data
11331 if (isPrivate) {
ab78acc6 11332 // FIXME: remove in 2.x.y
ebd8d4e8
IC
11333 assert(this.privKey, 'Missing private key')
11334
11335 // 0x00 + k for private keys
11336 buffer.writeUInt8(0, 45)
11337 this.privKey.d.toBuffer(32).copy(buffer, 46)
11338 } else {
ebd8d4e8
IC
11339 // X9.62 encoding for public keys
11340 this.pubKey.toBuffer().copy(buffer, 45)
11341 }
11342
11343 return buffer
11344}
11345
ab78acc6
IC
11346// FIXME: remove in 2.x.y
11347HDNode.prototype.toHex = function (isPrivate) {
ebd8d4e8
IC
11348 return this.toBuffer(isPrivate).toString('hex')
11349}
11350
11351// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
ab78acc6 11352HDNode.prototype.derive = function (index) {
ebd8d4e8
IC
11353 var isHardened = index >= HDNode.HIGHEST_BIT
11354 var indexBuffer = new Buffer(4)
11355 indexBuffer.writeUInt32BE(index, 0)
11356
11357 var data
11358
11359 // Hardened child
11360 if (isHardened) {
11361 assert(this.privKey, 'Could not derive hardened child key')
11362
11363 // data = 0x00 || ser256(kpar) || ser32(index)
11364 data = Buffer.concat([
11365 this.privKey.d.toBuffer(33),
11366 indexBuffer
11367 ])
11368
11369 // Normal child
11370 } else {
11371 // data = serP(point(kpar)) || ser32(index)
11372 // = serP(Kpar) || ser32(index)
11373 data = Buffer.concat([
11374 this.pubKey.toBuffer(),
11375 indexBuffer
11376 ])
11377 }
11378
ab78acc6 11379 var I = createHmac('sha512', this.chainCode).update(data).digest()
ebd8d4e8
IC
11380 var IL = I.slice(0, 32)
11381 var IR = I.slice(32)
11382
11383 var pIL = BigInteger.fromBuffer(IL)
11384
11385 // In case parse256(IL) >= n, proceed with the next value for i
11386 if (pIL.compareTo(curve.n) >= 0) {
11387 return this.derive(index + 1)
11388 }
11389
11390 // Private parent key -> private child key
11391 var hd
11392 if (this.privKey) {
11393 // ki = parse256(IL) + kpar (mod n)
11394 var ki = pIL.add(this.privKey.d).mod(curve.n)
11395
11396 // In case ki == 0, proceed with the next value for i
11397 if (ki.signum() === 0) {
11398 return this.derive(index + 1)
11399 }
11400
11401 hd = new HDNode(ki, IR, this.network)
11402
11403 // Public parent key -> public child key
11404 } else {
11405 // Ki = point(parse256(IL)) + Kpar
11406 // = G*IL + Kpar
11407 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11408
11409 // In case Ki is the point at infinity, proceed with the next value for i
11410 if (curve.isInfinity(Ki)) {
11411 return this.derive(index + 1)
11412 }
11413
11414 hd = new HDNode(Ki, IR, this.network)
11415 }
11416
11417 hd.depth = this.depth + 1
11418 hd.index = index
11419 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11420
11421 return hd
11422}
11423
ab78acc6 11424HDNode.prototype.deriveHardened = function (index) {
ebd8d4e8
IC
11425 // Only derives hardened private keys by default
11426 return this.derive(index + HDNode.HIGHEST_BIT)
11427}
11428
11429HDNode.prototype.toString = HDNode.prototype.toBase58
11430
11431module.exports = HDNode
11432
ab78acc6
IC
11433}).call(this,require("buffer").Buffer)
11434},{"./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){
ebd8d4e8 11435module.exports = {
ab78acc6
IC
11436 Address: require('./address'),
11437 base58check: require('./base58check'),
11438 Block: require('./block'),
11439 bufferutils: require('./bufferutils'),
11440 crypto: require('./crypto'),
11441 ecdsa: require('./ecdsa'),
11442 ECKey: require('./eckey'),
11443 ECPubKey: require('./ecpubkey'),
11444 ECSignature: require('./ecsignature'),
11445 Message: require('./message'),
11446 opcodes: require('./opcodes'),
11447 HDNode: require('./hdnode'),
11448 Script: require('./script'),
11449 scripts: require('./scripts'),
11450 Transaction: require('./transaction'),
11451 TransactionBuilder: require('./transaction_builder'),
11452 networks: require('./networks'),
11453 Wallet: require('./wallet')
11454}
11455
11456},{"./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){
ebd8d4e8 11457(function (Buffer){
ab78acc6
IC
11458var bufferutils = require('./bufferutils')
11459var crypto = require('./crypto')
11460var ecdsa = require('./ecdsa')
11461var networks = require('./networks')
11462
11463var BigInteger = require('bigi')
11464var ECPubKey = require('./ecpubkey')
11465var ECSignature = require('./ecsignature')
11466
11467var ecurve = require('ecurve')
ebd8d4e8
IC
11468var ecparams = ecurve.getCurveByName('secp256k1')
11469
ab78acc6 11470function magicHash (message, network) {
ebd8d4e8
IC
11471 var magicPrefix = new Buffer(network.magicPrefix)
11472 var messageBuffer = new Buffer(message)
ab78acc6 11473 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
ebd8d4e8
IC
11474
11475 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11476 return crypto.hash256(buffer)
11477}
11478
ab78acc6 11479function sign (privKey, message, network) {
ebd8d4e8
IC
11480 network = network || networks.bitcoin
11481
11482 var hash = magicHash(message, network)
11483 var signature = privKey.sign(hash)
11484 var e = BigInteger.fromBuffer(hash)
11485 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11486
11487 return signature.toCompact(i, privKey.pub.compressed)
11488}
11489
11490// TODO: network could be implied from address
ab78acc6
IC
11491function verify (address, signature, message, network) {
11492 if (!Buffer.isBuffer(signature)) {
11493 signature = new Buffer(signature, 'base64')
ebd8d4e8 11494 }
ab78acc6 11495
ebd8d4e8
IC
11496 network = network || networks.bitcoin
11497
11498 var hash = magicHash(message, network)
ab78acc6 11499 var parsed = ECSignature.parseCompact(signature)
ebd8d4e8
IC
11500 var e = BigInteger.fromBuffer(hash)
11501 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11502
11503 var pubKey = new ECPubKey(Q, parsed.compressed)
ab78acc6 11504 return pubKey.getAddress(network).toString() === address.toString()
ebd8d4e8
IC
11505}
11506
11507module.exports = {
11508 magicHash: magicHash,
11509 sign: sign,
11510 verify: verify
11511}
11512
ab78acc6
IC
11513}).call(this,require("buffer").Buffer)
11514},{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
ebd8d4e8
IC
11515// https://en.bitcoin.it/wiki/List_of_address_prefixes
11516// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11517
11518var networks = {
11519 bitcoin: {
11520 magicPrefix: '\x18Bitcoin Signed Message:\n',
11521 bip32: {
11522 public: 0x0488b21e,
11523 private: 0x0488ade4
11524 },
11525 pubKeyHash: 0x00,
11526 scriptHash: 0x05,
11527 wif: 0x80,
11528 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11529 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11530 estimateFee: estimateFee('bitcoin')
a9385c1b 11531 },
ab78acc6
IC
11532 testnet: {
11533 magicPrefix: '\x18Bitcoin Signed Message:\n',
a9385c1b 11534 bip32: {
ab78acc6
IC
11535 public: 0x043587cf,
11536 private: 0x04358394
a9385c1b 11537 },
ab78acc6
IC
11538 pubKeyHash: 0x6f,
11539 scriptHash: 0xc4,
11540 wif: 0xef,
11541 dustThreshold: 546,
cb325c58 11542 feePerKb: 10000,
ab78acc6 11543 estimateFee: estimateFee('testnet')
a9385c1b 11544 },
ab78acc6
IC
11545 litecoin: {
11546 magicPrefix: '\x19Litecoin Signed Message:\n',
a9385c1b 11547 bip32: {
ab78acc6
IC
11548 public: 0x019da462,
11549 private: 0x019d9cfe
a9385c1b 11550 },
ab78acc6
IC
11551 pubKeyHash: 0x30,
11552 scriptHash: 0x05,
11553 wif: 0xb0,
11554 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11555 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11556 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11557 estimateFee: estimateFee('litecoin')
ebd8d4e8
IC
11558 },
11559 dogecoin: {
11560 magicPrefix: '\x19Dogecoin Signed Message:\n',
11561 bip32: {
11562 public: 0x02facafd,
11563 private: 0x02fac398
11564 },
11565 pubKeyHash: 0x1e,
11566 scriptHash: 0x16,
11567 wif: 0x9e,
11568 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11569 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11570 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11571 estimateFee: estimateFee('dogecoin')
11572 },
ab78acc6
IC
11573 viacoin: {
11574 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8 11575 bip32: {
ab78acc6
IC
11576 public: 0x0488b21e,
11577 private: 0x0488ade4
ebd8d4e8 11578 },
ab78acc6
IC
11579 pubKeyHash: 0x47,
11580 scriptHash: 0x21,
11581 wif: 0xc7,
11582 dustThreshold: 560,
11583 dustSoftThreshold: 100000,
11584 feePerKb: 100000, //
11585 estimateFee: estimateFee('viacoin')
ebd8d4e8 11586 },
ab78acc6
IC
11587 viacointestnet: {
11588 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8
IC
11589 bip32: {
11590 public: 0x043587cf,
11591 private: 0x04358394
11592 },
ab78acc6 11593 pubKeyHash: 0x7f,
ebd8d4e8 11594 scriptHash: 0xc4,
ab78acc6
IC
11595 wif: 0xff,
11596 dustThreshold: 560,
11597 dustSoftThreshold: 100000,
11598 feePerKb: 100000,
11599 estimateFee: estimateFee('viacointestnet')
11600 },
11601 gamerscoin: {
11602 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11603 bip32: {
11604 public: 0x019da462,
11605 private: 0x019d9cfe
11606 },
11607 pubKeyHash: 0x26,
11608 scriptHash: 0x05,
11609 wif: 0xA6,
11610 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11611 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11612 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11613 estimateFee: estimateFee('gamerscoin')
11614 },
11615 jumbucks: {
11616 magicPrefix: '\x19Jumbucks Signed Message:\n',
11617 bip32: {
11618 public: 0x037a689a,
11619 private: 0x037a6460
11620 },
11621 pubKeyHash: 0x2b,
11622 scriptHash: 0x05,
11623 wif: 0xab,
11624 dustThreshold: 0,
11625 dustSoftThreshold: 10000,
ebd8d4e8 11626 feePerKb: 10000,
ab78acc6
IC
11627 estimateFee: estimateFee('jumbucks')
11628 },
11629 zetacoin: {
11630 magicPrefix: '\x18Zetacoin Signed Message:\n',
11631 bip32: {
11632 public: 0x0488b21e,
11633 private: 0x0488ade4
11634 },
11635 pubKeyHash: 0x50,
11636 scriptHash: 0x09,
11637 wif: 0xe0,
11638 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11639 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11640 estimateFee: estimateFee('zetacoin')
ebd8d4e8
IC
11641 }
11642}
11643
ab78acc6
IC
11644function estimateFee (type) {
11645 return function (tx) {
ebd8d4e8
IC
11646 var network = networks[type]
11647 var baseFee = network.feePerKb
11648 var byteSize = tx.toBuffer().length
11649
11650 var fee = baseFee * Math.ceil(byteSize / 1000)
ab78acc6 11651 if (network.dustSoftThreshold === undefined) return fee
ebd8d4e8 11652
ab78acc6 11653 tx.outs.forEach(function (e) {
ebd8d4e8
IC
11654 if (e.value < network.dustSoftThreshold) {
11655 fee += baseFee
11656 }
11657 })
11658
11659 return fee
11660 }
11661}
11662
11663module.exports = networks
11664
ab78acc6 11665},{}],67:[function(require,module,exports){
ebd8d4e8
IC
11666module.exports = {
11667 // push value
ab78acc6
IC
11668 OP_FALSE: 0,
11669 OP_0: 0,
11670 OP_PUSHDATA1: 76,
11671 OP_PUSHDATA2: 77,
11672 OP_PUSHDATA4: 78,
11673 OP_1NEGATE: 79,
11674 OP_RESERVED: 80,
11675 OP_1: 81,
11676 OP_TRUE: 81,
11677 OP_2: 82,
11678 OP_3: 83,
11679 OP_4: 84,
11680 OP_5: 85,
11681 OP_6: 86,
11682 OP_7: 87,
11683 OP_8: 88,
11684 OP_9: 89,
11685 OP_10: 90,
11686 OP_11: 91,
11687 OP_12: 92,
11688 OP_13: 93,
11689 OP_14: 94,
11690 OP_15: 95,
11691 OP_16: 96,
ebd8d4e8
IC
11692
11693 // control
ab78acc6
IC
11694 OP_NOP: 97,
11695 OP_VER: 98,
11696 OP_IF: 99,
11697 OP_NOTIF: 100,
11698 OP_VERIF: 101,
11699 OP_VERNOTIF: 102,
11700 OP_ELSE: 103,
11701 OP_ENDIF: 104,
11702 OP_VERIFY: 105,
11703 OP_RETURN: 106,
ebd8d4e8
IC
11704
11705 // stack ops
ab78acc6
IC
11706 OP_TOALTSTACK: 107,
11707 OP_FROMALTSTACK: 108,
11708 OP_2DROP: 109,
11709 OP_2DUP: 110,
11710 OP_3DUP: 111,
11711 OP_2OVER: 112,
11712 OP_2ROT: 113,
11713 OP_2SWAP: 114,
11714 OP_IFDUP: 115,
11715 OP_DEPTH: 116,
11716 OP_DROP: 117,
11717 OP_DUP: 118,
11718 OP_NIP: 119,
11719 OP_OVER: 120,
11720 OP_PICK: 121,
11721 OP_ROLL: 122,
11722 OP_ROT: 123,
11723 OP_SWAP: 124,
11724 OP_TUCK: 125,
ebd8d4e8
IC
11725
11726 // splice ops
ab78acc6
IC
11727 OP_CAT: 126,
11728 OP_SUBSTR: 127,
11729 OP_LEFT: 128,
11730 OP_RIGHT: 129,
11731 OP_SIZE: 130,
ebd8d4e8
IC
11732
11733 // bit logic
ab78acc6
IC
11734 OP_INVERT: 131,
11735 OP_AND: 132,
11736 OP_OR: 133,
11737 OP_XOR: 134,
11738 OP_EQUAL: 135,
11739 OP_EQUALVERIFY: 136,
11740 OP_RESERVED1: 137,
11741 OP_RESERVED2: 138,
ebd8d4e8
IC
11742
11743 // numeric
ab78acc6
IC
11744 OP_1ADD: 139,
11745 OP_1SUB: 140,
11746 OP_2MUL: 141,
11747 OP_2DIV: 142,
11748 OP_NEGATE: 143,
11749 OP_ABS: 144,
11750 OP_NOT: 145,
11751 OP_0NOTEQUAL: 146,
11752
11753 OP_ADD: 147,
11754 OP_SUB: 148,
11755 OP_MUL: 149,
11756 OP_DIV: 150,
11757 OP_MOD: 151,
11758 OP_LSHIFT: 152,
11759 OP_RSHIFT: 153,
11760
11761 OP_BOOLAND: 154,
11762 OP_BOOLOR: 155,
11763 OP_NUMEQUAL: 156,
11764 OP_NUMEQUALVERIFY: 157,
11765 OP_NUMNOTEQUAL: 158,
11766 OP_LESSTHAN: 159,
11767 OP_GREATERTHAN: 160,
11768 OP_LESSTHANOREQUAL: 161,
11769 OP_GREATERTHANOREQUAL: 162,
11770 OP_MIN: 163,
11771 OP_MAX: 164,
11772
11773 OP_WITHIN: 165,
ebd8d4e8
IC
11774
11775 // crypto
ab78acc6
IC
11776 OP_RIPEMD160: 166,
11777 OP_SHA1: 167,
11778 OP_SHA256: 168,
11779 OP_HASH160: 169,
11780 OP_HASH256: 170,
11781 OP_CODESEPARATOR: 171,
11782 OP_CHECKSIG: 172,
11783 OP_CHECKSIGVERIFY: 173,
11784 OP_CHECKMULTISIG: 174,
11785 OP_CHECKMULTISIGVERIFY: 175,
ebd8d4e8
IC
11786
11787 // expansion
ab78acc6
IC
11788 OP_NOP1: 176,
11789 OP_NOP2: 177,
11790 OP_NOP3: 178,
11791 OP_NOP4: 179,
11792 OP_NOP5: 180,
11793 OP_NOP6: 181,
11794 OP_NOP7: 182,
11795 OP_NOP8: 183,
11796 OP_NOP9: 184,
11797 OP_NOP10: 185,
ebd8d4e8
IC
11798
11799 // template matching params
ab78acc6
IC
11800 OP_PUBKEYHASH: 253,
11801 OP_PUBKEY: 254,
11802 OP_INVALIDOPCODE: 255
ebd8d4e8
IC
11803}
11804
ab78acc6 11805},{}],68:[function(require,module,exports){
ebd8d4e8 11806(function (Buffer){
ab78acc6
IC
11807var assert = require('assert')
11808var bufferutils = require('./bufferutils')
11809var crypto = require('./crypto')
11810var typeForce = require('typeforce')
11811var opcodes = require('./opcodes')
ebd8d4e8 11812
ab78acc6
IC
11813function Script (buffer, chunks) {
11814 typeForce('Buffer', buffer)
11815 typeForce('Array', chunks)
ebd8d4e8
IC
11816
11817 this.buffer = buffer
11818 this.chunks = chunks
11819}
11820
ab78acc6 11821Script.fromASM = function (asm) {
ebd8d4e8 11822 var strChunks = asm.split(' ')
ab78acc6
IC
11823 var chunks = strChunks.map(function (strChunk) {
11824 // opcode
ebd8d4e8
IC
11825 if (strChunk in opcodes) {
11826 return opcodes[strChunk]
11827
ab78acc6 11828 // data chunk
ebd8d4e8
IC
11829 } else {
11830 return new Buffer(strChunk, 'hex')
11831 }
11832 })
11833
11834 return Script.fromChunks(chunks)
11835}
11836
ab78acc6 11837Script.fromBuffer = function (buffer) {
ebd8d4e8 11838 var chunks = []
ebd8d4e8
IC
11839 var i = 0
11840
11841 while (i < buffer.length) {
11842 var opcode = buffer.readUInt8(i)
11843
ab78acc6 11844 // data chunk
ebd8d4e8
IC
11845 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11846 var d = bufferutils.readPushDataInt(buffer, i)
ab78acc6
IC
11847
11848 // did reading a pushDataInt fail? return non-chunked script
11849 if (d === null) return new Script(buffer, [])
ebd8d4e8
IC
11850 i += d.size
11851
ab78acc6
IC
11852 // attempt to read too much data?
11853 if (i + d.number > buffer.length) return new Script(buffer, [])
11854
ebd8d4e8
IC
11855 var data = buffer.slice(i, i + d.number)
11856 i += d.number
11857
11858 chunks.push(data)
11859
ab78acc6 11860 // opcode
ebd8d4e8
IC
11861 } else {
11862 chunks.push(opcode)
11863
11864 i += 1
11865 }
11866 }
11867
11868 return new Script(buffer, chunks)
11869}
11870
ab78acc6
IC
11871Script.fromChunks = function (chunks) {
11872 typeForce('Array', chunks)
ebd8d4e8 11873
ab78acc6
IC
11874 var bufferSize = chunks.reduce(function (accum, chunk) {
11875 // data chunk
ebd8d4e8
IC
11876 if (Buffer.isBuffer(chunk)) {
11877 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11878 }
11879
ab78acc6 11880 // opcode
ebd8d4e8
IC
11881 return accum + 1
11882 }, 0.0)
11883
11884 var buffer = new Buffer(bufferSize)
11885 var offset = 0
11886
ab78acc6
IC
11887 chunks.forEach(function (chunk) {
11888 // data chunk
ebd8d4e8
IC
11889 if (Buffer.isBuffer(chunk)) {
11890 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11891
11892 chunk.copy(buffer, offset)
11893 offset += chunk.length
11894
ab78acc6 11895 // opcode
ebd8d4e8
IC
11896 } else {
11897 buffer.writeUInt8(chunk, offset)
11898 offset += 1
11899 }
11900 })
11901
11902 assert.equal(offset, buffer.length, 'Could not decode chunks')
11903 return new Script(buffer, chunks)
11904}
11905
ab78acc6 11906Script.fromHex = function (hex) {
ebd8d4e8
IC
11907 return Script.fromBuffer(new Buffer(hex, 'hex'))
11908}
11909
ebd8d4e8
IC
11910Script.EMPTY = Script.fromChunks([])
11911
ab78acc6 11912Script.prototype.getHash = function () {
ebd8d4e8
IC
11913 return crypto.hash160(this.buffer)
11914}
11915
11916// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
ab78acc6
IC
11917Script.prototype.without = function (needle) {
11918 return Script.fromChunks(this.chunks.filter(function (op) {
ebd8d4e8
IC
11919 return op !== needle
11920 }))
11921}
11922
ebd8d4e8
IC
11923var reverseOps = []
11924for (var op in opcodes) {
11925 var code = opcodes[op]
11926 reverseOps[code] = op
11927}
11928
ab78acc6
IC
11929Script.prototype.toASM = function () {
11930 return this.chunks.map(function (chunk) {
11931 // data chunk
ebd8d4e8
IC
11932 if (Buffer.isBuffer(chunk)) {
11933 return chunk.toString('hex')
11934
ab78acc6 11935 // opcode
ebd8d4e8
IC
11936 } else {
11937 return reverseOps[chunk]
11938 }
11939 }).join(' ')
11940}
11941
ab78acc6 11942Script.prototype.toBuffer = function () {
ebd8d4e8
IC
11943 return this.buffer
11944}
11945
ab78acc6 11946Script.prototype.toHex = function () {
ebd8d4e8
IC
11947 return this.toBuffer().toString('hex')
11948}
11949
11950module.exports = Script
11951
ab78acc6
IC
11952}).call(this,require("buffer").Buffer)
11953},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
ebd8d4e8 11954(function (Buffer){
ab78acc6
IC
11955var assert = require('assert')
11956var ops = require('./opcodes')
11957var typeForce = require('typeforce')
ebd8d4e8 11958
ab78acc6 11959var ecurve = require('ecurve')
ebd8d4e8
IC
11960var curve = ecurve.getCurveByName('secp256k1')
11961
ab78acc6
IC
11962var ECSignature = require('./ecsignature')
11963var Script = require('./script')
ebd8d4e8 11964
ab78acc6 11965function isCanonicalPubKey (buffer) {
ebd8d4e8
IC
11966 if (!Buffer.isBuffer(buffer)) return false
11967
11968 try {
ebd8d4e8
IC
11969 ecurve.Point.decodeFrom(curve, buffer)
11970 } catch (e) {
ab78acc6
IC
11971 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11972 throw e
ebd8d4e8
IC
11973
11974 return false
11975 }
11976
11977 return true
11978}
11979
ab78acc6 11980function isCanonicalSignature (buffer) {
ebd8d4e8
IC
11981 if (!Buffer.isBuffer(buffer)) return false
11982
11983 try {
11984 ECSignature.parseScriptSignature(buffer)
ab78acc6
IC
11985 } catch (e) {
11986 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/))) {
11987 throw e
11988 }
ebd8d4e8
IC
11989
11990 return false
11991 }
11992
11993 return true
11994}
11995
ab78acc6
IC
11996function isPubKeyHashInput (script) {
11997 return script.chunks.length === 2 &&
11998 isCanonicalSignature(script.chunks[0]) &&
11999 isCanonicalPubKey(script.chunks[1])
ebd8d4e8
IC
12000}
12001
ab78acc6
IC
12002function isPubKeyHashOutput (script) {
12003 return script.chunks.length === 5 &&
12004 script.chunks[0] === ops.OP_DUP &&
12005 script.chunks[1] === ops.OP_HASH160 &&
12006 Buffer.isBuffer(script.chunks[2]) &&
12007 script.chunks[2].length === 20 &&
12008 script.chunks[3] === ops.OP_EQUALVERIFY &&
12009 script.chunks[4] === ops.OP_CHECKSIG
ebd8d4e8
IC
12010}
12011
ab78acc6
IC
12012function isPubKeyInput (script) {
12013 return script.chunks.length === 1 &&
12014 isCanonicalSignature(script.chunks[0])
ebd8d4e8
IC
12015}
12016
ab78acc6
IC
12017function isPubKeyOutput (script) {
12018 return script.chunks.length === 2 &&
12019 isCanonicalPubKey(script.chunks[0]) &&
12020 script.chunks[1] === ops.OP_CHECKSIG
ebd8d4e8
IC
12021}
12022
ab78acc6
IC
12023function isScriptHashInput (script, allowIncomplete) {
12024 if (script.chunks.length < 2) return false
ebd8d4e8 12025
ab78acc6 12026 var lastChunk = script.chunks[script.chunks.length - 1]
ebd8d4e8
IC
12027 if (!Buffer.isBuffer(lastChunk)) return false
12028
ab78acc6
IC
12029 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
12030 var redeemScript = Script.fromBuffer(lastChunk)
ebd8d4e8 12031
ab78acc6
IC
12032 // is redeemScript a valid script?
12033 if (redeemScript.chunks.length === 0) return false
12034
12035 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
ebd8d4e8
IC
12036}
12037
ab78acc6
IC
12038function isScriptHashOutput (script) {
12039 return script.chunks.length === 3 &&
12040 script.chunks[0] === ops.OP_HASH160 &&
12041 Buffer.isBuffer(script.chunks[1]) &&
12042 script.chunks[1].length === 20 &&
12043 script.chunks[2] === ops.OP_EQUAL
ebd8d4e8
IC
12044}
12045
ab78acc6
IC
12046// allowIncomplete is to account for combining signatures
12047// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
12048function isMultisigInput (script, allowIncomplete) {
12049 if (script.chunks.length < 2) return false
12050 if (script.chunks[0] !== ops.OP_0) return false
12051
12052 if (allowIncomplete) {
12053 return script.chunks.slice(1).every(function (chunk) {
12054 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
12055 })
12056 }
12057
12058 return script.chunks.slice(1).every(isCanonicalSignature)
ebd8d4e8
IC
12059}
12060
ab78acc6
IC
12061function isMultisigOutput (script) {
12062 if (script.chunks.length < 4) return false
12063 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
ebd8d4e8 12064
ab78acc6
IC
12065 var mOp = script.chunks[0]
12066 if (mOp === ops.OP_0) return false
12067 if (mOp < ops.OP_1) return false
12068 if (mOp > ops.OP_16) return false
ebd8d4e8 12069
ab78acc6
IC
12070 var nOp = script.chunks[script.chunks.length - 2]
12071 if (nOp === ops.OP_0) return false
12072 if (nOp < ops.OP_1) return false
12073 if (nOp > ops.OP_16) return false
ebd8d4e8 12074
ab78acc6
IC
12075 var m = mOp - (ops.OP_1 - 1)
12076 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8
IC
12077 if (n < m) return false
12078
ab78acc6 12079 var pubKeys = script.chunks.slice(1, -2)
ebd8d4e8
IC
12080 if (n < pubKeys.length) return false
12081
12082 return pubKeys.every(isCanonicalPubKey)
12083}
12084
ab78acc6
IC
12085function isNullDataOutput (script) {
12086 return script.chunks[0] === ops.OP_RETURN
12087}
12088
12089function classifyOutput (script) {
12090 typeForce('Script', script)
12091
12092 if (isPubKeyHashOutput(script)) {
12093 return 'pubkeyhash'
12094 } else if (isScriptHashOutput(script)) {
12095 return 'scripthash'
12096 } else if (isMultisigOutput(script)) {
12097 return 'multisig'
12098 } else if (isPubKeyOutput(script)) {
12099 return 'pubkey'
12100 } else if (isNullDataOutput(script)) {
12101 return 'nulldata'
12102 }
12103
12104 return 'nonstandard'
12105}
12106
12107function classifyInput (script, allowIncomplete) {
12108 typeForce('Script', script)
12109
12110 if (isPubKeyHashInput(script)) {
12111 return 'pubkeyhash'
12112 } else if (isMultisigInput(script, allowIncomplete)) {
12113 return 'multisig'
12114 } else if (isScriptHashInput(script, allowIncomplete)) {
12115 return 'scripthash'
12116 } else if (isPubKeyInput(script)) {
12117 return 'pubkey'
12118 }
12119
12120 return 'nonstandard'
ebd8d4e8
IC
12121}
12122
12123// Standard Script Templates
12124// {pubKey} OP_CHECKSIG
ab78acc6 12125function pubKeyOutput (pubKey) {
ebd8d4e8
IC
12126 return Script.fromChunks([
12127 pubKey.toBuffer(),
ab78acc6 12128 ops.OP_CHECKSIG
ebd8d4e8
IC
12129 ])
12130}
12131
12132// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
ab78acc6
IC
12133function pubKeyHashOutput (hash) {
12134 typeForce('Buffer', hash)
ebd8d4e8
IC
12135
12136 return Script.fromChunks([
ab78acc6
IC
12137 ops.OP_DUP,
12138 ops.OP_HASH160,
ebd8d4e8 12139 hash,
ab78acc6
IC
12140 ops.OP_EQUALVERIFY,
12141 ops.OP_CHECKSIG
ebd8d4e8
IC
12142 ])
12143}
12144
12145// OP_HASH160 {scriptHash} OP_EQUAL
ab78acc6
IC
12146function scriptHashOutput (hash) {
12147 typeForce('Buffer', hash)
ebd8d4e8
IC
12148
12149 return Script.fromChunks([
ab78acc6 12150 ops.OP_HASH160,
ebd8d4e8 12151 hash,
ab78acc6 12152 ops.OP_EQUAL
ebd8d4e8
IC
12153 ])
12154}
12155
12156// m [pubKeys ...] n OP_CHECKMULTISIG
ab78acc6
IC
12157function multisigOutput (m, pubKeys) {
12158 typeForce(['ECPubKey'], pubKeys)
12159
ebd8d4e8
IC
12160 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12161
ab78acc6 12162 var pubKeyBuffers = pubKeys.map(function (pubKey) {
ebd8d4e8
IC
12163 return pubKey.toBuffer()
12164 })
12165 var n = pubKeys.length
12166
12167 return Script.fromChunks([].concat(
ab78acc6 12168 (ops.OP_1 - 1) + m,
ebd8d4e8 12169 pubKeyBuffers,
ab78acc6
IC
12170 (ops.OP_1 - 1) + n,
12171 ops.OP_CHECKMULTISIG
ebd8d4e8
IC
12172 ))
12173}
12174
12175// {signature}
ab78acc6
IC
12176function pubKeyInput (signature) {
12177 typeForce('Buffer', signature)
ebd8d4e8
IC
12178
12179 return Script.fromChunks([signature])
12180}
12181
12182// {signature} {pubKey}
ab78acc6
IC
12183function pubKeyHashInput (signature, pubKey) {
12184 typeForce('Buffer', signature)
ebd8d4e8
IC
12185
12186 return Script.fromChunks([signature, pubKey.toBuffer()])
12187}
12188
12189// <scriptSig> {serialized scriptPubKey script}
ab78acc6 12190function scriptHashInput (scriptSig, scriptPubKey) {
ebd8d4e8
IC
12191 return Script.fromChunks([].concat(
12192 scriptSig.chunks,
12193 scriptPubKey.toBuffer()
12194 ))
12195}
12196
12197// OP_0 [signatures ...]
ab78acc6 12198function multisigInput (signatures, scriptPubKey) {
ebd8d4e8 12199 if (scriptPubKey) {
ab78acc6
IC
12200 assert(isMultisigOutput(scriptPubKey))
12201
12202 var mOp = scriptPubKey.chunks[0]
12203 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12204 var m = mOp - (ops.OP_1 - 1)
12205 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8 12206
ab78acc6
IC
12207 assert(signatures.length >= m, 'Not enough signatures provided')
12208 assert(signatures.length <= n, 'Too many signatures provided')
ebd8d4e8
IC
12209 }
12210
ab78acc6
IC
12211 return Script.fromChunks([].concat(ops.OP_0, signatures))
12212}
12213
12214function nullDataOutput (data) {
12215 return Script.fromChunks([ops.OP_RETURN, data])
ebd8d4e8
IC
12216}
12217
12218module.exports = {
ab78acc6
IC
12219 isCanonicalPubKey: isCanonicalPubKey,
12220 isCanonicalSignature: isCanonicalSignature,
12221 isPubKeyHashInput: isPubKeyHashInput,
12222 isPubKeyHashOutput: isPubKeyHashOutput,
12223 isPubKeyInput: isPubKeyInput,
12224 isPubKeyOutput: isPubKeyOutput,
12225 isScriptHashInput: isScriptHashInput,
12226 isScriptHashOutput: isScriptHashOutput,
12227 isMultisigInput: isMultisigInput,
12228 isMultisigOutput: isMultisigOutput,
12229 isNullDataOutput: isNullDataOutput,
ebd8d4e8 12230 classifyOutput: classifyOutput,
ab78acc6
IC
12231 classifyInput: classifyInput,
12232 pubKeyOutput: pubKeyOutput,
ebd8d4e8 12233 pubKeyHashOutput: pubKeyHashOutput,
ab78acc6
IC
12234 scriptHashOutput: scriptHashOutput,
12235 multisigOutput: multisigOutput,
ebd8d4e8 12236 pubKeyInput: pubKeyInput,
ab78acc6 12237 pubKeyHashInput: pubKeyHashInput,
ebd8d4e8 12238 scriptHashInput: scriptHashInput,
ab78acc6
IC
12239 multisigInput: multisigInput,
12240 dataOutput: function (data) {
12241 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12242 return nullDataOutput(data)
12243 },
12244 nullDataOutput: nullDataOutput
ebd8d4e8
IC
12245}
12246
ab78acc6
IC
12247}).call(this,require("buffer").Buffer)
12248},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
ebd8d4e8 12249(function (Buffer){
ab78acc6
IC
12250var assert = require('assert')
12251var bufferutils = require('./bufferutils')
12252var crypto = require('./crypto')
12253var typeForce = require('typeforce')
12254var opcodes = require('./opcodes')
12255var scripts = require('./scripts')
12256
12257var Address = require('./address')
12258var ECSignature = require('./ecsignature')
12259var Script = require('./script')
12260
12261function Transaction () {
12262 this.version = 1
12263 this.locktime = 0
12264 this.ins = []
12265 this.outs = []
12266}
ebd8d4e8
IC
12267
12268Transaction.DEFAULT_SEQUENCE = 0xffffffff
12269Transaction.SIGHASH_ALL = 0x01
12270Transaction.SIGHASH_NONE = 0x02
12271Transaction.SIGHASH_SINGLE = 0x03
12272Transaction.SIGHASH_ANYONECANPAY = 0x80
12273
ab78acc6
IC
12274Transaction.fromBuffer = function (buffer, __disableAssert) {
12275 var offset = 0
12276 function readSlice (n) {
12277 offset += n
12278 return buffer.slice(offset - n, offset)
12279 }
12280
12281 function readUInt32 () {
12282 var i = buffer.readUInt32LE(offset)
12283 offset += 4
12284 return i
12285 }
12286
12287 function readUInt64 () {
12288 var i = bufferutils.readUInt64LE(buffer, offset)
12289 offset += 8
12290 return i
12291 }
12292
12293 function readVarInt () {
12294 var vi = bufferutils.readVarInt(buffer, offset)
12295 offset += vi.size
12296 return vi.number
12297 }
12298
12299 function readScript () {
12300 return Script.fromBuffer(readSlice(readVarInt()))
12301 }
12302
12303 function readGenerationScript () {
12304 return new Script(readSlice(readVarInt()), [])
12305 }
12306
12307 var tx = new Transaction()
12308 tx.version = readUInt32()
12309
12310 var vinLen = readVarInt()
12311 for (var i = 0; i < vinLen; ++i) {
12312 var hash = readSlice(32)
12313
12314 if (Transaction.isCoinbaseHash(hash)) {
12315 tx.ins.push({
12316 hash: hash,
12317 index: readUInt32(),
12318 script: readGenerationScript(),
12319 sequence: readUInt32()
12320 })
12321 } else {
12322 tx.ins.push({
12323 hash: hash,
12324 index: readUInt32(),
12325 script: readScript(),
12326 sequence: readUInt32()
12327 })
12328 }
12329 }
12330
12331 var voutLen = readVarInt()
12332 for (i = 0; i < voutLen; ++i) {
12333 tx.outs.push({
12334 value: readUInt64(),
12335 script: readScript()
12336 })
12337 }
12338
12339 tx.locktime = readUInt32()
12340
12341 if (!__disableAssert) {
12342 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12343 }
12344
12345 return tx
12346}
12347
12348Transaction.fromHex = function (hex) {
12349 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12350}
12351
12352Transaction.isCoinbaseHash = function (buffer) {
12353 return Array.prototype.every.call(buffer, function (x) {
12354 return x === 0
12355 })
ebd8d4e8
IC
12356}
12357
12358/**
ab78acc6 12359 * Create a new txIn.
ebd8d4e8
IC
12360 *
12361 * Can be called with any of:
12362 *
12363 * - A transaction and an index
12364 * - A transaction hash and an index
12365 *
12366 * Note that this method does not sign the created input.
12367 */
ab78acc6
IC
12368Transaction.prototype.addInput = function (hash, index, sequence, script) {
12369 if (sequence === undefined || sequence === null) {
12370 sequence = Transaction.DEFAULT_SEQUENCE
12371 }
ebd8d4e8 12372
ab78acc6 12373 script = script || Script.EMPTY
ebd8d4e8 12374
ab78acc6 12375 if (typeof hash === 'string') {
ebd8d4e8 12376 // TxId hex is big-endian, we need little-endian
ab78acc6
IC
12377 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12378 } else if (hash instanceof Transaction) {
12379 hash = hash.getHash()
ebd8d4e8
IC
12380 }
12381
ab78acc6
IC
12382 typeForce('Buffer', hash)
12383 typeForce('Number', index)
12384 typeForce('Number', sequence)
12385 typeForce('Script', script)
12386
ebd8d4e8 12387 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
ebd8d4e8 12388
ab78acc6 12389 // Add the input and return the input's index
ebd8d4e8
IC
12390 return (this.ins.push({
12391 hash: hash,
12392 index: index,
ab78acc6 12393 script: script,
ebd8d4e8
IC
12394 sequence: sequence
12395 }) - 1)
12396}
12397
12398/**
ab78acc6 12399 * Create a new txOut.
ebd8d4e8
IC
12400 *
12401 * Can be called with:
12402 *
12403 * - A base58 address string and a value
12404 * - An Address object and a value
12405 * - A scriptPubKey Script and a value
12406 */
ab78acc6 12407Transaction.prototype.addOutput = function (scriptPubKey, value) {
ebd8d4e8
IC
12408 // Attempt to get a valid address if it's a base58 address string
12409 if (typeof scriptPubKey === 'string') {
12410 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12411 }
12412
12413 // Attempt to get a valid script if it's an Address object
12414 if (scriptPubKey instanceof Address) {
ab78acc6 12415 scriptPubKey = scriptPubKey.toOutputScript()
ebd8d4e8
IC
12416 }
12417
ab78acc6
IC
12418 typeForce('Script', scriptPubKey)
12419 typeForce('Number', value)
12420
12421 // Add the output and return the output's index
ebd8d4e8
IC
12422 return (this.outs.push({
12423 script: scriptPubKey,
ab78acc6 12424 value: value
ebd8d4e8
IC
12425 }) - 1)
12426}
12427
ab78acc6
IC
12428Transaction.prototype.clone = function () {
12429 var newTx = new Transaction()
12430 newTx.version = this.version
12431 newTx.locktime = this.locktime
12432
12433 newTx.ins = this.ins.map(function (txIn) {
12434 return {
12435 hash: txIn.hash,
12436 index: txIn.index,
12437 script: txIn.script,
12438 sequence: txIn.sequence
12439 }
12440 })
12441
12442 newTx.outs = this.outs.map(function (txOut) {
12443 return {
12444 script: txOut.script,
12445 value: txOut.value
12446 }
12447 })
12448
12449 return newTx
12450}
12451
12452/**
12453 * Hash transaction for signing a specific input.
12454 *
12455 * Bitcoin uses a different hash for each signed transaction input. This
12456 * method copies the transaction, makes the necessary changes based on the
12457 * hashType, serializes and finally hashes the result. This hash can then be
12458 * used to sign the transaction input in question.
12459 */
12460Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12461 // FIXME: remove in 2.x.y
12462 if (arguments[0] instanceof Script) {
12463 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12464
12465 // swap the arguments (must be stored in tmp, arguments is special)
12466 var tmp = arguments[0]
12467 inIndex = arguments[1]
12468 prevOutScript = tmp
12469 }
12470
12471 typeForce('Number', inIndex)
12472 typeForce('Script', prevOutScript)
12473 typeForce('Number', hashType)
12474
12475 assert(inIndex >= 0, 'Invalid vin index')
12476 assert(inIndex < this.ins.length, 'Invalid vin index')
12477
12478 var txTmp = this.clone()
12479 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12480
12481 // Blank out other inputs' signatures
12482 txTmp.ins.forEach(function (txIn) {
12483 txIn.script = Script.EMPTY
12484 })
12485 txTmp.ins[inIndex].script = hashScript
12486
12487 var hashTypeModifier = hashType & 0x1f
12488
12489 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12490 assert(false, 'SIGHASH_NONE not yet supported')
12491 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12492 assert(false, 'SIGHASH_SINGLE not yet supported')
12493 }
12494
12495 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12496 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12497 }
12498
12499 var hashTypeBuffer = new Buffer(4)
12500 hashTypeBuffer.writeInt32LE(hashType, 0)
12501
12502 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12503 return crypto.hash256(buffer)
12504}
12505
12506Transaction.prototype.getHash = function () {
12507 return crypto.hash256(this.toBuffer())
12508}
12509
12510Transaction.prototype.getId = function () {
12511 // TxHash is little-endian, we need big-endian
12512 return bufferutils.reverse(this.getHash()).toString('hex')
12513}
12514
ebd8d4e8 12515Transaction.prototype.toBuffer = function () {
ab78acc6
IC
12516 function scriptSize (script) {
12517 var length = script.buffer.length
ebd8d4e8 12518
ab78acc6
IC
12519 return bufferutils.varIntSize(length) + length
12520 }
ebd8d4e8
IC
12521
12522 var buffer = new Buffer(
12523 8 +
12524 bufferutils.varIntSize(this.ins.length) +
12525 bufferutils.varIntSize(this.outs.length) +
ab78acc6
IC
12526 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12527 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
ebd8d4e8
IC
12528 )
12529
12530 var offset = 0
ab78acc6 12531 function writeSlice (slice) {
ebd8d4e8
IC
12532 slice.copy(buffer, offset)
12533 offset += slice.length
12534 }
ab78acc6
IC
12535
12536 function writeUInt32 (i) {
ebd8d4e8
IC
12537 buffer.writeUInt32LE(i, offset)
12538 offset += 4
12539 }
ab78acc6
IC
12540
12541 function writeUInt64 (i) {
ebd8d4e8
IC
12542 bufferutils.writeUInt64LE(buffer, i, offset)
12543 offset += 8
12544 }
ab78acc6
IC
12545
12546 function writeVarInt (i) {
ebd8d4e8
IC
12547 var n = bufferutils.writeVarInt(buffer, i, offset)
12548 offset += n
12549 }
12550
12551 writeUInt32(this.version)
12552 writeVarInt(this.ins.length)
12553
ab78acc6
IC
12554 this.ins.forEach(function (txIn) {
12555 writeSlice(txIn.hash)
12556 writeUInt32(txIn.index)
12557 writeVarInt(txIn.script.buffer.length)
12558 writeSlice(txIn.script.buffer)
12559 writeUInt32(txIn.sequence)
ebd8d4e8
IC
12560 })
12561
12562 writeVarInt(this.outs.length)
ab78acc6
IC
12563 this.outs.forEach(function (txOut) {
12564 writeUInt64(txOut.value)
12565 writeVarInt(txOut.script.buffer.length)
12566 writeSlice(txOut.script.buffer)
ebd8d4e8
IC
12567 })
12568
12569 writeUInt32(this.locktime)
12570
12571 return buffer
12572}
12573
ab78acc6 12574Transaction.prototype.toHex = function () {
ebd8d4e8
IC
12575 return this.toBuffer().toString('hex')
12576}
12577
ab78acc6
IC
12578Transaction.prototype.setInputScript = function (index, script) {
12579 typeForce('Number', index)
12580 typeForce('Script', script)
12581
12582 this.ins[index].script = script
12583}
12584
12585// FIXME: remove in 2.x.y
12586Transaction.prototype.sign = function (index, privKey, hashType) {
12587 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12588
12589 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12590 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12591
12592 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12593 this.setInputScript(index, scriptSig)
12594}
12595
12596// FIXME: remove in 2.x.y
12597Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12598 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12599
12600 hashType = hashType || Transaction.SIGHASH_ALL
12601
12602 var hash = this.hashForSignature(index, prevOutScript, hashType)
12603 var signature = privKey.sign(hash)
12604
12605 return signature.toScriptSignature(hashType)
12606}
12607
12608// FIXME: remove in 2.x.y
12609Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12610 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12611
12612 var parsed = ECSignature.parseScriptSignature(buffer)
12613 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12614
12615 return pubKey.verify(hash, parsed.signature)
12616}
12617
12618module.exports = Transaction
12619
12620}).call(this,require("buffer").Buffer)
12621},{"./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){
12622(function (Buffer){
12623var assert = require('assert')
12624var ops = require('./opcodes')
12625var scripts = require('./scripts')
12626
12627var ECPubKey = require('./ecpubkey')
12628var ECSignature = require('./ecsignature')
12629var Script = require('./script')
12630var Transaction = require('./transaction')
12631
12632function extractInput (txIn) {
12633 var redeemScript
12634 var scriptSig = txIn.script
12635 var prevOutScript
12636 var prevOutType = scripts.classifyInput(scriptSig, true)
12637 var scriptType
12638
12639 // Re-classify if scriptHash
12640 if (prevOutType === 'scripthash') {
12641 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12642 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12643
12644 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12645 scriptType = scripts.classifyInput(scriptSig, true)
12646 } else {
12647 scriptType = prevOutType
12648 }
12649
12650 // Extract hashType, pubKeys and signatures
12651 var hashType, parsed, pubKeys, signatures
12652
12653 switch (scriptType) {
12654 case 'pubkeyhash': {
12655 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12656 hashType = parsed.hashType
12657 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12658 signatures = [parsed.signature]
12659 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12660
12661 break
12662 }
12663
12664 case 'pubkey': {
12665 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12666 hashType = parsed.hashType
12667 signatures = [parsed.signature]
12668
12669 if (redeemScript) {
12670 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12671 }
12672
12673 break
12674 }
12675
12676 case 'multisig': {
12677 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12678 if (chunk === ops.OP_0) return chunk
12679
12680 var parsed = ECSignature.parseScriptSignature(chunk)
12681 hashType = parsed.hashType
12682
12683 return parsed.signature
12684 })
12685
12686 if (redeemScript) {
12687 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12688 }
12689
12690 break
12691 }
12692 }
12693
12694 return {
12695 hashType: hashType,
12696 prevOutScript: prevOutScript,
12697 prevOutType: prevOutType,
12698 pubKeys: pubKeys,
12699 redeemScript: redeemScript,
12700 scriptType: scriptType,
12701 signatures: signatures
12702 }
12703}
12704
12705function TransactionBuilder () {
12706 this.prevTxMap = {}
12707 this.prevOutScripts = {}
12708 this.prevOutTypes = {}
12709
12710 this.inputs = []
12711 this.tx = new Transaction()
12712}
12713
12714TransactionBuilder.fromTransaction = function (transaction) {
12715 var txb = new TransactionBuilder()
12716
12717 // Copy other transaction fields
12718 txb.tx.version = transaction.version
12719 txb.tx.locktime = transaction.locktime
12720
12721 // Extract/add inputs
12722 transaction.ins.forEach(function (txIn) {
12723 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12724 })
12725
12726 // Extract/add outputs
12727 transaction.outs.forEach(function (txOut) {
12728 txb.addOutput(txOut.script, txOut.value)
12729 })
12730
12731 // Extract/add signatures
12732 txb.inputs = transaction.ins.map(function (txIn) {
12733 // TODO: remove me after testcase added
12734 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12735
12736 // Ignore empty scripts
12737 if (txIn.script.buffer.length === 0) return {}
12738
12739 return extractInput(txIn)
12740 })
12741
12742 return txb
12743}
12744
12745TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12746 var prevOutHash
12747
12748 // txId
12749 if (typeof prevTx === 'string') {
12750 prevOutHash = new Buffer(prevTx, 'hex')
12751
12752 // TxId hex is big-endian, we want little-endian hash
12753 Array.prototype.reverse.call(prevOutHash)
12754
12755 // Transaction
12756 } else if (prevTx instanceof Transaction) {
12757 prevOutHash = prevTx.getHash()
12758 prevOutScript = prevTx.outs[index].script
12759
12760 // txHash
12761 } else {
12762 prevOutHash = prevTx
12763 }
12764
12765 var input = {}
12766 if (prevOutScript) {
12767 var prevOutType = scripts.classifyOutput(prevOutScript)
12768
12769 // if we can, extract pubKey information
12770 switch (prevOutType) {
12771 case 'multisig': {
12772 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12773 break
12774 }
12775
12776 case 'pubkey': {
12777 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12778 break
12779 }
12780 }
12781
12782 if (prevOutType !== 'scripthash') {
12783 input.scriptType = prevOutType
12784 }
12785
12786 input.prevOutScript = prevOutScript
12787 input.prevOutType = prevOutType
12788 }
12789
12790 assert(this.inputs.every(function (input2) {
12791 if (input2.hashType === undefined) return true
12792
12793 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12794 }), 'No, this would invalidate signatures')
12795
12796 var prevOut = prevOutHash.toString('hex') + ':' + index
12797 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12798
12799 var vin = this.tx.addInput(prevOutHash, index, sequence)
12800 this.inputs[vin] = input
12801 this.prevTxMap[prevOut] = vin
12802
12803 return vin
12804}
12805
12806TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12807 assert(this.inputs.every(function (input) {
12808 if (input.hashType === undefined) return true
ebd8d4e8 12809
ab78acc6
IC
12810 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12811 }), 'No, this would invalidate signatures')
ebd8d4e8 12812
ab78acc6
IC
12813 return this.tx.addOutput(scriptPubKey, value)
12814}
ebd8d4e8 12815
ab78acc6
IC
12816TransactionBuilder.prototype.build = function () {
12817 return this.__build(false)
12818}
12819TransactionBuilder.prototype.buildIncomplete = function () {
12820 return this.__build(true)
12821}
ebd8d4e8 12822
ab78acc6
IC
12823var canSignTypes = {
12824 'pubkeyhash': true,
12825 'multisig': true,
12826 'pubkey': true
12827}
ebd8d4e8 12828
ab78acc6
IC
12829TransactionBuilder.prototype.__build = function (allowIncomplete) {
12830 if (!allowIncomplete) {
12831 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12832 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
ebd8d4e8
IC
12833 }
12834
ab78acc6 12835 var tx = this.tx.clone()
ebd8d4e8 12836
ab78acc6
IC
12837 // Create script signatures from signature meta-data
12838 this.inputs.forEach(function (input, index) {
12839 var scriptType = input.scriptType
12840 var scriptSig
ebd8d4e8 12841
ab78acc6
IC
12842 if (!allowIncomplete) {
12843 assert(!!scriptType, 'Transaction is not complete')
12844 assert(scriptType in canSignTypes, scriptType + ' not supported')
12845 assert(input.signatures, 'Transaction is missing signatures')
12846 }
ebd8d4e8 12847
ab78acc6
IC
12848 if (input.signatures) {
12849 switch (scriptType) {
12850 case 'pubkeyhash': {
12851 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12852 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12853 break
12854 }
ebd8d4e8 12855
ab78acc6
IC
12856 case 'multisig': {
12857 // Array.prototype.map is sparse-compatible
12858 var msSignatures = input.signatures.map(function (signature) {
12859 return signature && signature.toScriptSignature(input.hashType)
12860 })
ebd8d4e8 12861
ab78acc6
IC
12862 // fill in blanks with OP_0
12863 if (allowIncomplete) {
12864 for (var i = 0; i < msSignatures.length; ++i) {
12865 if (msSignatures[i]) continue
ebd8d4e8 12866
ab78acc6
IC
12867 msSignatures[i] = ops.OP_0
12868 }
12869 } else {
12870 // Array.prototype.filter returns non-sparse array
12871 msSignatures = msSignatures.filter(function (x) { return x })
12872 }
ebd8d4e8 12873
ab78acc6
IC
12874 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12875 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12876 break
12877 }
ebd8d4e8 12878
ab78acc6
IC
12879 case 'pubkey': {
12880 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12881 scriptSig = scripts.pubKeyInput(pkSignature)
12882 break
12883 }
12884 }
ebd8d4e8 12885 }
ebd8d4e8 12886
ab78acc6
IC
12887 // did we build a scriptSig?
12888 if (scriptSig) {
12889 // wrap as scriptHash if necessary
12890 if (input.prevOutType === 'scripthash') {
12891 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12892 }
12893
12894 tx.setInputScript(index, scriptSig)
ebd8d4e8
IC
12895 }
12896 })
12897
ab78acc6 12898 return tx
ebd8d4e8
IC
12899}
12900
ab78acc6
IC
12901TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12902 assert(index in this.inputs, 'No input at index: ' + index)
12903 hashType = hashType || Transaction.SIGHASH_ALL
ebd8d4e8 12904
ab78acc6
IC
12905 var input = this.inputs[index]
12906 var canSign = input.hashType &&
12907 input.prevOutScript &&
12908 input.prevOutType &&
12909 input.pubKeys &&
12910 input.scriptType &&
12911 input.signatures
ebd8d4e8 12912
ab78acc6
IC
12913 // are we almost ready to sign?
12914 if (canSign) {
12915 // if redeemScript was provided, enforce consistency
12916 if (redeemScript) {
12917 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12918 }
ebd8d4e8 12919
ab78acc6 12920 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
ebd8d4e8 12921
ab78acc6
IC
12922 // no? prepare
12923 } else {
12924 // must be pay-to-scriptHash?
12925 if (redeemScript) {
12926 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12927 if (input.prevOutScript) {
12928 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12929
12930 var scriptHash = input.prevOutScript.chunks[1]
12931 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12932 }
ebd8d4e8 12933
ab78acc6
IC
12934 var scriptType = scripts.classifyOutput(redeemScript)
12935 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
ebd8d4e8 12936
ab78acc6
IC
12937 var pubKeys = []
12938 switch (scriptType) {
12939 case 'multisig': {
12940 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12941 break
12942 }
ebd8d4e8 12943
ab78acc6
IC
12944 case 'pubkeyhash': {
12945 var pkh1 = redeemScript.chunks[2]
12946 var pkh2 = privKey.pub.getAddress().hash
ebd8d4e8 12947
ab78acc6
IC
12948 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12949 pubKeys = [privKey.pub]
12950 break
12951 }
ebd8d4e8 12952
ab78acc6
IC
12953 case 'pubkey': {
12954 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12955 break
12956 }
12957 }
ebd8d4e8 12958
ab78acc6
IC
12959 if (!input.prevOutScript) {
12960 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12961 input.prevOutType = 'scripthash'
12962 }
ebd8d4e8 12963
ab78acc6
IC
12964 input.pubKeys = pubKeys
12965 input.redeemScript = redeemScript
12966 input.scriptType = scriptType
ebd8d4e8 12967
ab78acc6
IC
12968 // cannot be pay-to-scriptHash
12969 } else {
12970 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
ebd8d4e8 12971
ab78acc6
IC
12972 // can we otherwise sign this?
12973 if (input.scriptType) {
12974 assert(input.pubKeys, input.scriptType + ' not supported')
ebd8d4e8 12975
ab78acc6
IC
12976 // we know nothin' Jon Snow, assume pubKeyHash
12977 } else {
12978 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12979 input.prevOutType = 'pubkeyhash'
12980 input.pubKeys = [privKey.pub]
12981 input.scriptType = input.prevOutType
12982 }
12983 }
ebd8d4e8 12984
ab78acc6
IC
12985 input.hashType = hashType
12986 input.signatures = input.signatures || []
12987 }
12988
12989 var signatureScript = input.redeemScript || input.prevOutScript
12990 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12991
12992 // enforce signature order matches public keys
12993 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12994 // maintain a local copy of unmatched signatures
12995 var unmatched = input.signatures.slice()
12996
12997 input.signatures = input.pubKeys.map(function (pubKey) {
12998 var match
12999
13000 // check for any matching signatures
13001 unmatched.some(function (signature, i) {
13002 if (!pubKey.verify(signatureHash, signature)) return false
13003 match = signature
13004
13005 // remove matched signature from unmatched
13006 unmatched.splice(i, 1)
13007
13008 return true
13009 })
13010
13011 return match || undefined
13012 })
13013 }
13014
13015 // enforce in order signing of public keys
13016 assert(input.pubKeys.some(function (pubKey, i) {
13017 if (!privKey.pub.Q.equals(pubKey.Q)) return false
13018
13019 assert(!input.signatures[i], 'Signature already exists')
13020 var signature = privKey.sign(signatureHash)
13021 input.signatures[i] = signature
13022
13023 return true
13024 }, this), 'privateKey cannot sign for this input')
ebd8d4e8
IC
13025}
13026
ab78acc6 13027module.exports = TransactionBuilder
ebd8d4e8 13028
ab78acc6
IC
13029}).call(this,require("buffer").Buffer)
13030},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
ebd8d4e8 13031(function (Buffer){
ab78acc6
IC
13032var assert = require('assert')
13033var bufferutils = require('./bufferutils')
13034var typeForce = require('typeforce')
13035var networks = require('./networks')
13036var randomBytes = require('randombytes')
ebd8d4e8 13037
ab78acc6
IC
13038var Address = require('./address')
13039var HDNode = require('./hdnode')
13040var TransactionBuilder = require('./transaction_builder')
13041var Script = require('./script')
ebd8d4e8 13042
ab78acc6
IC
13043function Wallet (seed, network) {
13044 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
13045
13046 seed = seed || randomBytes(32)
ebd8d4e8
IC
13047 network = network || networks.bitcoin
13048
13049 // Stored in a closure to make accidental serialization less likely
ab78acc6
IC
13050 var masterKey = HDNode.fromSeedBuffer(seed, network)
13051
13052 // HD first-level child derivation method should be hardened
13053 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
13054 var accountZero = masterKey.deriveHardened(0)
13055 var externalAccount = accountZero.derive(0)
13056 var internalAccount = accountZero.derive(1)
ebd8d4e8 13057
ebd8d4e8
IC
13058 this.addresses = []
13059 this.changeAddresses = []
ab78acc6
IC
13060 this.network = network
13061 this.unspents = []
ebd8d4e8 13062
ab78acc6
IC
13063 // FIXME: remove in 2.0.0
13064 this.unspentMap = {}
ebd8d4e8 13065
ab78acc6
IC
13066 // FIXME: remove in 2.0.0
13067 var me = this
13068 this.newMasterKey = function (seed) {
13069 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
13070
13071 seed = seed || randomBytes(32)
13072 masterKey = HDNode.fromSeedBuffer(seed, network)
ebd8d4e8 13073
ab78acc6 13074 accountZero = masterKey.deriveHardened(0)
ebd8d4e8
IC
13075 externalAccount = accountZero.derive(0)
13076 internalAccount = accountZero.derive(1)
13077
13078 me.addresses = []
13079 me.changeAddresses = []
13080
ab78acc6
IC
13081 me.unspents = []
13082 me.unspentMap = {}
ebd8d4e8
IC
13083 }
13084
ab78acc6
IC
13085 this.getMasterKey = function () {
13086 return masterKey
ebd8d4e8 13087 }
ab78acc6
IC
13088 this.getAccountZero = function () {
13089 return accountZero
ebd8d4e8 13090 }
ab78acc6
IC
13091 this.getExternalAccount = function () {
13092 return externalAccount
13093 }
13094 this.getInternalAccount = function () {
13095 return internalAccount
ebd8d4e8 13096 }
ab78acc6 13097}
ebd8d4e8 13098
ab78acc6
IC
13099Wallet.prototype.createTransaction = function (to, value, options) {
13100 // FIXME: remove in 2.0.0
13101 if (typeof options !== 'object') {
13102 if (options !== undefined) {
13103 console.warn('Non options object parameters are deprecated, use options object instead')
ebd8d4e8 13104
ab78acc6
IC
13105 options = {
13106 fixedFee: arguments[2],
13107 changeAddress: arguments[3]
13108 }
ebd8d4e8 13109 }
ebd8d4e8
IC
13110 }
13111
ab78acc6 13112 options = options || {}
ebd8d4e8 13113
ab78acc6 13114 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
ebd8d4e8 13115
ab78acc6
IC
13116 var changeAddress = options.changeAddress
13117 var fixedFee = options.fixedFee
13118 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
ebd8d4e8 13119
ab78acc6
IC
13120 // filter by minConf, then pending and sort by descending value
13121 var unspents = this.unspents.filter(function (unspent) {
13122 return unspent.confirmations >= minConf
13123 }).filter(function (unspent) {
13124 return !unspent.pending
13125 }).sort(function (o1, o2) {
13126 return o2.value - o1.value
13127 })
ebd8d4e8 13128
ab78acc6
IC
13129 var accum = 0
13130 var addresses = []
13131 var subTotal = value
ebd8d4e8 13132
ab78acc6
IC
13133 var txb = new TransactionBuilder()
13134 txb.addOutput(to, value)
ebd8d4e8 13135
ab78acc6
IC
13136 for (var i = 0; i < unspents.length; ++i) {
13137 var unspent = unspents[i]
13138 addresses.push(unspent.address)
ebd8d4e8 13139
ab78acc6
IC
13140 txb.addInput(unspent.txHash, unspent.index)
13141
13142 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
ebd8d4e8 13143
ab78acc6
IC
13144 accum += unspent.value
13145 subTotal = value + fee
13146
13147 if (accum >= subTotal) {
13148 var change = accum - subTotal
13149
13150 if (change > this.network.dustThreshold) {
13151 txb.addOutput(changeAddress || this.getChangeAddress(), change)
ebd8d4e8 13152 }
ebd8d4e8 13153
ab78acc6 13154 break
ebd8d4e8
IC
13155 }
13156 }
13157
ab78acc6 13158 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
ebd8d4e8 13159
ab78acc6
IC
13160 return this.signWith(txb, addresses).build()
13161}
ebd8d4e8 13162
ab78acc6
IC
13163// FIXME: remove in 2.0.0
13164Wallet.prototype.processPendingTx = function (tx) {
13165 this.__processTx(tx, true)
13166}
ebd8d4e8 13167
ab78acc6
IC
13168// FIXME: remove in 2.0.0
13169Wallet.prototype.processConfirmedTx = function (tx) {
13170 this.__processTx(tx, false)
13171}
ebd8d4e8 13172
ab78acc6
IC
13173// FIXME: remove in 2.0.0
13174Wallet.prototype.__processTx = function (tx, isPending) {
13175 console.warn('processTransaction is considered harmful, see issue #260 for more information')
ebd8d4e8 13176
ab78acc6
IC
13177 var txId = tx.getId()
13178 var txHash = tx.getHash()
ebd8d4e8 13179
ab78acc6
IC
13180 tx.outs.forEach(function (txOut, i) {
13181 var address
ebd8d4e8 13182
ab78acc6
IC
13183 try {
13184 address = Address.fromOutputScript(txOut.script, this.network).toString()
13185 } catch (e) {
13186 if (!(e.message.match(/has no matching Address/)))
13187 throw e
13188 }
13189
13190 var myAddresses = this.addresses.concat(this.changeAddresses)
13191 if (myAddresses.indexOf(address) > -1) {
13192 var lookup = txId + ':' + i
13193 if (lookup in this.unspentMap) return
13194
13195 // its unique, add it
13196 var unspent = {
13197 address: address,
13198 confirmations: 0, // no way to determine this without more information
13199 index: i,
13200 txHash: txHash,
13201 txId: txId,
13202 value: txOut.value,
13203 pending: isPending
ebd8d4e8 13204 }
ebd8d4e8 13205
ab78acc6
IC
13206 this.unspentMap[lookup] = unspent
13207 this.unspents.push(unspent)
13208 }
13209 }, this)
ebd8d4e8 13210
ab78acc6
IC
13211 tx.ins.forEach(function (txIn) {
13212 // copy and convert to big-endian hex
13213 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
ebd8d4e8 13214
ab78acc6
IC
13215 var lookup = txInId + ':' + txIn.index
13216 if (!(lookup in this.unspentMap)) return
ebd8d4e8 13217
ab78acc6 13218 var unspent = this.unspentMap[lookup]
ebd8d4e8 13219
ab78acc6
IC
13220 if (isPending) {
13221 unspent.pending = true
13222 unspent.spent = true
13223 } else {
13224 delete this.unspentMap[lookup]
ebd8d4e8 13225
ab78acc6
IC
13226 this.unspents = this.unspents.filter(function (unspent2) {
13227 return unspent !== unspent2
13228 })
13229 }
13230 }, this)
13231}
ebd8d4e8 13232
ab78acc6
IC
13233Wallet.prototype.generateAddress = function () {
13234 var k = this.addresses.length
13235 var address = this.getExternalAccount().derive(k).getAddress()
ebd8d4e8 13236
ab78acc6 13237 this.addresses.push(address.toString())
ebd8d4e8 13238
ab78acc6
IC
13239 return this.getReceiveAddress()
13240}
ebd8d4e8 13241
ab78acc6
IC
13242Wallet.prototype.generateChangeAddress = function () {
13243 var k = this.changeAddresses.length
13244 var address = this.getInternalAccount().derive(k).getAddress()
ebd8d4e8 13245
ab78acc6 13246 this.changeAddresses.push(address.toString())
ebd8d4e8 13247
ab78acc6
IC
13248 return this.getChangeAddress()
13249}
ebd8d4e8 13250
ab78acc6
IC
13251Wallet.prototype.getAddress = function () {
13252 if (this.addresses.length === 0) {
13253 this.generateAddress()
ebd8d4e8
IC
13254 }
13255
ab78acc6
IC
13256 return this.addresses[this.addresses.length - 1]
13257}
ebd8d4e8 13258
ab78acc6
IC
13259Wallet.prototype.getBalance = function (minConf) {
13260 minConf = minConf || 0
ebd8d4e8 13261
ab78acc6
IC
13262 return this.unspents.filter(function (unspent) {
13263 return unspent.confirmations >= minConf
13264
13265 // FIXME: remove spent filter in 2.0.0
13266 }).filter(function (unspent) {
13267 return !unspent.spent
13268 }).reduce(function (accum, unspent) {
13269 return accum + unspent.value
13270 }, 0)
13271}
ebd8d4e8 13272
ab78acc6
IC
13273Wallet.prototype.getChangeAddress = function () {
13274 if (this.changeAddresses.length === 0) {
13275 this.generateChangeAddress()
ebd8d4e8
IC
13276 }
13277
ab78acc6
IC
13278 return this.changeAddresses[this.changeAddresses.length - 1]
13279}
13280
13281Wallet.prototype.getInternalPrivateKey = function (index) {
13282 return this.getInternalAccount().derive(index).privKey
13283}
13284
13285Wallet.prototype.getPrivateKey = function (index) {
13286 return this.getExternalAccount().derive(index).privKey
13287}
13288
13289Wallet.prototype.getPrivateKeyForAddress = function (address) {
13290 var index
ebd8d4e8 13291
ab78acc6
IC
13292 if ((index = this.addresses.indexOf(address)) > -1) {
13293 return this.getPrivateKey(index)
ebd8d4e8
IC
13294 }
13295
ab78acc6
IC
13296 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13297 return this.getInternalPrivateKey(index)
ebd8d4e8
IC
13298 }
13299
ab78acc6
IC
13300 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13301}
ebd8d4e8 13302
ab78acc6
IC
13303Wallet.prototype.getUnspentOutputs = function (minConf) {
13304 minConf = minConf || 0
ebd8d4e8 13305
ab78acc6
IC
13306 return this.unspents.filter(function (unspent) {
13307 return unspent.confirmations >= minConf
ebd8d4e8 13308
ab78acc6
IC
13309 // FIXME: remove spent filter in 2.0.0
13310 }).filter(function (unspent) {
13311 return !unspent.spent
13312 }).map(function (unspent) {
13313 return {
13314 address: unspent.address,
13315 confirmations: unspent.confirmations,
13316 index: unspent.index,
13317 txId: unspent.txId,
13318 value: unspent.value,
13319
13320 // FIXME: remove in 2.0.0
13321 hash: unspent.txId,
13322 pending: unspent.pending
13323 }
13324 })
13325}
ebd8d4e8 13326
ab78acc6
IC
13327Wallet.prototype.setUnspentOutputs = function (unspents) {
13328 this.unspentMap = {}
13329 this.unspents = unspents.map(function (unspent) {
13330 // FIXME: remove unspent.hash in 2.0.0
13331 var txId = unspent.txId || unspent.hash
13332 var index = unspent.index
ebd8d4e8 13333
ab78acc6
IC
13334 // FIXME: remove in 2.0.0
13335 if (unspent.hash !== undefined) {
13336 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13337 }
ebd8d4e8 13338
ab78acc6
IC
13339 // FIXME: remove in 2.0.0
13340 if (index === undefined) {
13341 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13342 index = unspent.outputIndex
13343 }
ebd8d4e8 13344
ab78acc6
IC
13345 typeForce('String', txId)
13346 typeForce('Number', index)
13347 typeForce('Number', unspent.value)
13348
13349 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13350 assert.doesNotThrow(function () {
13351 Address.fromBase58Check(unspent.address)
13352 }, 'Expected Base58 Address, got ' + unspent.address)
13353 assert(isFinite(index), 'Expected finite index, got ' + index)
13354
13355 // FIXME: remove branch in 2.0.0
13356 if (unspent.confirmations !== undefined) {
13357 typeForce('Number', unspent.confirmations)
ebd8d4e8 13358 }
ebd8d4e8 13359
ab78acc6 13360 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
ebd8d4e8 13361
ab78acc6
IC
13362 unspent = {
13363 address: unspent.address,
13364 confirmations: unspent.confirmations || 0,
13365 index: index,
13366 txHash: txHash,
13367 txId: txId,
13368 value: unspent.value,
ebd8d4e8 13369
ab78acc6
IC
13370 // FIXME: remove in 2.0.0
13371 pending: unspent.pending || false
13372 }
13373
13374 // FIXME: remove in 2.0.0
13375 this.unspentMap[txId + ':' + index] = unspent
13376
13377 return unspent
13378 }, this)
13379}
13380
13381Wallet.prototype.signWith = function (tx, addresses) {
13382 addresses.forEach(function (address, i) {
13383 var privKey = this.getPrivateKeyForAddress(address)
13384
13385 tx.sign(i, privKey)
13386 }, this)
13387
13388 return tx
13389}
13390
13391function estimatePaddedFee (tx, network) {
13392 var tmpTx = tx.clone()
13393 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13394
13395 return network.estimateFee(tmpTx)
ebd8d4e8
IC
13396}
13397
ab78acc6
IC
13398// FIXME: 1.0.0 shims, remove in 2.0.0
13399Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13400Wallet.prototype.createTx = Wallet.prototype.createTransaction
13401
ebd8d4e8
IC
13402module.exports = Wallet
13403
ab78acc6
IC
13404}).call(this,require("buffer").Buffer)
13405},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13406});</script>
d5dc92fd
IC
13407 <script>bitcoin.networks.shadow = {
13408 magicPrefix: '\x19ShadowCash Signed Message:\n',
13409 bip32: {
13410 public: 0xEE80286A,
13411 private: 0xEE8031E8
13412 },
13413 pubKeyHash: 0x3f,
13414 scriptHash: 0x7d,
13415 wif: 0xbf,
13416 dustThreshold: 0,
13417 feePerKb: 1000,
13418 estimateFee: function() { return "unused in this app" },
13419};
13420
13421bitcoin.networks.shadowtn = {
13422 magicPrefix: '\x19ShadowCash Signed Message:\n',
13423 bip32: {
13424 public: 0x76C0FDFB,
13425 private: 0x76C1077A
13426 },
13427 pubKeyHash: 0x7f,
13428 scriptHash: 0xc4,
13429 wif: 0xff,
13430 dustThreshold: 0,
13431 feePerKb: 1000,
13432 estimateFee: function() { return "unused in this app" },
13433};
5c434a8a
CM
13434
13435bitcoin.networks.clam = {
13436 bip32: {
13437 public: 0xa8c26d64,
13438 private: 0xa8c17826
13439 },
13440 pubKeyHash: 0x89,
13441 wif: 0x85,
13442};
5493efc3 13443
13444bitcoin.networks.dash = {
13445 bip32: {
13446 public: 0x0488b21e,
13447 private: 0x0488ade4
13448 },
68151a47 13449 pubKeyHash: 0x4c,
5493efc3 13450 scriptHash: 0x10,
13451 wif: 0xcc,
13452};
13453
07ac4350 13454bitcoin.networks.namecoin = {
13455 bip32: {
13456 public: 0x0488b21e,
13457 private: 0x0488ade4
13458 },
13459 pubKeyHash: 0x34,
13460 //scriptHash: 0x10,
13461 wif: 0x80,
13462};
13463
13464bitcoin.networks.peercoin = {
13465 bip32: {
13466 public: 0x0488b21e,
13467 private: 0x0488ade4
13468 },
13469 pubKeyHash: 0x37,
13470 //scriptHash: 0x10,
13471 wif: 0xb7,
13472};
13473
d5dc92fd 13474</script>
ab78acc6 13475 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
13476
13477//// base.js
13478
13479/** @fileOverview Javascript cryptography implementation.
13480 *
13481 * Crush to remove comments, shorten variable names and
13482 * generally reduce transmission size.
13483 *
13484 * @author Emily Stark
13485 * @author Mike Hamburg
13486 * @author Dan Boneh
13487 */
13488
13489"use strict";
13490/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13491/*global document, window, escape, unescape, module, require, Uint32Array */
13492
13493/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13494var sjcl = {
13495 /** @namespace Symmetric ciphers. */
13496 cipher: {},
13497
13498 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13499 hash: {},
13500
13501 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13502 keyexchange: {},
13503
13504 /** @namespace Block cipher modes of operation. */
13505 mode: {},
13506
13507 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13508 misc: {},
13509
13510 /**
13511 * @namespace Bit array encoders and decoders.
13512 *
13513 * @description
13514 * The members of this namespace are functions which translate between
13515 * SJCL's bitArrays and other objects (usually strings). Because it
13516 * isn't always clear which direction is encoding and which is decoding,
13517 * the method names are "fromBits" and "toBits".
13518 */
13519 codec: {},
13520
13521 /** @namespace Exceptions. */
13522 exception: {
13523 /** @constructor Ciphertext is corrupt. */
13524 corrupt: function(message) {
13525 this.toString = function() { return "CORRUPT: "+this.message; };
13526 this.message = message;
13527 },
13528
13529 /** @constructor Invalid parameter. */
13530 invalid: function(message) {
13531 this.toString = function() { return "INVALID: "+this.message; };
13532 this.message = message;
13533 },
13534
13535 /** @constructor Bug or missing feature in SJCL. @constructor */
13536 bug: function(message) {
13537 this.toString = function() { return "BUG: "+this.message; };
13538 this.message = message;
13539 },
13540
13541 /** @constructor Something isn't ready. */
13542 notReady: function(message) {
13543 this.toString = function() { return "NOT READY: "+this.message; };
13544 this.message = message;
ebd8d4e8 13545 }
80c4dd2a
IC
13546 }
13547};
13548
13549if(typeof module !== 'undefined' && module.exports){
13550 module.exports = sjcl;
13551}
13552if (typeof define === "function") {
13553 define([], function () {
13554 return sjcl;
13555 });
13556}
13557
13558
13559//// bitArray.js
13560
13561/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13562 *
13563 * @author Emily Stark
13564 * @author Mike Hamburg
13565 * @author Dan Boneh
13566 */
13567
13568/** @namespace Arrays of bits, encoded as arrays of Numbers.
13569 *
13570 * @description
13571 * <p>
13572 * These objects are the currency accepted by SJCL's crypto functions.
13573 * </p>
13574 *
13575 * <p>
13576 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13577 * but many of them can take arguments that are not a multiple of 4 bytes.
13578 * This library encodes arrays of bits (whose size need not be a multiple of 8
13579 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13580 * array of words, 32 bits at a time. Since the words are double-precision
13581 * floating point numbers, they fit some extra data. We use this (in a private,
13582 * possibly-changing manner) to encode the number of bits actually present
13583 * in the last word of the array.
13584 * </p>
13585 *
13586 * <p>
13587 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13588 * to ciphers like AES which want arrays of words.
13589 * </p>
13590 */
13591sjcl.bitArray = {
13592 /**
13593 * Array slices in units of bits.
13594 * @param {bitArray} a The array to slice.
13595 * @param {Number} bstart The offset to the start of the slice, in bits.
13596 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13597 * slice until the end of the array.
13598 * @return {bitArray} The requested slice.
13599 */
13600 bitSlice: function (a, bstart, bend) {
13601 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13602 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13603 },
13604
13605 /**
13606 * Extract a number packed into a bit array.
13607 * @param {bitArray} a The array to slice.
13608 * @param {Number} bstart The offset to the start of the slice, in bits.
13609 * @param {Number} length The length of the number to extract.
13610 * @return {Number} The requested slice.
13611 */
13612 extract: function(a, bstart, blength) {
13613 // FIXME: this Math.floor is not necessary at all, but for some reason
13614 // seems to suppress a bug in the Chromium JIT.
13615 var x, sh = Math.floor((-bstart-blength) & 31);
13616 if ((bstart + blength - 1 ^ bstart) & -32) {
13617 // it crosses a boundary
13618 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13619 } else {
13620 // within a single word
13621 x = a[bstart/32|0] >>> sh;
ebd8d4e8 13622 }
80c4dd2a
IC
13623 return x & ((1<<blength) - 1);
13624 },
13625
13626 /**
13627 * Concatenate two bit arrays.
13628 * @param {bitArray} a1 The first array.
13629 * @param {bitArray} a2 The second array.
13630 * @return {bitArray} The concatenation of a1 and a2.
13631 */
13632 concat: function (a1, a2) {
13633 if (a1.length === 0 || a2.length === 0) {
13634 return a1.concat(a2);
13635 }
13636
13637 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13638 if (shift === 32) {
13639 return a1.concat(a2);
13640 } else {
13641 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 13642 }
80c4dd2a
IC
13643 },
13644
13645 /**
13646 * Find the length of an array of bits.
13647 * @param {bitArray} a The array.
13648 * @return {Number} The length of a, in bits.
13649 */
13650 bitLength: function (a) {
13651 var l = a.length, x;
13652 if (l === 0) { return 0; }
13653 x = a[l - 1];
13654 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13655 },
13656
13657 /**
13658 * Truncate an array.
13659 * @param {bitArray} a The array.
13660 * @param {Number} len The length to truncate to, in bits.
13661 * @return {bitArray} A new array, truncated to len bits.
13662 */
13663 clamp: function (a, len) {
13664 if (a.length * 32 < len) { return a; }
13665 a = a.slice(0, Math.ceil(len / 32));
13666 var l = a.length;
13667 len = len & 31;
13668 if (l > 0 && len) {
13669 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13670 }
13671 return a;
13672 },
13673
13674 /**
13675 * Make a partial word for a bit array.
13676 * @param {Number} len The number of bits in the word.
13677 * @param {Number} x The bits.
13678 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13679 * @return {Number} The partial word.
13680 */
13681 partial: function (len, x, _end) {
13682 if (len === 32) { return x; }
13683 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13684 },
13685
13686 /**
13687 * Get the number of bits used by a partial word.
13688 * @param {Number} x The partial word.
13689 * @return {Number} The number of bits used by the partial word.
13690 */
13691 getPartial: function (x) {
13692 return Math.round(x/0x10000000000) || 32;
13693 },
13694
13695 /**
13696 * Compare two arrays for equality in a predictable amount of time.
13697 * @param {bitArray} a The first array.
13698 * @param {bitArray} b The second array.
13699 * @return {boolean} true if a == b; false otherwise.
13700 */
13701 equal: function (a, b) {
13702 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13703 return false;
ebd8d4e8 13704 }
80c4dd2a
IC
13705 var x = 0, i;
13706 for (i=0; i<a.length; i++) {
13707 x |= a[i]^b[i];
ebd8d4e8 13708 }
80c4dd2a
IC
13709 return (x === 0);
13710 },
13711
13712 /** Shift an array right.
13713 * @param {bitArray} a The array to shift.
13714 * @param {Number} shift The number of bits to shift.
13715 * @param {Number} [carry=0] A byte to carry in
13716 * @param {bitArray} [out=[]] An array to prepend to the output.
13717 * @private
13718 */
13719 _shiftRight: function (a, shift, carry, out) {
13720 var i, last2=0, shift2;
13721 if (out === undefined) { out = []; }
13722
13723 for (; shift >= 32; shift -= 32) {
13724 out.push(carry);
13725 carry = 0;
13726 }
13727 if (shift === 0) {
13728 return out.concat(a);
13729 }
13730
13731 for (i=0; i<a.length; i++) {
13732 out.push(carry | a[i]>>>shift);
13733 carry = a[i] << (32-shift);
13734 }
13735 last2 = a.length ? a[a.length-1] : 0;
13736 shift2 = sjcl.bitArray.getPartial(last2);
13737 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13738 return out;
13739 },
13740
13741 /** xor a block of 4 words together.
13742 * @private
13743 */
13744 _xor4: function(x,y) {
13745 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13746 },
13747
13748 /** byteswap a word array inplace.
13749 * (does not handle partial words)
13750 * @param {sjcl.bitArray} a word array
13751 * @return {sjcl.bitArray} byteswapped array
13752 */
13753 byteswapM: function(a) {
13754 var i, v, m = 0xff00;
13755 for (i = 0; i < a.length; ++i) {
13756 v = a[i];
13757 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 13758 }
80c4dd2a
IC
13759 return a;
13760 }
13761};
13762
13763
13764//// codecString.js
13765
13766/** @fileOverview Bit array codec implementations.
13767 *
13768 * @author Emily Stark
13769 * @author Mike Hamburg
13770 * @author Dan Boneh
13771 */
13772
13773/** @namespace UTF-8 strings */
13774sjcl.codec.utf8String = {
13775 /** Convert from a bitArray to a UTF-8 string. */
13776 fromBits: function (arr) {
13777 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13778 for (i=0; i<bl/8; i++) {
13779 if ((i&3) === 0) {
13780 tmp = arr[i/4];
13781 }
13782 out += String.fromCharCode(tmp >>> 24);
13783 tmp <<= 8;
ebd8d4e8 13784 }
80c4dd2a
IC
13785 return decodeURIComponent(escape(out));
13786 },
13787
13788 /** Convert from a UTF-8 string to a bitArray. */
13789 toBits: function (str) {
13790 str = unescape(encodeURIComponent(str));
13791 var out = [], i, tmp=0;
13792 for (i=0; i<str.length; i++) {
13793 tmp = tmp << 8 | str.charCodeAt(i);
13794 if ((i&3) === 3) {
13795 out.push(tmp);
13796 tmp = 0;
13797 }
ebd8d4e8 13798 }
80c4dd2a
IC
13799 if (i&3) {
13800 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 13801 }
80c4dd2a
IC
13802 return out;
13803 }
13804};
13805
13806
13807//// codecHex.js
13808
13809/** @fileOverview Bit array codec implementations.
13810 *
13811 * @author Emily Stark
13812 * @author Mike Hamburg
13813 * @author Dan Boneh
13814 */
13815
13816/** @namespace Hexadecimal */
13817sjcl.codec.hex = {
13818 /** Convert from a bitArray to a hex string. */
13819 fromBits: function (arr) {
13820 var out = "", i;
13821 for (i=0; i<arr.length; i++) {
13822 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 13823 }
80c4dd2a
IC
13824 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13825 },
13826 /** Convert from a hex string to a bitArray. */
13827 toBits: function (str) {
13828 var i, out=[], len;
13829 str = str.replace(/\s|0x/g, "");
13830 len = str.length;
13831 str = str + "00000000";
13832 for (i=0; i<str.length; i+=8) {
13833 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 13834 }
80c4dd2a
IC
13835 return sjcl.bitArray.clamp(out, len*4);
13836 }
13837};
13838
13839
13840//// sha512.js
13841
13842/** @fileOverview Javascript SHA-512 implementation.
13843 *
13844 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13845 * SJCL by Stefan Thomas.
13846 *
13847 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13848 * Released with New BSD License
13849 *
13850 * @author Emily Stark
13851 * @author Mike Hamburg
13852 * @author Dan Boneh
13853 * @author Jeff Mott
13854 * @author Stefan Thomas
13855 */
13856
13857/**
13858 * Context for a SHA-512 operation in progress.
13859 * @constructor
13860 * @class Secure Hash Algorithm, 512 bits.
13861 */
13862sjcl.hash.sha512 = function (hash) {
13863 if (!this._key[0]) { this._precompute(); }
13864 if (hash) {
13865 this._h = hash._h.slice(0);
13866 this._buffer = hash._buffer.slice(0);
13867 this._length = hash._length;
13868 } else {
13869 this.reset();
13870 }
13871};
13872
13873/**
13874 * Hash a string or an array of words.
13875 * @static
13876 * @param {bitArray|String} data the data to hash.
13877 * @return {bitArray} The hash value, an array of 16 big-endian words.
13878 */
13879sjcl.hash.sha512.hash = function (data) {
13880 return (new sjcl.hash.sha512()).update(data).finalize();
13881};
13882
13883sjcl.hash.sha512.prototype = {
13884 /**
13885 * The hash's block size, in bits.
13886 * @constant
13887 */
13888 blockSize: 1024,
13889
13890 /**
13891 * Reset the hash state.
13892 * @return this
13893 */
13894 reset:function () {
13895 this._h = this._init.slice(0);
13896 this._buffer = [];
13897 this._length = 0;
13898 return this;
13899 },
13900
13901 /**
13902 * Input several words to the hash.
13903 * @param {bitArray|String} data the data to hash.
13904 * @return this
13905 */
13906 update: function (data) {
13907 if (typeof data === "string") {
13908 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 13909 }
80c4dd2a
IC
13910 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13911 ol = this._length,
13912 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13913 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13914 this._block(b.splice(0,32));
ebd8d4e8 13915 }
80c4dd2a
IC
13916 return this;
13917 },
13918
13919 /**
13920 * Complete hashing and output the hash value.
13921 * @return {bitArray} The hash value, an array of 16 big-endian words.
13922 */
13923 finalize:function () {
13924 var i, b = this._buffer, h = this._h;
13925
13926 // Round out and push the buffer
13927 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13928
13929 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13930 for (i = b.length + 4; i & 31; i++) {
13931 b.push(0);
ebd8d4e8 13932 }
80c4dd2a
IC
13933
13934 // append the length
13935 b.push(0);
13936 b.push(0);
13937 b.push(Math.floor(this._length / 0x100000000));
13938 b.push(this._length | 0);
13939
13940 while (b.length) {
13941 this._block(b.splice(0,32));
ebd8d4e8 13942 }
80c4dd2a
IC
13943
13944 this.reset();
13945 return h;
13946 },
13947
13948 /**
13949 * The SHA-512 initialization vector, to be precomputed.
13950 * @private
13951 */
13952 _init:[],
13953
13954 /**
13955 * Least significant 24 bits of SHA512 initialization values.
13956 *
13957 * Javascript only has 53 bits of precision, so we compute the 40 most
13958 * significant bits and add the remaining 24 bits as constants.
13959 *
13960 * @private
13961 */
13962 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13963
13964 /*
13965 _init:
13966 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13967 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13968 */
13969
13970 /**
13971 * The SHA-512 hash key, to be precomputed.
13972 * @private
13973 */
13974 _key:[],
13975
13976 /**
13977 * Least significant 24 bits of SHA512 key values.
13978 * @private
13979 */
13980 _keyr:
13981 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13982 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13983 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13984 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13985 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13986 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13987 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13988 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13989 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13990 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13991
13992 /*
13993 _key:
13994 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13995 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13996 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13997 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13998 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13999 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
14000 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
14001 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
14002 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
14003 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
14004 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
14005 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
14006 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
14007 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
14008 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
14009 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
14010 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
14011 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
14012 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
14013 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
14014 */
14015
14016 /**
14017 * Function to precompute _init and _key.
14018 * @private
14019 */
14020 _precompute: function () {
14021 // XXX: This code is for precomputing the SHA256 constants, change for
14022 // SHA512 and re-enable.
14023 var i = 0, prime = 2, factor;
14024
14025 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14026 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
14027
14028 outer: for (; i<80; prime++) {
14029 for (factor=2; factor*factor <= prime; factor++) {
14030 if (prime % factor === 0) {
14031 // not a prime
14032 continue outer;
ebd8d4e8 14033 }
80c4dd2a
IC
14034 }
14035
14036 if (i<8) {
14037 this._init[i*2] = frac(Math.pow(prime, 1/2));
14038 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
14039 }
14040 this._key[i*2] = frac(Math.pow(prime, 1/3));
14041 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
14042 i++;
ebd8d4e8 14043 }
80c4dd2a
IC
14044 },
14045
14046 /**
14047 * Perform one cycle of SHA-512.
14048 * @param {bitArray} words one block of words.
14049 * @private
14050 */
14051 _block:function (words) {
14052 var i, wrh, wrl,
14053 w = words.slice(0),
14054 h = this._h,
14055 k = this._key,
14056 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
14057 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
14058 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
14059 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
14060
14061 // Working variables
14062 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
14063 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
14064 eh = h4h, el = h4l, fh = h5h, fl = h5l,
14065 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
14066
14067 for (i=0; i<80; i++) {
14068 // load up the input word for this round
14069 if (i<16) {
14070 wrh = w[i * 2];
14071 wrl = w[i * 2 + 1];
14072 } else {
14073 // Gamma0
14074 var gamma0xh = w[(i-15) * 2];
14075 var gamma0xl = w[(i-15) * 2 + 1];
14076 var gamma0h =
14077 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
14078 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
14079 (gamma0xh >>> 7);
14080 var gamma0l =
14081 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
14082 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
14083 ((gamma0xh << 25) | (gamma0xl >>> 7));
14084
14085 // Gamma1
14086 var gamma1xh = w[(i-2) * 2];
14087 var gamma1xl = w[(i-2) * 2 + 1];
14088 var gamma1h =
14089 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
14090 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
14091 (gamma1xh >>> 6);
14092 var gamma1l =
14093 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
14094 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
14095 ((gamma1xh << 26) | (gamma1xl >>> 6));
14096
14097 // Shortcuts
14098 var wr7h = w[(i-7) * 2];
14099 var wr7l = w[(i-7) * 2 + 1];
14100
14101 var wr16h = w[(i-16) * 2];
14102 var wr16l = w[(i-16) * 2 + 1];
14103
14104 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
14105 wrl = gamma0l + wr7l;
14106 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
14107 wrl += gamma1l;
14108 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
14109 wrl += wr16l;
14110 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
14111 }
14112
14113 w[i*2] = wrh |= 0;
14114 w[i*2 + 1] = wrl |= 0;
14115
14116 // Ch
14117 var chh = (eh & fh) ^ (~eh & gh);
14118 var chl = (el & fl) ^ (~el & gl);
14119
14120 // Maj
14121 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14122 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14123
14124 // Sigma0
14125 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
14126 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
14127
14128 // Sigma1
14129 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
14130 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
14131
14132 // K(round)
14133 var krh = k[i*2];
14134 var krl = k[i*2+1];
14135
14136 // t1 = h + sigma1 + ch + K(round) + W(round)
14137 var t1l = hl + sigma1l;
14138 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14139 t1l += chl;
14140 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14141 t1l += krl;
14142 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14143 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14144 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14145
14146 // t2 = sigma0 + maj
14147 var t2l = sigma0l + majl;
14148 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14149
14150 // Update working variables
14151 hh = gh;
14152 hl = gl;
14153 gh = fh;
14154 gl = fl;
14155 fh = eh;
14156 fl = el;
14157 el = (dl + t1l) | 0;
14158 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14159 dh = ch;
14160 dl = cl;
14161 ch = bh;
14162 cl = bl;
14163 bh = ah;
14164 bl = al;
14165 al = (t1l + t2l) | 0;
14166 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14167 }
14168
14169 // Intermediate hash
14170 h0l = h[1] = (h0l + al) | 0;
14171 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14172 h1l = h[3] = (h1l + bl) | 0;
14173 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14174 h2l = h[5] = (h2l + cl) | 0;
14175 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14176 h3l = h[7] = (h3l + dl) | 0;
14177 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14178 h4l = h[9] = (h4l + el) | 0;
14179 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14180 h5l = h[11] = (h5l + fl) | 0;
14181 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14182 h6l = h[13] = (h6l + gl) | 0;
14183 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14184 h7l = h[15] = (h7l + hl) | 0;
14185 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14186 }
14187};
14188
14189
14190//// hmac.js
14191
14192/** @fileOverview HMAC implementation.
14193 *
14194 * @author Emily Stark
14195 * @author Mike Hamburg
14196 * @author Dan Boneh
14197 */
14198
14199/** HMAC with the specified hash function.
14200 * @constructor
14201 * @param {bitArray} key the key for HMAC.
14202 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14203 */
14204sjcl.misc.hmac = function (key, Hash) {
14205 this._hash = Hash = Hash || sjcl.hash.sha256;
14206 var exKey = [[],[]], i,
14207 bs = Hash.prototype.blockSize / 32;
14208 this._baseHash = [new Hash(), new Hash()];
14209
14210 if (key.length > bs) {
14211 key = Hash.hash(key);
14212 }
14213
14214 for (i=0; i<bs; i++) {
14215 exKey[0][i] = key[i]^0x36363636;
14216 exKey[1][i] = key[i]^0x5C5C5C5C;
14217 }
14218
14219 this._baseHash[0].update(exKey[0]);
14220 this._baseHash[1].update(exKey[1]);
14221 this._resultHash = new Hash(this._baseHash[0]);
14222};
14223
14224/** HMAC with the specified hash function. Also called encrypt since it's a prf.
14225 * @param {bitArray|String} data The data to mac.
14226 */
14227sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14228 if (!this._updated) {
14229 this.update(data);
14230 return this.digest(data);
14231 } else {
14232 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14233 }
14234};
14235
14236sjcl.misc.hmac.prototype.reset = function () {
14237 this._resultHash = new this._hash(this._baseHash[0]);
14238 this._updated = false;
14239};
14240
14241sjcl.misc.hmac.prototype.update = function (data) {
14242 this._updated = true;
14243 this._resultHash.update(data);
14244};
14245
14246sjcl.misc.hmac.prototype.digest = function () {
14247 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14248
14249 this.reset();
14250
14251 return result;
14252};
14253
14254
14255//// pbkdf2.js
14256
14257
14258/** @fileOverview Password-based key-derivation function, version 2.0.
14259 *
14260 * @author Emily Stark
14261 * @author Mike Hamburg
14262 * @author Dan Boneh
14263 */
14264
14265/** Password-Based Key-Derivation Function, version 2.0.
14266 *
14267 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14268 *
14269 * This is the method specified by RSA's PKCS #5 standard.
14270 *
14271 * @param {bitArray|String} password The password.
14272 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14273 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14274 * @param {Number} [length] The length of the derived key. Defaults to the
14275 output size of the hash function.
14276 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14277 * @return {bitArray} the derived key.
14278 */
14279sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14280 count = count || 1000;
14281
14282 if (length < 0 || count < 0) {
14283 throw sjcl.exception.invalid("invalid params to pbkdf2");
14284 }
14285
14286 if (typeof password === "string") {
14287 password = sjcl.codec.utf8String.toBits(password);
14288 }
14289
14290 if (typeof salt === "string") {
14291 salt = sjcl.codec.utf8String.toBits(salt);
14292 }
14293
14294 Prff = Prff || sjcl.misc.hmac;
14295
14296 var prf = new Prff(password),
14297 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14298
14299 for (k = 1; 32 * out.length < (length || 1); k++) {
14300 u = ui = prf.encrypt(b.concat(salt,[k]));
14301
14302 for (i=1; i<count; i++) {
14303 ui = prf.encrypt(ui);
14304 for (j=0; j<ui.length; j++) {
14305 u[j] ^= ui[j];
14306 }
ebd8d4e8 14307 }
80c4dd2a
IC
14308
14309 out = out.concat(u);
14310 }
14311
14312 if (length) { out = b.clamp(out, length); }
14313
14314 return out;
14315};
14316
14317
14318//// sha256.js
14319
14320/** @fileOverview Javascript SHA-256 implementation.
14321 *
14322 * An older version of this implementation is available in the public
14323 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14324 * Stanford University 2008-2010 and BSD-licensed for liability
14325 * reasons.
14326 *
14327 * Special thanks to Aldo Cortesi for pointing out several bugs in
14328 * this code.
14329 *
14330 * @author Emily Stark
14331 * @author Mike Hamburg
14332 * @author Dan Boneh
14333 */
14334
14335/**
14336 * Context for a SHA-256 operation in progress.
14337 * @constructor
14338 * @class Secure Hash Algorithm, 256 bits.
14339 */
14340sjcl.hash.sha256 = function (hash) {
14341 if (!this._key[0]) { this._precompute(); }
14342 if (hash) {
14343 this._h = hash._h.slice(0);
14344 this._buffer = hash._buffer.slice(0);
14345 this._length = hash._length;
14346 } else {
14347 this.reset();
14348 }
14349};
14350
14351/**
14352 * Hash a string or an array of words.
14353 * @static
14354 * @param {bitArray|String} data the data to hash.
14355 * @return {bitArray} The hash value, an array of 16 big-endian words.
14356 */
14357sjcl.hash.sha256.hash = function (data) {
14358 return (new sjcl.hash.sha256()).update(data).finalize();
14359};
14360
14361sjcl.hash.sha256.prototype = {
14362 /**
14363 * The hash's block size, in bits.
14364 * @constant
14365 */
14366 blockSize: 512,
14367
14368 /**
14369 * Reset the hash state.
14370 * @return this
14371 */
14372 reset:function () {
14373 this._h = this._init.slice(0);
14374 this._buffer = [];
14375 this._length = 0;
14376 return this;
14377 },
14378
14379 /**
14380 * Input several words to the hash.
14381 * @param {bitArray|String} data the data to hash.
14382 * @return this
14383 */
14384 update: function (data) {
14385 if (typeof data === "string") {
14386 data = sjcl.codec.utf8String.toBits(data);
14387 }
14388 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14389 ol = this._length,
14390 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14391 for (i = 512+ol & -512; i <= nl; i+= 512) {
14392 this._block(b.splice(0,16));
ebd8d4e8 14393 }
3af2954a 14394 return this;
80c4dd2a
IC
14395 },
14396
14397 /**
14398 * Complete hashing and output the hash value.
14399 * @return {bitArray} The hash value, an array of 8 big-endian words.
14400 */
14401 finalize:function () {
14402 var i, b = this._buffer, h = this._h;
14403
14404 // Round out and push the buffer
14405 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14406
14407 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14408 for (i = b.length + 2; i & 15; i++) {
14409 b.push(0);
14410 }
14411
14412 // append the length
14413 b.push(Math.floor(this._length / 0x100000000));
14414 b.push(this._length | 0);
14415
14416 while (b.length) {
14417 this._block(b.splice(0,16));
14418 }
14419
14420 this.reset();
14421 return h;
14422 },
14423
14424 /**
14425 * The SHA-256 initialization vector, to be precomputed.
14426 * @private
14427 */
14428 _init:[],
14429 /*
14430 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14431 */
14432
14433 /**
14434 * The SHA-256 hash key, to be precomputed.
14435 * @private
14436 */
14437 _key:[],
14438 /*
14439 _key:
14440 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14441 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14442 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14443 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14444 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14445 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14446 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14447 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14448 */
14449
14450
14451 /**
14452 * Function to precompute _init and _key.
14453 * @private
14454 */
14455 _precompute: function () {
14456 var i = 0, prime = 2, factor;
14457
14458 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14459
14460 outer: for (; i<64; prime++) {
14461 for (factor=2; factor*factor <= prime; factor++) {
14462 if (prime % factor === 0) {
14463 // not a prime
14464 continue outer;
ebd8d4e8 14465 }
80c4dd2a
IC
14466 }
14467
14468 if (i<8) {
14469 this._init[i] = frac(Math.pow(prime, 1/2));
14470 }
14471 this._key[i] = frac(Math.pow(prime, 1/3));
14472 i++;
ebd8d4e8 14473 }
80c4dd2a
IC
14474 },
14475
14476 /**
14477 * Perform one cycle of SHA-256.
14478 * @param {bitArray} words one block of words.
14479 * @private
14480 */
14481 _block:function (words) {
14482 var i, tmp, a, b,
14483 w = words.slice(0),
14484 h = this._h,
14485 k = this._key,
14486 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14487 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14488
14489 /* Rationale for placement of |0 :
14490 * If a value can overflow is original 32 bits by a factor of more than a few
14491 * million (2^23 ish), there is a possibility that it might overflow the
14492 * 53-bit mantissa and lose precision.
14493 *
14494 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14495 * propagates around the loop, and on the hash state h[]. I don't believe
14496 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14497 * (for h4 anyway), and better safe than sorry.
14498 *
14499 * The clamps on h[] are necessary for the output to be correct even in the
14500 * common case and for short inputs.
14501 */
14502 for (i=0; i<64; i++) {
14503 // load up the input word for this round
14504 if (i<16) {
14505 tmp = w[i];
14506 } else {
14507 a = w[(i+1 ) & 15];
14508 b = w[(i+14) & 15];
14509 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14510 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14511 w[i&15] + w[(i+9) & 15]) | 0;
14512 }
14513
14514 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14515
14516 // shift register
14517 h7 = h6; h6 = h5; h5 = h4;
14518 h4 = h3 + tmp | 0;
14519 h3 = h2; h2 = h1; h1 = h0;
14520
14521 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14522 }
14523
14524 h[0] = h[0]+h0 | 0;
14525 h[1] = h[1]+h1 | 0;
14526 h[2] = h[2]+h2 | 0;
14527 h[3] = h[3]+h3 | 0;
14528 h[4] = h[4]+h4 | 0;
14529 h[5] = h[5]+h5 | 0;
14530 h[6] = h[6]+h6 | 0;
14531 h[7] = h[7]+h7 | 0;
14532 }
14533};
dc55c6b0 14534</script>
ab78acc6 14535 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 14536WORDLISTS["english"] = [
ebd8d4e8
IC
14537"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14538"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14539"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14540"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14541"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14542"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14543"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14544"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14545"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14546"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14547"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14548"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14549"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14550"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14551"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14552"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14553"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14554"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14555"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14556"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14557"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14558"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14559"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14560"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14561"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14562"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14563"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14564"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14565"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14566"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14567"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14568"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14569"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14570"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14571"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14572"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14573"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14574"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14575"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14576"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14577"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14578"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14579"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14580"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14581"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14582"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14583"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14584"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14585"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14586"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14587"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14588"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14589"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14590"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14591"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14592"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14593"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14594"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14595"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14596"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14597"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14598"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14599"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14600"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14601"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14602"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14603"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14604"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14605"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14606"film","filter","final","find","fine","finger","finish","fire","firm","first",
14607"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14608"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14609"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14610"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14611"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14612"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14613"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14614"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14615"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14616"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14617"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14618"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14619"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14620"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14621"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14622"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14623"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14624"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14625"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14626"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14627"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14628"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14629"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14630"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14631"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14632"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14633"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14634"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14635"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14636"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14637"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14638"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14639"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14640"liar","liberty","library","license","life","lift","light","like","limb","limit",
14641"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14642"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14643"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14644"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14645"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14646"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14647"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14648"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14649"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14650"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14651"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14652"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14653"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14654"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14655"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14656"network","neutral","never","news","next","nice","night","noble","noise","nominee",
14657"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14658"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14659"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14660"oil","okay","old","olive","olympic","omit","once","one","onion","online",
14661"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14662"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14663"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14664"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14665"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14666"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14667"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14668"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14669"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14670"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14671"pole","police","pond","pony","pool","popular","portion","position","possible","post",
14672"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14673"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14674"prize","problem","process","produce","profit","program","project","promote","proof","property",
14675"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14676"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14677"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14678"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14679"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14680"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14681"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14682"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14683"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14684"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14685"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14686"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14687"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14688"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14689"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14690"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14691"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14692"scrub","sea","search","season","seat","second","secret","section","security","seed",
14693"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14694"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14695"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14696"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14697"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14698"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14699"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14700"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14701"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14702"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14703"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14704"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14705"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14706"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14707"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14708"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14709"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14710"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14711"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14712"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14713"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14714"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14715"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14716"thank","that","theme","then","theory","there","they","thing","this","thought",
14717"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14718"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14719"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14720"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14721"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14722"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14723"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14724"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14725"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14726"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14727"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14728"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14729"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14730"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14731"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14732"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14733"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14734"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14735"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14736"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14737"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14738"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14739"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14740"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14741"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
14742</script>
14743 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14744WORDLISTS["japanese"] = [
14745"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
14746"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
14747"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
14748"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
14749"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
14750"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
14751"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
14752"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
14753"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
14754"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
14755"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
14756"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
14757"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
14758"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
14759"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
14760"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
14761"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
14762"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
14763"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
14764"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
14765"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
14766"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
14767"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
14768"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
14769"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
14770"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
14771"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
14772"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
14773"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
14774"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
14775"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
14776"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
14777"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
14778"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
14779"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
14780"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
14781"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
14782"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
14783"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
14784"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
14785"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
14786"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
14787"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
14788"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
14789"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
14790"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
14791"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
14792"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
14793"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
14794"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
14795"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
14796"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
14797"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
14798"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
14799"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
14800"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
14801"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
14802"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
14803"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
14804"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
14805"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
14806"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
14807"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
14808"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
14809"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
14810"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
14811"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
14812"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
14813"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
14814"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
14815"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
14816"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
14817"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
14818"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
14819"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
14820"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
14821"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
14822"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
14823"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
14824"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
14825"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
14826"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
14827"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
14828"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
14829"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
14830"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
14831"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
14832"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
14833"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
14834"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
14835"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
14836"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
14837"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
14838"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
14839"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
14840"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
14841"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
14842"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
14843"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
14844"せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
14845"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
14846"そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
14847"そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
14848"そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
14849"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
14850"ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
14851"たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
14852"だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
14853"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
14854"たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
14855"たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
14856"たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
14857"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
14858"ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
14859"たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
14860"たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
14861"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
14862"ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
14863"ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
14864"ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
14865"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
14866"ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
14867"つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
14868"つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
14869"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
14870"てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
14871"ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
14872"てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
14873"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
14874"てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
14875"でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
14876"でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
14877"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
14878"とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
14879"とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
14880"とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
14881"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
14882"ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
14883"なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
14884"なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
14885"ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
14886"にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
14887"にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
14888"にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
14889"にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
14890"にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
14891"ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
14892"ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
14893"ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
14894"ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
14895"ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
14896"のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
14897"のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
14898"ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
14899"はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
14900"はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
14901"はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
14902"はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
14903"はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
14904"はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
14905"はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
14906"ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
14907"ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
14908"ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
14909"ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
14910"ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
14911"ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
14912"ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
14913"ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
14914"ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
14915"ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
14916"ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
14917"ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
14918"へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
14919"へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
14920"へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
14921"ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
14922"ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
14923"ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
14924"ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
14925"まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
14926"まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
14927"みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
14928"みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
14929"みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
14930"むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
14931"むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
14932"むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
14933"めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
14934"めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
14935"もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
14936"やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
14937"やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
14938"ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
14939"ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
14940"よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
14941"よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
14942"らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
14943"りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
14944"りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
14945"りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
14946"れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
14947"れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
14948"ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
14949"わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
14950</script>
14951 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14952WORDLISTS["spanish"] = [
14953"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
14954"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
14955"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
14956"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
14957"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
14958"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
14959"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
14960"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
14961"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
14962"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
14963"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
14964"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
14965"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
14966"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
14967"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
14968"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
14969"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
14970"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
14971"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
14972"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
14973"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
14974"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
14975"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
14976"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
14977"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
14978"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
14979"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
14980"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
14981"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
14982"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
14983"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
14984"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
14985"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
14986"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
14987"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
14988"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
14989"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
14990"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
14991"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
14992"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
14993"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
14994"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
14995"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
14996"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
14997"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
14998"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
14999"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
15000"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
15001"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
15002"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
15003"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
15004"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
15005"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
15006"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
15007"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
15008"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
15009"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
15010"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
15011"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
15012"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
15013"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
15014"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
15015"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
15016"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
15017"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
15018"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
15019"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
15020"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
15021"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
15022"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
15023"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
15024"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
15025"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
15026"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
15027"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
15028"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
15029"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
15030"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
15031"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
15032"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
15033"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
15034"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
15035"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
15036"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
15037"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
15038"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
15039"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
15040"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
15041"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
15042"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
15043"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
15044"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
15045"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
15046"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
15047"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
15048"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
15049"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
15050"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
15051"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
15052"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
15053"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
15054"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
15055"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
15056"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
15057"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
15058"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
15059"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
15060"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
15061"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
15062"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
15063"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
15064"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
15065"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
15066"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
15067"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
15068"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
15069"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
15070"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
15071"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
15072"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
15073"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
15074"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
15075"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
15076"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
15077"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
15078"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
15079"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
15080"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
15081"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
15082"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
15083"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
15084"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
15085"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
15086"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
15087"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
15088"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
15089"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
15090"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
15091"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
15092"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
15093"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
15094"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
15095"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
15096"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
15097"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
15098"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
15099"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
15100"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
15101"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
15102"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
15103"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
15104"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
15105"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
15106"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
15107"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
15108"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
15109"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
15110"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
15111"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
15112"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
15113"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
15114"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
15115"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
15116"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
15117"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
15118"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
15119"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
15120"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
15121"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
15122"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
15123"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
15124"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
15125"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
15126"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
15127"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
15128"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
15129"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
15130"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
15131"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
15132"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
15133"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
15134"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
15135"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
15136"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
15137"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
15138"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
15139"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
15140"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
15141"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
15142"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
15143"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
15144"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
15145"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
15146"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
15147"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
15148"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
15149"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
15150"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
15151"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
15152"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
15153"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
15154"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
15155"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
15156"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
15157"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
15158</script>
15159 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15160WORDLISTS["chinese_simplified"] = [
15161"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
15162"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
15163"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
15164"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
15165"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
15166"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
15167"民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
15168"度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
15169"二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
15170"两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
15171"去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
15172"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15173"那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
15174"样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
15175"心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
15176"或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
15177"条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
15178"无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
15179"已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
15180"果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
15181"次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
15182"求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
15183"图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
15184"别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
15185"几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
15186"必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
15187"南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
15188"百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
15189"压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
15190"术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
15191"收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
15192"风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
15193"身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
15194"达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
15195"八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
15196"节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
15197"传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
15198"研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
15199"织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
15200"复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
15201"深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
15202"半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
15203"史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
15204"何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
15205"号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
15206"毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
15207"王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
15208"却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
15209"包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
15210"细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
15211"官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
15212"女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
15213"含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
15214"英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
15215"破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
15216"河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
15217"案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
15218"仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
15219"轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
15220"足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
15221"负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
15222"修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
15223"财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
15224"跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
15225"初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
15226"未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
15227"钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
15228"限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
15229"州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
15230"础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
15231"袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
15232"诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
15233"夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
15234"终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
15235"烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
15236"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15237"侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
15238"货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
15239"息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
15240"医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
15241"训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
15242"脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
15243"械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
15244"粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
15245"钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
15246"培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
15247"答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
15248"脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
15249"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
15250"评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
15251"伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
15252"亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
15253"诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15254"绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
15255"屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
15256"束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
15257"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
15258"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
15259"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
15260"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
15261"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
15262"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
15263"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
15264"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
15265"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
15266"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
15267"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
15268"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
15269"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15270"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15271"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
15272"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
15273"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
15274"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
15275"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
15276"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
15277"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
15278"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
15279"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
15280"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
15281"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
15282"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15283"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
15284"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
15285"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
15286"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
15287"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
15288"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
15289"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
15290"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
15291"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
15292"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
15293"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
15294"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
15295"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
15296"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
15297"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
15298"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
15299"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
15300"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
15301"勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
15302"饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
15303"扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
15304"奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
15305"寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
15306"贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
15307"渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
15308"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
15309"锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
15310"缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
15311"碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
15312"票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
15313"荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
15314"撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
15315"陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
15316"虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
15317"乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
15318"瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
15319"秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
15320"洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
15321"籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
15322"醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
15323"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
15324"趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
15325"滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
15326"泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
15327"胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
15328"串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
15329"辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
15330"沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
15331"侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
15332"豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
15333"掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
15334"雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
15335"蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
15336"番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
15337"扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
15338"悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
15339"渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
15340"霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
15341"甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
15342"伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
15343"弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
15344"逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
15345"冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
15346"欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
15347"搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
15348"忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
15349"杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
15350"烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
15351"姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
15352"董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
15353"拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
15354"览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
15355"凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
15356"丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
15357"铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
15358"窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
15359"胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
15360"疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
15361"嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
15362"莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
15363"皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
15364"巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
15365"卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
15366</script>
15367 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15368WORDLISTS["chinese_traditional"] = [
15369"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
15370"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
15371"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
15372"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
15373"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
15374"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
15375"民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
15376"度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
15377"二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
15378"兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
15379"去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
15380"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15381"那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
15382"樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
15383"心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
15384"或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
15385"條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
15386"無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
15387"已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
15388"果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
15389"次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
15390"求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
15391"圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
15392"別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
15393"幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
15394"必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
15395"南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
15396"百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
15397"壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
15398"術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
15399"收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
15400"風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
15401"身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
15402"達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
15403"八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
15404"節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
15405"傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
15406"研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
15407"織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
15408"复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
15409"深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
15410"半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
15411"史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
15412"何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
15413"號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
15414"毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
15415"王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
15416"卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
15417"包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
15418"細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
15419"官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
15420"女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
15421"含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
15422"英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
15423"破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
15424"河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
15425"案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
15426"僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
15427"輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
15428"足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
15429"負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
15430"修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
15431"財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
15432"跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
15433"初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
15434"未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
15435"錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
15436"限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
15437"州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
15438"礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
15439"袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
15440"訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
15441"夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
15442"終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
15443"烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
15444"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15445"侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
15446"貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
15447"息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
15448"醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
15449"訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
15450"脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
15451"械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
15452"粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
15453"鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
15454"培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
15455"答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
15456"腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
15457"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
15458"評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
15459"傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
15460"亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
15461"詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15462"綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
15463"屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
15464"束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
15465"胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
15466"宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
15467"露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
15468"庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
15469"鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
15470"借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
15471"潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
15472"歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
15473"納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
15474"塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
15475"刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
15476"洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
15477"獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15478"陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15479"樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
15480"館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
15481"塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
15482"楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
15483"監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
15484"壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
15485"橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
15486"您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
15487"紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
15488"灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
15489"齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
15490"淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15491"莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
15492"夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
15493"璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
15494"縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
15495"津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
15496"肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
15497"貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
15498"峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
15499"浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
15500"睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
15501"炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
15502"呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
15503"授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
15504"幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
15505"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
15506"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
15507"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
15508"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
15509"勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
15510"飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
15511"掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
15512"奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
15513"寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
15514"貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
15515"漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
15516"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
15517"銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
15518"缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
15519"碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
15520"票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
15521"荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
15522"撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
15523"陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
15524"蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
15525"乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
15526"瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
15527"秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
15528"洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
15529"籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
15530"醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
15531"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
15532"趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
15533"灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
15534"泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
15535"脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
15536"串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
15537"輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
15538"沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
15539"僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
15540"豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
15541"掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
15542"霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
15543"蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
15544"番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
15545"扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
15546"悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
15547"渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
15548"黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
15549"甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
15550"偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
15551"弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
15552"逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
15553"冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
15554"欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
15555"搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
15556"憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
15557"杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
15558"烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
15559"姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
15560"董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
15561"拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
15562"覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
15563"兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
15564"叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
15565"鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
15566"窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
15567"胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
15568"瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
15569"嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
15570"蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
15571"皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
15572"巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
15573"卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
15574</script>
15575 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15576WORDLISTS["french"] = [
15577"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
15578"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
15579"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
15580"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
15581"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
15582"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
15583"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
15584"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
15585"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
15586"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
15587"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
15588"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
15589"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
15590"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
15591"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
15592"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
15593"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
15594"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
15595"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
15596"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
15597"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
15598"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
15599"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
15600"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
15601"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
15602"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
15603"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
15604"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
15605"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
15606"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
15607"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
15608"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
15609"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
15610"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
15611"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
15612"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
15613"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
15614"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
15615"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
15616"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
15617"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
15618"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
15619"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
15620"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
15621"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
15622"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
15623"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
15624"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
15625"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
15626"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
15627"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
15628"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
15629"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
15630"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
15631"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
15632"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
15633"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
15634"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
15635"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
15636"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
15637"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
15638"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
15639"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
15640"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
15641"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
15642"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
15643"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
15644"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
15645"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
15646"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
15647"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
15648"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
15649"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
15650"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
15651"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
15652"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
15653"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
15654"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
15655"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
15656"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
15657"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
15658"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
15659"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
15660"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
15661"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
15662"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
15663"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
15664"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
15665"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
15666"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
15667"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
15668"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
15669"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
15670"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
15671"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
15672"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
15673"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
15674"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
15675"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
15676"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
15677"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
15678"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
15679"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
15680"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
15681"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
15682"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
15683"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
15684"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
15685"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
15686"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
15687"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
15688"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
15689"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
15690"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
15691"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
15692"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
15693"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
15694"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
15695"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
15696"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
15697"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
15698"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
15699"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
15700"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
15701"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
15702"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
15703"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
15704"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
15705"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
15706"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
15707"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
15708"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
15709"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
15710"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
15711"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
15712"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
15713"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
15714"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
15715"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
15716"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
15717"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
15718"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
15719"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
15720"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
15721"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
15722"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
15723"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
15724"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
15725"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
15726"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
15727"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
15728"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
15729"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
15730"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
15731"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
15732"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
15733"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
15734"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
15735"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
15736"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
15737"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
15738"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
15739"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
15740"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
15741"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
15742"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
15743"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
15744"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
15745"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
15746"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
15747"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
15748"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
15749"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
15750"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
15751"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
15752"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
15753"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
15754"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
15755"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
15756"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
15757"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
15758"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
15759"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
15760"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
15761"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
15762"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
15763"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
15764"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
15765"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
15766"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
15767"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
15768"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
15769"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
15770"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
15771"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
15772"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
15773"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
15774"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
15775"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
15776"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
15777"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
15778"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
15779"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
15780"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
15781"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
15782</script>
15783 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15784WORDLISTS["italian"] = [
15785"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
15786"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
15787"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
15788"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
15789"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
15790"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
15791"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
15792"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
15793"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
15794"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
15795"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
15796"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
15797"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
15798"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
15799"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
15800"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
15801"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
15802"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
15803"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
15804"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
15805"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
15806"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
15807"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
15808"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
15809"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
15810"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
15811"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
15812"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
15813"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
15814"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
15815"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
15816"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
15817"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
15818"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
15819"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
15820"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
15821"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
15822"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
15823"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
15824"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
15825"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
15826"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
15827"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
15828"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
15829"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
15830"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
15831"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
15832"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
15833"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
15834"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
15835"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
15836"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
15837"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
15838"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
15839"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
15840"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
15841"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
15842"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
15843"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
15844"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
15845"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
15846"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
15847"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
15848"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
15849"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
15850"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
15851"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
15852"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
15853"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
15854"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
15855"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
15856"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
15857"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
15858"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
15859"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
15860"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
15861"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
15862"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
15863"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
15864"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
15865"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
15866"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
15867"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
15868"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
15869"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
15870"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
15871"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
15872"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
15873"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
15874"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
15875"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
15876"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
15877"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
15878"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
15879"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
15880"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
15881"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
15882"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
15883"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
15884"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
15885"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
15886"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
15887"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
15888"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
15889"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
15890"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
15891"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
15892"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
15893"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
15894"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
15895"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
15896"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
15897"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
15898"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
15899"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
15900"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
15901"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
15902"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
15903"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
15904"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
15905"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
15906"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
15907"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
15908"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
15909"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
15910"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
15911"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
15912"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
15913"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
15914"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
15915"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
15916"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
15917"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
15918"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
15919"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
15920"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
15921"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
15922"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
15923"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
15924"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
15925"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
15926"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
15927"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
15928"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
15929"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
15930"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
15931"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
15932"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
15933"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
15934"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
15935"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
15936"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
15937"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
15938"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
15939"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
15940"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
15941"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
15942"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
15943"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
15944"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
15945"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
15946"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
15947"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
15948"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
15949"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
15950"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
15951"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
15952"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
15953"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
15954"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
15955"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
15956"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
15957"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
15958"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
15959"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
15960"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
15961"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
15962"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
15963"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
15964"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
15965"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
15966"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
15967"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
15968"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
15969"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
15970"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
15971"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
15972"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
15973"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
15974"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
15975"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
15976"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
15977"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
15978"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
15979"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
15980"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
15981"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
15982"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
15983"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
15984"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
15985"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
15986"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
15987"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
15988"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
15989"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 15990</script>
ab78acc6 15991 <script>/*
3af2954a
IC
15992 * Copyright (c) 2013 Pavol Rusnak
15993 *
15994 * Permission is hereby granted, free of charge, to any person obtaining a copy of
15995 * this software and associated documentation files (the "Software"), to deal in
15996 * the Software without restriction, including without limitation the rights to
15997 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
15998 * of the Software, and to permit persons to whom the Software is furnished to do
15999 * so, subject to the following conditions:
16000 *
16001 * The above copyright notice and this permission notice shall be included in all
16002 * copies or substantial portions of the Software.
16003 *
16004 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16005 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16006 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16007 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
16008 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
16009 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
16010 */
16011
16012/*
16013 * Javascript port from python by Ian Coleman
16014 *
80c4dd2a
IC
16015 * Requires code from sjcl
16016 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
16017 */
16018
16019var Mnemonic = function(language) {
16020
16021 var PBKDF2_ROUNDS = 2048;
16022 var RADIX = 2048;
16023
16024 var self = this;
16025 var wordlist = [];
16026
80c4dd2a
IC
16027 var hmacSHA512 = function(key) {
16028 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
16029 this.encrypt = function() {
16030 return hasher.encrypt.apply(hasher, arguments);
16031 };
16032 };
16033
3af2954a
IC
16034 function init() {
16035 wordlist = WORDLISTS[language];
16036 if (wordlist.length != RADIX) {
16037 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
16038 throw err;
16039 }
16040 }
16041
16042 self.generate = function(strength) {
16043 strength = strength || 128;
16044 var r = strength % 32;
16045 if (r > 0) {
16046 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
16047 }
16048 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
16049 if (!hasStrongCrypto) {
16050 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
16051 }
16052 var buffer = new Uint8Array(strength / 8);
16053 var data = crypto.getRandomValues(buffer);
16054 return self.toMnemonic(data);
16055 }
16056
80c4dd2a
IC
16057 self.toMnemonic = function(byteArray) {
16058 if (byteArray.length % 4 > 0) {
16059 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
16060 }
16061
16062 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
16063 var data = byteArrayToWordArray(byteArray);
16064 var hash = sjcl.hash.sha256.hash(data);
16065 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
16066
16067 // b is a binary string, eg '00111010101100...'
16068 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
16069 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
16070 //
16071 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
16072 // c = bin(int(h, 16))[2:].zfill(256)
16073 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
16074 var a = byteArrayToBinaryString(byteArray);
16075 var c = zfill(hexStringToBinaryString(h), 256);
16076 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
16077 // b = line1 + line2
16078 var b = a + d;
16079
16080 var result = [];
16081 var blen = b.length / 11;
16082 for (var i=0; i<blen; i++) {
16083 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
16084 result.push(wordlist[idx]);
16085 }
0515eeec 16086 return self.joinWords(result);
3af2954a
IC
16087 }
16088
16089 self.check = function(mnemonic) {
0515eeec 16090 var mnemonic = self.splitWords(mnemonic);
3af2954a
IC
16091 if (mnemonic.length % 3 > 0) {
16092 return false
16093 }
16094 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
16095 var idx = [];
16096 for (var i=0; i<mnemonic.length; i++) {
16097 var word = mnemonic[i];
16098 var wordIndex = wordlist.indexOf(word);
16099 if (wordIndex == -1) {
16100 return false;
16101 }
16102 var binaryIndex = zfill(wordIndex.toString(2), 11);
16103 idx.push(binaryIndex);
16104 }
16105 var b = idx.join('');
16106 var l = b.length;
16107 //d = b[:l / 33 * 32]
16108 //h = b[-l / 33:]
16109 var d = b.substring(0, l / 33 * 32);
16110 var h = b.substring(l - l / 33, l);
16111 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 16112 var nd = binaryStringToWordArray(d);
3af2954a 16113 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
16114 var ndHash = sjcl.hash.sha256.hash(nd);
16115 var ndHex = sjcl.codec.hex.fromBits(ndHash);
16116 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
16117 var nh = ndBstr.substring(0,l/33);
16118 return h == nh;
16119 }
16120
16121 self.toSeed = function(mnemonic, passphrase) {
16122 passphrase = passphrase || '';
0515eeec 16123 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
3af2954a
IC
16124 passphrase = self.normalizeString(passphrase)
16125 passphrase = "mnemonic" + passphrase;
80c4dd2a
IC
16126 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
16127 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
16128 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
16129 var hashHex = sjcl.codec.hex.fromBits(result);
16130 return hashHex;
3af2954a
IC
16131 }
16132
0515eeec
IC
16133 self.splitWords = function(mnemonic) {
16134 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
16135 }
16136
16137 self.joinWords = function(words) {
16138 // Set space correctly depending on the language
16139 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
16140 var space = " ";
16141 if (language == "japanese") {
16142 space = "\u3000"; // ideographic space
16143 }
16144 return words.join(space);
16145 }
16146
3af2954a
IC
16147 self.normalizeString = function(str) {
16148 if (typeof str.normalize == "function") {
16149 return str.normalize("NFKD");
16150 }
16151 else {
16152 // TODO decide how to handle this in the future.
16153 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
16154 return str;
16155 }
16156 }
16157
80c4dd2a
IC
16158 function byteArrayToWordArray(data) {
16159 var a = [];
16160 for (var i=0; i<data.length/4; i++) {
16161 v = 0;
16162 v += data[i*4 + 0] << 8 * 3;
16163 v += data[i*4 + 1] << 8 * 2;
16164 v += data[i*4 + 2] << 8 * 1;
16165 v += data[i*4 + 3] << 8 * 0;
16166 a.push(v);
16167 }
16168 return a;
16169 }
16170
3af2954a
IC
16171 function byteArrayToBinaryString(data) {
16172 var bin = "";
16173 for (var i=0; i<data.length; i++) {
16174 bin += zfill(data[i].toString(2), 8);
16175 }
16176 return bin;
16177 }
16178
80c4dd2a
IC
16179 function hexStringToBinaryString(hexString) {
16180 binaryString = "";
16181 for (var i=0; i<hexString.length; i++) {
16182 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
16183 }
16184 return binaryString;
16185 }
16186
16187 function binaryStringToWordArray(binary) {
16188 var aLen = binary.length / 32;
16189 var a = [];
16190 for (var i=0; i<aLen; i++) {
16191 var valueStr = binary.substring(0,32);
3af2954a 16192 var value = parseInt(valueStr, 2);
80c4dd2a
IC
16193 a.push(value);
16194 binary = binary.slice(32);
3af2954a 16195 }
80c4dd2a 16196 return a;
3af2954a
IC
16197 }
16198
16199 // Pad a numeric string on the left with zero digits until the given width
16200 // is reached.
16201 // Note this differs to the python implementation because it does not
16202 // handle numbers starting with a sign.
16203 function zfill(source, length) {
16204 source = source.toString();
16205 while (source.length < length) {
16206 source = '0' + source;
16207 }
16208 return source;
16209 }
16210
16211 init();
ebd8d4e8 16212
3af2954a 16213}
dc55c6b0 16214</script>
c6624d51
IC
16215 <script>window.Entropy = new (function() {
16216
16217 var matchers = {
16218 binary: /[0-1]/gi,
16219 base6: /[0-5]/gi,
16220 dice: /[1-6]/gi, // ie dice numbers
16221 base10: /[0-9]/gi,
16222 hex: /[0-9A-F]/gi,
16223 }
16224
16225 this.fromString = function(rawEntropyStr) {
16226 // Find type of entropy being used (binary, hex, dice etc)
16227 var base = getBase(rawEntropyStr);
16228 // Convert dice to base6 entropy (ie 1-6 to 0-5)
16229 if (base.str == "dice") {
16230 var newRawEntropyStr = "";
16231 for (var i=0; i<rawEntropyStr.length; i++) {
16232 var c = rawEntropyStr[i];
16233 if ("123456".indexOf(c) > -1) {
16234 newRawEntropyStr += (parseInt(c) - 1).toString();
16235 }
16236 else {
16237 newRawEntropyStr += c
16238 }
16239 }
16240 rawEntropyStr = newRawEntropyStr;
16241 base.str = "base 6 (dice)";
16242 base.matcher = matchers.base6;
54563907 16243 }
c6624d51
IC
16244 var entropyParts = rawEntropyStr.match(base.matcher) || [];
16245 var entropyStr = entropyParts.join("");
16246 // Detect empty entropy
16247 if (entropyStr.length == 0) {
16248 return {
16249 binaryStr: "",
16250 hexStr: "",
16251 cleanStr: "",
16252 base: base,
16253 };
54563907 16254 }
c6624d51
IC
16255 // Pull leading zeros off
16256 var leadingZeros = "";
16257 while (entropyStr[0] == "0") {
16258 leadingZeros += "0";
16259 entropyStr = entropyStr.substring(1);
ebd8d4e8 16260 }
c6624d51
IC
16261 // Convert leading zeros to binary equivalent
16262 var numBinLeadingZeros = Math.ceil(Math.log2(base.asInt) * leadingZeros.length);
16263 var binLeadingZeros = "";
16264 for (var i=0; i<numBinLeadingZeros; i++) {
16265 binLeadingZeros += "0";
ebd8d4e8 16266 }
c6624d51
IC
16267 // Convert leading zeros to hex equivalent
16268 var numHexLeadingZeros = Math.floor(numBinLeadingZeros / 4);
16269 var hexLeadingZeros = "";
16270 for (var i=0; i<numHexLeadingZeros; i++) {
16271 hexLeadingZeros += "0";
16272 }
16273 // Handle entropy of zero
16274 if (entropyStr == "") {
16275 return {
16276 binaryStr: binLeadingZeros,
16277 hexStr: hexLeadingZeros || "0",
16278 cleanStr: leadingZeros,
16279 base: base,
efe41586
IC
16280 }
16281 }
c6624d51
IC
16282 // If using hex, should always be multiples of 4 bits, which can get
16283 // out of sync if first number has leading 0 bits, eg 2 in hex is 0010
16284 // which would show up as 10, thus missing 2 bits it should have.
16285 if (base.asInt == 16) {
16286 var firstDigit = parseInt(entropyStr[0], 16);
16287 if (firstDigit >= 4 && firstDigit < 8) {
16288 binLeadingZeros += "0";
16289 }
16290 else if (firstDigit >= 2 && firstDigit < 4) {
16291 binLeadingZeros += "00";
16292 }
16293 else if (firstDigit >= 1 && firstDigit < 2) {
16294 binLeadingZeros += "000";
16295 }
efe41586 16296 }
c6624d51
IC
16297 // Convert entropy to different foramts
16298 var entropyInt = BigInteger.parse(entropyStr, base.asInt);
16299 var entropyBin = binLeadingZeros + entropyInt.toString(2);
16300 var entropyHex = hexLeadingZeros + entropyInt.toString(16);
16301 var entropyClean = leadingZeros + entropyStr;
16302 var e = {
16303 binaryStr: entropyBin,
16304 hexStr: entropyHex,
16305 cleanStr: entropyClean,
16306 base: base,
efe41586 16307 }
c6624d51
IC
16308 return e;
16309 }
16310
16311 function getBase(str) {
16312 // Need to get the lowest base for the supplied entropy.
16313 // This prevents interpreting, say, dice rolls as hexadecimal.
16314 var binaryMatches = str.match(matchers.binary) || [];
16315 var base6Matches = str.match(matchers.base6) || [];
16316 var diceMatches = str.match(matchers.dice) || [];
16317 var base10Matches = str.match(matchers.base10) || [];
16318 var hexMatches = str.match(matchers.hex) || [];
16319 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
16320 if (binaryMatches.length == hexMatches.length) {
16321 return {
16322 matcher: matchers.binary,
16323 asInt: 2,
16324 str: "binary",
16325 }
ebd8d4e8 16326 }
c6624d51
IC
16327 if (diceMatches.length == hexMatches.length) {
16328 return {
16329 matcher: matchers.dice,
16330 asInt: 6,
16331 str: "dice",
ebd8d4e8 16332 }
c6624d51
IC
16333 }
16334 if (base6Matches.length == hexMatches.length) {
16335 return {
16336 matcher: matchers.base6,
16337 asInt: 6,
16338 str: "base 6",
0515eeec 16339 }
c6624d51
IC
16340 }
16341 if (base10Matches.length == hexMatches.length) {
16342 return {
16343 matcher: matchers.base10,
16344 asInt: 10,
16345 str: "base 10",
0515eeec 16346 }
c6624d51
IC
16347 }
16348 return {
16349 matcher: matchers.hex,
16350 asInt: 16,
16351 str: "hexadecimal",
16352 }
0515eeec
IC
16353 }
16354
c6624d51
IC
16355 // Polyfill for Math.log2
16356 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
16357 Math.log2 = Math.log2 || function(x) {
16358 return Math.log(x) * Math.LOG2E;
16359 };
ebd8d4e8 16360
c6624d51 16361})();
ebd8d4e8 16362
1b12b2f5 16363
c6624d51
IC
16364// BigInteger library included here because
16365// only the entropy library depends on it
16366// so if entropy detection is removed so is the dependency
ebd8d4e8 16367
ebd8d4e8 16368
c6624d51
IC
16369/*
16370 JavaScript BigInteger library version 0.9.1
16371 http://silentmatt.com/biginteger/
ebd8d4e8 16372
c6624d51
IC
16373 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
16374 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
16375 Licensed under the MIT license.
efe41586 16376
c6624d51
IC
16377 Support for arbitrary internal representation base was added by
16378 Vitaly Magerya.
16379*/
efe41586 16380
c6624d51
IC
16381/*
16382 File: biginteger.js
16383
16384 Exports:
16385
16386 <BigInteger>
16387*/
16388(function(exports) {
16389"use strict";
16390/*
16391 Class: BigInteger
16392 An arbitrarily-large integer.
16393
16394 <BigInteger> objects should be considered immutable. None of the "built-in"
16395 methods modify *this* or their arguments. All properties should be
16396 considered private.
16397
16398 All the methods of <BigInteger> instances can be called "statically". The
16399 static versions are convenient if you don't already have a <BigInteger>
16400 object.
16401
16402 As an example, these calls are equivalent.
16403
16404 > BigInteger(4).multiply(5); // returns BigInteger(20);
16405 > BigInteger.multiply(4, 5); // returns BigInteger(20);
16406
16407 > var a = 42;
16408 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
16409*/
16410
16411var CONSTRUCT = {}; // Unique token to call "private" version of constructor
16412
16413/*
16414 Constructor: BigInteger()
16415 Convert a value to a <BigInteger>.
16416
16417 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
16418 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
16419 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
16420 without a radix argument.
16421
16422 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
16423 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
16424 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
16425 > var n3 = BigInteger(n2); // Return n2, unchanged
16426
16427 The constructor form only takes an array and a sign. *n* must be an
16428 array of numbers in little-endian order, where each digit is between 0
16429 and BigInteger.base. The second parameter sets the sign: -1 for
16430 negative, +1 for positive, or 0 for zero. The array is *not copied and
16431 may be modified*. If the array contains only zeros, the sign parameter
16432 is ignored and is forced to zero.
16433
16434 > new BigInteger([5], -1): create a new BigInteger with value -5
16435
16436 Parameters:
16437
16438 n - Value to convert to a <BigInteger>.
16439
16440 Returns:
16441
16442 A <BigInteger> value.
16443
16444 See Also:
16445
16446 <parse>, <BigInteger>
16447*/
16448function BigInteger(n, s, token) {
16449 if (token !== CONSTRUCT) {
16450 if (n instanceof BigInteger) {
16451 return n;
16452 }
16453 else if (typeof n === "undefined") {
16454 return ZERO;
16455 }
16456 return BigInteger.parse(n);
16457 }
16458
16459 n = n || []; // Provide the nullary constructor for subclasses.
16460 while (n.length && !n[n.length - 1]) {
16461 --n.length;
16462 }
16463 this._d = n;
16464 this._s = n.length ? (s || 1) : 0;
16465}
16466
16467BigInteger._construct = function(n, s) {
16468 return new BigInteger(n, s, CONSTRUCT);
16469};
16470
16471// Base-10 speedup hacks in parse, toString, exp10 and log functions
16472// require base to be a power of 10. 10^7 is the largest such power
16473// that won't cause a precision loss when digits are multiplied.
16474var BigInteger_base = 10000000;
16475var BigInteger_base_log10 = 7;
16476
16477BigInteger.base = BigInteger_base;
16478BigInteger.base_log10 = BigInteger_base_log10;
16479
16480var ZERO = new BigInteger([], 0, CONSTRUCT);
16481// Constant: ZERO
16482// <BigInteger> 0.
16483BigInteger.ZERO = ZERO;
16484
16485var ONE = new BigInteger([1], 1, CONSTRUCT);
16486// Constant: ONE
16487// <BigInteger> 1.
16488BigInteger.ONE = ONE;
16489
16490var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
16491// Constant: M_ONE
16492// <BigInteger> -1.
16493BigInteger.M_ONE = M_ONE;
16494
16495// Constant: _0
16496// Shortcut for <ZERO>.
16497BigInteger._0 = ZERO;
16498
16499// Constant: _1
16500// Shortcut for <ONE>.
16501BigInteger._1 = ONE;
16502
16503/*
16504 Constant: small
16505 Array of <BigIntegers> from 0 to 36.
16506
16507 These are used internally for parsing, but useful when you need a "small"
16508 <BigInteger>.
16509
16510 See Also:
16511
16512 <ZERO>, <ONE>, <_0>, <_1>
16513*/
16514BigInteger.small = [
16515 ZERO,
16516 ONE,
16517 /* Assuming BigInteger_base > 36 */
16518 new BigInteger( [2], 1, CONSTRUCT),
16519 new BigInteger( [3], 1, CONSTRUCT),
16520 new BigInteger( [4], 1, CONSTRUCT),
16521 new BigInteger( [5], 1, CONSTRUCT),
16522 new BigInteger( [6], 1, CONSTRUCT),
16523 new BigInteger( [7], 1, CONSTRUCT),
16524 new BigInteger( [8], 1, CONSTRUCT),
16525 new BigInteger( [9], 1, CONSTRUCT),
16526 new BigInteger([10], 1, CONSTRUCT),
16527 new BigInteger([11], 1, CONSTRUCT),
16528 new BigInteger([12], 1, CONSTRUCT),
16529 new BigInteger([13], 1, CONSTRUCT),
16530 new BigInteger([14], 1, CONSTRUCT),
16531 new BigInteger([15], 1, CONSTRUCT),
16532 new BigInteger([16], 1, CONSTRUCT),
16533 new BigInteger([17], 1, CONSTRUCT),
16534 new BigInteger([18], 1, CONSTRUCT),
16535 new BigInteger([19], 1, CONSTRUCT),
16536 new BigInteger([20], 1, CONSTRUCT),
16537 new BigInteger([21], 1, CONSTRUCT),
16538 new BigInteger([22], 1, CONSTRUCT),
16539 new BigInteger([23], 1, CONSTRUCT),
16540 new BigInteger([24], 1, CONSTRUCT),
16541 new BigInteger([25], 1, CONSTRUCT),
16542 new BigInteger([26], 1, CONSTRUCT),
16543 new BigInteger([27], 1, CONSTRUCT),
16544 new BigInteger([28], 1, CONSTRUCT),
16545 new BigInteger([29], 1, CONSTRUCT),
16546 new BigInteger([30], 1, CONSTRUCT),
16547 new BigInteger([31], 1, CONSTRUCT),
16548 new BigInteger([32], 1, CONSTRUCT),
16549 new BigInteger([33], 1, CONSTRUCT),
16550 new BigInteger([34], 1, CONSTRUCT),
16551 new BigInteger([35], 1, CONSTRUCT),
16552 new BigInteger([36], 1, CONSTRUCT)
16553];
16554
16555// Used for parsing/radix conversion
16556BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
16557
16558/*
16559 Method: toString
16560 Convert a <BigInteger> to a string.
16561
16562 When *base* is greater than 10, letters are upper case.
16563
16564 Parameters:
16565
16566 base - Optional base to represent the number in (default is base 10).
16567 Must be between 2 and 36 inclusive, or an Error will be thrown.
16568
16569 Returns:
16570
16571 The string representation of the <BigInteger>.
16572*/
16573BigInteger.prototype.toString = function(base) {
16574 base = +base || 10;
16575 if (base < 2 || base > 36) {
16576 throw new Error("illegal radix " + base + ".");
16577 }
16578 if (this._s === 0) {
16579 return "0";
16580 }
16581 if (base === 10) {
16582 var str = this._s < 0 ? "-" : "";
16583 str += this._d[this._d.length - 1].toString();
16584 for (var i = this._d.length - 2; i >= 0; i--) {
16585 var group = this._d[i].toString();
16586 while (group.length < BigInteger_base_log10) group = '0' + group;
16587 str += group;
16588 }
16589 return str;
16590 }
16591 else {
16592 var numerals = BigInteger.digits;
16593 base = BigInteger.small[base];
16594 var sign = this._s;
16595
16596 var n = this.abs();
16597 var digits = [];
16598 var digit;
16599
16600 while (n._s !== 0) {
16601 var divmod = n.divRem(base);
16602 n = divmod[0];
16603 digit = divmod[1];
16604 // TODO: This could be changed to unshift instead of reversing at the end.
16605 // Benchmark both to compare speeds.
16606 digits.push(numerals[digit.valueOf()]);
16607 }
16608 return (sign < 0 ? "-" : "") + digits.reverse().join("");
16609 }
16610};
16611
16612// Verify strings for parsing
16613BigInteger.radixRegex = [
16614 /^$/,
16615 /^$/,
16616 /^[01]*$/,
16617 /^[012]*$/,
16618 /^[0-3]*$/,
16619 /^[0-4]*$/,
16620 /^[0-5]*$/,
16621 /^[0-6]*$/,
16622 /^[0-7]*$/,
16623 /^[0-8]*$/,
16624 /^[0-9]*$/,
16625 /^[0-9aA]*$/,
16626 /^[0-9abAB]*$/,
16627 /^[0-9abcABC]*$/,
16628 /^[0-9a-dA-D]*$/,
16629 /^[0-9a-eA-E]*$/,
16630 /^[0-9a-fA-F]*$/,
16631 /^[0-9a-gA-G]*$/,
16632 /^[0-9a-hA-H]*$/,
16633 /^[0-9a-iA-I]*$/,
16634 /^[0-9a-jA-J]*$/,
16635 /^[0-9a-kA-K]*$/,
16636 /^[0-9a-lA-L]*$/,
16637 /^[0-9a-mA-M]*$/,
16638 /^[0-9a-nA-N]*$/,
16639 /^[0-9a-oA-O]*$/,
16640 /^[0-9a-pA-P]*$/,
16641 /^[0-9a-qA-Q]*$/,
16642 /^[0-9a-rA-R]*$/,
16643 /^[0-9a-sA-S]*$/,
16644 /^[0-9a-tA-T]*$/,
16645 /^[0-9a-uA-U]*$/,
16646 /^[0-9a-vA-V]*$/,
16647 /^[0-9a-wA-W]*$/,
16648 /^[0-9a-xA-X]*$/,
16649 /^[0-9a-yA-Y]*$/,
16650 /^[0-9a-zA-Z]*$/
16651];
16652
16653/*
16654 Function: parse
16655 Parse a string into a <BigInteger>.
16656
16657 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
16658 *base* is not provided, it will be guessed based on the leading characters
16659 of *s* as follows:
16660
16661 - "0x" or "0X": *base* = 16
16662 - "0c" or "0C": *base* = 8
16663 - "0b" or "0B": *base* = 2
16664 - else: *base* = 10
16665
16666 If no base is provided, or *base* is 10, the number can be in exponential
16667 form. For example, these are all valid:
16668
16669 > BigInteger.parse("1e9"); // Same as "1000000000"
16670 > BigInteger.parse("1.234*10^3"); // Same as 1234
16671 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
16672
16673 If any characters fall outside the range defined by the radix, an exception
16674 will be thrown.
16675
16676 Parameters:
16677
16678 s - The string to parse.
16679 base - Optional radix (default is to guess based on *s*).
16680
16681 Returns:
16682
16683 a <BigInteger> instance.
16684*/
16685BigInteger.parse = function(s, base) {
16686 // Expands a number in exponential form to decimal form.
16687 // expandExponential("-13.441*10^5") === "1344100";
16688 // expandExponential("1.12300e-1") === "0.112300";
16689 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
16690 function expandExponential(str) {
16691 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
16692
16693 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
16694 c = +c;
16695 var l = c < 0;
16696 var i = n.length + c;
16697 x = (l ? n : f).length;
16698 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
16699 var z = (new Array(c + 1)).join("0");
16700 var r = n + f;
16701 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
16702 });
16703 }
16704
16705 s = s.toString();
16706 if (typeof base === "undefined" || +base === 10) {
16707 s = expandExponential(s);
16708 }
16709
16710 var prefixRE;
16711 if (typeof base === "undefined") {
16712 prefixRE = '0[xcb]';
16713 }
16714 else if (base == 16) {
16715 prefixRE = '0x';
16716 }
16717 else if (base == 8) {
16718 prefixRE = '0c';
16719 }
16720 else if (base == 2) {
16721 prefixRE = '0b';
16722 }
16723 else {
16724 prefixRE = '';
16725 }
16726 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
16727 if (parts) {
16728 var sign = parts[1] || "+";
16729 var baseSection = parts[2] || "";
16730 var digits = parts[3] || "";
16731
16732 if (typeof base === "undefined") {
16733 // Guess base
16734 if (baseSection === "0x" || baseSection === "0X") { // Hex
16735 base = 16;
16736 }
16737 else if (baseSection === "0c" || baseSection === "0C") { // Octal
16738 base = 8;
16739 }
16740 else if (baseSection === "0b" || baseSection === "0B") { // Binary
16741 base = 2;
16742 }
16743 else {
16744 base = 10;
16745 }
16746 }
16747 else if (base < 2 || base > 36) {
16748 throw new Error("Illegal radix " + base + ".");
16749 }
16750
16751 base = +base;
16752
16753 // Check for digits outside the range
16754 if (!(BigInteger.radixRegex[base].test(digits))) {
16755 throw new Error("Bad digit for radix " + base);
16756 }
16757
16758 // Strip leading zeros, and convert to array
16759 digits = digits.replace(/^0+/, "").split("");
16760 if (digits.length === 0) {
16761 return ZERO;
16762 }
16763
16764 // Get the sign (we know it's not zero)
16765 sign = (sign === "-") ? -1 : 1;
16766
16767 // Optimize 10
16768 if (base == 10) {
16769 var d = [];
16770 while (digits.length >= BigInteger_base_log10) {
16771 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
16772 }
16773 d.push(parseInt(digits.join(''), 10));
16774 return new BigInteger(d, sign, CONSTRUCT);
16775 }
16776
16777 // Do the conversion
16778 var d = ZERO;
16779 base = BigInteger.small[base];
16780 var small = BigInteger.small;
16781 for (var i = 0; i < digits.length; i++) {
16782 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
16783 }
16784 return new BigInteger(d._d, sign, CONSTRUCT);
16785 }
16786 else {
16787 throw new Error("Invalid BigInteger format: " + s);
16788 }
16789};
16790
16791/*
16792 Function: add
16793 Add two <BigIntegers>.
16794
16795 Parameters:
16796
16797 n - The number to add to *this*. Will be converted to a <BigInteger>.
16798
16799 Returns:
16800
16801 The numbers added together.
16802
16803 See Also:
16804
16805 <subtract>, <multiply>, <quotient>, <next>
16806*/
16807BigInteger.prototype.add = function(n) {
16808 if (this._s === 0) {
16809 return BigInteger(n);
16810 }
16811
16812 n = BigInteger(n);
16813 if (n._s === 0) {
16814 return this;
16815 }
16816 if (this._s !== n._s) {
16817 n = n.negate();
16818 return this.subtract(n);
16819 }
16820
16821 var a = this._d;
16822 var b = n._d;
16823 var al = a.length;
16824 var bl = b.length;
16825 var sum = new Array(Math.max(al, bl) + 1);
16826 var size = Math.min(al, bl);
16827 var carry = 0;
16828 var digit;
16829
16830 for (var i = 0; i < size; i++) {
16831 digit = a[i] + b[i] + carry;
16832 sum[i] = digit % BigInteger_base;
16833 carry = (digit / BigInteger_base) | 0;
16834 }
16835 if (bl > al) {
16836 a = b;
16837 al = bl;
16838 }
16839 for (i = size; carry && i < al; i++) {
16840 digit = a[i] + carry;
16841 sum[i] = digit % BigInteger_base;
16842 carry = (digit / BigInteger_base) | 0;
16843 }
16844 if (carry) {
16845 sum[i] = carry;
16846 }
16847
16848 for ( ; i < al; i++) {
16849 sum[i] = a[i];
16850 }
16851
16852 return new BigInteger(sum, this._s, CONSTRUCT);
16853};
16854
16855/*
16856 Function: negate
16857 Get the additive inverse of a <BigInteger>.
16858
16859 Returns:
16860
16861 A <BigInteger> with the same magnatude, but with the opposite sign.
16862
16863 See Also:
16864
16865 <abs>
16866*/
16867BigInteger.prototype.negate = function() {
16868 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
16869};
16870
16871/*
16872 Function: abs
16873 Get the absolute value of a <BigInteger>.
16874
16875 Returns:
16876
16877 A <BigInteger> with the same magnatude, but always positive (or zero).
16878
16879 See Also:
16880
16881 <negate>
16882*/
16883BigInteger.prototype.abs = function() {
16884 return (this._s < 0) ? this.negate() : this;
16885};
16886
16887/*
16888 Function: subtract
16889 Subtract two <BigIntegers>.
16890
16891 Parameters:
16892
16893 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
16894
16895 Returns:
16896
16897 The *n* subtracted from *this*.
16898
16899 See Also:
16900
16901 <add>, <multiply>, <quotient>, <prev>
16902*/
16903BigInteger.prototype.subtract = function(n) {
16904 if (this._s === 0) {
16905 return BigInteger(n).negate();
16906 }
16907
16908 n = BigInteger(n);
16909 if (n._s === 0) {
16910 return this;
16911 }
16912 if (this._s !== n._s) {
16913 n = n.negate();
16914 return this.add(n);
16915 }
16916
16917 var m = this;
16918 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
16919 if (this._s < 0) {
16920 m = new BigInteger(n._d, 1, CONSTRUCT);
16921 n = new BigInteger(this._d, 1, CONSTRUCT);
16922 }
16923
16924 // Both are positive => a - b
16925 var sign = m.compareAbs(n);
16926 if (sign === 0) {
16927 return ZERO;
16928 }
16929 else if (sign < 0) {
16930 // swap m and n
16931 var t = n;
16932 n = m;
16933 m = t;
16934 }
16935
16936 // a > b
16937 var a = m._d;
16938 var b = n._d;
16939 var al = a.length;
16940 var bl = b.length;
16941 var diff = new Array(al); // al >= bl since a > b
16942 var borrow = 0;
16943 var i;
16944 var digit;
16945
16946 for (i = 0; i < bl; i++) {
16947 digit = a[i] - borrow - b[i];
16948 if (digit < 0) {
16949 digit += BigInteger_base;
16950 borrow = 1;
16951 }
16952 else {
16953 borrow = 0;
16954 }
16955 diff[i] = digit;
16956 }
16957 for (i = bl; i < al; i++) {
16958 digit = a[i] - borrow;
16959 if (digit < 0) {
16960 digit += BigInteger_base;
16961 }
16962 else {
16963 diff[i++] = digit;
16964 break;
16965 }
16966 diff[i] = digit;
16967 }
16968 for ( ; i < al; i++) {
16969 diff[i] = a[i];
16970 }
16971
16972 return new BigInteger(diff, sign, CONSTRUCT);
16973};
16974
16975(function() {
16976 function addOne(n, sign) {
16977 var a = n._d;
16978 var sum = a.slice();
16979 var carry = true;
16980 var i = 0;
16981
16982 while (true) {
16983 var digit = (a[i] || 0) + 1;
16984 sum[i] = digit % BigInteger_base;
16985 if (digit <= BigInteger_base - 1) {
16986 break;
16987 }
16988 ++i;
16989 }
16990
16991 return new BigInteger(sum, sign, CONSTRUCT);
16992 }
16993
16994 function subtractOne(n, sign) {
16995 var a = n._d;
16996 var sum = a.slice();
16997 var borrow = true;
16998 var i = 0;
16999
17000 while (true) {
17001 var digit = (a[i] || 0) - 1;
17002 if (digit < 0) {
17003 sum[i] = digit + BigInteger_base;
17004 }
17005 else {
17006 sum[i] = digit;
17007 break;
17008 }
17009 ++i;
17010 }
17011
17012 return new BigInteger(sum, sign, CONSTRUCT);
17013 }
17014
17015 /*
17016 Function: next
17017 Get the next <BigInteger> (add one).
17018
17019 Returns:
17020
17021 *this* + 1.
17022
17023 See Also:
17024
17025 <add>, <prev>
17026 */
17027 BigInteger.prototype.next = function() {
17028 switch (this._s) {
17029 case 0:
17030 return ONE;
17031 case -1:
17032 return subtractOne(this, -1);
17033 // case 1:
17034 default:
17035 return addOne(this, 1);
17036 }
17037 };
17038
17039 /*
17040 Function: prev
17041 Get the previous <BigInteger> (subtract one).
17042
17043 Returns:
17044
17045 *this* - 1.
17046
17047 See Also:
17048
17049 <next>, <subtract>
17050 */
17051 BigInteger.prototype.prev = function() {
17052 switch (this._s) {
17053 case 0:
17054 return M_ONE;
17055 case -1:
17056 return addOne(this, -1);
17057 // case 1:
17058 default:
17059 return subtractOne(this, 1);
17060 }
17061 };
17062})();
17063
17064/*
17065 Function: compareAbs
17066 Compare the absolute value of two <BigIntegers>.
17067
17068 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
17069
17070 Parameters:
17071
17072 n - The number to compare to *this*. Will be converted to a <BigInteger>.
17073
17074 Returns:
17075
17076 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
17077
17078 See Also:
17079
17080 <compare>, <abs>
17081*/
17082BigInteger.prototype.compareAbs = function(n) {
17083 if (this === n) {
17084 return 0;
17085 }
17086
17087 if (!(n instanceof BigInteger)) {
17088 if (!isFinite(n)) {
17089 return(isNaN(n) ? n : -1);
17090 }
17091 n = BigInteger(n);
17092 }
17093
17094 if (this._s === 0) {
17095 return (n._s !== 0) ? -1 : 0;
17096 }
17097 if (n._s === 0) {
17098 return 1;
17099 }
17100
17101 var l = this._d.length;
17102 var nl = n._d.length;
17103 if (l < nl) {
17104 return -1;
17105 }
17106 else if (l > nl) {
17107 return 1;
17108 }
17109
17110 var a = this._d;
17111 var b = n._d;
17112 for (var i = l-1; i >= 0; i--) {
17113 if (a[i] !== b[i]) {
17114 return a[i] < b[i] ? -1 : 1;
17115 }
17116 }
17117
17118 return 0;
17119};
17120
17121/*
17122 Function: compare
17123 Compare two <BigIntegers>.
17124
17125 Parameters:
17126
17127 n - The number to compare to *this*. Will be converted to a <BigInteger>.
17128
17129 Returns:
17130
17131 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
17132
17133 See Also:
17134
17135 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
17136*/
17137BigInteger.prototype.compare = function(n) {
17138 if (this === n) {
17139 return 0;
17140 }
17141
17142 n = BigInteger(n);
17143
17144 if (this._s === 0) {
17145 return -n._s;
17146 }
17147
17148 if (this._s === n._s) { // both positive or both negative
17149 var cmp = this.compareAbs(n);
17150 return cmp * this._s;
17151 }
17152 else {
17153 return this._s;
17154 }
17155};
17156
17157/*
17158 Function: isUnit
17159 Return true iff *this* is either 1 or -1.
17160
17161 Returns:
17162
17163 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
17164
17165 See Also:
17166
17167 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
17168 <BigInteger.ONE>, <BigInteger.M_ONE>
17169*/
17170BigInteger.prototype.isUnit = function() {
17171 return this === ONE ||
17172 this === M_ONE ||
17173 (this._d.length === 1 && this._d[0] === 1);
17174};
17175
17176/*
17177 Function: multiply
17178 Multiply two <BigIntegers>.
17179
17180 Parameters:
17181
17182 n - The number to multiply *this* by. Will be converted to a
17183 <BigInteger>.
17184
17185 Returns:
17186
17187 The numbers multiplied together.
17188
17189 See Also:
17190
17191 <add>, <subtract>, <quotient>, <square>
17192*/
17193BigInteger.prototype.multiply = function(n) {
17194 // TODO: Consider adding Karatsuba multiplication for large numbers
17195 if (this._s === 0) {
17196 return ZERO;
17197 }
17198
17199 n = BigInteger(n);
17200 if (n._s === 0) {
17201 return ZERO;
17202 }
17203 if (this.isUnit()) {
17204 if (this._s < 0) {
17205 return n.negate();
17206 }
17207 return n;
17208 }
17209 if (n.isUnit()) {
17210 if (n._s < 0) {
17211 return this.negate();
17212 }
17213 return this;
17214 }
17215 if (this === n) {
17216 return this.square();
17217 }
17218
17219 var r = (this._d.length >= n._d.length);
17220 var a = (r ? this : n)._d; // a will be longer than b
17221 var b = (r ? n : this)._d;
17222 var al = a.length;
17223 var bl = b.length;
17224
17225 var pl = al + bl;
17226 var partial = new Array(pl);
17227 var i;
17228 for (i = 0; i < pl; i++) {
17229 partial[i] = 0;
17230 }
17231
17232 for (i = 0; i < bl; i++) {
17233 var carry = 0;
17234 var bi = b[i];
17235 var jlimit = al + i;
17236 var digit;
17237 for (var j = i; j < jlimit; j++) {
17238 digit = partial[j] + bi * a[j - i] + carry;
17239 carry = (digit / BigInteger_base) | 0;
17240 partial[j] = (digit % BigInteger_base) | 0;
17241 }
17242 if (carry) {
17243 digit = partial[j] + carry;
17244 carry = (digit / BigInteger_base) | 0;
17245 partial[j] = digit % BigInteger_base;
17246 }
17247 }
17248 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
17249};
17250
17251// Multiply a BigInteger by a single-digit native number
17252// Assumes that this and n are >= 0
17253// This is not really intended to be used outside the library itself
17254BigInteger.prototype.multiplySingleDigit = function(n) {
17255 if (n === 0 || this._s === 0) {
17256 return ZERO;
17257 }
17258 if (n === 1) {
17259 return this;
17260 }
17261
17262 var digit;
17263 if (this._d.length === 1) {
17264 digit = this._d[0] * n;
17265 if (digit >= BigInteger_base) {
17266 return new BigInteger([(digit % BigInteger_base)|0,
17267 (digit / BigInteger_base)|0], 1, CONSTRUCT);
17268 }
17269 return new BigInteger([digit], 1, CONSTRUCT);
17270 }
17271
17272 if (n === 2) {
17273 return this.add(this);
17274 }
17275 if (this.isUnit()) {
17276 return new BigInteger([n], 1, CONSTRUCT);
17277 }
17278
17279 var a = this._d;
17280 var al = a.length;
17281
17282 var pl = al + 1;
17283 var partial = new Array(pl);
17284 for (var i = 0; i < pl; i++) {
17285 partial[i] = 0;
17286 }
17287
17288 var carry = 0;
17289 for (var j = 0; j < al; j++) {
17290 digit = n * a[j] + carry;
17291 carry = (digit / BigInteger_base) | 0;
17292 partial[j] = (digit % BigInteger_base) | 0;
17293 }
17294 if (carry) {
17295 partial[j] = carry;
17296 }
17297
17298 return new BigInteger(partial, 1, CONSTRUCT);
17299};
17300
17301/*
17302 Function: square
17303 Multiply a <BigInteger> by itself.
17304
17305 This is slightly faster than regular multiplication, since it removes the
17306 duplicated multiplcations.
17307
17308 Returns:
17309
17310 > this.multiply(this)
17311
17312 See Also:
17313 <multiply>
17314*/
17315BigInteger.prototype.square = function() {
17316 // Normally, squaring a 10-digit number would take 100 multiplications.
17317 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
17318 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
17319 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
17320
17321 if (this._s === 0) {
17322 return ZERO;
17323 }
17324 if (this.isUnit()) {
17325 return ONE;
17326 }
17327
17328 var digits = this._d;
17329 var length = digits.length;
17330 var imult1 = new Array(length + length + 1);
17331 var product, carry, k;
17332 var i;
17333
17334 // Calculate diagonal
17335 for (i = 0; i < length; i++) {
17336 k = i * 2;
17337 product = digits[i] * digits[i];
17338 carry = (product / BigInteger_base) | 0;
17339 imult1[k] = product % BigInteger_base;
17340 imult1[k + 1] = carry;
17341 }
17342
17343 // Calculate repeating part
17344 for (i = 0; i < length; i++) {
17345 carry = 0;
17346 k = i * 2 + 1;
17347 for (var j = i + 1; j < length; j++, k++) {
17348 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
17349 carry = (product / BigInteger_base) | 0;
17350 imult1[k] = product % BigInteger_base;
17351 }
17352 k = length + i;
17353 var digit = carry + imult1[k];
17354 carry = (digit / BigInteger_base) | 0;
17355 imult1[k] = digit % BigInteger_base;
17356 imult1[k + 1] += carry;
17357 }
17358
17359 return new BigInteger(imult1, 1, CONSTRUCT);
17360};
17361
17362/*
17363 Function: quotient
17364 Divide two <BigIntegers> and truncate towards zero.
17365
17366 <quotient> throws an exception if *n* is zero.
17367
17368 Parameters:
17369
17370 n - The number to divide *this* by. Will be converted to a <BigInteger>.
17371
17372 Returns:
17373
17374 The *this* / *n*, truncated to an integer.
17375
17376 See Also:
17377
17378 <add>, <subtract>, <multiply>, <divRem>, <remainder>
17379*/
17380BigInteger.prototype.quotient = function(n) {
17381 return this.divRem(n)[0];
17382};
17383
17384/*
17385 Function: divide
17386 Deprecated synonym for <quotient>.
17387*/
17388BigInteger.prototype.divide = BigInteger.prototype.quotient;
17389
17390/*
17391 Function: remainder
17392 Calculate the remainder of two <BigIntegers>.
17393
17394 <remainder> throws an exception if *n* is zero.
17395
17396 Parameters:
17397
17398 n - The remainder after *this* is divided *this* by *n*. Will be
17399 converted to a <BigInteger>.
17400
17401 Returns:
17402
17403 *this* % *n*.
17404
17405 See Also:
17406
17407 <divRem>, <quotient>
17408*/
17409BigInteger.prototype.remainder = function(n) {
17410 return this.divRem(n)[1];
17411};
17412
17413/*
17414 Function: divRem
17415 Calculate the integer quotient and remainder of two <BigIntegers>.
17416
17417 <divRem> throws an exception if *n* is zero.
17418
17419 Parameters:
17420
17421 n - The number to divide *this* by. Will be converted to a <BigInteger>.
17422
17423 Returns:
17424
17425 A two-element array containing the quotient and the remainder.
17426
17427 > a.divRem(b)
17428
17429 is exactly equivalent to
17430
17431 > [a.quotient(b), a.remainder(b)]
17432
17433 except it is faster, because they are calculated at the same time.
17434
17435 See Also:
17436
17437 <quotient>, <remainder>
17438*/
17439BigInteger.prototype.divRem = function(n) {
17440 n = BigInteger(n);
17441 if (n._s === 0) {
17442 throw new Error("Divide by zero");
17443 }
17444 if (this._s === 0) {
17445 return [ZERO, ZERO];
17446 }
17447 if (n._d.length === 1) {
17448 return this.divRemSmall(n._s * n._d[0]);
17449 }
17450
17451 // Test for easy cases -- |n1| <= |n2|
17452 switch (this.compareAbs(n)) {
17453 case 0: // n1 == n2
17454 return [this._s === n._s ? ONE : M_ONE, ZERO];
17455 case -1: // |n1| < |n2|
17456 return [ZERO, this];
17457 }
17458
17459 var sign = this._s * n._s;
17460 var a = n.abs();
17461 var b_digits = this._d;
17462 var b_index = b_digits.length;
17463 var digits = n._d.length;
17464 var quot = [];
17465 var guess;
17466
17467 var part = new BigInteger([], 0, CONSTRUCT);
17468
17469 while (b_index) {
17470 part._d.unshift(b_digits[--b_index]);
17471 part = new BigInteger(part._d, 1, CONSTRUCT);
17472
17473 if (part.compareAbs(n) < 0) {
17474 quot.push(0);
17475 continue;
17476 }
17477 if (part._s === 0) {
17478 guess = 0;
17479 }
17480 else {
17481 var xlen = part._d.length, ylen = a._d.length;
17482 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
17483 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
17484 if (part._d.length > a._d.length) {
17485 // The length of part._d can either match a._d length,
17486 // or exceed it by one.
17487 highx = (highx+1)*BigInteger_base;
17488 }
17489 guess = Math.ceil(highx/highy);
17490 }
17491 do {
17492 var check = a.multiplySingleDigit(guess);
17493 if (check.compareAbs(part) <= 0) {
17494 break;
17495 }
17496 guess--;
17497 } while (guess);
17498
17499 quot.push(guess);
17500 if (!guess) {
17501 continue;
17502 }
17503 var diff = part.subtract(check);
17504 part._d = diff._d.slice();
17505 }
17506
17507 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
17508 new BigInteger(part._d, this._s, CONSTRUCT)];
17509};
17510
17511// Throws an exception if n is outside of (-BigInteger.base, -1] or
17512// [1, BigInteger.base). It's not necessary to call this, since the
17513// other division functions will call it if they are able to.
17514BigInteger.prototype.divRemSmall = function(n) {
17515 var r;
17516 n = +n;
17517 if (n === 0) {
17518 throw new Error("Divide by zero");
17519 }
17520
17521 var n_s = n < 0 ? -1 : 1;
17522 var sign = this._s * n_s;
17523 n = Math.abs(n);
17524
17525 if (n < 1 || n >= BigInteger_base) {
17526 throw new Error("Argument out of range");
17527 }
17528
17529 if (this._s === 0) {
17530 return [ZERO, ZERO];
17531 }
17532
17533 if (n === 1 || n === -1) {
17534 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
17535 }
17536
17537 // 2 <= n < BigInteger_base
17538
17539 // divide a single digit by a single digit
17540 if (this._d.length === 1) {
17541 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
17542 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
17543 if (sign < 0) {
17544 q = q.negate();
17545 }
17546 if (this._s < 0) {
17547 r = r.negate();
17548 }
17549 return [q, r];
17550 }
17551
17552 var digits = this._d.slice();
17553 var quot = new Array(digits.length);
17554 var part = 0;
17555 var diff = 0;
17556 var i = 0;
17557 var guess;
17558
17559 while (digits.length) {
17560 part = part * BigInteger_base + digits[digits.length - 1];
17561 if (part < n) {
17562 quot[i++] = 0;
17563 digits.pop();
17564 diff = BigInteger_base * diff + part;
17565 continue;
17566 }
17567 if (part === 0) {
17568 guess = 0;
17569 }
17570 else {
17571 guess = (part / n) | 0;
17572 }
17573
17574 var check = n * guess;
17575 diff = part - check;
17576 quot[i++] = guess;
17577 if (!guess) {
17578 digits.pop();
17579 continue;
17580 }
17581
17582 digits.pop();
17583 part = diff;
17584 }
17585
17586 r = new BigInteger([diff], 1, CONSTRUCT);
17587 if (this._s < 0) {
17588 r = r.negate();
17589 }
17590 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
17591};
17592
17593/*
17594 Function: isEven
17595 Return true iff *this* is divisible by two.
17596
17597 Note that <BigInteger.ZERO> is even.
17598
17599 Returns:
17600
17601 true if *this* is even, false otherwise.
17602
17603 See Also:
17604
17605 <isOdd>
17606*/
17607BigInteger.prototype.isEven = function() {
17608 var digits = this._d;
17609 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
17610};
17611
17612/*
17613 Function: isOdd
17614 Return true iff *this* is not divisible by two.
17615
17616 Returns:
17617
17618 true if *this* is odd, false otherwise.
17619
17620 See Also:
17621
17622 <isEven>
17623*/
17624BigInteger.prototype.isOdd = function() {
17625 return !this.isEven();
17626};
17627
17628/*
17629 Function: sign
17630 Get the sign of a <BigInteger>.
17631
17632 Returns:
17633
17634 * -1 if *this* < 0
17635 * 0 if *this* == 0
17636 * +1 if *this* > 0
17637
17638 See Also:
17639
17640 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
17641*/
17642BigInteger.prototype.sign = function() {
17643 return this._s;
17644};
17645
17646/*
17647 Function: isPositive
17648 Return true iff *this* > 0.
17649
17650 Returns:
17651
17652 true if *this*.compare(<BigInteger.ZERO>) == 1.
17653
17654 See Also:
17655
17656 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
17657*/
17658BigInteger.prototype.isPositive = function() {
17659 return this._s > 0;
17660};
17661
17662/*
17663 Function: isNegative
17664 Return true iff *this* < 0.
17665
17666 Returns:
17667
17668 true if *this*.compare(<BigInteger.ZERO>) == -1.
17669
17670 See Also:
17671
17672 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
17673*/
17674BigInteger.prototype.isNegative = function() {
17675 return this._s < 0;
17676};
17677
17678/*
17679 Function: isZero
17680 Return true iff *this* == 0.
17681
17682 Returns:
17683
17684 true if *this*.compare(<BigInteger.ZERO>) == 0.
17685
17686 See Also:
17687
17688 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
17689*/
17690BigInteger.prototype.isZero = function() {
17691 return this._s === 0;
17692};
17693
17694/*
17695 Function: exp10
17696 Multiply a <BigInteger> by a power of 10.
17697
17698 This is equivalent to, but faster than
17699
17700 > if (n >= 0) {
17701 > return this.multiply(BigInteger("1e" + n));
17702 > }
17703 > else { // n <= 0
17704 > return this.quotient(BigInteger("1e" + -n));
17705 > }
17706
17707 Parameters:
17708
17709 n - The power of 10 to multiply *this* by. *n* is converted to a
17710 javascipt number and must be no greater than <BigInteger.MAX_EXP>
17711 (0x7FFFFFFF), or an exception will be thrown.
17712
17713 Returns:
17714
17715 *this* * (10 ** *n*), truncated to an integer if necessary.
17716
17717 See Also:
17718
17719 <pow>, <multiply>
17720*/
17721BigInteger.prototype.exp10 = function(n) {
17722 n = +n;
17723 if (n === 0) {
17724 return this;
17725 }
17726 if (Math.abs(n) > Number(MAX_EXP)) {
17727 throw new Error("exponent too large in BigInteger.exp10");
17728 }
17729 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
17730 if (this._s === 0) {
17731 return ZERO;
17732 }
17733 if (n > 0) {
17734 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
17735
17736 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
17737 k._d.unshift(0);
17738 }
17739 if (n == 0)
17740 return k;
17741 k._s = 1;
17742 k = k.multiplySingleDigit(Math.pow(10, n));
17743 return (this._s < 0 ? k.negate() : k);
17744 } else if (-n >= this._d.length*BigInteger_base_log10) {
17745 return ZERO;
17746 } else {
17747 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
17748
17749 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
17750 k._d.shift();
17751 }
17752 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
17753 }
17754};
17755
17756/*
17757 Function: pow
17758 Raise a <BigInteger> to a power.
17759
17760 In this implementation, 0**0 is 1.
17761
17762 Parameters:
17763
17764 n - The exponent to raise *this* by. *n* must be no greater than
17765 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
17766
17767 Returns:
17768
17769 *this* raised to the *nth* power.
17770
17771 See Also:
17772
17773 <modPow>
17774*/
17775BigInteger.prototype.pow = function(n) {
17776 if (this.isUnit()) {
17777 if (this._s > 0) {
17778 return this;
17779 }
17780 else {
17781 return BigInteger(n).isOdd() ? this : this.negate();
17782 }
17783 }
17784
17785 n = BigInteger(n);
17786 if (n._s === 0) {
17787 return ONE;
17788 }
17789 else if (n._s < 0) {
17790 if (this._s === 0) {
17791 throw new Error("Divide by zero");
17792 }
17793 else {
17794 return ZERO;
17795 }
17796 }
17797 if (this._s === 0) {
17798 return ZERO;
17799 }
17800 if (n.isUnit()) {
17801 return this;
17802 }
17803
17804 if (n.compareAbs(MAX_EXP) > 0) {
17805 throw new Error("exponent too large in BigInteger.pow");
17806 }
17807 var x = this;
17808 var aux = ONE;
17809 var two = BigInteger.small[2];
17810
17811 while (n.isPositive()) {
17812 if (n.isOdd()) {
17813 aux = aux.multiply(x);
17814 if (n.isUnit()) {
17815 return aux;
17816 }
17817 }
17818 x = x.square();
17819 n = n.quotient(two);
17820 }
17821
17822 return aux;
17823};
17824
17825/*
17826 Function: modPow
17827 Raise a <BigInteger> to a power (mod m).
17828
17829 Because it is reduced by a modulus, <modPow> is not limited by
17830 <BigInteger.MAX_EXP> like <pow>.
17831
17832 Parameters:
17833
17834 exponent - The exponent to raise *this* by. Must be positive.
17835 modulus - The modulus.
17836
17837 Returns:
17838
17839 *this* ^ *exponent* (mod *modulus*).
17840
17841 See Also:
17842
17843 <pow>, <mod>
17844*/
17845BigInteger.prototype.modPow = function(exponent, modulus) {
17846 var result = ONE;
17847 var base = this;
17848
17849 while (exponent.isPositive()) {
17850 if (exponent.isOdd()) {
17851 result = result.multiply(base).remainder(modulus);
17852 }
17853
17854 exponent = exponent.quotient(BigInteger.small[2]);
17855 if (exponent.isPositive()) {
17856 base = base.square().remainder(modulus);
17857 }
17858 }
17859
17860 return result;
17861};
17862
17863/*
17864 Function: log
17865 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
17866
17867 This is equivalent to
17868
17869 > Math.log(this.toJSValue())
17870
17871 but handles values outside of the native number range.
17872
17873 Returns:
17874
17875 log( *this* )
17876
17877 See Also:
17878
17879 <toJSValue>
17880*/
17881BigInteger.prototype.log = function() {
17882 switch (this._s) {
17883 case 0: return -Infinity;
17884 case -1: return NaN;
17885 default: // Fall through.
17886 }
17887
17888 var l = this._d.length;
17889
17890 if (l*BigInteger_base_log10 < 30) {
17891 return Math.log(this.valueOf());
17892 }
17893
17894 var N = Math.ceil(30/BigInteger_base_log10);
17895 var firstNdigits = this._d.slice(l - N);
17896 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
17897};
17898
17899/*
17900 Function: valueOf
17901 Convert a <BigInteger> to a native JavaScript integer.
17902
17903 This is called automatically by JavaScipt to convert a <BigInteger> to a
17904 native value.
17905
17906 Returns:
17907
17908 > parseInt(this.toString(), 10)
17909
17910 See Also:
17911
17912 <toString>, <toJSValue>
17913*/
17914BigInteger.prototype.valueOf = function() {
17915 return parseInt(this.toString(), 10);
17916};
17917
17918/*
17919 Function: toJSValue
17920 Convert a <BigInteger> to a native JavaScript integer.
17921
17922 This is the same as valueOf, but more explicitly named.
17923
17924 Returns:
17925
17926 > parseInt(this.toString(), 10)
17927
17928 See Also:
17929
17930 <toString>, <valueOf>
17931*/
17932BigInteger.prototype.toJSValue = function() {
17933 return parseInt(this.toString(), 10);
17934};
17935
17936var MAX_EXP = BigInteger(0x7FFFFFFF);
17937// Constant: MAX_EXP
17938// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
17939BigInteger.MAX_EXP = MAX_EXP;
17940
17941(function() {
17942 function makeUnary(fn) {
17943 return function(a) {
17944 return fn.call(BigInteger(a));
17945 };
17946 }
17947
17948 function makeBinary(fn) {
17949 return function(a, b) {
17950 return fn.call(BigInteger(a), BigInteger(b));
17951 };
17952 }
17953
17954 function makeTrinary(fn) {
17955 return function(a, b, c) {
17956 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
17957 };
17958 }
17959
17960 (function() {
17961 var i, fn;
17962 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
17963 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
17964 var trinary = ["modPow"];
17965
17966 for (i = 0; i < unary.length; i++) {
17967 fn = unary[i];
17968 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
17969 }
17970
17971 for (i = 0; i < binary.length; i++) {
17972 fn = binary[i];
17973 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
17974 }
17975
17976 for (i = 0; i < trinary.length; i++) {
17977 fn = trinary[i];
17978 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
17979 }
17980
17981 BigInteger.exp10 = function(x, n) {
17982 return BigInteger(x).exp10(n);
17983 };
17984 })();
17985})();
17986
17987exports.BigInteger = BigInteger;
17988})(typeof exports !== 'undefined' ? exports : this);
17989</script>
17990 <script>(function() {
17991
17992 // mnemonics is populated as required by getLanguage
17993 var mnemonics = { "english": new Mnemonic("english") };
17994 var mnemonic = mnemonics["english"];
17995 var seed = null
17996 var bip32RootKey = null;
17997 var bip32ExtendedKey = null;
17998 var network = bitcoin.networks.bitcoin;
17999 var addressRowTemplate = $("#address-row-template");
18000
18001 var showIndex = true;
18002 var showAddress = true;
18003 var showPubKey = true;
18004 var showPrivKey = true;
18005
18006 var entropyChangeTimeoutEvent = null;
18007 var phraseChangeTimeoutEvent = null;
18008 var rootKeyChangedTimeoutEvent = null;
18009
18010 var DOM = {};
18011 DOM.network = $(".network");
18012 DOM.phraseNetwork = $("#network-phrase");
18013 DOM.useEntropy = $(".use-entropy");
18014 DOM.entropyContainer = $(".entropy-container");
18015 DOM.entropy = $(".entropy");
18016 DOM.entropyError = $(".entropy-error");
18017 DOM.phrase = $(".phrase");
18018 DOM.passphrase = $(".passphrase");
18019 DOM.generateContainer = $(".generate-container");
18020 DOM.generate = $(".generate");
18021 DOM.seed = $(".seed");
18022 DOM.rootKey = $(".root-key");
18023 DOM.extendedPrivKey = $(".extended-priv-key");
18024 DOM.extendedPubKey = $(".extended-pub-key");
18025 DOM.bip32tab = $("#bip32-tab");
18026 DOM.bip44tab = $("#bip44-tab");
18027 DOM.bip32panel = $("#bip32");
18028 DOM.bip44panel = $("#bip44");
18029 DOM.bip32path = $("#bip32-path");
18030 DOM.bip44path = $("#bip44-path");
18031 DOM.bip44purpose = $("#bip44 .purpose");
18032 DOM.bip44coin = $("#bip44 .coin");
18033 DOM.bip44account = $("#bip44 .account");
18034 DOM.bip44change = $("#bip44 .change");
18035 DOM.strength = $(".strength");
18036 DOM.hardenedAddresses = $(".hardened-addresses");
18037 DOM.addresses = $(".addresses");
18038 DOM.rowsToAdd = $(".rows-to-add");
18039 DOM.more = $(".more");
18040 DOM.feedback = $(".feedback");
18041 DOM.tab = $(".derivation-type a");
18042 DOM.indexToggle = $(".index-toggle");
18043 DOM.addressToggle = $(".address-toggle");
18044 DOM.publicKeyToggle = $(".public-key-toggle");
18045 DOM.privateKeyToggle = $(".private-key-toggle");
18046 DOM.languages = $(".languages a");
18047
18048 function init() {
18049 // Events
18050 DOM.network.on("change", networkChanged);
18051 DOM.useEntropy.on("change", setEntropyVisibility);
18052 DOM.entropy.on("input", delayedEntropyChanged);
18053 DOM.phrase.on("input", delayedPhraseChanged);
18054 DOM.passphrase.on("input", delayedPhraseChanged);
18055 DOM.generate.on("click", generateClicked);
18056 DOM.more.on("click", showMore);
18057 DOM.rootKey.on("input", delayedRootKeyChanged);
18058 DOM.bip32path.on("input", calcForDerivationPath);
18059 DOM.bip44purpose.on("input", calcForDerivationPath);
18060 DOM.bip44coin.on("input", calcForDerivationPath);
18061 DOM.bip44account.on("input", calcForDerivationPath);
18062 DOM.bip44change.on("input", calcForDerivationPath);
18063 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
18064 DOM.hardenedAddresses.on("change", calcForDerivationPath);
18065 DOM.indexToggle.on("click", toggleIndexes);
18066 DOM.addressToggle.on("click", toggleAddresses);
18067 DOM.publicKeyToggle.on("click", togglePublicKeys);
18068 DOM.privateKeyToggle.on("click", togglePrivateKeys);
18069 DOM.languages.on("click", languageChanged);
18070 disableForms();
18071 hidePending();
18072 hideValidationError();
18073 populateNetworkSelect();
18074 }
18075
18076 // Event handlers
18077
18078 function networkChanged(e) {
18079 var networkIndex = e.target.value;
18080 networks[networkIndex].onSelect();
18081 if (seed != null) {
18082 phraseChanged();
18083 }
18084 else {
18085 rootKeyChanged();
18086 }
18087 }
18088
18089 function setEntropyVisibility() {
18090 if (isUsingOwnEntropy()) {
18091 DOM.entropyContainer.removeClass("hidden");
18092 DOM.generateContainer.addClass("hidden");
18093 DOM.phrase.prop("readonly", true);
18094 DOM.entropy.focus();
18095 entropyChanged();
18096 }
18097 else {
18098 DOM.entropyContainer.addClass("hidden");
18099 DOM.generateContainer.removeClass("hidden");
18100 DOM.phrase.prop("readonly", false);
18101 }
18102 }
18103
18104 function delayedPhraseChanged() {
18105 hideValidationError();
18106 showPending();
18107 if (phraseChangeTimeoutEvent != null) {
18108 clearTimeout(phraseChangeTimeoutEvent);
18109 }
18110 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
18111 }
18112
18113 function phraseChanged() {
18114 showPending();
18115 hideValidationError();
18116 setMnemonicLanguage();
18117 // Get the mnemonic phrase
18118 var phrase = DOM.phrase.val();
18119 var errorText = findPhraseErrors(phrase);
18120 if (errorText) {
18121 showValidationError(errorText);
18122 return;
18123 }
18124 // Calculate and display
18125 var passphrase = DOM.passphrase.val();
18126 calcBip32RootKeyFromSeed(phrase, passphrase);
18127 calcForDerivationPath();
18128 hidePending();
18129 }
18130
18131 function delayedEntropyChanged() {
18132 hideValidationError();
18133 showPending();
18134 if (entropyChangeTimeoutEvent != null) {
18135 clearTimeout(entropyChangeTimeoutEvent);
18136 }
18137 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
18138 }
18139
18140 function entropyChanged() {
18141 setMnemonicFromEntropy();
18142 phraseChanged();
18143 }
18144
18145 function delayedRootKeyChanged() {
18146 // Warn if there is an existing mnemonic or passphrase.
18147 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
18148 if (!confirm("This will clear existing mnemonic and passphrase")) {
18149 DOM.rootKey.val(bip32RootKey);
18150 return
18151 }
18152 }
18153 hideValidationError();
18154 showPending();
18155 // Clear existing mnemonic and passphrase
18156 DOM.phrase.val("");
18157 DOM.passphrase.val("");
18158 seed = null;
18159 if (rootKeyChangedTimeoutEvent != null) {
18160 clearTimeout(rootKeyChangedTimeoutEvent);
18161 }
18162 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
18163 }
18164
18165 function rootKeyChanged() {
18166 showPending();
18167 hideValidationError();
18168 // Validate the root key TODO
18169 var rootKeyBase58 = DOM.rootKey.val();
18170 var errorText = validateRootKey(rootKeyBase58);
18171 if (errorText) {
18172 showValidationError(errorText);
18173 return;
18174 }
18175 // Calculate and display
18176 calcBip32RootKeyFromBase58(rootKeyBase58);
18177 calcForDerivationPath();
18178 hidePending();
18179 }
18180
18181 function calcForDerivationPath() {
18182 showPending();
18183 hideValidationError();
18184 // Get the derivation path
18185 var derivationPath = getDerivationPath();
18186 var errorText = findDerivationPathErrors(derivationPath);
18187 if (errorText) {
18188 showValidationError(errorText);
18189 return;
18190 }
18191 calcBip32ExtendedKey(derivationPath);
18192 displayBip32Info();
18193 hidePending();
18194 }
18195
18196 function generateClicked() {
18197 if (isUsingOwnEntropy()) {
18198 return;
18199 }
18200 clearDisplay();
18201 showPending();
18202 setTimeout(function() {
18203 setMnemonicLanguage();
18204 var phrase = generateRandomPhrase();
18205 if (!phrase) {
18206 return;
18207 }
18208 phraseChanged();
18209 }, 50);
18210 }
18211
18212 function languageChanged() {
18213 setTimeout(function() {
18214 setMnemonicLanguage();
18215 if (DOM.phrase.val().length > 0) {
18216 var newPhrase = convertPhraseToNewLanguage();
18217 DOM.phrase.val(newPhrase);
18218 phraseChanged();
18219 }
18220 else {
18221 DOM.generate.trigger("click");
18222 }
18223 }, 50);
18224 }
18225
18226 function toggleIndexes() {
18227 showIndex = !showIndex;
18228 $("td.index span").toggleClass("invisible");
18229 }
18230
18231 function toggleAddresses() {
18232 showAddress = !showAddress;
18233 $("td.address span").toggleClass("invisible");
18234 }
18235
18236 function togglePublicKeys() {
18237 showPubKey = !showPubKey;
18238 $("td.pubkey span").toggleClass("invisible");
18239 }
18240
18241 function togglePrivateKeys() {
18242 showPrivKey = !showPrivKey;
18243 $("td.privkey span").toggleClass("invisible");
18244 }
18245
18246 // Private methods
18247
18248 function generateRandomPhrase() {
18249 if (!hasStrongRandom()) {
18250 var errorText = "This browser does not support strong randomness";
18251 showValidationError(errorText);
18252 return;
18253 }
18254 var numWords = parseInt(DOM.strength.val());
18255 var strength = numWords / 3 * 32;
18256 var words = mnemonic.generate(strength);
18257 DOM.phrase.val(words);
18258 return words;
18259 }
18260
18261 function calcBip32RootKeyFromSeed(phrase, passphrase) {
18262 seed = mnemonic.toSeed(phrase, passphrase);
18263 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
18264 }
18265
18266 function calcBip32RootKeyFromBase58(rootKeyBase58) {
18267 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
18268 }
18269
18270 function calcBip32ExtendedKey(path) {
18271 bip32ExtendedKey = bip32RootKey;
18272 // Derive the key from the path
18273 var pathBits = path.split("/");
ebd8d4e8
IC
18274 for (var i=0; i<pathBits.length; i++) {
18275 var bit = pathBits[i];
18276 var index = parseInt(bit);
18277 if (isNaN(index)) {
18278 continue;
18279 }
18280 var hardened = bit[bit.length-1] == "'";
18281 if (hardened) {
18282 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
18283 }
18284 else {
18285 bip32ExtendedKey = bip32ExtendedKey.derive(index);
18286 }
18287 }
18288 }
18289
18290 function showValidationError(errorText) {
18291 DOM.feedback
18292 .text(errorText)
18293 .show();
18294 }
18295
18296 function hideValidationError() {
18297 DOM.feedback
18298 .text("")
18299 .hide();
18300 }
18301
18302 function findPhraseErrors(phrase) {
18303 // TODO make this right
18304 // Preprocess the words
783981de 18305 phrase = mnemonic.normalizeString(phrase);
0515eeec 18306 var words = phraseToWordArray(phrase);
563e401a 18307 // Check each word
0515eeec
IC
18308 for (var i=0; i<words.length; i++) {
18309 var word = words[i];
18310 var language = getLanguage();
18311 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
18312 console.log("Finding closest match to " + word);
18313 var nearestWord = findNearestWord(word);
18314 return word + " not in wordlist, did you mean " + nearestWord + "?";
18315 }
18316 }
ebd8d4e8 18317 // Check the words are valid
0515eeec 18318 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
18319 var isValid = mnemonic.check(properPhrase);
18320 if (!isValid) {
18321 return "Invalid mnemonic";
18322 }
18323 return false;
18324 }
18325
efe41586
IC
18326 function validateRootKey(rootKeyBase58) {
18327 try {
18328 bitcoin.HDNode.fromBase58(rootKeyBase58);
18329 }
18330 catch (e) {
18331 return "Invalid root key";
18332 }
18333 return "";
18334 }
18335
38523d36
IC
18336 function getDerivationPath() {
18337 if (DOM.bip44tab.hasClass("active")) {
18338 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
18339 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
18340 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
18341 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
18342 var path = "m/";
18343 path += purpose + "'/";
18344 path += coin + "'/";
18345 path += account + "'/";
18346 path += change;
18347 DOM.bip44path.val(path);
18348 var derivationPath = DOM.bip44path.val();
18349 console.log("Using derivation path from BIP44 tab: " + derivationPath);
18350 return derivationPath;
18351 }
18352 else if (DOM.bip32tab.hasClass("active")) {
18353 var derivationPath = DOM.bip32path.val();
18354 console.log("Using derivation path from BIP32 tab: " + derivationPath);
18355 return derivationPath;
18356 }
18357 else {
18358 console.log("Unknown derivation path");
18359 }
18360 }
18361
ebd8d4e8 18362 function findDerivationPathErrors(path) {
30c9e79d
IC
18363 // TODO is not perfect but is better than nothing
18364 // Inspired by
18365 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
18366 // and
18367 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
18368 var maxDepth = 255; // TODO verify this!!
18369 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
18370 if (path[0] != "m") {
18371 return "First character must be 'm'";
18372 }
18373 if (path.length > 1) {
18374 if (path[1] != "/") {
18375 return "Separator must be '/'";
18376 }
18377 var indexes = path.split("/");
18378 if (indexes.length > maxDepth) {
18379 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
18380 }
18381 for (var depth = 1; depth<indexes.length; depth++) {
18382 var index = indexes[depth];
18383 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
18384 if (invalidChars.length > 0) {
18385 return "Invalid characters " + invalidChars + " found at depth " + depth;
18386 }
18387 var indexValue = parseInt(index.replace("'", ""));
18388 if (isNaN(depth)) {
18389 return "Invalid number at depth " + depth;
18390 }
18391 if (indexValue > maxIndexValue) {
18392 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
18393 }
18394 }
18395 }
ebd8d4e8
IC
18396 return false;
18397 }
18398
18399 function displayBip32Info() {
18400 // Display the key
73161a92 18401 DOM.seed.val(seed);
ebd8d4e8
IC
18402 var rootKey = bip32RootKey.toBase58();
18403 DOM.rootKey.val(rootKey);
18404 var extendedPrivKey = bip32ExtendedKey.toBase58();
18405 DOM.extendedPrivKey.val(extendedPrivKey);
18406 var extendedPubKey = bip32ExtendedKey.toBase58(false);
18407 DOM.extendedPubKey.val(extendedPubKey);
18408 // Display the addresses and privkeys
18409 clearAddressesList();
18410 displayAddresses(0, 20);
18411 }
18412
18413 function displayAddresses(start, total) {
18414 for (var i=0; i<total; i++) {
80c4dd2a
IC
18415 var index = i + start;
18416 new TableRow(index);
18417 }
18418 }
18419
18420 function TableRow(index) {
18421
1975bfbc
IC
18422 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
18423
80c4dd2a
IC
18424 function init() {
18425 calculateValues();
18426 }
18427
18428 function calculateValues() {
18429 setTimeout(function() {
1975bfbc
IC
18430 var key = "";
18431 if (useHardenedAddresses) {
18432 key = bip32ExtendedKey.deriveHardened(index);
18433 }
18434 else {
18435 key = bip32ExtendedKey.derive(index);
18436 }
80c4dd2a
IC
18437 var address = key.getAddress().toString();
18438 var privkey = key.privKey.toWIF(network);
1b12b2f5 18439 var pubkey = key.pubKey.toHex();
38523d36 18440 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
18441 if (useHardenedAddresses) {
18442 indexText = indexText + "'";
18443 }
1b12b2f5 18444 addAddressToList(indexText, address, pubkey, privkey);
80c4dd2a 18445 }, 50)
ebd8d4e8 18446 }
80c4dd2a
IC
18447
18448 init();
18449
ebd8d4e8
IC
18450 }
18451
18452 function showMore() {
18453 var start = DOM.addresses.children().length;
18454 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
18455 if (isNaN(rowsToAdd)) {
18456 rowsToAdd = 20;
18457 DOM.rowsToAdd.val("20");
18458 }
18459 if (rowsToAdd > 200) {
18460 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
18461 msg += "Do you want to continue?";
18462 if (!confirm(msg)) {
18463 return;
18464 }
18465 }
ebd8d4e8 18466 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
18467 }
18468
18469 function clearDisplay() {
18470 clearAddressesList();
18471 clearKey();
18472 hideValidationError();
18473 }
18474
18475 function clearAddressesList() {
18476 DOM.addresses.empty();
18477 }
18478
18479 function clearKey() {
18480 DOM.rootKey.val("");
18481 DOM.extendedPrivKey.val("");
18482 DOM.extendedPubKey.val("");
18483 }
18484
1b12b2f5 18485 function addAddressToList(indexText, address, pubkey, privkey) {
ebd8d4e8 18486 var row = $(addressRowTemplate.html());
80c4dd2a
IC
18487 // Elements
18488 var indexCell = row.find(".index span");
18489 var addressCell = row.find(".address span");
1b12b2f5 18490 var pubkeyCell = row.find(".pubkey span");
80c4dd2a
IC
18491 var privkeyCell = row.find(".privkey span");
18492 // Content
ae30fed8 18493 indexCell.text(indexText);
80c4dd2a 18494 addressCell.text(address);
1b12b2f5 18495 pubkeyCell.text(pubkey);
80c4dd2a
IC
18496 privkeyCell.text(privkey);
18497 // Visibility
18498 if (!showIndex) {
18499 indexCell.addClass("invisible");
18500 }
18501 if (!showAddress) {
18502 addressCell.addClass("invisible");
18503 }
1b12b2f5
IC
18504 if (!showPubKey) {
18505 pubkeyCell.addClass("invisible");
18506 }
80c4dd2a 18507 if (!showPrivKey) {
6d628db7 18508 privkeyCell.addClass("invisible");
80c4dd2a 18509 }
ebd8d4e8
IC
18510 DOM.addresses.append(row);
18511 }
18512
18513 function hasStrongRandom() {
18514 return 'crypto' in window && window['crypto'] !== null;
18515 }
18516
18517 function disableForms() {
18518 $("form").on("submit", function(e) {
18519 e.preventDefault();
18520 });
18521 }
18522
ebd8d4e8
IC
18523 function parseIntNoNaN(val, defaultVal) {
18524 var v = parseInt(val);
18525 if (isNaN(v)) {
18526 return defaultVal;
18527 }
18528 return v;
18529 }
18530
18531 function showPending() {
18532 DOM.feedback
18533 .text("Calculating...")
18534 .show();
18535 }
18536
563e401a 18537 function findNearestWord(word) {
0515eeec
IC
18538 var language = getLanguage();
18539 var words = WORDLISTS[language];
563e401a
IC
18540 var minDistance = 99;
18541 var closestWord = words[0];
18542 for (var i=0; i<words.length; i++) {
18543 var comparedTo = words[i];
18544 var distance = Levenshtein.get(word, comparedTo);
18545 if (distance < minDistance) {
18546 closestWord = comparedTo;
18547 minDistance = distance;
18548 }
18549 }
18550 return closestWord;
18551 }
18552
ebd8d4e8
IC
18553 function hidePending() {
18554 DOM.feedback
18555 .text("")
18556 .hide();
18557 }
18558
ab78acc6
IC
18559 function populateNetworkSelect() {
18560 for (var i=0; i<networks.length; i++) {
18561 var network = networks[i];
18562 var option = $("<option>");
18563 option.attr("value", i);
18564 option.text(network.name);
18565 DOM.phraseNetwork.append(option);
18566 }
18567 }
18568
0515eeec
IC
18569 function getLanguage() {
18570 var defaultLanguage = "english";
18571 // Try to get from existing phrase
18572 var language = getLanguageFromPhrase();
18573 // Try to get from url if not from phrase
18574 if (language.length == 0) {
18575 language = getLanguageFromUrl();
18576 }
18577 // Default to English if no other option
18578 if (language.length == 0) {
18579 language = defaultLanguage;
18580 }
18581 return language;
18582 }
18583
18584 function getLanguageFromPhrase(phrase) {
18585 // Check if how many words from existing phrase match a language.
18586 var language = "";
18587 if (!phrase) {
18588 phrase = DOM.phrase.val();
18589 }
18590 if (phrase.length > 0) {
18591 var words = phraseToWordArray(phrase);
18592 var languageMatches = {};
18593 for (l in WORDLISTS) {
18594 // Track how many words match in this language
18595 languageMatches[l] = 0;
18596 for (var i=0; i<words.length; i++) {
18597 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
18598 if (wordInLanguage) {
18599 languageMatches[l]++;
18600 }
18601 }
18602 // Find languages with most word matches.
18603 // This is made difficult due to commonalities between Chinese
18604 // simplified vs traditional.
18605 var mostMatches = 0;
18606 var mostMatchedLanguages = [];
18607 for (var l in languageMatches) {
18608 var numMatches = languageMatches[l];
18609 if (numMatches > mostMatches) {
18610 mostMatches = numMatches;
18611 mostMatchedLanguages = [l];
18612 }
18613 else if (numMatches == mostMatches) {
18614 mostMatchedLanguages.push(l);
18615 }
18616 }
18617 }
18618 if (mostMatchedLanguages.length > 0) {
18619 // Use first language and warn if multiple detected
18620 language = mostMatchedLanguages[0];
18621 if (mostMatchedLanguages.length > 1) {
18622 console.warn("Multiple possible languages");
18623 console.warn(mostMatchedLanguages);
18624 }
18625 }
18626 }
18627 return language;
18628 }
18629
18630 function getLanguageFromUrl() {
c6624d51
IC
18631 for (var language in WORDLISTS) {
18632 if (window.location.hash.indexOf(language) > -1) {
18633 return language;
18634 }
18635 }
18636 return "";
0515eeec
IC
18637 }
18638
18639 function setMnemonicLanguage() {
18640 var language = getLanguage();
18641 // Load the bip39 mnemonic generator for this language if required
18642 if (!(language in mnemonics)) {
18643 mnemonics[language] = new Mnemonic(language);
18644 }
18645 mnemonic = mnemonics[language];
18646 }
18647
18648 function convertPhraseToNewLanguage() {
18649 var oldLanguage = getLanguageFromPhrase();
18650 var newLanguage = getLanguageFromUrl();
18651 var oldPhrase = DOM.phrase.val();
18652 var oldWords = phraseToWordArray(oldPhrase);
18653 var newWords = [];
18654 for (var i=0; i<oldWords.length; i++) {
18655 var oldWord = oldWords[i];
18656 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
18657 var newWord = WORDLISTS[newLanguage][index];
18658 newWords.push(newWord);
18659 }
18660 newPhrase = wordArrayToPhrase(newWords);
18661 return newPhrase;
18662 }
18663
18664 // TODO look at jsbip39 - mnemonic.splitWords
18665 function phraseToWordArray(phrase) {
18666 var words = phrase.split(/\s/g);
18667 var noBlanks = [];
18668 for (var i=0; i<words.length; i++) {
18669 var word = words[i];
18670 if (word.length > 0) {
18671 noBlanks.push(word);
18672 }
18673 }
18674 return noBlanks;
18675 }
18676
18677 // TODO look at jsbip39 - mnemonic.joinWords
18678 function wordArrayToPhrase(words) {
18679 var phrase = words.join(" ");
18680 var language = getLanguageFromPhrase(phrase);
18681 if (language == "japanese") {
18682 phrase = words.join("\u3000");
18683 }
18684 return phrase;
18685 }
18686
c6624d51
IC
18687 function isUsingOwnEntropy() {
18688 return DOM.useEntropy.prop("checked");
18689 }
18690
18691 function setMnemonicFromEntropy() {
18692 hideEntropyError();
18693 // Work out minimum base for entropy
18694 var entropyStr = DOM.entropy.val();
18695 var entropy = Entropy.fromString(entropyStr);
18696 if (entropy.hexStr.length == 0) {
18697 return;
18698 }
18699 // Show entropy details
18700 var extraBits = 32 - (entropy.binaryStr.length % 32);
18701 var extraChars = Math.ceil(extraBits * Math.log(2) / Math.log(entropy.base.asInt));
18702 var strength = "an extremely weak";
18703 if (entropy.hexStr.length >= 8) {
18704 strength = "a very weak";
18705 }
18706 if (entropy.hexStr.length >= 12) {
18707 strength = "a weak";
18708 }
18709 if (entropy.hexStr.length >= 24) {
18710 strength = "a strong";
18711 }
18712 if (entropy.hexStr.length >= 32) {
18713 strength = "a very strong";
18714 }
18715 if (entropy.hexStr.length >= 40) {
18716 strength = "an extremely strong";
18717 }
18718 if (entropy.hexStr.length >=48) {
18719 strength = "an even stronger"
18720 }
18721 var msg = "Have " + entropy.binaryStr.length + " bits of entropy, " + extraChars + " more " + entropy.base.str + " chars required to generate " + strength + " mnemonic: " + entropy.cleanStr;
18722 showEntropyError(msg);
18723 // Discard trailing entropy
18724 var hexStr = entropy.hexStr.substring(0, Math.floor(entropy.hexStr.length / 8) * 8);
18725 // Convert entropy string to numeric array
18726 var entropyArr = [];
18727 for (var i=0; i<hexStr.length / 2; i++) {
18728 var entropyByte = parseInt(hexStr[i*2].concat(hexStr[i*2+1]), 16);
18729 entropyArr.push(entropyByte)
18730 }
18731 // Convert entropy array to mnemonic
18732 var phrase = mnemonic.toMnemonic(entropyArr);
18733 // Set the mnemonic in the UI
18734 DOM.phrase.val(phrase);
18735 }
18736
18737 function hideEntropyError() {
18738 DOM.entropyError.addClass("hidden");
18739 }
18740
18741 function showEntropyError(msg) {
18742 DOM.entropyError.text(msg);
18743 DOM.entropyError.removeClass("hidden");
18744 }
18745
ab78acc6
IC
18746 var networks = [
18747 {
18748 name: "Bitcoin",
18749 onSelect: function() {
18750 network = bitcoin.networks.bitcoin;
18751 DOM.bip44coin.val(0);
ab78acc6
IC
18752 },
18753 },
18754 {
18755 name: "Bitcoin Testnet",
18756 onSelect: function() {
18757 network = bitcoin.networks.testnet;
18758 DOM.bip44coin.val(1);
ab78acc6
IC
18759 },
18760 },
18761 {
18762 name: "Litecoin",
18763 onSelect: function() {
18764 network = bitcoin.networks.litecoin;
18765 DOM.bip44coin.val(2);
18766 },
18767 },
18768 {
18769 name: "Dogecoin",
18770 onSelect: function() {
18771 network = bitcoin.networks.dogecoin;
18772 DOM.bip44coin.val(3);
18773 },
18774 },
d5dc92fd
IC
18775 {
18776 name: "ShadowCash",
18777 onSelect: function() {
18778 network = bitcoin.networks.shadow;
18779 DOM.bip44coin.val(35);
18780 },
18781 },
18782 {
18783 name: "ShadowCash Testnet",
18784 onSelect: function() {
18785 network = bitcoin.networks.shadowtn;
18786 DOM.bip44coin.val(1);
18787 },
18788 },
a3baa26e
IC
18789 {
18790 name: "Viacoin",
18791 onSelect: function() {
18792 network = bitcoin.networks.viacoin;
18793 DOM.bip44coin.val(14);
18794 },
18795 },
18796 {
18797 name: "Viacoin Testnet",
18798 onSelect: function() {
18799 network = bitcoin.networks.viacointestnet;
18800 DOM.bip44coin.val(1);
18801 },
18802 },
18803 {
18804 name: "Jumbucks",
18805 onSelect: function() {
18806 network = bitcoin.networks.jumbucks;
18807 DOM.bip44coin.val(26);
18808 },
18809 },
5c434a8a
CM
18810 {
18811 name: "CLAM",
18812 onSelect: function() {
18813 network = bitcoin.networks.clam;
18814 DOM.bip44coin.val(23);
18815 },
18816 },
5493efc3 18817 {
18818 name: "DASH",
18819 onSelect: function() {
18820 network = bitcoin.networks.dash;
18821 DOM.bip44coin.val(5);
18822 },
18823 },
07ac4350 18824 {
18825 name: "Namecoin",
18826 onSelect: function() {
18827 network = bitcoin.networks.namecoin;
18828 DOM.bip44coin.val(7);
18829 },
18830 },
18831 {
18832 name: "Peercoin",
18833 onSelect: function() {
18834 network = bitcoin.networks.peercoin;
18835 DOM.bip44coin.val(6);
18836 },
18837 },
ab78acc6
IC
18838 ]
18839
ebd8d4e8
IC
18840 init();
18841
18842})();
dc55c6b0 18843</script>
ebd8d4e8
IC
18844 </body>
18845</html>