4 <meta charset=
"utf-8" />
5 <title>BIP39 - Mnemonic Code
</title>
7 * Bootstrap v3.2
.0 (http://getbootstrap.com)
8 * Copyright
2011-
2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
10 *//*! normalize.css v3.0
.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:
100%;-ms-text-size-adjust:
100%}body{margin:
0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:
0}[hidden],template{display:none}a{background:
0 0}a:active,a:hover{outline:
0}abbr[title]{border-bottom:
1px dotted}b,strong{font-weight:
700}dfn{font-style:italic}h1{margin:
.67em
0;font-size:
2em}mark{color:#
000;background:#ff0}small{font-size:
80%}sub,sup{position:relative;font-size:
75%;line-height:
0;vertical-align:baseline}sup{top:-
.5em}sub{bottom:-
.25em}img{border:
0}svg:not(:root){overflow:hidden}figure{margin:
1em
40px}hr{height:
0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:
1em}button,input,optgroup,select,textarea{margin:
0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:
0;border:
0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:
0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:
.35em
.625em
.75em;margin:
0 2px;border:
1px solid silver}legend{padding:
0;border:
0}textarea{overflow:auto}optgroup{font-weight:
700}table{border-spacing:
0;border-collapse:collapse}td,th{padding:
0}@media print{*{color:#
000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:
1px solid #
999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:
100%!important}p,h2,h3{orphans:
3;widows:
3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn
>.caret,.dropup
>.btn
>.caret{border-top-color:#
000!important}.label{border:
1px solid #
000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:
1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:
1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:
400;line-height:
1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\
2a"}.glyphicon-plus:before{content:"\
2b"}.glyphicon-euro:before{content:"\
20ac"}.glyphicon-minus:before{content:"\
2212"}.glyphicon-cloud:before{content:"\
2601"}.glyphicon-envelope:before{content:"\
2709"}.glyphicon-pencil:before{content:"\
270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-
5-
1:before{content:"\e191"}.glyphicon-sound-
6-
1:before{content:"\e192"}.glyphicon-sound-
7-
1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:
10px;-webkit-tap-highlight-color:rgba(
0,
0,
0,
0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:
14px;line-height:
1.42857143;color:#
333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#
428bca;text-decoration:none}a:hover,a:focus{color:#
2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:
5px auto -webkit-focus-ring-color;outline-offset:-
2px}figure{margin:
0}img{vertical-align:middle}.img-responsive,.thumbnail
>img,.thumbnail a
>img,.carousel-inner
>.item
>img,.carousel-inner
>.item
>a
>img{display:block;width:
100% \
9;max-width:
100%;height:auto}.img-rounded{border-radius:
6px}.img-thumbnail{display:inline-block;width:
100% \
9;max-width:
100%;height:auto;padding:
4px;line-height:
1.42857143;background-color:#fff;border:
1px solid #ddd;border-radius:
4px;-webkit-transition:all
.2s ease-in-out;-o-transition:all
.2s ease-in-out;transition:all
.2s ease-in-out}.img-circle{border-radius:
50%}hr{margin-top:
20px;margin-bottom:
20px;border:
0;border-top:
1px solid #eee}.sr-only{position:absolute;width:
1px;height:
1px;padding:
0;margin:-
1px;overflow:hidden;clip:rect(
0,
0,
0,
0);border:
0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:
0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:
500;line-height:
1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:
400;line-height:
1;color:#
777}h1,.h1,h2,.h2,h3,.h3{margin-top:
20px;margin-bottom:
10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:
65%}h4,.h4,h5,.h5,h6,.h6{margin-top:
10px;margin-bottom:
10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:
75%}h1,.h1{font-size:
36px}h2,.h2{font-size:
30px}h3,.h3{font-size:
24px}h4,.h4{font-size:
18px}h5,.h5{font-size:
14px}h6,.h6{font-size:
12px}p{margin:
0 0 10px}.lead{margin-bottom:
20px;font-size:
16px;font-weight:
300;line-height:
1.4}@media (min-width:
768px){.lead{font-size:
21px}}small,.small{font-size:
85%}cite{font-style:normal}mark,.mark{padding:
.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#
777}.text-primary{color:#
428bca}a.text-primary:hover{color:#
3071a9}.text-success{color:#
3c763d}a.text-success:hover{color:#
2b542c}.text-info{color:#
31708f}a.text-info:hover{color:#
245269}.text-warning{color:#
8a6d3b}a.text-warning:hover{color:#
66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#
843534}.bg-primary{color:#fff;background-color:#
428bca}a.bg-primary:hover{background-color:#
3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:
9px;margin:
40px
0 20px;border-bottom:
1px solid #eee}ul,ol{margin-top:
0;margin-bottom:
10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:
0}.list-unstyled{padding-left:
0;list-style:none}.list-inline{padding-left:
0;margin-left:-
5px;list-style:none}.list-inline
>li{display:inline-block;padding-right:
5px;padding-left:
5px}dl{margin-top:
0;margin-bottom:
20px}dt,dd{line-height:
1.42857143}dt{font-weight:
700}dd{margin-left:
0}@media (min-width:
768px){.dl-horizontal dt{float:left;width:
160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:
180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:
1px dotted #
777}.initialism{font-size:
90%;text-transform:uppercase}blockquote{padding:
10px
20px;margin:
0 0 20px;font-size:
17.5px;border-left:
5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:
0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:
80%;line-height:
1.42857143;color:#
777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\
2014 \
00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:
15px;padding-left:
0;text-align:right;border-right:
5px solid #eee;border-left:
0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\
00A0 \
2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:
20px;font-style:normal;line-height:
1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:
2px
4px;font-size:
90%;color:#c7254e;background-color:#f9f2f4;border-radius:
4px}kbd{padding:
2px
4px;font-size:
90%;color:#fff;background-color:#
333;border-radius:
3px;-webkit-box-shadow:inset
0 -
1px
0 rgba(
0,
0,
0,
.25);box-shadow:inset
0 -
1px
0 rgba(
0,
0,
0,
.25)}kbd kbd{padding:
0;font-size:
100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:
9.5px;margin:
0 0 10px;font-size:
13px;line-height:
1.42857143;color:#
333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:
1px solid #ccc;border-radius:
4px}pre code{padding:
0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:
0}.pre-scrollable{max-height:
340px;overflow-y:scroll}.container{padding-right:
15px;padding-left:
15px;margin-right:auto;margin-left:auto}@media (min-width:
768px){.container{width:
750px}}@media (min-width:
992px){.container{width:
970px}}@media (min-width:
1200px){.container{width:
1170px}}.container-fluid{padding-right:
15px;padding-left:
15px;margin-right:auto;margin-left:auto}.row{margin-right:-
15px;margin-left:-
15px}.col-xs-
1,.col-sm-
1,.col-md-
1,.col-lg-
1,.col-xs-
2,.col-sm-
2,.col-md-
2,.col-lg-
2,.col-xs-
3,.col-sm-
3,.col-md-
3,.col-lg-
3,.col-xs-
4,.col-sm-
4,.col-md-
4,.col-lg-
4,.col-xs-
5,.col-sm-
5,.col-md-
5,.col-lg-
5,.col-xs-
6,.col-sm-
6,.col-md-
6,.col-lg-
6,.col-xs-
7,.col-sm-
7,.col-md-
7,.col-lg-
7,.col-xs-
8,.col-sm-
8,.col-md-
8,.col-lg-
8,.col-xs-
9,.col-sm-
9,.col-md-
9,.col-lg-
9,.col-xs-
10,.col-sm-
10,.col-md-
10,.col-lg-
10,.col-xs-
11,.col-sm-
11,.col-md-
11,.col-lg-
11,.col-xs-
12,.col-sm-
12,.col-md-
12,.col-lg-
12{position:relative;min-height:
1px;padding-right:
15px;padding-left:
15px}.col-xs-
1,.col-xs-
2,.col-xs-
3,.col-xs-
4,.col-xs-
5,.col-xs-
6,.col-xs-
7,.col-xs-
8,.col-xs-
9,.col-xs-
10,.col-xs-
11,.col-xs-
12{float:left}.col-xs-
12{width:
100%}.col-xs-
11{width:
91.66666667%}.col-xs-
10{width:
83.33333333%}.col-xs-
9{width:
75%}.col-xs-
8{width:
66.66666667%}.col-xs-
7{width:
58.33333333%}.col-xs-
6{width:
50%}.col-xs-
5{width:
41.66666667%}.col-xs-
4{width:
33.33333333%}.col-xs-
3{width:
25%}.col-xs-
2{width:
16.66666667%}.col-xs-
1{width:
8.33333333%}.col-xs-pull-
12{right:
100%}.col-xs-pull-
11{right:
91.66666667%}.col-xs-pull-
10{right:
83.33333333%}.col-xs-pull-
9{right:
75%}.col-xs-pull-
8{right:
66.66666667%}.col-xs-pull-
7{right:
58.33333333%}.col-xs-pull-
6{right:
50%}.col-xs-pull-
5{right:
41.66666667%}.col-xs-pull-
4{right:
33.33333333%}.col-xs-pull-
3{right:
25%}.col-xs-pull-
2{right:
16.66666667%}.col-xs-pull-
1{right:
8.33333333%}.col-xs-pull-
0{right:auto}.col-xs-push-
12{left:
100%}.col-xs-push-
11{left:
91.66666667%}.col-xs-push-
10{left:
83.33333333%}.col-xs-push-
9{left:
75%}.col-xs-push-
8{left:
66.66666667%}.col-xs-push-
7{left:
58.33333333%}.col-xs-push-
6{left:
50%}.col-xs-push-
5{left:
41.66666667%}.col-xs-push-
4{left:
33.33333333%}.col-xs-push-
3{left:
25%}.col-xs-push-
2{left:
16.66666667%}.col-xs-push-
1{left:
8.33333333%}.col-xs-push-
0{left:auto}.col-xs-offset-
12{margin-left:
100%}.col-xs-offset-
11{margin-left:
91.66666667%}.col-xs-offset-
10{margin-left:
83.33333333%}.col-xs-offset-
9{margin-left:
75%}.col-xs-offset-
8{margin-left:
66.66666667%}.col-xs-offset-
7{margin-left:
58.33333333%}.col-xs-offset-
6{margin-left:
50%}.col-xs-offset-
5{margin-left:
41.66666667%}.col-xs-offset-
4{margin-left:
33.33333333%}.col-xs-offset-
3{margin-left:
25%}.col-xs-offset-
2{margin-left:
16.66666667%}.col-xs-offset-
1{margin-left:
8.33333333%}.col-xs-offset-
0{margin-left:
0}@media (min-width:
768px){.col-sm-
1,.col-sm-
2,.col-sm-
3,.col-sm-
4,.col-sm-
5,.col-sm-
6,.col-sm-
7,.col-sm-
8,.col-sm-
9,.col-sm-
10,.col-sm-
11,.col-sm-
12{float:left}.col-sm-
12{width:
100%}.col-sm-
11{width:
91.66666667%}.col-sm-
10{width:
83.33333333%}.col-sm-
9{width:
75%}.col-sm-
8{width:
66.66666667%}.col-sm-
7{width:
58.33333333%}.col-sm-
6{width:
50%}.col-sm-
5{width:
41.66666667%}.col-sm-
4{width:
33.33333333%}.col-sm-
3{width:
25%}.col-sm-
2{width:
16.66666667%}.col-sm-
1{width:
8.33333333%}.col-sm-pull-
12{right:
100%}.col-sm-pull-
11{right:
91.66666667%}.col-sm-pull-
10{right:
83.33333333%}.col-sm-pull-
9{right:
75%}.col-sm-pull-
8{right:
66.66666667%}.col-sm-pull-
7{right:
58.33333333%}.col-sm-pull-
6{right:
50%}.col-sm-pull-
5{right:
41.66666667%}.col-sm-pull-
4{right:
33.33333333%}.col-sm-pull-
3{right:
25%}.col-sm-pull-
2{right:
16.66666667%}.col-sm-pull-
1{right:
8.33333333%}.col-sm-pull-
0{right:auto}.col-sm-push-
12{left:
100%}.col-sm-push-
11{left:
91.66666667%}.col-sm-push-
10{left:
83.33333333%}.col-sm-push-
9{left:
75%}.col-sm-push-
8{left:
66.66666667%}.col-sm-push-
7{left:
58.33333333%}.col-sm-push-
6{left:
50%}.col-sm-push-
5{left:
41.66666667%}.col-sm-push-
4{left:
33.33333333%}.col-sm-push-
3{left:
25%}.col-sm-push-
2{left:
16.66666667%}.col-sm-push-
1{left:
8.33333333%}.col-sm-push-
0{left:auto}.col-sm-offset-
12{margin-left:
100%}.col-sm-offset-
11{margin-left:
91.66666667%}.col-sm-offset-
10{margin-left:
83.33333333%}.col-sm-offset-
9{margin-left:
75%}.col-sm-offset-
8{margin-left:
66.66666667%}.col-sm-offset-
7{margin-left:
58.33333333%}.col-sm-offset-
6{margin-left:
50%}.col-sm-offset-
5{margin-left:
41.66666667%}.col-sm-offset-
4{margin-left:
33.33333333%}.col-sm-offset-
3{margin-left:
25%}.col-sm-offset-
2{margin-left:
16.66666667%}.col-sm-offset-
1{margin-left:
8.33333333%}.col-sm-offset-
0{margin-left:
0}}@media (min-width:
992px){.col-md-
1,.col-md-
2,.col-md-
3,.col-md-
4,.col-md-
5,.col-md-
6,.col-md-
7,.col-md-
8,.col-md-
9,.col-md-
10,.col-md-
11,.col-md-
12{float:left}.col-md-
12{width:
100%}.col-md-
11{width:
91.66666667%}.col-md-
10{width:
83.33333333%}.col-md-
9{width:
75%}.col-md-
8{width:
66.66666667%}.col-md-
7{width:
58.33333333%}.col-md-
6{width:
50%}.col-md-
5{width:
41.66666667%}.col-md-
4{width:
33.33333333%}.col-md-
3{width:
25%}.col-md-
2{width:
16.66666667%}.col-md-
1{width:
8.33333333%}.col-md-pull-
12{right:
100%}.col-md-pull-
11{right:
91.66666667%}.col-md-pull-
10{right:
83.33333333%}.col-md-pull-
9{right:
75%}.col-md-pull-
8{right:
66.66666667%}.col-md-pull-
7{right:
58.33333333%}.col-md-pull-
6{right:
50%}.col-md-pull-
5{right:
41.66666667%}.col-md-pull-
4{right:
33.33333333%}.col-md-pull-
3{right:
25%}.col-md-pull-
2{right:
16.66666667%}.col-md-pull-
1{right:
8.33333333%}.col-md-pull-
0{right:auto}.col-md-push-
12{left:
100%}.col-md-push-
11{left:
91.66666667%}.col-md-push-
10{left:
83.33333333%}.col-md-push-
9{left:
75%}.col-md-push-
8{left:
66.66666667%}.col-md-push-
7{left:
58.33333333%}.col-md-push-
6{left:
50%}.col-md-push-
5{left:
41.66666667%}.col-md-push-
4{left:
33.33333333%}.col-md-push-
3{left:
25%}.col-md-push-
2{left:
16.66666667%}.col-md-push-
1{left:
8.33333333%}.col-md-push-
0{left:auto}.col-md-offset-
12{margin-left:
100%}.col-md-offset-
11{margin-left:
91.66666667%}.col-md-offset-
10{margin-left:
83.33333333%}.col-md-offset-
9{margin-left:
75%}.col-md-offset-
8{margin-left:
66.66666667%}.col-md-offset-
7{margin-left:
58.33333333%}.col-md-offset-
6{margin-left:
50%}.col-md-offset-
5{margin-left:
41.66666667%}.col-md-offset-
4{margin-left:
33.33333333%}.col-md-offset-
3{margin-left:
25%}.col-md-offset-
2{margin-left:
16.66666667%}.col-md-offset-
1{margin-left:
8.33333333%}.col-md-offset-
0{margin-left:
0}}@media (min-width:
1200px){.col-lg-
1,.col-lg-
2,.col-lg-
3,.col-lg-
4,.col-lg-
5,.col-lg-
6,.col-lg-
7,.col-lg-
8,.col-lg-
9,.col-lg-
10,.col-lg-
11,.col-lg-
12{float:left}.col-lg-
12{width:
100%}.col-lg-
11{width:
91.66666667%}.col-lg-
10{width:
83.33333333%}.col-lg-
9{width:
75%}.col-lg-
8{width:
66.66666667%}.col-lg-
7{width:
58.33333333%}.col-lg-
6{width:
50%}.col-lg-
5{width:
41.66666667%}.col-lg-
4{width:
33.33333333%}.col-lg-
3{width:
25%}.col-lg-
2{width:
16.66666667%}.col-lg-
1{width:
8.33333333%}.col-lg-pull-
12{right:
100%}.col-lg-pull-
11{right:
91.66666667%}.col-lg-pull-
10{right:
83.33333333%}.col-lg-pull-
9{right:
75%}.col-lg-pull-
8{right:
66.66666667%}.col-lg-pull-
7{right:
58.33333333%}.col-lg-pull-
6{right:
50%}.col-lg-pull-
5{right:
41.66666667%}.col-lg-pull-
4{right:
33.33333333%}.col-lg-pull-
3{right:
25%}.col-lg-pull-
2{right:
16.66666667%}.col-lg-pull-
1{right:
8.33333333%}.col-lg-pull-
0{right:auto}.col-lg-push-
12{left:
100%}.col-lg-push-
11{left:
91.66666667%}.col-lg-push-
10{left:
83.33333333%}.col-lg-push-
9{left:
75%}.col-lg-push-
8{left:
66.66666667%}.col-lg-push-
7{left:
58.33333333%}.col-lg-push-
6{left:
50%}.col-lg-push-
5{left:
41.66666667%}.col-lg-push-
4{left:
33.33333333%}.col-lg-push-
3{left:
25%}.col-lg-push-
2{left:
16.66666667%}.col-lg-push-
1{left:
8.33333333%}.col-lg-push-
0{left:auto}.col-lg-offset-
12{margin-left:
100%}.col-lg-offset-
11{margin-left:
91.66666667%}.col-lg-offset-
10{margin-left:
83.33333333%}.col-lg-offset-
9{margin-left:
75%}.col-lg-offset-
8{margin-left:
66.66666667%}.col-lg-offset-
7{margin-left:
58.33333333%}.col-lg-offset-
6{margin-left:
50%}.col-lg-offset-
5{margin-left:
41.66666667%}.col-lg-offset-
4{margin-left:
33.33333333%}.col-lg-offset-
3{margin-left:
25%}.col-lg-offset-
2{margin-left:
16.66666667%}.col-lg-offset-
1{margin-left:
8.33333333%}.col-lg-offset-
0{margin-left:
0}}table{background-color:transparent}th{text-align:left}.table{width:
100%;max-width:
100%;margin-bottom:
20px}.table
>thead
>tr
>th,.table
>tbody
>tr
>th,.table
>tfoot
>tr
>th,.table
>thead
>tr
>td,.table
>tbody
>tr
>td,.table
>tfoot
>tr
>td{padding:
8px;line-height:
1.42857143;vertical-align:top;border-top:
1px solid #ddd}.table
>thead
>tr
>th{vertical-align:bottom;border-bottom:
2px solid #ddd}.table
>caption+thead
>tr:first-child
>th,.table
>colgroup+thead
>tr:first-child
>th,.table
>thead:first-child
>tr:first-child
>th,.table
>caption+thead
>tr:first-child
>td,.table
>colgroup+thead
>tr:first-child
>td,.table
>thead:first-child
>tr:first-child
>td{border-top:
0}.table
>tbody+tbody{border-top:
2px solid #ddd}.table .table{background-color:#fff}.table-condensed
>thead
>tr
>th,.table-condensed
>tbody
>tr
>th,.table-condensed
>tfoot
>tr
>th,.table-condensed
>thead
>tr
>td,.table-condensed
>tbody
>tr
>td,.table-condensed
>tfoot
>tr
>td{padding:
5px}.table-bordered{border:
1px solid #ddd}.table-bordered
>thead
>tr
>th,.table-bordered
>tbody
>tr
>th,.table-bordered
>tfoot
>tr
>th,.table-bordered
>thead
>tr
>td,.table-bordered
>tbody
>tr
>td,.table-bordered
>tfoot
>tr
>td{border:
1px solid #ddd}.table-bordered
>thead
>tr
>th,.table-bordered
>thead
>tr
>td{border-bottom-width:
2px}.table-striped
>tbody
>tr:nth-child(odd)
>td,.table-striped
>tbody
>tr:nth-child(odd)
>th{background-color:#f9f9f9}.table-hover
>tbody
>tr:hover
>td,.table-hover
>tbody
>tr:hover
>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table
>thead
>tr
>td.active,.table
>tbody
>tr
>td.active,.table
>tfoot
>tr
>td.active,.table
>thead
>tr
>th.active,.table
>tbody
>tr
>th.active,.table
>tfoot
>tr
>th.active,.table
>thead
>tr.active
>td,.table
>tbody
>tr.active
>td,.table
>tfoot
>tr.active
>td,.table
>thead
>tr.active
>th,.table
>tbody
>tr.active
>th,.table
>tfoot
>tr.active
>th{background-color:#f5f5f5}.table-hover
>tbody
>tr
>td.active:hover,.table-hover
>tbody
>tr
>th.active:hover,.table-hover
>tbody
>tr.active:hover
>td,.table-hover
>tbody
>tr:hover
>.active,.table-hover
>tbody
>tr.active:hover
>th{background-color:#e8e8e8}.table
>thead
>tr
>td.success,.table
>tbody
>tr
>td.success,.table
>tfoot
>tr
>td.success,.table
>thead
>tr
>th.success,.table
>tbody
>tr
>th.success,.table
>tfoot
>tr
>th.success,.table
>thead
>tr.success
>td,.table
>tbody
>tr.success
>td,.table
>tfoot
>tr.success
>td,.table
>thead
>tr.success
>th,.table
>tbody
>tr.success
>th,.table
>tfoot
>tr.success
>th{background-color:#dff0d8}.table-hover
>tbody
>tr
>td.success:hover,.table-hover
>tbody
>tr
>th.success:hover,.table-hover
>tbody
>tr.success:hover
>td,.table-hover
>tbody
>tr:hover
>.success,.table-hover
>tbody
>tr.success:hover
>th{background-color:#d0e9c6}.table
>thead
>tr
>td.info,.table
>tbody
>tr
>td.info,.table
>tfoot
>tr
>td.info,.table
>thead
>tr
>th.info,.table
>tbody
>tr
>th.info,.table
>tfoot
>tr
>th.info,.table
>thead
>tr.info
>td,.table
>tbody
>tr.info
>td,.table
>tfoot
>tr.info
>td,.table
>thead
>tr.info
>th,.table
>tbody
>tr.info
>th,.table
>tfoot
>tr.info
>th{background-color:#d9edf7}.table-hover
>tbody
>tr
>td.info:hover,.table-hover
>tbody
>tr
>th.info:hover,.table-hover
>tbody
>tr.info:hover
>td,.table-hover
>tbody
>tr:hover
>.info,.table-hover
>tbody
>tr.info:hover
>th{background-color:#c4e3f3}.table
>thead
>tr
>td.warning,.table
>tbody
>tr
>td.warning,.table
>tfoot
>tr
>td.warning,.table
>thead
>tr
>th.warning,.table
>tbody
>tr
>th.warning,.table
>tfoot
>tr
>th.warning,.table
>thead
>tr.warning
>td,.table
>tbody
>tr.warning
>td,.table
>tfoot
>tr.warning
>td,.table
>thead
>tr.warning
>th,.table
>tbody
>tr.warning
>th,.table
>tfoot
>tr.warning
>th{background-color:#fcf8e3}.table-hover
>tbody
>tr
>td.warning:hover,.table-hover
>tbody
>tr
>th.warning:hover,.table-hover
>tbody
>tr.warning:hover
>td,.table-hover
>tbody
>tr:hover
>.warning,.table-hover
>tbody
>tr.warning:hover
>th{background-color:#faf2cc}.table
>thead
>tr
>td.danger,.table
>tbody
>tr
>td.danger,.table
>tfoot
>tr
>td.danger,.table
>thead
>tr
>th.danger,.table
>tbody
>tr
>th.danger,.table
>tfoot
>tr
>th.danger,.table
>thead
>tr.danger
>td,.table
>tbody
>tr.danger
>td,.table
>tfoot
>tr.danger
>td,.table
>thead
>tr.danger
>th,.table
>tbody
>tr.danger
>th,.table
>tfoot
>tr.danger
>th{background-color:#f2dede}.table-hover
>tbody
>tr
>td.danger:hover,.table-hover
>tbody
>tr
>th.danger:hover,.table-hover
>tbody
>tr.danger:hover
>td,.table-hover
>tbody
>tr:hover
>.danger,.table-hover
>tbody
>tr.danger:hover
>th{background-color:#ebcccc}@media screen and (max-width:
767px){.table-responsive{width:
100%;margin-bottom:
15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:
1px solid #ddd}.table-responsive
>.table{margin-bottom:
0}.table-responsive
>.table
>thead
>tr
>th,.table-responsive
>.table
>tbody
>tr
>th,.table-responsive
>.table
>tfoot
>tr
>th,.table-responsive
>.table
>thead
>tr
>td,.table-responsive
>.table
>tbody
>tr
>td,.table-responsive
>.table
>tfoot
>tr
>td{white-space:nowrap}.table-responsive
>.table-bordered{border:
0}.table-responsive
>.table-bordered
>thead
>tr
>th:first-child,.table-responsive
>.table-bordered
>tbody
>tr
>th:first-child,.table-responsive
>.table-bordered
>tfoot
>tr
>th:first-child,.table-responsive
>.table-bordered
>thead
>tr
>td:first-child,.table-responsive
>.table-bordered
>tbody
>tr
>td:first-child,.table-responsive
>.table-bordered
>tfoot
>tr
>td:first-child{border-left:
0}.table-responsive
>.table-bordered
>thead
>tr
>th:last-child,.table-responsive
>.table-bordered
>tbody
>tr
>th:last-child,.table-responsive
>.table-bordered
>tfoot
>tr
>th:last-child,.table-responsive
>.table-bordered
>thead
>tr
>td:last-child,.table-responsive
>.table-bordered
>tbody
>tr
>td:last-child,.table-responsive
>.table-bordered
>tfoot
>tr
>td:last-child{border-right:
0}.table-responsive
>.table-bordered
>tbody
>tr:last-child
>th,.table-responsive
>.table-bordered
>tfoot
>tr:last-child
>th,.table-responsive
>.table-bordered
>tbody
>tr:last-child
>td,.table-responsive
>.table-bordered
>tfoot
>tr:last-child
>td{border-bottom:
0}}fieldset{min-width:
0;padding:
0;margin:
0;border:
0}legend{display:block;width:
100%;padding:
0;margin-bottom:
20px;font-size:
21px;line-height:inherit;color:#
333;border:
0;border-bottom:
1px solid #e5e5e5}label{display:inline-block;max-width:
100%;margin-bottom:
5px;font-weight:
700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:
4px
0 0;margin-top:
1px \
9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:
100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:
5px auto -webkit-focus-ring-color;outline-offset:-
2px}output{display:block;padding-top:
7px;font-size:
14px;line-height:
1.42857143;color:#
555}.form-control{display:block;width:
100%;height:
34px;padding:
6px
12px;font-size:
14px;line-height:
1.42857143;color:#
555;background-color:#fff;background-image:none;border:
1px solid #ccc;border-radius:
4px;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);-webkit-transition:border-color ease-in-out
.15s,-webkit-box-shadow ease-in-out
.15s;-o-transition:border-color ease-in-out
.15s,box-shadow ease-in-out
.15s;transition:border-color ease-in-out
.15s,box-shadow ease-in-out
.15s}.form-control:focus{border-color:#
66afe9;outline:
0;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 8px rgba(
102,
175,
233,
.6);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 8px rgba(
102,
175,
233,
.6)}.form-control::-moz-placeholder{color:#
777;opacity:
1}.form-control:-ms-input-placeholder{color:#
777}.form-control::-webkit-input-placeholder{color:#
777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:
1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:
34px;line-height:
1.42857143 \
0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:
30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:
46px}.form-group{margin-bottom:
15px}.radio,.checkbox{position:relative;display:block;min-height:
20px;margin-top:
10px;margin-bottom:
10px}.radio label,.checkbox label{padding-left:
20px;margin-bottom:
0;font-weight:
400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:
4px \
9;margin-left:-
20px}.radio+.radio,.checkbox+.checkbox{margin-top:-
5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:
20px;margin-bottom:
0;font-weight:
400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:
0;margin-left:
10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:
7px;padding-bottom:
7px;margin-bottom:
0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:
0;padding-left:
0}.input-sm,.form-horizontal .form-group-sm .form-control{height:
30px;padding:
5px
10px;font-size:
12px;line-height:
1.5;border-radius:
3px}select.input-sm{height:
30px;line-height:
30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:
46px;padding:
10px
16px;font-size:
18px;line-height:
1.33;border-radius:
6px}select.input-lg{height:
46px;line-height:
46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:
42.5px}.form-control-feedback{position:absolute;top:
25px;right:
0;z-index:
2;display:block;width:
34px;height:
34px;line-height:
34px;text-align:center}.input-lg+.form-control-feedback{width:
46px;height:
46px;line-height:
46px}.input-sm+.form-control-feedback{width:
30px;height:
30px;line-height:
30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#
3c763d}.has-success .form-control{border-color:#
3c763d;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075)}.has-success .form-control:focus{border-color:#
2b542c;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #
67b168;box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #
67b168}.has-success .input-group-addon{color:#
3c763d;background-color:#dff0d8;border-color:#
3c763d}.has-success .form-control-feedback{color:#
3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#
8a6d3b}.has-warning .form-control{border-color:#
8a6d3b;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075)}.has-warning .form-control:focus{border-color:#
66512c;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #c0a16b;box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #c0a16b}.has-warning .input-group-addon{color:#
8a6d3b;background-color:#fcf8e3;border-color:#
8a6d3b}.has-warning .form-control-feedback{color:#
8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075)}.has-error .form-control:focus{border-color:#
843534;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #ce8483;box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:
0}.help-block{display:block;margin-top:
5px;margin-bottom:
10px;color:#
737373}@media (min-width:
768px){.form-inline .form-group{display:inline-block;margin-bottom:
0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group
>.form-control{width:
100%}.form-inline .control-label{margin-bottom:
0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:
0;margin-bottom:
0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:
0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:
0}.form-inline .has-feedback .form-control-feedback{top:
0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:
7px;margin-top:
0;margin-bottom:
0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:
27px}.form-horizontal .form-group{margin-right:-
15px;margin-left:-
15px}@media (min-width:
768px){.form-horizontal .control-label{padding-top:
7px;margin-bottom:
0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:
0;right:
15px}@media (min-width:
768px){.form-horizontal .form-group-lg .control-label{padding-top:
14.3px}}@media (min-width:
768px){.form-horizontal .form-group-sm .control-label{padding-top:
6px}}.btn{display:inline-block;padding:
6px
12px;margin-bottom:
0;font-size:
14px;font-weight:
400;line-height:
1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:
1px solid transparent;border-radius:
4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:
5px auto -webkit-focus-ring-color;outline-offset:-
2px}.btn:hover,.btn:focus{color:#
333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:
0;-webkit-box-shadow:inset
0 3px
5px rgba(
0,
0,
0,
.125);box-shadow:inset
0 3px
5px rgba(
0,
0,
0,
.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=
65);-webkit-box-shadow:none;box-shadow:none;opacity:
.65}.btn-default{color:#
333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open
>.dropdown-toggle.btn-default{color:#
333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open
>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#
333}.btn-primary{color:#fff;background-color:#
428bca;border-color:#
357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open
>.dropdown-toggle.btn-primary{color:#fff;background-color:#
3071a9;border-color:#
285e8e}.btn-primary:active,.btn-primary.active,.open
>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#
428bca;border-color:#
357ebd}.btn-primary .badge{color:#
428bca;background-color:#fff}.btn-success{color:#fff;background-color:#
5cb85c;border-color:#
4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open
>.dropdown-toggle.btn-success{color:#fff;background-color:#
449d44;border-color:#
398439}.btn-success:active,.btn-success.active,.open
>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#
5cb85c;border-color:#
4cae4c}.btn-success .badge{color:#
5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#
5bc0de;border-color:#
46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open
>.dropdown-toggle.btn-info{color:#fff;background-color:#
31b0d5;border-color:#
269abc}.btn-info:active,.btn-info.active,.open
>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#
5bc0de;border-color:#
46b8da}.btn-info .badge{color:#
5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open
>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open
>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open
>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open
>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:
400;color:#
428bca;cursor:pointer;border-radius:
0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#
2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#
777;text-decoration:none}.btn-lg,.btn-group-lg
>.btn{padding:
10px
16px;font-size:
18px;line-height:
1.33;border-radius:
6px}.btn-sm,.btn-group-sm
>.btn{padding:
5px
10px;font-size:
12px;line-height:
1.5;border-radius:
3px}.btn-xs,.btn-group-xs
>.btn{padding:
1px
5px;font-size:
12px;line-height:
1.5;border-radius:
3px}.btn-block{display:block;width:
100%}.btn-block+.btn-block{margin-top:
5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:
100%}.fade{opacity:
0;-webkit-transition:opacity
.15s linear;-o-transition:opacity
.15s linear;transition:opacity
.15s linear}.fade.in{opacity:
1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:
0;overflow:hidden;-webkit-transition:height
.35s ease;-o-transition:height
.35s ease;transition:height
.35s ease}.caret{display:inline-block;width:
0;height:
0;margin-left:
2px;vertical-align:middle;border-top:
4px solid;border-right:
4px solid transparent;border-left:
4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:
0}.dropdown-menu{position:absolute;top:
100%;left:
0;z-index:
1000;display:none;float:left;min-width:
160px;padding:
5px
0;margin:
2px
0 0;font-size:
14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:
1px solid #ccc;border:
1px solid rgba(
0,
0,
0,
.15);border-radius:
4px;-webkit-box-shadow:
0 6px
12px rgba(
0,
0,
0,
.175);box-shadow:
0 6px
12px rgba(
0,
0,
0,
.175)}.dropdown-menu.pull-right{right:
0;left:auto}.dropdown-menu .divider{height:
1px;margin:
9px
0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu
>li
>a{display:block;padding:
3px
20px;clear:both;font-weight:
400;line-height:
1.42857143;color:#
333;white-space:nowrap}.dropdown-menu
>li
>a:hover,.dropdown-menu
>li
>a:focus{color:#
262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu
>.active
>a,.dropdown-menu
>.active
>a:hover,.dropdown-menu
>.active
>a:focus{color:#fff;text-decoration:none;background-color:#
428bca;outline:
0}.dropdown-menu
>.disabled
>a,.dropdown-menu
>.disabled
>a:hover,.dropdown-menu
>.disabled
>a:focus{color:#
777}.dropdown-menu
>.disabled
>a:hover,.dropdown-menu
>.disabled
>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open
>.dropdown-menu{display:block}.open
>a{outline:
0}.dropdown-menu-right{right:
0;left:auto}.dropdown-menu-left{right:auto;left:
0}.dropdown-header{display:block;padding:
3px
20px;font-size:
12px;line-height:
1.42857143;color:#
777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:
0;right:
0;bottom:
0;left:
0;z-index:
990}.pull-right
>.dropdown-menu{right:
0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:
0;border-bottom:
4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:
100%;margin-bottom:
1px}@media (min-width:
768px){.navbar-right .dropdown-menu{right:
0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:
0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group
>.btn,.btn-group-vertical
>.btn{position:relative;float:left}.btn-group
>.btn:hover,.btn-group-vertical
>.btn:hover,.btn-group
>.btn:focus,.btn-group-vertical
>.btn:focus,.btn-group
>.btn:active,.btn-group-vertical
>.btn:active,.btn-group
>.btn.active,.btn-group-vertical
>.btn.active{z-index:
2}.btn-group
>.btn:focus,.btn-group-vertical
>.btn:focus{outline:
0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-
1px}.btn-toolbar{margin-left:-
5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar
>.btn,.btn-toolbar
>.btn-group,.btn-toolbar
>.input-group{margin-left:
5px}.btn-group
>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:
0}.btn-group
>.btn:first-child{margin-left:
0}.btn-group
>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:
0;border-bottom-right-radius:
0}.btn-group
>.btn:last-child:not(:first-child),.btn-group
>.dropdown-toggle:not(:first-child){border-top-left-radius:
0;border-bottom-left-radius:
0}.btn-group
>.btn-group{float:left}.btn-group
>.btn-group:not(:first-child):not(:last-child)
>.btn{border-radius:
0}.btn-group
>.btn-group:first-child
>.btn:last-child,.btn-group
>.btn-group:first-child
>.dropdown-toggle{border-top-right-radius:
0;border-bottom-right-radius:
0}.btn-group
>.btn-group:last-child
>.btn:first-child{border-top-left-radius:
0;border-bottom-left-radius:
0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:
0}.btn-group
>.btn+.dropdown-toggle{padding-right:
8px;padding-left:
8px}.btn-group
>.btn-lg+.dropdown-toggle{padding-right:
12px;padding-left:
12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset
0 3px
5px rgba(
0,
0,
0,
.125);box-shadow:inset
0 3px
5px rgba(
0,
0,
0,
.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:
0}.btn-lg .caret{border-width:
5px
5px
0;border-bottom-width:
0}.dropup .btn-lg .caret{border-width:
0 5px
5px}.btn-group-vertical
>.btn,.btn-group-vertical
>.btn-group,.btn-group-vertical
>.btn-group
>.btn{display:block;float:none;width:
100%;max-width:
100%}.btn-group-vertical
>.btn-group
>.btn{float:none}.btn-group-vertical
>.btn+.btn,.btn-group-vertical
>.btn+.btn-group,.btn-group-vertical
>.btn-group+.btn,.btn-group-vertical
>.btn-group+.btn-group{margin-top:-
1px;margin-left:
0}.btn-group-vertical
>.btn:not(:first-child):not(:last-child){border-radius:
0}.btn-group-vertical
>.btn:first-child:not(:last-child){border-top-right-radius:
4px;border-bottom-right-radius:
0;border-bottom-left-radius:
0}.btn-group-vertical
>.btn:last-child:not(:first-child){border-top-left-radius:
0;border-top-right-radius:
0;border-bottom-left-radius:
4px}.btn-group-vertical
>.btn-group:not(:first-child):not(:last-child)
>.btn{border-radius:
0}.btn-group-vertical
>.btn-group:first-child:not(:last-child)
>.btn:last-child,.btn-group-vertical
>.btn-group:first-child:not(:last-child)
>.dropdown-toggle{border-bottom-right-radius:
0;border-bottom-left-radius:
0}.btn-group-vertical
>.btn-group:last-child:not(:first-child)
>.btn:first-child{border-top-left-radius:
0;border-top-right-radius:
0}.btn-group-justified{display:table;width:
100%;table-layout:fixed;border-collapse:separate}.btn-group-justified
>.btn,.btn-group-justified
>.btn-group{display:table-cell;float:none;width:
1%}.btn-group-justified
>.btn-group .btn{width:
100%}.btn-group-justified
>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]
>.btn
>input[type=radio],[data-toggle=buttons]
>.btn
>input[type=checkbox]{position:absolute;z-index:-
1;filter:alpha(opacity=
0);opacity:
0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:
0;padding-left:
0}.input-group .form-control{position:relative;z-index:
2;float:left;width:
100%;margin-bottom:
0}.input-group-lg
>.form-control,.input-group-lg
>.input-group-addon,.input-group-lg
>.input-group-btn
>.btn{height:
46px;padding:
10px
16px;font-size:
18px;line-height:
1.33;border-radius:
6px}select.input-group-lg
>.form-control,select.input-group-lg
>.input-group-addon,select.input-group-lg
>.input-group-btn
>.btn{height:
46px;line-height:
46px}textarea.input-group-lg
>.form-control,textarea.input-group-lg
>.input-group-addon,textarea.input-group-lg
>.input-group-btn
>.btn,select[multiple].input-group-lg
>.form-control,select[multiple].input-group-lg
>.input-group-addon,select[multiple].input-group-lg
>.input-group-btn
>.btn{height:auto}.input-group-sm
>.form-control,.input-group-sm
>.input-group-addon,.input-group-sm
>.input-group-btn
>.btn{height:
30px;padding:
5px
10px;font-size:
12px;line-height:
1.5;border-radius:
3px}select.input-group-sm
>.form-control,select.input-group-sm
>.input-group-addon,select.input-group-sm
>.input-group-btn
>.btn{height:
30px;line-height:
30px}textarea.input-group-sm
>.form-control,textarea.input-group-sm
>.input-group-addon,textarea.input-group-sm
>.input-group-btn
>.btn,select[multiple].input-group-sm
>.form-control,select[multiple].input-group-sm
>.input-group-addon,select[multiple].input-group-sm
>.input-group-btn
>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:
0}.input-group-addon,.input-group-btn{width:
1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:
6px
12px;font-size:
14px;font-weight:
400;line-height:
1;color:#
555;text-align:center;background-color:#eee;border:
1px solid #ccc;border-radius:
4px}.input-group-addon.input-sm{padding:
5px
10px;font-size:
12px;border-radius:
3px}.input-group-addon.input-lg{padding:
10px
16px;font-size:
18px;border-radius:
6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:
0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child
>.btn,.input-group-btn:first-child
>.btn-group
>.btn,.input-group-btn:first-child
>.dropdown-toggle,.input-group-btn:last-child
>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child
>.btn-group:not(:last-child)
>.btn{border-top-right-radius:
0;border-bottom-right-radius:
0}.input-group-addon:first-child{border-right:
0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child
>.btn,.input-group-btn:last-child
>.btn-group
>.btn,.input-group-btn:last-child
>.dropdown-toggle,.input-group-btn:first-child
>.btn:not(:first-child),.input-group-btn:first-child
>.btn-group:not(:first-child)
>.btn{border-top-left-radius:
0;border-bottom-left-radius:
0}.input-group-addon:last-child{border-left:
0}.input-group-btn{position:relative;font-size:
0;white-space:nowrap}.input-group-btn
>.btn{position:relative}.input-group-btn
>.btn+.btn{margin-left:-
1px}.input-group-btn
>.btn:hover,.input-group-btn
>.btn:focus,.input-group-btn
>.btn:active{z-index:
2}.input-group-btn:first-child
>.btn,.input-group-btn:first-child
>.btn-group{margin-right:-
1px}.input-group-btn:last-child
>.btn,.input-group-btn:last-child
>.btn-group{margin-left:-
1px}.nav{padding-left:
0;margin-bottom:
0;list-style:none}.nav
>li{position:relative;display:block}.nav
>li
>a{position:relative;display:block;padding:
10px
15px}.nav
>li
>a:hover,.nav
>li
>a:focus{text-decoration:none;background-color:#eee}.nav
>li.disabled
>a{color:#
777}.nav
>li.disabled
>a:hover,.nav
>li.disabled
>a:focus{color:#
777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open
>a,.nav .open
>a:hover,.nav .open
>a:focus{background-color:#eee;border-color:#
428bca}.nav .nav-divider{height:
1px;margin:
9px
0;overflow:hidden;background-color:#e5e5e5}.nav
>li
>a
>img{max-width:none}.nav-tabs{border-bottom:
1px solid #ddd}.nav-tabs
>li{float:left;margin-bottom:-
1px}.nav-tabs
>li
>a{margin-right:
2px;line-height:
1.42857143;border:
1px solid transparent;border-radius:
4px
4px
0 0}.nav-tabs
>li
>a:hover{border-color:#eee #eee #ddd}.nav-tabs
>li.active
>a,.nav-tabs
>li.active
>a:hover,.nav-tabs
>li.active
>a:focus{color:#
555;cursor:default;background-color:#fff;border:
1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:
100%;border-bottom:
0}.nav-tabs.nav-justified
>li{float:none}.nav-tabs.nav-justified
>li
>a{margin-bottom:
5px;text-align:center}.nav-tabs.nav-justified
>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:
768px){.nav-tabs.nav-justified
>li{display:table-cell;width:
1%}.nav-tabs.nav-justified
>li
>a{margin-bottom:
0}}.nav-tabs.nav-justified
>li
>a{margin-right:
0;border-radius:
4px}.nav-tabs.nav-justified
>.active
>a,.nav-tabs.nav-justified
>.active
>a:hover,.nav-tabs.nav-justified
>.active
>a:focus{border:
1px solid #ddd}@media (min-width:
768px){.nav-tabs.nav-justified
>li
>a{border-bottom:
1px solid #ddd;border-radius:
4px
4px
0 0}.nav-tabs.nav-justified
>.active
>a,.nav-tabs.nav-justified
>.active
>a:hover,.nav-tabs.nav-justified
>.active
>a:focus{border-bottom-color:#fff}}.nav-pills
>li{float:left}.nav-pills
>li
>a{border-radius:
4px}.nav-pills
>li+li{margin-left:
2px}.nav-pills
>li.active
>a,.nav-pills
>li.active
>a:hover,.nav-pills
>li.active
>a:focus{color:#fff;background-color:#
428bca}.nav-stacked
>li{float:none}.nav-stacked
>li+li{margin-top:
2px;margin-left:
0}.nav-justified{width:
100%}.nav-justified
>li{float:none}.nav-justified
>li
>a{margin-bottom:
5px;text-align:center}.nav-justified
>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:
768px){.nav-justified
>li{display:table-cell;width:
1%}.nav-justified
>li
>a{margin-bottom:
0}}.nav-tabs-justified{border-bottom:
0}.nav-tabs-justified
>li
>a{margin-right:
0;border-radius:
4px}.nav-tabs-justified
>.active
>a,.nav-tabs-justified
>.active
>a:hover,.nav-tabs-justified
>.active
>a:focus{border:
1px solid #ddd}@media (min-width:
768px){.nav-tabs-justified
>li
>a{border-bottom:
1px solid #ddd;border-radius:
4px
4px
0 0}.nav-tabs-justified
>.active
>a,.nav-tabs-justified
>.active
>a:hover,.nav-tabs-justified
>.active
>a:focus{border-bottom-color:#fff}}.tab-content
>.tab-pane{display:none}.tab-content
>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-
1px;border-top-left-radius:
0;border-top-right-radius:
0}.navbar{position:relative;min-height:
50px;margin-bottom:
20px;border:
1px solid transparent}@media (min-width:
768px){.navbar{border-radius:
4px}}@media (min-width:
768px){.navbar-header{float:left}}.navbar-collapse{padding-right:
15px;padding-left:
15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:
1px solid transparent;-webkit-box-shadow:inset
0 1px
0 rgba(
255,
255,
255,
.1);box-shadow:inset
0 1px
0 rgba(
255,
255,
255,
.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:
768px){.navbar-collapse{width:auto;border-top:
0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:
0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:
0;padding-left:
0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:
340px}@media (max-width:
480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:
200px}}.container
>.navbar-header,.container-fluid
>.navbar-header,.container
>.navbar-collapse,.container-fluid
>.navbar-collapse{margin-right:-
15px;margin-left:-
15px}@media (min-width:
768px){.container
>.navbar-header,.container-fluid
>.navbar-header,.container
>.navbar-collapse,.container-fluid
>.navbar-collapse{margin-right:
0;margin-left:
0}}.navbar-static-top{z-index:
1000;border-width:
0 0 1px}@media (min-width:
768px){.navbar-static-top{border-radius:
0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:
0;left:
0;z-index:
1030;-webkit-transform:translate3d(
0,
0,
0);-o-transform:translate3d(
0,
0,
0);transform:translate3d(
0,
0,
0)}@media (min-width:
768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:
0}}.navbar-fixed-top{top:
0;border-width:
0 0 1px}.navbar-fixed-bottom{bottom:
0;margin-bottom:
0;border-width:
1px
0 0}.navbar-brand{float:left;height:
50px;padding:
15px
15px;font-size:
18px;line-height:
20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:
768px){.navbar
>.container .navbar-brand,.navbar
>.container-fluid .navbar-brand{margin-left:-
15px}}.navbar-toggle{position:relative;float:right;padding:
9px
10px;margin-top:
8px;margin-right:
15px;margin-bottom:
8px;background-color:transparent;background-image:none;border:
1px solid transparent;border-radius:
4px}.navbar-toggle:focus{outline:
0}.navbar-toggle .icon-bar{display:block;width:
22px;height:
2px;border-radius:
1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:
4px}@media (min-width:
768px){.navbar-toggle{display:none}}.navbar-nav{margin:
7.5px -
15px}.navbar-nav
>li
>a{padding-top:
10px;padding-bottom:
10px;line-height:
20px}@media (max-width:
767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:
0;background-color:transparent;border:
0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu
>li
>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:
5px
15px
5px
25px}.navbar-nav .open .dropdown-menu
>li
>a{line-height:
20px}.navbar-nav .open .dropdown-menu
>li
>a:hover,.navbar-nav .open .dropdown-menu
>li
>a:focus{background-image:none}}@media (min-width:
768px){.navbar-nav{float:left;margin:
0}.navbar-nav
>li{float:left}.navbar-nav
>li
>a{padding-top:
15px;padding-bottom:
15px}.navbar-nav.navbar-right:last-child{margin-right:-
15px}}@media (min-width:
768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:
10px
15px;margin-top:
8px;margin-right:-
15px;margin-bottom:
8px;margin-left:-
15px;border-top:
1px solid transparent;border-bottom:
1px solid transparent;-webkit-box-shadow:inset
0 1px
0 rgba(
255,
255,
255,
.1),
0 1px
0 rgba(
255,
255,
255,
.1);box-shadow:inset
0 1px
0 rgba(
255,
255,
255,
.1),
0 1px
0 rgba(
255,
255,
255,
.1)}@media (min-width:
768px){.navbar-form .form-group{display:inline-block;margin-bottom:
0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group
>.form-control{width:
100%}.navbar-form .control-label{margin-bottom:
0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:
0;margin-bottom:
0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:
0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:
0}.navbar-form .has-feedback .form-control-feedback{top:
0}}@media (max-width:
767px){.navbar-form .form-group{margin-bottom:
5px}}@media (min-width:
768px){.navbar-form{width:auto;padding-top:
0;padding-bottom:
0;margin-right:
0;margin-left:
0;border:
0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-
15px}}.navbar-nav
>li
>.dropdown-menu{margin-top:
0;border-top-left-radius:
0;border-top-right-radius:
0}.navbar-fixed-bottom .navbar-nav
>li
>.dropdown-menu{border-bottom-right-radius:
0;border-bottom-left-radius:
0}.navbar-btn{margin-top:
8px;margin-bottom:
8px}.navbar-btn.btn-sm{margin-top:
10px;margin-bottom:
10px}.navbar-btn.btn-xs{margin-top:
14px;margin-bottom:
14px}.navbar-text{margin-top:
15px;margin-bottom:
15px}@media (min-width:
768px){.navbar-text{float:left;margin-right:
15px;margin-left:
15px}.navbar-text.navbar-right:last-child{margin-right:
0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#
777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#
5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#
777}.navbar-default .navbar-nav
>li
>a{color:#
777}.navbar-default .navbar-nav
>li
>a:hover,.navbar-default .navbar-nav
>li
>a:focus{color:#
333;background-color:transparent}.navbar-default .navbar-nav
>.active
>a,.navbar-default .navbar-nav
>.active
>a:hover,.navbar-default .navbar-nav
>.active
>a:focus{color:#
555;background-color:#e7e7e7}.navbar-default .navbar-nav
>.disabled
>a,.navbar-default .navbar-nav
>.disabled
>a:hover,.navbar-default .navbar-nav
>.disabled
>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#
888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav
>.open
>a,.navbar-default .navbar-nav
>.open
>a:hover,.navbar-default .navbar-nav
>.open
>a:focus{color:#
555;background-color:#e7e7e7}@media (max-width:
767px){.navbar-default .navbar-nav .open .dropdown-menu
>li
>a{color:#
777}.navbar-default .navbar-nav .open .dropdown-menu
>li
>a:hover,.navbar-default .navbar-nav .open .dropdown-menu
>li
>a:focus{color:#
333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu
>.active
>a,.navbar-default .navbar-nav .open .dropdown-menu
>.active
>a:hover,.navbar-default .navbar-nav .open .dropdown-menu
>.active
>a:focus{color:#
555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu
>.disabled
>a,.navbar-default .navbar-nav .open .dropdown-menu
>.disabled
>a:hover,.navbar-default .navbar-nav .open .dropdown-menu
>.disabled
>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#
777}.navbar-default .navbar-link:hover{color:#
333}.navbar-default .btn-link{color:#
777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#
333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#
222;border-color:#
080808}.navbar-inverse .navbar-brand{color:#
777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#
777}.navbar-inverse .navbar-nav
>li
>a{color:#
777}.navbar-inverse .navbar-nav
>li
>a:hover,.navbar-inverse .navbar-nav
>li
>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav
>.active
>a,.navbar-inverse .navbar-nav
>.active
>a:hover,.navbar-inverse .navbar-nav
>.active
>a:focus{color:#fff;background-color:#
080808}.navbar-inverse .navbar-nav
>.disabled
>a,.navbar-inverse .navbar-nav
>.disabled
>a:hover,.navbar-inverse .navbar-nav
>.disabled
>a:focus{color:#
444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#
333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#
333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#
101010}.navbar-inverse .navbar-nav
>.open
>a,.navbar-inverse .navbar-nav
>.open
>a:hover,.navbar-inverse .navbar-nav
>.open
>a:focus{color:#fff;background-color:#
080808}@media (max-width:
767px){.navbar-inverse .navbar-nav .open .dropdown-menu
>.dropdown-header{border-color:#
080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#
080808}.navbar-inverse .navbar-nav .open .dropdown-menu
>li
>a{color:#
777}.navbar-inverse .navbar-nav .open .dropdown-menu
>li
>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu
>li
>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu
>.active
>a,.navbar-inverse .navbar-nav .open .dropdown-menu
>.active
>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu
>.active
>a:focus{color:#fff;background-color:#
080808}.navbar-inverse .navbar-nav .open .dropdown-menu
>.disabled
>a,.navbar-inverse .navbar-nav .open .dropdown-menu
>.disabled
>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu
>.disabled
>a:focus{color:#
444;background-color:transparent}}.navbar-inverse .navbar-link{color:#
777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#
777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#
444}.breadcrumb{padding:
8px
15px;margin-bottom:
20px;list-style:none;background-color:#f5f5f5;border-radius:
4px}.breadcrumb
>li{display:inline-block}.breadcrumb
>li+li:before{padding:
0 5px;color:#ccc;content:"/\
00a0"}.breadcrumb
>.active{color:#
777}.pagination{display:inline-block;padding-left:
0;margin:
20px
0;border-radius:
4px}.pagination
>li{display:inline}.pagination
>li
>a,.pagination
>li
>span{position:relative;float:left;padding:
6px
12px;margin-left:-
1px;line-height:
1.42857143;color:#
428bca;text-decoration:none;background-color:#fff;border:
1px solid #ddd}.pagination
>li:first-child
>a,.pagination
>li:first-child
>span{margin-left:
0;border-top-left-radius:
4px;border-bottom-left-radius:
4px}.pagination
>li:last-child
>a,.pagination
>li:last-child
>span{border-top-right-radius:
4px;border-bottom-right-radius:
4px}.pagination
>li
>a:hover,.pagination
>li
>span:hover,.pagination
>li
>a:focus,.pagination
>li
>span:focus{color:#
2a6496;background-color:#eee;border-color:#ddd}.pagination
>.active
>a,.pagination
>.active
>span,.pagination
>.active
>a:hover,.pagination
>.active
>span:hover,.pagination
>.active
>a:focus,.pagination
>.active
>span:focus{z-index:
2;color:#fff;cursor:default;background-color:#
428bca;border-color:#
428bca}.pagination
>.disabled
>span,.pagination
>.disabled
>span:hover,.pagination
>.disabled
>span:focus,.pagination
>.disabled
>a,.pagination
>.disabled
>a:hover,.pagination
>.disabled
>a:focus{color:#
777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg
>li
>a,.pagination-lg
>li
>span{padding:
10px
16px;font-size:
18px}.pagination-lg
>li:first-child
>a,.pagination-lg
>li:first-child
>span{border-top-left-radius:
6px;border-bottom-left-radius:
6px}.pagination-lg
>li:last-child
>a,.pagination-lg
>li:last-child
>span{border-top-right-radius:
6px;border-bottom-right-radius:
6px}.pagination-sm
>li
>a,.pagination-sm
>li
>span{padding:
5px
10px;font-size:
12px}.pagination-sm
>li:first-child
>a,.pagination-sm
>li:first-child
>span{border-top-left-radius:
3px;border-bottom-left-radius:
3px}.pagination-sm
>li:last-child
>a,.pagination-sm
>li:last-child
>span{border-top-right-radius:
3px;border-bottom-right-radius:
3px}.pager{padding-left:
0;margin:
20px
0;text-align:center;list-style:none}.pager li{display:inline}.pager li
>a,.pager li
>span{display:inline-block;padding:
5px
14px;background-color:#fff;border:
1px solid #ddd;border-radius:
15px}.pager li
>a:hover,.pager li
>a:focus{text-decoration:none;background-color:#eee}.pager .next
>a,.pager .next
>span{float:right}.pager .previous
>a,.pager .previous
>span{float:left}.pager .disabled
>a,.pager .disabled
>a:hover,.pager .disabled
>a:focus,.pager .disabled
>span{color:#
777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:
.2em
.6em
.3em;font-size:
75%;font-weight:
700;line-height:
1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:
.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-
1px}.label-default{background-color:#
777}.label-default[href]:hover,.label-default[href]:focus{background-color:#
5e5e5e}.label-primary{background-color:#
428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#
3071a9}.label-success{background-color:#
5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#
449d44}.label-info{background-color:#
5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#
31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:
10px;padding:
3px
7px;font-size:
12px;font-weight:
700;line-height:
1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#
777;border-radius:
10px}.badge:empty{display:none}.btn .badge{position:relative;top:-
1px}.btn-xs .badge{top:
0;padding:
1px
5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active
>.badge,.nav-pills
>.active
>a
>.badge{color:#
428bca;background-color:#fff}.nav-pills
>li
>a
>.badge{margin-left:
3px}.jumbotron{padding:
30px;margin-bottom:
30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:
15px;font-size:
21px;font-weight:
200}.jumbotron
>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:
6px}.jumbotron .container{max-width:
100%}@media screen and (min-width:
768px){.jumbotron{padding-top:
48px;padding-bottom:
48px}.container .jumbotron{padding-right:
60px;padding-left:
60px}.jumbotron h1,.jumbotron .h1{font-size:
63px}}.thumbnail{display:block;padding:
4px;margin-bottom:
20px;line-height:
1.42857143;background-color:#fff;border:
1px solid #ddd;border-radius:
4px;-webkit-transition:all
.2s ease-in-out;-o-transition:all
.2s ease-in-out;transition:all
.2s ease-in-out}.thumbnail
>img,.thumbnail a
>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#
428bca}.thumbnail .caption{padding:
9px;color:#
333}.alert{padding:
15px;margin-bottom:
20px;border:
1px solid transparent;border-radius:
4px}.alert h4{margin-top:
0;color:inherit}.alert .alert-link{font-weight:
700}.alert
>p,.alert
>ul{margin-bottom:
0}.alert
>p+p{margin-top:
5px}.alert-dismissable,.alert-dismissible{padding-right:
35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-
2px;right:-
21px;color:inherit}.alert-success{color:#
3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#
2b542c}.alert-info{color:#
31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#
245269}.alert-warning{color:#
8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#
66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#
843534}@-webkit-keyframes progress-bar-stripes{from{background-position:
40px
0}to{background-position:
0 0}}@-o-keyframes progress-bar-stripes{from{background-position:
40px
0}to{background-position:
0 0}}@keyframes progress-bar-stripes{from{background-position:
40px
0}to{background-position:
0 0}}.progress{height:
20px;margin-bottom:
20px;overflow:hidden;background-color:#f5f5f5;border-radius:
4px;-webkit-box-shadow:inset
0 1px
2px rgba(
0,
0,
0,
.1);box-shadow:inset
0 1px
2px rgba(
0,
0,
0,
.1)}.progress-bar{float:left;width:
0;height:
100%;font-size:
12px;line-height:
20px;color:#fff;text-align:center;background-color:#
428bca;-webkit-box-shadow:inset
0 -
1px
0 rgba(
0,
0,
0,
.15);box-shadow:inset
0 -
1px
0 rgba(
0,
0,
0,
.15);-webkit-transition:width
.6s ease;-o-transition:width
.6s ease;transition:width
.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);-webkit-background-size:
40px
40px;background-size:
40px
40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes
2s linear infinite;-o-animation:progress-bar-stripes
2s linear infinite;animation:progress-bar-stripes
2s linear infinite}.progress-bar[
aria-valuenow="
1"],.progress-bar[
aria-valuenow="
2"]{min-width:
30px}.progress-bar[
aria-valuenow="
0"]{min-width:
30px;color:#
777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#
5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent)}.progress-bar-info{background-color:#
5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent)}.media,.media-body{overflow:hidden;zoom:
1}.media,.media .media{margin-top:
15px}.media:first-child{margin-top:
0}.media-object{display:block}.media-heading{margin:
0 0 5px}.media
>.pull-left{margin-right:
10px}.media
>.pull-right{margin-left:
10px}.media-list{padding-left:
0;list-style:none}.list-group{padding-left:
0;margin-bottom:
20px}.list-group-item{position:relative;display:block;padding:
10px
15px;margin-bottom:-
1px;background-color:#fff;border:
1px solid #ddd}.list-group-item:first-child{border-top-left-radius:
4px;border-top-right-radius:
4px}.list-group-item:last-child{margin-bottom:
0;border-bottom-right-radius:
4px;border-bottom-left-radius:
4px}.list-group-item
>.badge{float:right}.list-group-item
>.badge+.badge{margin-right:
5px}a.list-group-item{color:#
555}a.list-group-item .list-group-item-heading{color:#
333}a.list-group-item:hover,a.list-group-item:focus{color:#
555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#
777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#
777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:
2;color:#fff;background-color:#
428bca;border-color:#
428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading
>small,.list-group-item.active:hover .list-group-item-heading
>small,.list-group-item.active:focus .list-group-item-heading
>small,.list-group-item.active .list-group-item-heading
>.small,.list-group-item.active:hover .list-group-item-heading
>.small,.list-group-item.active:focus .list-group-item-heading
>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#
3c763d;background-color:#dff0d8}a.list-group-item-success{color:#
3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#
3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#
3c763d;border-color:#
3c763d}.list-group-item-info{color:#
31708f;background-color:#d9edf7}a.list-group-item-info{color:#
31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#
31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#
31708f;border-color:#
31708f}.list-group-item-warning{color:#
8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#
8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#
8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#
8a6d3b;border-color:#
8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:
0;margin-bottom:
5px}.list-group-item-text{margin-bottom:
0;line-height:
1.3}.panel{margin-bottom:
20px;background-color:#fff;border:
1px solid transparent;border-radius:
4px;-webkit-box-shadow:
0 1px
1px rgba(
0,
0,
0,
.05);box-shadow:
0 1px
1px rgba(
0,
0,
0,
.05)}.panel-body{padding:
15px}.panel-heading{padding:
10px
15px;border-bottom:
1px solid transparent;border-top-left-radius:
3px;border-top-right-radius:
3px}.panel-heading
>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:
0;margin-bottom:
0;font-size:
16px;color:inherit}.panel-title
>a{color:inherit}.panel-footer{padding:
10px
15px;background-color:#f5f5f5;border-top:
1px solid #ddd;border-bottom-right-radius:
3px;border-bottom-left-radius:
3px}.panel
>.list-group{margin-bottom:
0}.panel
>.list-group .list-group-item{border-width:
1px
0;border-radius:
0}.panel
>.list-group:first-child .list-group-item:first-child{border-top:
0;border-top-left-radius:
3px;border-top-right-radius:
3px}.panel
>.list-group:last-child .list-group-item:last-child{border-bottom:
0;border-bottom-right-radius:
3px;border-bottom-left-radius:
3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:
0}.list-group+.panel-footer{border-top-width:
0}.panel
>.table,.panel
>.table-responsive
>.table,.panel
>.panel-collapse
>.table{margin-bottom:
0}.panel
>.table:first-child,.panel
>.table-responsive:first-child
>.table:first-child{border-top-left-radius:
3px;border-top-right-radius:
3px}.panel
>.table:first-child
>thead:first-child
>tr:first-child td:first-child,.panel
>.table-responsive:first-child
>.table:first-child
>thead:first-child
>tr:first-child td:first-child,.panel
>.table:first-child
>tbody:first-child
>tr:first-child td:first-child,.panel
>.table-responsive:first-child
>.table:first-child
>tbody:first-child
>tr:first-child td:first-child,.panel
>.table:first-child
>thead:first-child
>tr:first-child th:first-child,.panel
>.table-responsive:first-child
>.table:first-child
>thead:first-child
>tr:first-child th:first-child,.panel
>.table:first-child
>tbody:first-child
>tr:first-child th:first-child,.panel
>.table-responsive:first-child
>.table:first-child
>tbody:first-child
>tr:first-child th:first-child{border-top-left-radius:
3px}.panel
>.table:first-child
>thead:first-child
>tr:first-child td:last-child,.panel
>.table-responsive:first-child
>.table:first-child
>thead:first-child
>tr:first-child td:last-child,.panel
>.table:first-child
>tbody:first-child
>tr:first-child td:last-child,.panel
>.table-responsive:first-child
>.table:first-child
>tbody:first-child
>tr:first-child td:last-child,.panel
>.table:first-child
>thead:first-child
>tr:first-child th:last-child,.panel
>.table-responsive:first-child
>.table:first-child
>thead:first-child
>tr:first-child th:last-child,.panel
>.table:first-child
>tbody:first-child
>tr:first-child th:last-child,.panel
>.table-responsive:first-child
>.table:first-child
>tbody:first-child
>tr:first-child th:last-child{border-top-right-radius:
3px}.panel
>.table:last-child,.panel
>.table-responsive:last-child
>.table:last-child{border-bottom-right-radius:
3px;border-bottom-left-radius:
3px}.panel
>.table:last-child
>tbody:last-child
>tr:last-child td:first-child,.panel
>.table-responsive:last-child
>.table:last-child
>tbody:last-child
>tr:last-child td:first-child,.panel
>.table:last-child
>tfoot:last-child
>tr:last-child td:first-child,.panel
>.table-responsive:last-child
>.table:last-child
>tfoot:last-child
>tr:last-child td:first-child,.panel
>.table:last-child
>tbody:last-child
>tr:last-child th:first-child,.panel
>.table-responsive:last-child
>.table:last-child
>tbody:last-child
>tr:last-child th:first-child,.panel
>.table:last-child
>tfoot:last-child
>tr:last-child th:first-child,.panel
>.table-responsive:last-child
>.table:last-child
>tfoot:last-child
>tr:last-child th:first-child{border-bottom-left-radius:
3px}.panel
>.table:last-child
>tbody:last-child
>tr:last-child td:last-child,.panel
>.table-responsive:last-child
>.table:last-child
>tbody:last-child
>tr:last-child td:last-child,.panel
>.table:last-child
>tfoot:last-child
>tr:last-child td:last-child,.panel
>.table-responsive:last-child
>.table:last-child
>tfoot:last-child
>tr:last-child td:last-child,.panel
>.table:last-child
>tbody:last-child
>tr:last-child th:last-child,.panel
>.table-responsive:last-child
>.table:last-child
>tbody:last-child
>tr:last-child th:last-child,.panel
>.table:last-child
>tfoot:last-child
>tr:last-child th:last-child,.panel
>.table-responsive:last-child
>.table:last-child
>tfoot:last-child
>tr:last-child th:last-child{border-bottom-right-radius:
3px}.panel
>.panel-body+.table,.panel
>.panel-body+.table-responsive{border-top:
1px solid #ddd}.panel
>.table
>tbody:first-child
>tr:first-child th,.panel
>.table
>tbody:first-child
>tr:first-child td{border-top:
0}.panel
>.table-bordered,.panel
>.table-responsive
>.table-bordered{border:
0}.panel
>.table-bordered
>thead
>tr
>th:first-child,.panel
>.table-responsive
>.table-bordered
>thead
>tr
>th:first-child,.panel
>.table-bordered
>tbody
>tr
>th:first-child,.panel
>.table-responsive
>.table-bordered
>tbody
>tr
>th:first-child,.panel
>.table-bordered
>tfoot
>tr
>th:first-child,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr
>th:first-child,.panel
>.table-bordered
>thead
>tr
>td:first-child,.panel
>.table-responsive
>.table-bordered
>thead
>tr
>td:first-child,.panel
>.table-bordered
>tbody
>tr
>td:first-child,.panel
>.table-responsive
>.table-bordered
>tbody
>tr
>td:first-child,.panel
>.table-bordered
>tfoot
>tr
>td:first-child,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr
>td:first-child{border-left:
0}.panel
>.table-bordered
>thead
>tr
>th:last-child,.panel
>.table-responsive
>.table-bordered
>thead
>tr
>th:last-child,.panel
>.table-bordered
>tbody
>tr
>th:last-child,.panel
>.table-responsive
>.table-bordered
>tbody
>tr
>th:last-child,.panel
>.table-bordered
>tfoot
>tr
>th:last-child,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr
>th:last-child,.panel
>.table-bordered
>thead
>tr
>td:last-child,.panel
>.table-responsive
>.table-bordered
>thead
>tr
>td:last-child,.panel
>.table-bordered
>tbody
>tr
>td:last-child,.panel
>.table-responsive
>.table-bordered
>tbody
>tr
>td:last-child,.panel
>.table-bordered
>tfoot
>tr
>td:last-child,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr
>td:last-child{border-right:
0}.panel
>.table-bordered
>thead
>tr:first-child
>td,.panel
>.table-responsive
>.table-bordered
>thead
>tr:first-child
>td,.panel
>.table-bordered
>tbody
>tr:first-child
>td,.panel
>.table-responsive
>.table-bordered
>tbody
>tr:first-child
>td,.panel
>.table-bordered
>thead
>tr:first-child
>th,.panel
>.table-responsive
>.table-bordered
>thead
>tr:first-child
>th,.panel
>.table-bordered
>tbody
>tr:first-child
>th,.panel
>.table-responsive
>.table-bordered
>tbody
>tr:first-child
>th{border-bottom:
0}.panel
>.table-bordered
>tbody
>tr:last-child
>td,.panel
>.table-responsive
>.table-bordered
>tbody
>tr:last-child
>td,.panel
>.table-bordered
>tfoot
>tr:last-child
>td,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr:last-child
>td,.panel
>.table-bordered
>tbody
>tr:last-child
>th,.panel
>.table-responsive
>.table-bordered
>tbody
>tr:last-child
>th,.panel
>.table-bordered
>tfoot
>tr:last-child
>th,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr:last-child
>th{border-bottom:
0}.panel
>.table-responsive{margin-bottom:
0;border:
0}.panel-group{margin-bottom:
20px}.panel-group .panel{margin-bottom:
0;border-radius:
4px}.panel-group .panel+.panel{margin-top:
5px}.panel-group .panel-heading{border-bottom:
0}.panel-group .panel-heading+.panel-collapse
>.panel-body{border-top:
1px solid #ddd}.panel-group .panel-footer{border-top:
0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:
1px solid #ddd}.panel-default{border-color:#ddd}.panel-default
>.panel-heading{color:#
333;background-color:#f5f5f5;border-color:#ddd}.panel-default
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#ddd}.panel-default
>.panel-heading .badge{color:#f5f5f5;background-color:#
333}.panel-default
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#
428bca}.panel-primary
>.panel-heading{color:#fff;background-color:#
428bca;border-color:#
428bca}.panel-primary
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#
428bca}.panel-primary
>.panel-heading .badge{color:#
428bca;background-color:#fff}.panel-primary
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#
428bca}.panel-success{border-color:#d6e9c6}.panel-success
>.panel-heading{color:#
3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#d6e9c6}.panel-success
>.panel-heading .badge{color:#dff0d8;background-color:#
3c763d}.panel-success
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info
>.panel-heading{color:#
31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#bce8f1}.panel-info
>.panel-heading .badge{color:#d9edf7;background-color:#
31708f}.panel-info
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning
>.panel-heading{color:#
8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#faebcc}.panel-warning
>.panel-heading .badge{color:#fcf8e3;background-color:#
8a6d3b}.panel-warning
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger
>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#ebccd1}.panel-danger
>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:
0;padding:
0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:
0;bottom:
0;left:
0;width:
100%;height:
100%;border:
0}.embed-responsive.embed-responsive-
16by9{padding-bottom:
56.25%}.embed-responsive.embed-responsive-
4by3{padding-bottom:
75%}.well{min-height:
20px;padding:
19px;margin-bottom:
20px;background-color:#f5f5f5;border:
1px solid #e3e3e3;border-radius:
4px;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.05);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.05)}.well blockquote{border-color:#ddd;border-color:rgba(
0,
0,
0,
.15)}.well-lg{padding:
24px;border-radius:
6px}.well-sm{padding:
9px;border-radius:
3px}.close{float:right;font-size:
21px;font-weight:
700;line-height:
1;color:#
000;text-shadow:
0 1px
0 #fff;filter:alpha(opacity=
20);opacity:
.2}.close:hover,.close:focus{color:#
000;text-decoration:none;cursor:pointer;filter:alpha(opacity=
50);opacity:
.5}button.close{-webkit-appearance:none;padding:
0;cursor:pointer;background:
0 0;border:
0}.modal-open{overflow:hidden}.modal{position:fixed;top:
0;right:
0;bottom:
0;left:
0;z-index:
1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:
0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform
.3s ease-out;-o-transition:-o-transform
.3s ease-out;transition:transform
.3s ease-out;-webkit-transform:translate3d(
0,-
25%,
0);-o-transform:translate3d(
0,-
25%,
0);transform:translate3d(
0,-
25%,
0)}.modal.in .modal-dialog{-webkit-transform:translate3d(
0,
0,
0);-o-transform:translate3d(
0,
0,
0);transform:translate3d(
0,
0,
0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:
10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:
1px solid #
999;border:
1px solid rgba(
0,
0,
0,
.2);border-radius:
6px;outline:
0;-webkit-box-shadow:
0 3px
9px rgba(
0,
0,
0,
.5);box-shadow:
0 3px
9px rgba(
0,
0,
0,
.5)}.modal-backdrop{position:fixed;top:
0;right:
0;bottom:
0;left:
0;z-index:
1040;background-color:#
000}.modal-backdrop.fade{filter:alpha(opacity=
0);opacity:
0}.modal-backdrop.in{filter:alpha(opacity=
50);opacity:
.5}.modal-header{min-height:
16.43px;padding:
15px;border-bottom:
1px solid #e5e5e5}.modal-header .close{margin-top:-
2px}.modal-title{margin:
0;line-height:
1.42857143}.modal-body{position:relative;padding:
15px}.modal-footer{padding:
15px;text-align:right;border-top:
1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:
0;margin-left:
5px}.modal-footer .btn-group .btn+.btn{margin-left:-
1px}.modal-footer .btn-block+.btn-block{margin-left:
0}.modal-scrollbar-measure{position:absolute;top:-
9999px;width:
50px;height:
50px;overflow:scroll}@media (min-width:
768px){.modal-dialog{width:
600px;margin:
30px auto}.modal-content{-webkit-box-shadow:
0 5px
15px rgba(
0,
0,
0,
.5);box-shadow:
0 5px
15px rgba(
0,
0,
0,
.5)}.modal-sm{width:
300px}}@media (min-width:
992px){.modal-lg{width:
900px}}.tooltip{position:absolute;z-index:
1070;display:block;font-size:
12px;line-height:
1.4;visibility:visible;filter:alpha(opacity=
0);opacity:
0}.tooltip.in{filter:alpha(opacity=
90);opacity:
.9}.tooltip.top{padding:
5px
0;margin-top:-
3px}.tooltip.right{padding:
0 5px;margin-left:
3px}.tooltip.bottom{padding:
5px
0;margin-top:
3px}.tooltip.left{padding:
0 5px;margin-left:-
3px}.tooltip-inner{max-width:
200px;padding:
3px
8px;color:#fff;text-align:center;text-decoration:none;background-color:#
000;border-radius:
4px}.tooltip-arrow{position:absolute;width:
0;height:
0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:
0;left:
50%;margin-left:-
5px;border-width:
5px
5px
0;border-top-color:#
000}.tooltip.top-left .tooltip-arrow{bottom:
0;left:
5px;border-width:
5px
5px
0;border-top-color:#
000}.tooltip.top-right .tooltip-arrow{right:
5px;bottom:
0;border-width:
5px
5px
0;border-top-color:#
000}.tooltip.right .tooltip-arrow{top:
50%;left:
0;margin-top:-
5px;border-width:
5px
5px
5px
0;border-right-color:#
000}.tooltip.left .tooltip-arrow{top:
50%;right:
0;margin-top:-
5px;border-width:
5px
0 5px
5px;border-left-color:#
000}.tooltip.bottom .tooltip-arrow{top:
0;left:
50%;margin-left:-
5px;border-width:
0 5px
5px;border-bottom-color:#
000}.tooltip.bottom-left .tooltip-arrow{top:
0;left:
5px;border-width:
0 5px
5px;border-bottom-color:#
000}.tooltip.bottom-right .tooltip-arrow{top:
0;right:
5px;border-width:
0 5px
5px;border-bottom-color:#
000}.popover{position:absolute;top:
0;left:
0;z-index:
1060;display:none;max-width:
276px;padding:
1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:
1px solid #ccc;border:
1px solid rgba(
0,
0,
0,
.2);border-radius:
6px;-webkit-box-shadow:
0 5px
10px rgba(
0,
0,
0,
.2);box-shadow:
0 5px
10px rgba(
0,
0,
0,
.2)}.popover.top{margin-top:-
10px}.popover.right{margin-left:
10px}.popover.bottom{margin-top:
10px}.popover.left{margin-left:-
10px}.popover-title{padding:
8px
14px;margin:
0;font-size:
14px;font-weight:
400;line-height:
18px;background-color:#f7f7f7;border-bottom:
1px solid #ebebeb;border-radius:
5px
5px
0 0}.popover-content{padding:
9px
14px}.popover
>.arrow,.popover
>.arrow:after{position:absolute;display:block;width:
0;height:
0;border-color:transparent;border-style:solid}.popover
>.arrow{border-width:
11px}.popover
>.arrow:after{content:"";border-width:
10px}.popover.top
>.arrow{bottom:-
11px;left:
50%;margin-left:-
11px;border-top-color:#
999;border-top-color:rgba(
0,
0,
0,
.25);border-bottom-width:
0}.popover.top
>.arrow:after{bottom:
1px;margin-left:-
10px;content:" ";border-top-color:#fff;border-bottom-width:
0}.popover.right
>.arrow{top:
50%;left:-
11px;margin-top:-
11px;border-right-color:#
999;border-right-color:rgba(
0,
0,
0,
.25);border-left-width:
0}.popover.right
>.arrow:after{bottom:-
10px;left:
1px;content:" ";border-right-color:#fff;border-left-width:
0}.popover.bottom
>.arrow{top:-
11px;left:
50%;margin-left:-
11px;border-top-width:
0;border-bottom-color:#
999;border-bottom-color:rgba(
0,
0,
0,
.25)}.popover.bottom
>.arrow:after{top:
1px;margin-left:-
10px;content:" ";border-top-width:
0;border-bottom-color:#fff}.popover.left
>.arrow{top:
50%;right:-
11px;margin-top:-
11px;border-right-width:
0;border-left-color:#
999;border-left-color:rgba(
0,
0,
0,
.25)}.popover.left
>.arrow:after{right:
1px;bottom:-
10px;content:" ";border-right-width:
0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:
100%;overflow:hidden}.carousel-inner
>.item{position:relative;display:none;-webkit-transition:
.6s ease-in-out left;-o-transition:
.6s ease-in-out left;transition:
.6s ease-in-out left}.carousel-inner
>.item
>img,.carousel-inner
>.item
>a
>img{line-height:
1}.carousel-inner
>.active,.carousel-inner
>.next,.carousel-inner
>.prev{display:block}.carousel-inner
>.active{left:
0}.carousel-inner
>.next,.carousel-inner
>.prev{position:absolute;top:
0;width:
100%}.carousel-inner
>.next{left:
100%}.carousel-inner
>.prev{left:-
100%}.carousel-inner
>.next.left,.carousel-inner
>.prev.right{left:
0}.carousel-inner
>.active.left{left:-
100%}.carousel-inner
>.active.right{left:
100%}.carousel-control{position:absolute;top:
0;bottom:
0;left:
0;width:
15%;font-size:
20px;color:#fff;text-align:center;text-shadow:
0 1px
2px rgba(
0,
0,
0,
.6);filter:alpha(opacity=
50);opacity:
.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(
0,
0,
0,
.5)
0,rgba(
0,
0,
0,
.0001)
100%);background-image:-o-linear-gradient(left,rgba(
0,
0,
0,
.5)
0,rgba(
0,
0,
0,
.0001)
100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(
0,
0,
0,
.5)),to(rgba(
0,
0,
0,
.0001)));background-image:linear-gradient(to right,rgba(
0,
0,
0,
.5)
0,rgba(
0,
0,
0,
.0001)
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#
80000000', endColorstr='#
00000000', GradientType=
1);background-repeat:repeat-x}.carousel-control.right{right:
0;left:auto;background-image:-webkit-linear-gradient(left,rgba(
0,
0,
0,
.0001)
0,rgba(
0,
0,
0,
.5)
100%);background-image:-o-linear-gradient(left,rgba(
0,
0,
0,
.0001)
0,rgba(
0,
0,
0,
.5)
100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(
0,
0,
0,
.0001)),to(rgba(
0,
0,
0,
.5)));background-image:linear-gradient(to right,rgba(
0,
0,
0,
.0001)
0,rgba(
0,
0,
0,
.5)
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#
00000000', endColorstr='#
80000000', GradientType=
1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=
90);outline:
0;opacity:
.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:
50%;z-index:
5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:
50%;margin-left:-
10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:
50%;margin-right:-
10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:
20px;height:
20px;margin-top:-
10px;font-family:serif}.carousel-control .icon-prev:before{content:'\
2039'}.carousel-control .icon-next:before{content:'\
203a'}.carousel-indicators{position:absolute;bottom:
10px;left:
50%;z-index:
15;width:
60%;padding-left:
0;margin-left:-
30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:
10px;height:
10px;margin:
1px;text-indent:-
999px;cursor:pointer;background-color:#
000 \
9;background-color:rgba(
0,
0,
0,
0);border:
1px solid #fff;border-radius:
10px}.carousel-indicators .active{width:
12px;height:
12px;margin:
0;background-color:#fff}.carousel-caption{position:absolute;right:
15%;bottom:
20px;left:
15%;z-index:
10;padding-top:
20px;padding-bottom:
20px;color:#fff;text-align:center;text-shadow:
0 1px
2px rgba(
0,
0,
0,
.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:
768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:
30px;height:
30px;margin-top:-
15px;font-size:
30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-
15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-
15px}.carousel-caption{right:
20%;left:
20%;padding-bottom:
30px}.carousel-indicators{bottom:
20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical
>.btn-group:before,.btn-group-vertical
>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical
>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:
0/
0 a;color:transparent;text-shadow:none;background-color:transparent;border:
0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(
0,
0,
0);-o-transform:translate3d(
0,
0,
0);transform:translate3d(
0,
0,
0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:
767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:
767px){.visible-xs-block{display:block!important}}@media (max-width:
767px){.visible-xs-inline{display:inline!important}}@media (max-width:
767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:
768px) and (max-width:
991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:
768px) and (max-width:
991px){.visible-sm-block{display:block!important}}@media (min-width:
768px) and (max-width:
991px){.visible-sm-inline{display:inline!important}}@media (min-width:
768px) and (max-width:
991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:
992px) and (max-width:
1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:
992px) and (max-width:
1199px){.visible-md-block{display:block!important}}@media (min-width:
992px) and (max-width:
1199px){.visible-md-inline{display:inline!important}}@media (min-width:
992px) and (max-width:
1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:
1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:
1200px){.visible-lg-block{display:block!important}}@media (min-width:
1200px){.visible-lg-inline{display:inline!important}}@media (min-width:
1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:
767px){.hidden-xs{display:none!important}}@media (min-width:
768px) and (max-width:
991px){.hidden-sm{display:none!important}}@media (min-width:
992px) and (max-width:
1199px){.hidden-md{display:none!important}}@media (min-width:
1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
</style>
11 <meta content=
"Mnemonic code for generating deterministic keys" name=
"description"/>
12 <meta content=
"width=device-width, initial-scale=1.0" name=
"viewport" />
13 <meta content=
"bitcoin mnemonic converter" name=
"description" />
14 <meta content=
"Ian Coleman" name=
"author" />
20 .form-control[readonly] {
33 background-color: orange;
37 border:
2px solid #
555;
39 border-bottom-left-radius:
20px
20px;
40 border-bottom-right-radius:
20px
20px;
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);
48 /* override mobile width from bootstrap */
49 width: auto!important;
50 display: inline-block;
55 <div class=
"container">
57 <h1 class=
"text-center">Mnemonic Code Converter
</h1>
60 <div class=
"col-md-12">
62 <form class=
"form-horizontal" role=
"form">
63 <div class=
"col-sm-2"></div>
64 <div class=
"col-sm-10">
65 <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>
66 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target=
"_blank">BIP39 spec
</a></p>
68 <div class=
"form-group">
69 <label class=
"col-sm-2 control-label"></label>
70 <div class=
"col-sm-10">
71 <div class=
"form-inline">
72 <div class=
"input-group-inline">
73 <button class=
"btn generate">Generate
</button>
75 <select id=
"strength" class=
"strength form-control">
76 <option value=
"3">3</option>
77 <option value=
"6">6</option>
78 <option value=
"9">9</option>
79 <option value=
"12">12</option>
80 <option value=
"15" selected
>15</option>
81 <option value=
"18">18</option>
82 <option value=
"21">21</option>
83 <option value=
"24">24</option>
85 word mnemonic, or enter your own below.
90 <div class=
"form-group">
91 <label for=
"phrase" class=
"col-sm-2 control-label">BIP39 Mnemonic
</label>
92 <div class=
"col-sm-10">
93 <textarea id=
"phrase" class=
"phrase form-control"></textarea>
96 <div class=
"form-group">
97 <label for=
"passphrase" class=
"col-sm-2 control-label">BIP39 Passphrase (optional)
</label>
98 <div class=
"col-sm-10">
99 <textarea id=
"passphrase" class=
"passphrase form-control"></textarea>
102 <div class=
"form-group">
103 <label for=
"seed" class=
"col-sm-2 control-label">BIP39 Seed
</label>
104 <div class=
"col-sm-10">
105 <textarea id=
"seed" class=
"seed form-control" readonly=
"readonly"></textarea>
108 <div class=
"form-group">
109 <label for=
"network-phrase" class=
"col-sm-2 control-label">Coin
</label>
110 <div class=
"col-sm-10">
111 <select id=
"network-phrase" class=
"network form-control">
112 <!-- populated by javascript -->
116 <div class=
"form-group">
117 <label for=
"root-key" class=
"col-sm-2 control-label">BIP32 Root Key
</label>
118 <div class=
"col-sm-10">
119 <textarea id=
"root-key" class=
"root-key form-control"></textarea>
129 <div class=
"col-md-12">
130 <h2>Derivation Path
</h2>
131 <ul class=
"derivation-type nav nav-tabs" role=
"tablist">
132 <li id=
"bip44-tab" class=
"active">
133 <a href=
"#bip44" role=
"tab" data-toggle=
"tab">BIP44
</a>
136 <a href=
"#bip32" role=
"tab" data-toggle=
"tab">BIP32
</a>
139 <div class=
"derivation-type tab-content">
140 <div id=
"bip44" class=
"tab-pane active">
141 <form class=
"form-horizontal" role=
"form">
143 <div class=
"col-sm-2"></div>
144 <div class=
"col-sm-10">
145 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">BIP44 spec
</a></p>
147 <div class=
"form-group">
148 <label for=
"purpose" class=
"col-sm-2 control-label">
149 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target=
"_blank">Purpose
</a>
151 <div class=
"col-sm-10">
152 <input id=
"purpose" type=
"text" class=
"purpose form-control" value=
"44">
155 <div class=
"form-group">
156 <label for=
"coin" class=
"col-sm-2 control-label">
157 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target=
"_blank">Coin
</a>
159 <div class=
"col-sm-10">
160 <input id=
"coin" type=
"text" class=
"coin form-control" value=
"0">
163 <div class=
"form-group">
164 <label for=
"account" class=
"col-sm-2 control-label">
165 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target=
"_blank">Account
</a>
167 <div class=
"col-sm-10">
168 <input id=
"account" type=
"text" class=
"account form-control" value=
"0">
171 <div class=
"form-group">
172 <label for=
"change" class=
"col-sm-2 control-label">
173 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target=
"_blank">External / Internal
</a>
175 <div class=
"col-sm-10">
176 <input id=
"change" type=
"text" class=
"change form-control" value=
"0">
179 <div class=
"form-group">
180 <label for=
"bip44-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
181 <div class=
"col-sm-10">
182 <input id=
"bip44-path" type=
"text" class=
"path form-control" value=
"m/44'/0'/0'/0" readonly=
"readonly">
187 <div id=
"bip32" class=
"tab-pane">
188 <form class=
"form-horizontal" role=
"form">
190 <div class=
"col-sm-2"></div>
191 <div class=
"col-sm-10">
192 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">BIP32 spec
</a></p>
194 <div class=
"form-group">
195 <label for=
"bip32-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
196 <div class=
"col-sm-10">
197 <input id=
"bip32-path" type=
"text" class=
"path form-control" value=
"m/0">
200 <div class=
"form-group">
201 <div class=
"col-sm-2"></div>
202 <label class=
"col-sm-10">
203 <input class=
"hardened-addresses" type=
"checkbox">
204 Use hardened addresses
207 <div class=
"form-group">
208 <label class=
"col-sm-2 control-label">Hive Wallet
</label>
209 <div class=
"col-sm-10">
210 <p class=
"form-control no-border">
211 Use path
<code>m/
0'/
0</code>.
212 For more info see the
<a href=
"https://www.hivewallet.com/" target=
"_blank">Hive Wallet homepage
</a>
216 <div class=
"form-group">
217 <label for=
"mycelium-path" class=
"col-sm-2 control-label">Mycelium Wallet
</label>
218 <div class=
"col-sm-10">
219 <p class=
"form-control no-border">
220 Use path
<code>m/
44'/
0'/
0'/
0</code>.
221 For more info see the
<a href=
"http://www.mycelium.com/" target=
"_blank">Mycelium Wallet homepage
</a>
225 <div class=
"form-group">
226 <label for=
"core-path" class=
"col-sm-2 control-label">Bitcoin Core
</label>
227 <div class=
"col-sm-10">
228 <p class=
"form-control no-border">
229 Use path
<code>m/
0'/
0'
</code> with hardened addresses.
230 For more info see the
<a href=
"https://github.com/bitcoin/bitcoin/pull/8035" target=
"_blank">Bitcoin Core BIP32 implementation
</a>
234 <div class=
"form-group">
235 <label class=
"col-sm-2 control-label">Block Explorers
</label>
236 <div class=
"col-sm-10">
237 <p class=
"form-control no-border">
238 Use path
<code>m/
44'/
0'/
0'
</code>.
239 Only enter the
<code>xpub
</code> extended key into block explorer search fields, never the
<code>xpriv
</code> key.
246 <form class=
"form-horizontal" role=
"form">
247 <div class=
"form-group">
248 <label for=
"extended-priv-key" class=
"col-sm-2 control-label">BIP32 Extended Key
</label>
249 <div class=
"col-sm-10">
250 <textarea id=
"extended-priv-key" class=
"extended-priv-key form-control" readonly=
"readonly"></textarea>
253 <div class=
"form-group">
254 <label for=
"extended-pub-key" class=
"col-sm-2 control-label">BIP32 Extended Key (addresses only)
</label>
255 <div class=
"col-sm-10">
256 <textarea id=
"extended-pub-key" class=
"extended-pub-key form-control" readonly=
"readonly"></textarea>
266 <div class=
"col-md-12">
267 <h2>Derived Addresses
</h2>
268 <p>Note these addreses are derived from the
<strong>BIP32 Extended Key
</strong></p>
269 <table class=
"table table-striped">
272 <div class=
"input-group">
274 <button class=
"index-toggle">Toggle
</button>
278 <div class=
"input-group">
280 <button class=
"address-toggle">Toggle
</button>
284 <div class=
"input-group">
285 Private Key
286 <button class=
"private-key-toggle">Toggle
</button>
290 <tbody class=
"addresses">
291 <tr><td> </td><td> </td><td> </td></tr>
292 <tr><td> </td><td> </td><td> </td></tr>
293 <tr><td> </td><td> </td><td> </td></tr>
294 <tr><td> </td><td> </td><td> </td></tr>
295 <tr><td> </td><td> </td><td> </td></tr>
300 <span>Show next
</button>
301 <input type=
"number" class=
"rows-to-add" value=
"20">
302 <button class=
"more">Show
</button>
307 <div class=
"col-md-12">
309 <h3>BIP39
<span class=
"small">Mnemonic code for generating deterministic keys
</span></h3>
312 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec
</a>
314 <h3>BIP32
<span class=
"small">Hierarchical Deterministic Wallets
</span></h3>
317 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">official BIP32 spec
</a>
319 <a href=
"http://bip32.org/" target=
"_blank">bip32.org
</a>
321 <h3>BIP44
<span class=
"small">Multi-Account Hierarchy for Deterministic Wallets
</span></h3>
324 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">official BIP44 spec
</a>
326 <h3>Private Keys
</h3>
329 <a href=
"https://web.archive.org/web/20150707020924/https://brainwallet.org/" target=
"_blank">brainwallet.org
</a>,
330 but be careful - it can be easy to make mistakes if you
331 don't know what you're doing
339 <div class=
"col-md-12">
341 <h2>Offline Usage
</h2>
344 You can use this tool without having to be online.
347 In your browser, select file save-as, and save this page
351 Double-click that file to open it in a browser
352 on any offline computer.
355 Alternatively, download it from
356 <a href=
"https://github.com/iancoleman/bip39">
357 https://github.com/iancoleman/bip39
366 <div class=
"col-md-12">
368 <h2>This project is
100% open-source code
</h2>
371 <span>Get the source code at -
</span>
372 <a href=
"https://github.com/iancoleman/bip39" target=
"_blank">
373 https://github.com/iancoleman/bip39
380 <span>BitcoinJS -
</span>
381 <a href=
"https://github.com/bitcoinjs/bitcoinjs-lib" target=
"_blank">
382 https://github.com/bitcoinjs/bitcoinjs-lib
387 <span>jsBIP39 -
</span>
388 <a href=
"https://github.com/iancoleman/jsbip39" target=
"_blank">
389 https://github.com/iancoleman/jsbip39
395 <a href=
"https://github.com/bitwiseshiftleft/sjcl" target=
"_blank">
396 https://github.com/bitwiseshiftleft/sjcl
401 <span>jQuery -
</span>
402 <a href=
"https://jquery.com/" target=
"_blank">
408 <span>Twitter Bootstrap -
</span>
409 <a href=
"http://getbootstrap.com/" target=
"_blank">
410 http://getbootstrap.com/
419 <div class=
"feedback-container">
420 <div class=
"feedback">Loading...
</div>
423 <script type=
"text/template" id=
"address-row-template">
425 <td class=
"index"><span></span></td>
426 <td class=
"address"><span></span></td>
427 <td class=
"privkey"><span></span></td>
430 <script>/*! jQuery v2.1
.1 | (c)
2005,
2014 jQuery Foundation, Inc. | jquery.org/license */
431 !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)
432 },_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))
433 },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});
436 * Bootstrap v3.2.0 (http://getbootstrap.com)
437 * Copyright 2011-2014 Twitter, Inc.
438 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
440 if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void
0!==a.style[c])return{end:b[c]};return!
1}a.fn.emulateTransitionEnd=function(b){var c=!
1,d=this;a(this).one("bsTransitionEnd",function(){c=!
0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void
0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[
data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.
VERSION="
3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(
150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),
f="object"==typeof b&
&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!
1};c.
VERSION="
3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var
c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!
0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!
1,d.removeClass(c).removeAttr(c))},this),
0)},c.prototype.toggle=function(){var a=!
0,b=this.$element.closest('[
data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!
1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),
g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.
VERSION="
3.2.0",c.DEFAULTS={interval:
5e3,pause:"hover",wrap:!
0},c.prototype.keydown=function(a){switch(a.which){case
37:this.prev();break;case
39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!
1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b
>this.$items.length-
1||
0>b?void
0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b
>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!
0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!
0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void
0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void
0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,
g="next"==b?"left":"right",
h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!
1;var j=e[
0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!
0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[
0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!
1,setTimeout(function(){i.$element.trigger(m)},
0)}).emulateTransitionEnd(
1e3*d.css("transition-duration").slice(
0,-
1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!
1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!
1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[
data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.
VERSION="
3.2.0",c.DEFAULTS={toggle:!
0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("
> .panel
> .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](
0),this.transitioning=
1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=
0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(
350)[f](this.$element[
0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[
0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=
1;var d=function(){this.transitioning=
0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](
0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(
350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[
data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[
data-toggle="collapse"][
data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&
3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var
e=".dropdown-backdrop",f='[
data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.
VERSION="
3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('
<div class=
"dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!
1}},g.prototype.keydown=function(b){if(/(
38|
40|
27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&
27==b.keyCode)return
27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var
h=" li:not(.divider):visible a",i=e.find('[
role="menu"]'+h+', [
role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));
38==b.keyCode&&j
>0&&j--,
40==b.keyCode&&j
<i.length-
1&&j++,~j||(j=
0),i.eq(j).trigger(
"focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on(
"click.bs.dropdown.data-api",b).on(
"click.bs.dropdown.data-api",
".dropdown form",function(a){a.stopPropagation()}).on(
"click.bs.dropdown.data-api",f,g.prototype.toggle).on(
"keydown.bs.dropdown.data-api",f+', [
role=
"menu"], [
role=
"listbox"]',g.prototype.keydown)}(jQuery),+function(a){
"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data(
"bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),
"object"==typeof b&&b);f||e.data(
"bs.modal",f=new c(this,g)),
"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=
0,this.options.remote&&this.$element.find(
".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger(
"loaded.bs.modal")},this))};c.
VERSION=
"3.2.0",c.DEFAULTS={backdrop:!
0,keyboard:!
0,show:!
0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event(
"show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!
0,this.checkScrollbar(),this.$body.addClass(
"modal-open"),this.setScrollbar(),this.escape(),this.$element.on(
"click.dismiss.bs.modal",'[
data-dismiss=
"modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass(
"fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(
0),d&&c.$element[
0].offsetWidth,c.$element.addClass(
"in").attr(
"aria-hidden",!
1),c.enforceFocus();var e=a.Event(
"shown.bs.modal",{relatedTarget:b});d?c.$element.find(
".modal-dialog").one(
"bsTransitionEnd",function(){c.$element.trigger(
"focus").trigger(e)}).emulateTransitionEnd(
300):c.$element.trigger(
"focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event(
"hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!
1,this.$body.removeClass(
"modal-open"),this.resetScrollbar(),this.escape(),a(document).off(
"focusin.bs.modal"),this.$element.removeClass(
"in").attr(
"aria-hidden",!
0).off(
"click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass(
"fade")?this.$element.one(
"bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(
300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off(
"focusin.bs.modal").on(
"focusin.bs.modal",a.proxy(function(a){this.$element[
0]===a.target||this.$element.has(a.target).length||this.$element.trigger(
"focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(
"keyup.dismiss.bs.modal",a.proxy(function(a){
27==a.which&&this.hide()},this)):this.isShown||this.$element.off(
"keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger(
"hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass(
"fade")?
"fade":
"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&
&d;if(this.$backdrop=a('
<div class=
"modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[
0].focus.call(this.$element[
0]):this.hide.call(this))},this)),e&&this.$backdrop[
0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(
150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(
150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth
>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||
0,
10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.
className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[
0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[
data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),
f="object"==typeof b&
&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.
VERSION="
3.2.0",c.DEFAULTS={animation:!
0,placement:"top",selector:!
1,template:'
<div class=
"tooltip" role=
"tooltip"><div class=
"tooltip-arrow"></div><div class=
"tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:
0,html:!
1,container:!
1,viewport:{selector:"body",padding:
0}},c.prototype.init=function(b,c,d){this.enabled=!
0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var
h="hover"==g?"mouseenter":"focusin",
i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.
hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.
hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[
0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var
g="function"==typeof this.options.placement?this.options.placement.call(this,e[
0],this.$element[
0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:
0,left:
0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[
0].offsetWidth,l=e[
0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);
g="bottom"==g&&j.top+j.height+l-o.scroll
>o.height?"top":"top"==g&&j.top-o.scroll-l
<0?
"bottom":
"right"==g&&j.right+k
>o.width?"left":"left"==g&&j.left-k
<o.left?
"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger(
"shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass(
"fade")?e.one(
"bsTransitionEnd",q).emulateTransitionEnd(
150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[
0].offsetWidth,f=d[
0].offsetHeight,g=parseInt(d.css(
"margin-top"),
10),h=parseInt(d.css(
"margin-left"),
10);isNaN(g)&&(g=
0),isNaN(h)&&(h=
0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[
0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),
0),d.addClass(
"in");var i=d[
0].offsetWidth,j=d[
0].offsetHeight;
"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?
2*k.left-e+i:
2*k.top-f+j,m=k.left?
"left":
"top",n=k.left?
"offsetWidth":
"offsetHeight";d.offset(b),this.replaceArrow(l,d[
0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?
50*(
1-a/b)+
"%":
"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(
".tooltip-inner")[this.options.html?
"html":
"text"](b),a.removeClass(
"fade in top bottom left right")},c.prototype.hide=function(){function b(){
"in"!=c.hoverState&&d.detach(),c.$element.trigger(
"hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event(
"hide.bs."+this.type);return this.$element.removeAttr(
"aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void
0:(d.removeClass(
"in"),a.support.transition&&this.$tip.hasClass(
"fade")?d.one(
"bsTransitionEnd",b).emulateTransitionEnd(
150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr(
"title")||
"string"!=typeof a.attr(
"data-original-title"))&&a.attr(
"data-original-title",a.attr(
"title")||
"").attr(
"title",
"")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[
0],
d=
"BODY"==c.tagName;return a.extend({},
"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:
0,left:
0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return
"bottom"==a?{top:b.top+b.height,left:b.left+b.width/
2-c/
2}:
"top"==a?{top:b.top-d,left:b.left+b.width/
2-c/
2}:
"left"==a?{top:b.top+b.height/
2-d/
2,left:b.left-c}:{top:b.top+b.height/
2-d/
2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:
0,left:
0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||
0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h
<g.top?e.top=g.top-h:i
>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j
<g.left?e.left=g.left-j:k
>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[
0]):c.title)},c.prototype.getUID=function(a){do a+=~~(
1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[
0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!
0},c.prototype.disable=function(){this.enabled=!
1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),
f="object"==typeof b&
&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.
VERSION="
3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'
<div class=
"popover" role=
"tooltip"><div class=
"arrow"></div><h3 class=
"popover-title"></h3><div class=
"popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[
0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li
> a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=
0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),
f="object"==typeof c&
&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.
VERSION="
3.2.0",b.DEFAULTS={offset:
10},b.prototype.getScrollHeight=function(){return this.$scrollElement[
0].scrollHeight||Math.max(this.$body[
0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var
b="offset",c=
0;a.isWindow(this.$scrollElement[
0])||(
b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[
0]-b[
0]}).each(function(){d.offsets.push(this[
0]),d.targets.push(this[
1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b
>=d)return g!=(a=f[f.length-
1])&&this.activate(a);if(g&&b<=e[
0])return g!=(a=f[
0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b
>=e[a]&&(!e[a+
1]||b<=e[a+
1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[
data-target="'+b+'"],'+this.selector+'[
href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[
data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.
VERSION="
3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[
0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("
> .dropdown-menu
> .active").removeClass("active"),b.addClass("active"),g?(b[
0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("
> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(
150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[
data-toggle="tab"], [
data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),
f="object"==typeof b&
&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.
VERSION="
3.2.0",c.
RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:
0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),
1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!
1:null!=h&&e.top+this.$element.height()
>=b-h?"bottom":null!=g&&g
>=d?"top":!
1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var
j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.
unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[
data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
</script>
441 <script>(function() {
445 * Extend an Object with another Object's properties.
447 * The source objects are specified as additional arguments.
449 * @param dst Object the object to extend.
451 * @return Object the final object.
453 var _extend = function(dst) {
454 var sources = Array.prototype.slice.call(arguments,
1);
455 for (var i=
0; i
<sources.length; ++i) {
456 var src = sources[i];
458 if (src.hasOwnProperty(p)) dst[p] = src[p];
466 * Defer execution of given function.
467 * @param {Function} func
469 var _defer = function(func) {
470 if (typeof setImmediate === 'function') {
471 return setImmediate(func);
473 return setTimeout(func,
0);
478 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
482 * Calculate levenshtein distance of the two strings.
484 * @param str1 String the first string.
485 * @param str2 String the second string.
486 * @return Integer the levenshtein distance (
0 and above).
488 get: function(str1, str2) {
490 if (str1 === str2) return
0;
491 if (str1.length ===
0) return str2.length;
492 if (str2.length ===
0) return str1.length;
495 var prevRow = new Array(str2.length +
1),
496 curCol, nextCol, i, j, tmp;
498 // initialise previous row
499 for (i=
0; i
<prevRow.length; ++i) {
503 // calculate current row distance from previous row
504 for (i=
0; i
<str1.length; ++i) {
507 for (j=
0; j
<str2.length; ++j) {
511 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
518 tmp = prevRow[j +
1] +
1;
523 // copy current col value into previous (in preparation for next iteration)
527 // copy last col value into previous (in preparation for next iteration)
528 prevRow[j] = nextCol;
535 * Asynchronously calculate levenshtein distance of the two strings.
537 * @param str1 String the first string.
538 * @param str2 String the second string.
539 * @param cb Function callback function with signature: function(Error err, int distance)
540 * @param [options] Object additional options.
541 * @param [options.progress] Function progress callback with signature: function(percentComplete)
543 getAsync: function(str1, str2, cb, options) {
544 options = _extend({}, {
549 if (str1 === str2) return cb(null,
0);
550 if (str1.length ===
0) return cb(null, str2.length);
551 if (str2.length ===
0) return cb(null, str1.length);
554 var prevRow = new Array(str2.length +
1),
557 startTime, currentTime;
559 // initialise previous row
560 for (i=
0; i
<prevRow.length; ++i) {
568 var __calculate = function() {
570 startTime = new Date().valueOf();
571 currentTime = startTime;
573 // keep going until one second has elapsed
574 while (currentTime - startTime <
1000) {
575 // reached end of current row?
576 if (str2.length <= (++j)) {
577 // copy current into previous (in preparation for next iteration)
578 prevRow[j] = nextCol;
580 // if already done all chars
581 if (str1.length <= (++i)) {
582 return cb(null, nextCol);
584 // else if we have more left to do
595 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
602 tmp = prevRow[j +
1] +
1;
607 // copy current into previous (in preparation for next iteration)
611 currentTime = new Date().valueOf();
614 // send a progress update?
615 if (null !== options.progress) {
617 options.progress.call(null, (i *
100.0/ str1.length));
619 return cb('Progress callback: ' + err.toString());
633 if (typeof define !== "undefined" && define !== null && define.amd) {
639 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
640 module.exports = Levenshtein;
643 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
644 self.Levenshtein = Levenshtein;
646 // browser main thread
647 else if (typeof window !== "undefined" && window !== null) {
648 window.Levenshtein = Levenshtein;
653 <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){
654 // (public) Constructor
655 function BigInteger(a, b, c) {
656 if (!(this instanceof BigInteger))
657 return new BigInteger(a, b, c)
660 if (
"number" == typeof a) this.fromNumber(a, b, c)
661 else if (b == null &&
"string" != typeof a) this.fromString(a,
256)
662 else this.fromString(a, b)
666 var proto = BigInteger.prototype
668 // duck-typed isBigInteger
669 proto.__bigi = require('../package.json').version
670 BigInteger.isBigInteger = function (obj, check_ver) {
671 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
677 // am: Compute w_j += (x*this_i), propagate carries,
678 // c is initial carry, returns final carry.
679 // c <
3*dvalue, x <
2*dvalue, this_i < dvalue
680 // We need to select the fastest one that works in this environment.
682 // am1: use a single mult and divide to get the high bits,
683 // max digit bits should be
26 because
684 // max internal value =
2*dvalue^
2-
2*dvalue (<
2^
53)
685 function am1(i, x, w, j, c, n) {
687 var v = x * this[i++] + w[j] + c
688 c = Math.floor(v /
0x4000000)
689 w[j++] = v &
0x3ffffff
693 // am2 avoids a big mult-and-extract completely.
694 // Max digit bits should be <=
30 because we do bitwise ops
695 // on values up to
2*hdvalue^
2-hdvalue-
1 (<
2^
31)
696 function am2(i, x, w, j, c, n) {
700 var l = this[i] &
0x7fff
701 var h = this[i++]
>> 15
702 var m = xh * l + h * xl
703 l = xl * l + ((m &
0x7fff) <<
15) + w[j] + (c &
0x3fffffff)
704 c = (l
>>> 30) + (m
>>> 15) + xh * h + (c
>>> 30)
705 w[j++] = l &
0x3fffffff
709 // Alternately, set max digit bits to
28 since some
710 // browsers slow down when dealing with
32-bit numbers.
711 function am3(i, x, w, j, c, n) {
715 var l = this[i] &
0x3fff
716 var h = this[i++]
>> 14
717 var m = xh * l + h * xl
718 l = xl * l + ((m &
0x3fff) <<
14) + w[j] + c
719 c = (l
>> 28) + (m
>> 14) + xh * h
720 w[j++] = l &
0xfffffff
726 BigInteger.prototype.am = am1
729 BigInteger.prototype.DB = dbits
730 BigInteger.prototype.DM = ((
1 << dbits) -
1)
731 var DV = BigInteger.prototype.DV = (
1 << dbits)
734 BigInteger.prototype.FV = Math.pow(
2, BI_FP)
735 BigInteger.prototype.F1 = BI_FP - dbits
736 BigInteger.prototype.F2 =
2 * dbits - BI_FP
739 var BI_RM =
"0123456789abcdefghijklmnopqrstuvwxyz"
740 var BI_RC = new Array()
742 rr =
"0".charCodeAt(
0)
743 for (vv =
0; vv <=
9; ++vv) BI_RC[rr++] = vv
744 rr =
"a".charCodeAt(
0)
745 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
746 rr =
"A".charCodeAt(
0)
747 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
749 function int2char(n) {
750 return BI_RM.charAt(n)
753 function intAt(s, i) {
754 var c = BI_RC[s.charCodeAt(i)]
755 return (c == null) ? -
1 : c
758 // (protected) copy this to r
759 function bnpCopyTo(r) {
760 for (var i = this.t -
1; i
>=
0; --i) r[i] = this[i]
765 // (protected) set from integer value x, -DV <= x < DV
766 function bnpFromInt(x) {
768 this.s = (x <
0) ? -
1 :
0
769 if (x
> 0) this[
0] = x
770 else if (x < -
1) this[
0] = x + DV
774 // return bigint initialized to value
776 var r = new BigInteger()
781 // (protected) set from string and radix
782 function bnpFromString(s, b) {
787 else if (b ==
8) k =
3
788 else if (b ==
256) k =
8; // byte array
789 else if (b ==
2) k =
1
790 else if (b ==
32) k =
5
791 else if (b ==
4) k =
2
802 var x = (k ==
8) ? s[i] &
0xff : intAt(s, i)
804 if (s.charAt(i) == "-") mi = true
810 else if (sh + k
> self.DB) {
811 self[self.t -
1] |= (x & ((
1 << (self.DB - sh)) -
1)) << sh
812 self[self.t++] = (x
>> (self.DB - sh))
814 self[self.t -
1] |= x << sh
816 if (sh
>= self.DB) sh -= self.DB
818 if (k ==
8 && (s[
0] &
0x80) !=
0) {
820 if (sh
> 0) self[self.t -
1] |= ((
1 << (self.DB - sh)) -
1) << sh
823 if (mi) BigInteger.ZERO.subTo(self, self)
826 // (protected) clamp off excess high words
827 function bnpClamp() {
828 var c = this.s & this.DM
829 while (this.t
> 0 && this[this.t -
1] == c)--this.t
832 // (public) return string representation in given radix
833 function bnToString(b) {
835 if (self.s <
0) return
"-" + self.negate()
839 else if (b ==
8) k =
3
840 else if (b ==
2) k =
1
841 else if (b ==
32) k =
5
842 else if (b ==
4) k =
2
843 else return self.toRadix(b)
844 var km = (
1 << k) -
1,
848 var p = self.DB - (i * self.DB) % k
850 if (p < self.DB && (d = self[i]
>> p)
> 0) {
856 d = (self[i] & ((
1 << p) -
1)) << (k - p)
857 d |= self[--i]
>> (p += self.DB - k)
859 d = (self[i]
>> (p -= k)) & km
866 if (m) r += int2char(d)
873 function bnNegate() {
874 var r = new BigInteger()
875 BigInteger.ZERO.subTo(this, r)
881 return (this.s <
0) ? this.negate() : this
884 // (public) return + if this
> a, - if this < a,
0 if equal
885 function bnCompareTo(a) {
890 if (r !=
0) return (this.s <
0) ? -r : r
892 if ((r = this[i] - a[i]) !=
0) return r
896 // returns bit length of the integer x
900 if ((t = x
>>> 16) !=
0) {
904 if ((t = x
>> 8) !=
0) {
908 if ((t = x
>> 4) !=
0) {
912 if ((t = x
>> 2) !=
0) {
916 if ((t = x
>> 1) !=
0) {
923 // (public) return the number of bits in
"this"
924 function bnBitLength() {
925 if (this.t <=
0) return
0
926 return this.DB * (this.t -
1) + nbits(this[this.t -
1] ^ (this.s & this.DM))
929 // (public) return the number of bytes in
"this"
930 function bnByteLength() {
931 return this.bitLength()
>> 3
934 // (protected) r = this << n*DB
935 function bnpDLShiftTo(n, r) {
937 for (i = this.t -
1; i
>=
0; --i) r[i + n] = this[i]
938 for (i = n -
1; i
>=
0; --i) r[i] =
0
943 // (protected) r = this
>> n*DB
944 function bnpDRShiftTo(n, r) {
945 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
946 r.t = Math.max(this.t - n,
0)
950 // (protected) r = this << n
951 function bnpLShiftTo(n, r) {
954 var cbs = self.DB - bs
955 var bm = (
1 << cbs) -
1
956 var ds = Math.floor(n / self.DB),
957 c = (self.s << bs) & self.DM,
959 for (i = self.t -
1; i
>=
0; --i) {
960 r[i + ds +
1] = (self[i]
>> cbs) | c
961 c = (self[i] & bm) << bs
963 for (i = ds -
1; i
>=
0; --i) r[i] =
0
965 r.t = self.t + ds +
1
970 // (protected) r = this
>> n
971 function bnpRShiftTo(n, r) {
974 var ds = Math.floor(n / self.DB)
980 var cbs = self.DB - bs
981 var bm = (
1 << bs) -
1
982 r[
0] = self[ds]
>> bs
983 for (var i = ds +
1; i < self.t; ++i) {
984 r[i - ds -
1] |= (self[i] & bm) << cbs
985 r[i - ds] = self[i]
>> bs
987 if (bs
> 0) r[self.t - ds -
1] |= (self.s & bm) << cbs
992 // (protected) r = this - a
993 function bnpSubTo(a, r) {
997 m = Math.min(a.t, self.t)
1000 r[i++] = c & self.DM
1005 while (i < self.t) {
1007 r[i++] = c & self.DM
1015 r[i++] = c & self.DM
1020 r.s = (c <
0) ? -
1 :
0
1021 if (c < -
1) r[i++] = self.DV + c
1022 else if (c
> 0) r[i++] = c
1027 // (protected) r = this * a, r != this,a (HAC
14.12)
1028 //
"this" should be the larger one if appropriate.
1029 function bnpMultiplyTo(a, r) {
1034 while (--i
>=
0) r[i] =
0
1035 for (i =
0; i < y.t; ++i) r[i + x.t] = x.am(
0, y[i], r, i,
0, x.t)
1038 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1041 // (protected) r = this^
2, r != this (HAC
14.16)
1042 function bnpSquareTo(r) {
1044 var i = r.t =
2 * x.t
1045 while (--i
>=
0) r[i] =
0
1046 for (i =
0; i < x.t -
1; ++i) {
1047 var c = x.am(i, x[i], r,
2 * i,
0,
1)
1048 if ((r[i + x.t] += x.am(i +
1,
2 * x[i], r,
2 * i +
1, c, x.t - i -
1))
>= x.DV) {
1053 if (r.t
> 0) r[r.t -
1] += x.am(i, x[i], r,
2 * i,
0,
1)
1058 // (protected) divide this by m, quotient and remainder to q, r (HAC
14.20)
1059 // r != q, this != m. q or r may be null.
1060 function bnpDivRemTo(m, q, r) {
1063 if (pm.t <=
0) return
1066 if (q != null) q.fromInt(
0)
1067 if (r != null) self.copyTo(r)
1070 if (r == null) r = new BigInteger()
1071 var y = new BigInteger(),
1074 var nsh = self.DB - nbits(pm[pm.t -
1]); // normalize modulus
1085 var yt = y0 * (
1 << self.F1) + ((ys
> 1) ? y[ys -
2]
>> self.F2 :
0)
1086 var d1 = self.FV / yt,
1087 d2 = (
1 << self.F1) / yt,
1091 t = (q == null) ? new BigInteger() : q
1093 if (r.compareTo(t)
>=
0) {
1097 BigInteger.ONE.dlShiftTo(ys, t)
1098 t.subTo(y, y); // "negative" y so we can replace sub with am later
1099 while (y.t < ys) y[y.t++] =
0
1101 // Estimate quotient digit
1102 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i -
1] + e) * d2)
1103 if ((r[i] += y.am(
0, qd, r, j,
0, ys)) < qd) { // Try it out
1106 while (r[i] < --qd) r.subTo(t, r)
1111 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1115 if (nsh
> 0) r.rShiftTo(nsh, r); // Denormalize remainder
1116 if (ts <
0) BigInteger.ZERO.subTo(r, r)
1119 // (public) this mod a
1121 var r = new BigInteger()
1123 .divRemTo(a, null, r)
1124 if (this.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) a.subTo(r, r)
1128 // Modular reduction using
"classic" algorithm
1129 function Classic(m) {
1133 function cConvert(x) {
1134 if (x.s <
0 || x.compareTo(this.m)
>=
0) return x.mod(this.m)
1138 function cRevert(x) {
1142 function cReduce(x) {
1143 x.divRemTo(this.m, null, x)
1146 function cMulTo(x, y, r) {
1151 function cSqrTo(x, r) {
1156 Classic.prototype.convert = cConvert
1157 Classic.prototype.revert = cRevert
1158 Classic.prototype.reduce = cReduce
1159 Classic.prototype.mulTo = cMulTo
1160 Classic.prototype.sqrTo = cSqrTo
1162 // (protected) return "-
1/this %
2^DB"; useful for Mont. reduction
1166 // xy(
2-xy) = (
1+km)(
1-km)
1167 // x[y(
2-xy)] =
1-k^
2m^
2
1168 // x[y(
2-xy)] ==
1 (mod m^
2)
1169 // if y is
1/x mod m, then y(
2-xy) is
1/x mod m^
2
1170 // should reduce x and y(
2-xy) by m^
2 at each step to keep size bounded.
1171 // JS multiply "overflows" differently from C/C++, so care is needed here.
1172 function bnpInvDigit() {
1173 if (this.t <
1) return
0
1175 if ((x &
1) ==
0) return
0
1176 var y = x &
3; // y ==
1/x mod
2^
2
1177 y = (y * (
2 - (x &
0xf) * y)) &
0xf; // y ==
1/x mod
2^
4
1178 y = (y * (
2 - (x &
0xff) * y)) &
0xff; // y ==
1/x mod
2^
8
1179 y = (y * (
2 - (((x &
0xffff) * y) &
0xffff))) &
0xffff; // y ==
1/x mod
2^
16
1180 // last step - calculate inverse mod DV directly
1181 // assumes
16 < DB <=
32 and assumes ability to handle
48-bit ints
1182 y = (y * (
2 - x * y % this.DV)) % this.DV; // y ==
1/x mod
2^dbits
1183 // we really want the negative inverse, and -DV < y < DV
1184 return (y
> 0) ? this.DV - y : -y
1187 // Montgomery reduction
1188 function Montgomery(m) {
1190 this.mp = m.invDigit()
1191 this.mpl = this.mp &
0x7fff
1192 this.mph = this.mp
>> 15
1193 this.um = (
1 << (m.DB -
15)) -
1
1198 function montConvert(x) {
1199 var r = new BigInteger()
1201 .dlShiftTo(this.m.t, r)
1202 r.divRemTo(this.m, null, r)
1203 if (x.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) this.m.subTo(r, r)
1208 function montRevert(x) {
1209 var r = new BigInteger()
1215 // x = x/R mod m (HAC
14.32)
1216 function montReduce(x) {
1217 while (x.t <= this.mt2) // pad x so am has enough room later
1219 for (var i =
0; i < this.m.t; ++i) {
1220 // faster way of calculating u0 = x[i]*mp mod DV
1221 var j = x[i] &
0x7fff
1222 var u0 = (j * this.mpl + (((j * this.mph + (x[i]
>> 15) * this.mpl) & this.um) <<
15)) & x.DM
1223 // use am to combine the multiply-shift-add into one call
1225 x[j] += this.m.am(
0, u0, x, i,
0, this.m.t)
1227 while (x[j]
>= x.DV) {
1233 x.drShiftTo(this.m.t, x)
1234 if (x.compareTo(this.m)
>=
0) x.subTo(this.m, x)
1237 // r = "x^
2/R mod m"; x != r
1238 function montSqrTo(x, r) {
1243 // r = "xy/R mod m"; x,y != r
1244 function montMulTo(x, y, r) {
1249 Montgomery.prototype.convert = montConvert
1250 Montgomery.prototype.revert = montRevert
1251 Montgomery.prototype.reduce = montReduce
1252 Montgomery.prototype.mulTo = montMulTo
1253 Montgomery.prototype.sqrTo = montSqrTo
1255 // (protected) true iff this is even
1256 function bnpIsEven() {
1257 return ((this.t
> 0) ? (this[
0] &
1) : this.s) ==
0
1260 // (protected) this^e, e <
2^
32, doing sqr and mul with
"r" (HAC
14.79)
1261 function bnpExp(e, z) {
1262 if (e
> 0xffffffff || e <
1) return BigInteger.ONE
1263 var r = new BigInteger(),
1264 r2 = new BigInteger(),
1265 g = z.convert(this),
1270 if ((e & (
1 << i))
> 0) z.mulTo(r2, g, r)
1280 // (public) this^e % m,
0 <= e <
2^
32
1281 function bnModPowInt(e, m) {
1283 if (e <
256 || m.isEven()) z = new Classic(m)
1284 else z = new Montgomery(m)
1285 return this.exp(e, z)
1289 proto.copyTo = bnpCopyTo
1290 proto.fromInt = bnpFromInt
1291 proto.fromString = bnpFromString
1292 proto.clamp = bnpClamp
1293 proto.dlShiftTo = bnpDLShiftTo
1294 proto.drShiftTo = bnpDRShiftTo
1295 proto.lShiftTo = bnpLShiftTo
1296 proto.rShiftTo = bnpRShiftTo
1297 proto.subTo = bnpSubTo
1298 proto.multiplyTo = bnpMultiplyTo
1299 proto.squareTo = bnpSquareTo
1300 proto.divRemTo = bnpDivRemTo
1301 proto.invDigit = bnpInvDigit
1302 proto.isEven = bnpIsEven
1306 proto.toString = bnToString
1307 proto.negate = bnNegate
1309 proto.compareTo = bnCompareTo
1310 proto.bitLength = bnBitLength
1311 proto.byteLength = bnByteLength
1313 proto.modPowInt = bnModPowInt
1316 function bnClone() {
1317 var r = new BigInteger()
1322 // (public) return value as integer
1323 function bnIntValue() {
1325 if (this.t ==
1) return this[
0] - this.DV
1326 else if (this.t ==
0) return -
1
1327 } else if (this.t ==
1) return this[
0]
1328 else if (this.t ==
0) return
0
1329 // assumes
16 < DB <
32
1330 return ((this[
1] & ((
1 << (
32 - this.DB)) -
1)) << this.DB) | this[
0]
1333 // (public) return value as byte
1334 function bnByteValue() {
1335 return (this.t ==
0) ? this.s : (this[
0] <<
24)
>> 24
1338 // (public) return value as short (assumes DB
>=
16)
1339 function bnShortValue() {
1340 return (this.t ==
0) ? this.s : (this[
0] <<
16)
>> 16
1343 // (protected) return x s.t. r^x < DV
1344 function bnpChunkSize(r) {
1345 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1348 // (public)
0 if this ==
0,
1 if this
> 0
1349 function bnSigNum() {
1350 if (this.s <
0) return -
1
1351 else if (this.t <=
0 || (this.t ==
1 && this[
0] <=
0)) return
0
1355 // (protected) convert to radix string
1356 function bnpToRadix(b) {
1357 if (b == null) b =
10
1358 if (this.signum() ==
0 || b <
2 || b
> 36) return
"0"
1359 var cs = this.chunkSize(b)
1360 var a = Math.pow(b, cs)
1362 y = new BigInteger(),
1363 z = new BigInteger(),
1365 this.divRemTo(d, y, z)
1366 while (y.signum()
> 0) {
1367 r = (a + z.intValue())
1376 // (protected) convert from radix string
1377 function bnpFromRadix(s, b) {
1380 if (b == null) b =
10
1381 var cs = self.chunkSize(b)
1382 var d = Math.pow(b, cs),
1386 for (var i =
0; i < s.length; ++i) {
1389 if (s.charAt(i) ==
"-" && self.signum() ==
0) mi = true
1395 self.dAddOffset(w,
0)
1401 self.dMultiply(Math.pow(b, j))
1402 self.dAddOffset(w,
0)
1404 if (mi) BigInteger.ZERO.subTo(self, self)
1407 // (protected) alternate constructor
1408 function bnpFromNumber(a, b, c) {
1410 if (
"number" == typeof b) {
1411 // new BigInteger(int,int,RNG)
1412 if (a <
2) self.fromInt(
1)
1414 self.fromNumber(a, c)
1415 if (!self.testBit(a -
1)) // force MSB set
1416 self.bitwiseTo(BigInteger.ONE.shiftLeft(a -
1), op_or, self)
1417 if (self.isEven()) self.dAddOffset(
1,
0); // force odd
1418 while (!self.isProbablePrime(b)) {
1419 self.dAddOffset(
2,
0)
1420 if (self.bitLength()
> a) self.subTo(BigInteger.ONE.shiftLeft(a -
1), self)
1424 // new BigInteger(int,RNG)
1425 var x = new Array(),
1427 x.length = (a
>> 3) +
1
1429 if (t
> 0) x[
0] &= ((
1 << t) -
1)
1431 self.fromString(x,
256)
1435 // (public) convert to bigendian byte array
1436 function bnToByteArray() {
1441 var p = self.DB - (i * self.DB) %
8,
1444 if (p < self.DB && (d = self[i]
>> p) != (self.s & self.DM)
>> p)
1445 r[k++] = d | (self.s << (self.DB - p))
1448 d = (self[i] & ((
1 << p) -
1)) << (
8 - p)
1449 d |= self[--i]
>> (p += self.DB -
8)
1451 d = (self[i]
>> (p -=
8)) &
0xff
1457 if ((d &
0x80) !=
0) d |= -
256
1458 if (k ===
0 && (self.s &
0x80) != (d &
0x80))++k
1459 if (k
> 0 || d != self.s) r[k++] = d
1465 function bnEquals(a) {
1466 return (this.compareTo(a) ==
0)
1470 return (this.compareTo(a) <
0) ? this : a
1474 return (this.compareTo(a)
> 0) ? this : a
1477 // (protected) r = this op a (bitwise)
1478 function bnpBitwiseTo(a, op, r) {
1480 var i, f, m = Math.min(a.t, self.t)
1481 for (i =
0; i < m; ++i) r[i] = op(self[i], a[i])
1484 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1487 f = self.s & self.DM
1488 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1491 r.s = op(self.s, a.s)
1495 // (public) this & a
1496 function op_and(x, y) {
1501 var r = new BigInteger()
1502 this.bitwiseTo(a, op_and, r)
1506 // (public) this | a
1507 function op_or(x, y) {
1512 var r = new BigInteger()
1513 this.bitwiseTo(a, op_or, r)
1517 // (public) this ^ a
1518 function op_xor(x, y) {
1523 var r = new BigInteger()
1524 this.bitwiseTo(a, op_xor, r)
1528 // (public) this & ~a
1529 function op_andnot(x, y) {
1533 function bnAndNot(a) {
1534 var r = new BigInteger()
1535 this.bitwiseTo(a, op_andnot, r)
1541 var r = new BigInteger()
1542 for (var i =
0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1548 // (public) this << n
1549 function bnShiftLeft(n) {
1550 var r = new BigInteger()
1551 if (n <
0) this.rShiftTo(-n, r)
1552 else this.lShiftTo(n, r)
1556 // (public) this
>> n
1557 function bnShiftRight(n) {
1558 var r = new BigInteger()
1559 if (n <
0) this.lShiftTo(-n, r)
1560 else this.rShiftTo(n, r)
1564 // return index of lowest
1-bit in x, x <
2^
31
1566 if (x ==
0) return -
1
1568 if ((x &
0xffff) ==
0) {
1572 if ((x &
0xff) ==
0) {
1576 if ((x &
0xf) ==
0) {
1584 if ((x &
1) ==
0)++r
1588 // (public) returns index of lowest
1-bit (or -
1 if none)
1589 function bnGetLowestSetBit() {
1590 for (var i =
0; i < this.t; ++i)
1591 if (this[i] !=
0) return i * this.DB + lbit(this[i])
1592 if (this.s <
0) return this.t * this.DB
1596 // return number of
1 bits in x
1606 // (public) return number of set bits
1607 function bnBitCount() {
1609 x = this.s & this.DM
1610 for (var i =
0; i < this.t; ++i) r += cbit(this[i] ^ x)
1614 // (public) true iff nth bit is set
1615 function bnTestBit(n) {
1616 var j = Math.floor(n / this.DB)
1617 if (j
>= this.t) return (this.s !=
0)
1618 return ((this[j] & (
1 << (n % this.DB))) !=
0)
1621 // (protected) this op (
1<
<n)
1622 function bnpChangeBit(n, op) {
1623 var r = BigInteger.ONE.shiftLeft(n)
1624 this.bitwiseTo(r, op, r)
1628 // (public) this | (
1<
<n)
1629 function bnSetBit(n) {
1630 return this.changeBit(n, op_or)
1633 // (public) this & ~(
1<
<n)
1634 function bnClearBit(n) {
1635 return this.changeBit(n, op_andnot)
1638 // (public) this ^ (
1<
<n)
1639 function bnFlipBit(n) {
1640 return this.changeBit(n, op_xor)
1643 // (protected) r = this + a
1644 function bnpAddTo(a, r) {
1649 m = Math.min(a.t, self.t)
1652 r[i++] = c & self.DM
1657 while (i < self.t) {
1659 r[i++] = c & self.DM
1667 r[i++] = c & self.DM
1672 r.s = (c <
0) ? -
1 :
0
1673 if (c
> 0) r[i++] = c
1674 else if (c < -
1) r[i++] = self.DV + c
1679 // (public) this + a
1681 var r = new BigInteger()
1686 // (public) this - a
1687 function bnSubtract(a) {
1688 var r = new BigInteger()
1693 // (public) this * a
1694 function bnMultiply(a) {
1695 var r = new BigInteger()
1696 this.multiplyTo(a, r)
1701 function bnSquare() {
1702 var r = new BigInteger()
1707 // (public) this / a
1708 function bnDivide(a) {
1709 var r = new BigInteger()
1710 this.divRemTo(a, r, null)
1714 // (public) this % a
1715 function bnRemainder(a) {
1716 var r = new BigInteger()
1717 this.divRemTo(a, null, r)
1721 // (public) [this/a,this%a]
1722 function bnDivideAndRemainder(a) {
1723 var q = new BigInteger(),
1724 r = new BigInteger()
1725 this.divRemTo(a, q, r)
1726 return new Array(q, r)
1729 // (protected) this *= n, this
>=
0,
1 < n < DV
1730 function bnpDMultiply(n) {
1731 this[this.t] = this.am(
0, n -
1, this,
0,
0, this.t)
1736 // (protected) this += n << w words, this
>=
0
1737 function bnpDAddOffset(n, w) {
1739 while (this.t <= w) this[this.t++] =
0
1741 while (this[w]
>= this.DV) {
1743 if (++w
>= this.t) this[this.t++] =
0
1749 function NullExp() {}
1755 function nMulTo(x, y, r) {
1759 function nSqrTo(x, r) {
1763 NullExp.prototype.convert = nNop
1764 NullExp.prototype.revert = nNop
1765 NullExp.prototype.mulTo = nMulTo
1766 NullExp.prototype.sqrTo = nSqrTo
1770 return this.exp(e, new NullExp())
1773 // (protected) r = lower n words of "this * a", a.t <= n
1774 // "this" should be the larger one if appropriate.
1775 function bnpMultiplyLowerTo(a, n, r) {
1776 var i = Math.min(this.t + a.t, n)
1777 r.s =
0; // assumes a,this
>=
0
1779 while (i
> 0) r[--i] =
0
1781 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(
0, a[i], r, i,
0, this.t)
1782 for (j = Math.min(a.t, n); i < j; ++i) this.am(
0, a[i], r, i,
0, n - i)
1786 // (protected) r =
"this * a" without lower n words, n
> 0
1787 //
"this" should be the larger one if appropriate.
1788 function bnpMultiplyUpperTo(a, n, r) {
1790 var i = r.t = this.t + a.t - n
1791 r.s =
0; // assumes a,this
>=
0
1792 while (--i
>=
0) r[i] =
0
1793 for (i = Math.max(n - this.t,
0); i < a.t; ++i)
1794 r[this.t + i - n] = this.am(n - i, a[i], r,
0,
0, this.t + i - n)
1799 // Barrett modular reduction
1800 function Barrett(m) {
1802 this.r2 = new BigInteger()
1803 this.q3 = new BigInteger()
1804 BigInteger.ONE.dlShiftTo(
2 * m.t, this.r2)
1805 this.mu = this.r2.divide(m)
1809 function barrettConvert(x) {
1810 if (x.s <
0 || x.t
> 2 * this.m.t) return x.mod(this.m)
1811 else if (x.compareTo(this.m) <
0) return x
1813 var r = new BigInteger()
1820 function barrettRevert(x) {
1824 // x = x mod m (HAC
14.42)
1825 function barrettReduce(x) {
1827 x.drShiftTo(self.m.t -
1, self.r2)
1828 if (x.t
> self.m.t +
1) {
1832 self.mu.multiplyUpperTo(self.r2, self.m.t +
1, self.q3)
1833 self.m.multiplyLowerTo(self.q3, self.m.t +
1, self.r2)
1834 while (x.compareTo(self.r2) <
0) x.dAddOffset(
1, self.m.t +
1)
1836 while (x.compareTo(self.m)
>=
0) x.subTo(self.m, x)
1839 // r = x^
2 mod m; x != r
1840 function barrettSqrTo(x, r) {
1845 // r = x*y mod m; x,y != r
1846 function barrettMulTo(x, y, r) {
1851 Barrett.prototype.convert = barrettConvert
1852 Barrett.prototype.revert = barrettRevert
1853 Barrett.prototype.reduce = barrettReduce
1854 Barrett.prototype.mulTo = barrettMulTo
1855 Barrett.prototype.sqrTo = barrettSqrTo
1857 // (public) this^e % m (HAC
14.85)
1858 function bnModPow(e, m) {
1859 var i = e.bitLength(),
1862 if (i <=
0) return r
1863 else if (i <
18) k =
1
1864 else if (i <
48) k =
3
1865 else if (i <
144) k =
4
1866 else if (i <
768) k =
5
1870 else if (m.isEven())
1873 z = new Montgomery(m)
1876 var g = new Array(),
1880 g[
1] = z.convert(this)
1882 var g2 = new BigInteger()
1885 g[n] = new BigInteger()
1886 z.mulTo(g2, g[n -
2], g[n])
1893 r2 = new BigInteger(),
1897 if (i
>= k1) w = (e[j]
>> (i - k1)) & km
1899 w = (e[j] & ((
1 << (i +
1)) -
1)) << (k1 - i)
1900 if (j
> 0) w |= e[j -
1]
>> (this.DB + i - k1)
1904 while ((w &
1) ==
0) {
1912 if (is1) { // ret ==
1, don't bother squaring or multiplying it
1921 if (n
> 0) z.sqrTo(r, r2)
1927 z.mulTo(r2, g[w], r)
1930 while (j
>=
0 && (e[j] & (
1 << i)) ==
0) {
1944 // (public) gcd(this,a) (HAC
14.54)
1946 var x = (this.s <
0) ? this.negate() : this.clone()
1947 var y = (a.s <
0) ? a.negate() : a.clone()
1948 if (x.compareTo(y) <
0) {
1953 var i = x.getLowestSetBit(),
1954 g = y.getLowestSetBit()
1961 while (x.signum()
> 0) {
1962 if ((i = x.getLowestSetBit())
> 0) x.rShiftTo(i, x)
1963 if ((i = y.getLowestSetBit())
> 0) y.rShiftTo(i, y)
1964 if (x.compareTo(y)
>=
0) {
1972 if (g
> 0) y.lShiftTo(g, y)
1976 // (protected) this % n, n <
2^
26
1977 function bnpModInt(n) {
1978 if (n <=
0) return
0
1979 var d = this.DV % n,
1980 r = (this.s <
0) ? n -
1 :
0
1982 if (d ==
0) r = this[
0] % n
1984 for (var i = this.t -
1; i
>=
0; --i) r = (d * r + this[i]) % n
1988 // (public)
1/this % m (HAC
14.61)
1989 function bnModInverse(m) {
1991 if ((this.isEven() && ac) || m.signum() ==
0) return BigInteger.ZERO
1998 while (u.signum() !=
0) {
1999 while (u.isEven()) {
2002 if (!a.isEven() || !b.isEven()) {
2007 } else if (!b.isEven()) b.subTo(m, b)
2010 while (v.isEven()) {
2013 if (!c.isEven() || !d.isEven()) {
2018 } else if (!d.isEven()) d.subTo(m, d)
2021 if (u.compareTo(v)
>=
0) {
2023 if (ac) a.subTo(c, a)
2027 if (ac) c.subTo(a, c)
2031 if (v.compareTo(BigInteger.ONE) !=
0) return BigInteger.ZERO
2032 if (d.compareTo(m)
>=
0) return d.subtract(m)
2033 if (d.signum() <
0) d.addTo(m, d)
2035 if (d.signum() <
0) return d.add(m)
2040 2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
47,
53,
59,
61,
67,
71,
2041 73,
79,
83,
89,
97,
101,
103,
107,
109,
113,
127,
131,
137,
139,
149,
151,
2042 157,
163,
167,
173,
179,
181,
191,
193,
197,
199,
211,
223,
227,
229,
233,
2043 239,
241,
251,
257,
263,
269,
271,
277,
281,
283,
293,
307,
311,
313,
317,
2044 331,
337,
347,
349,
353,
359,
367,
373,
379,
383,
389,
397,
401,
409,
419,
2045 421,
431,
433,
439,
443,
449,
457,
461,
463,
467,
479,
487,
491,
499,
503,
2046 509,
521,
523,
541,
547,
557,
563,
569,
571,
577,
587,
593,
599,
601,
607,
2047 613,
617,
619,
631,
641,
643,
647,
653,
659,
661,
673,
677,
683,
691,
701,
2048 709,
719,
727,
733,
739,
743,
751,
757,
761,
769,
773,
787,
797,
809,
811,
2049 821,
823,
827,
829,
839,
853,
857,
859,
863,
877,
881,
883,
887,
907,
911,
2050 919,
929,
937,
941,
947,
953,
967,
971,
977,
983,
991,
997
2053 var lplim = (
1 <<
26) / lowprimes[lowprimes.length -
1]
2055 // (public) test primality with certainty
>=
1-
.5^t
2056 function bnIsProbablePrime(t) {
2057 var i, x = this.abs()
2058 if (x.t ==
1 && x[
0] <= lowprimes[lowprimes.length -
1]) {
2059 for (i =
0; i < lowprimes.length; ++i)
2060 if (x[
0] == lowprimes[i]) return true
2063 if (x.isEven()) return false
2065 while (i < lowprimes.length) {
2066 var m = lowprimes[i],
2068 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2070 while (i < j) if (m % lowprimes[i++] ==
0) return false
2072 return x.millerRabin(t)
2075 // (protected) true if probably prime (HAC
4.24, Miller-Rabin)
2076 function bnpMillerRabin(t) {
2077 var n1 = this.subtract(BigInteger.ONE)
2078 var k = n1.getLowestSetBit()
2079 if (k <=
0) return false
2080 var r = n1.shiftRight(k)
2082 if (t
> lowprimes.length) t = lowprimes.length
2083 var a = new BigInteger(null)
2085 for (var i =
0; i < t; ++i) {
2087 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2088 if (bases.indexOf(j) == -
1) break
2092 var y = a.modPow(r, this)
2093 if (y.compareTo(BigInteger.ONE) !=
0 && y.compareTo(n1) !=
0) {
2095 while (j++ < k && y.compareTo(n1) !=
0) {
2096 y = y.modPowInt(
2, this)
2097 if (y.compareTo(BigInteger.ONE) ==
0) return false
2099 if (y.compareTo(n1) !=
0) return false
2106 proto.chunkSize = bnpChunkSize
2107 proto.toRadix = bnpToRadix
2108 proto.fromRadix = bnpFromRadix
2109 proto.fromNumber = bnpFromNumber
2110 proto.bitwiseTo = bnpBitwiseTo
2111 proto.changeBit = bnpChangeBit
2112 proto.addTo = bnpAddTo
2113 proto.dMultiply = bnpDMultiply
2114 proto.dAddOffset = bnpDAddOffset
2115 proto.multiplyLowerTo = bnpMultiplyLowerTo
2116 proto.multiplyUpperTo = bnpMultiplyUpperTo
2117 proto.modInt = bnpModInt
2118 proto.millerRabin = bnpMillerRabin
2121 proto.clone = bnClone
2122 proto.intValue = bnIntValue
2123 proto.byteValue = bnByteValue
2124 proto.shortValue = bnShortValue
2125 proto.signum = bnSigNum
2126 proto.toByteArray = bnToByteArray
2127 proto.equals = bnEquals
2133 proto.andNot = bnAndNot
2135 proto.shiftLeft = bnShiftLeft
2136 proto.shiftRight = bnShiftRight
2137 proto.getLowestSetBit = bnGetLowestSetBit
2138 proto.bitCount = bnBitCount
2139 proto.testBit = bnTestBit
2140 proto.setBit = bnSetBit
2141 proto.clearBit = bnClearBit
2142 proto.flipBit = bnFlipBit
2144 proto.subtract = bnSubtract
2145 proto.multiply = bnMultiply
2146 proto.divide = bnDivide
2147 proto.remainder = bnRemainder
2148 proto.divideAndRemainder = bnDivideAndRemainder
2149 proto.modPow = bnModPow
2150 proto.modInverse = bnModInverse
2153 proto.isProbablePrime = bnIsProbablePrime
2155 // JSBN-specific extension
2156 proto.square = bnSquare
2159 BigInteger.ZERO = nbv(
0)
2160 BigInteger.ONE = nbv(
1)
2161 BigInteger.valueOf = nbv
2163 module.exports = BigInteger
2165 },{"../package.json":
4}],
2:[function(require,module,exports){
2167 // FIXME: Kind of a weird way to throw exceptions, consider removing
2168 var assert = require('assert')
2169 var BigInteger = require('./bigi')
2172 * Turns a byte array into a big integer.
2174 * This function will interpret a byte array as a big integer in big
2177 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2178 // BigInteger expects a DER integer conformant byte array
2179 if (byteArray[
0] &
0x80) {
2180 return new BigInteger([
0].concat(byteArray))
2183 return new BigInteger(byteArray)
2187 * Returns a byte array representation of the big integer.
2189 * This returns the absolute of the contained value in big endian
2190 * form. A value of zero results in an empty array.
2192 BigInteger.prototype.toByteArrayUnsigned = function() {
2193 var byteArray = this.toByteArray()
2194 return byteArray[
0] ===
0 ? byteArray.slice(
1) : byteArray
2197 BigInteger.fromDERInteger = function(byteArray) {
2198 return new BigInteger(byteArray)
2202 * Converts BigInteger to a DER integer representation.
2204 * The format for this value uses the most significant bit as a sign
2205 * bit. If the most significant bit is already set and the integer is
2206 * positive, a
0x00 is prepended.
2222 * -
62300 =
> 0xff0ca4
2224 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2226 BigInteger.fromBuffer = function(buffer) {
2227 // BigInteger expects a DER integer conformant byte array
2228 if (buffer[
0] &
0x80) {
2229 var byteArray = Array.prototype.slice.call(buffer)
2231 return new BigInteger([
0].concat(byteArray))
2234 return new BigInteger(buffer)
2237 BigInteger.fromHex = function(hex) {
2238 if (hex === '') return BigInteger.ZERO
2240 assert.equal(hex, hex.match(/^[A-Fa-f0-
9]+/), 'Invalid hex string')
2241 assert.equal(hex.length %
2,
0, 'Incomplete hex')
2242 return new BigInteger(hex,
16)
2245 BigInteger.prototype.toBuffer = function(size) {
2246 var byteArray = this.toByteArrayUnsigned()
2249 var padding = size - byteArray.length
2250 while (zeros.length < padding) zeros.push(
0)
2252 return new Buffer(zeros.concat(byteArray))
2255 BigInteger.prototype.toHex = function(size) {
2256 return this.toBuffer(size).toString('hex')
2259 }).call(this,require(
"buffer").Buffer)
2260 },{
"./bigi":
1,
"assert":
5,
"buffer":
7}],
3:[function(require,module,exports){
2261 var BigInteger = require('./bigi')
2264 require('./convert')
2266 module.exports = BigInteger
2267 },{
"./bigi":
1,
"./convert":
2}],
4:[function(require,module,exports){
2271 "description":
"Big integers.",
2289 "devDependencies": {
2292 "coveralls":
"^2.10.0",
2293 "istanbul":
"^0.2.11"
2296 "url":
"https://github.com/cryptocoinjs/bigi",
2299 "main":
"./lib/index.js",
2301 "test":
"_mocha -- test/*.js",
2302 "jshint":
"jshint --config jshint.json lib/*.js ; true",
2304 "coverage":
"istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2305 "coveralls":
"npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2309 "files":
"test/*.js",
2315 "safari/6.0..latest",
2316 "iphone/6.0..latest",
2317 "android-browser/4.2..latest"
2321 "url":
"https://github.com/cryptocoinjs/bigi/issues"
2323 "homepage":
"https://github.com/cryptocoinjs/bigi",
2324 "_id":
"bigi@1.4.0",
2326 "shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2327 "tarball":
"http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2329 "_from":
"bigi@^1.4.0",
2330 "_npmVersion":
"1.4.3",
2333 "email":
"jprichardson@gmail.com"
2338 "email":
"jprichardson@gmail.com"
2341 "name":
"midnightlightning",
2342 "email":
"boydb@midnightdesign.ws"
2345 "name":
"sidazhang",
2346 "email":
"sidazhang89@gmail.com"
2350 "email":
"npm@shesek.info"
2354 "_shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2355 "_resolved":
"https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2358 },{}],
5:[function(require,module,exports){
2359 // http://wiki.commonjs.org/wiki/Unit_Testing/
1.0
2361 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2363 // Originally from narwhal.js (http://narwhaljs.org)
2364 // Copyright (c)
2009 Thomas Robinson
<280north.com
>
2366 // Permission is hereby granted, free of charge, to any person obtaining a copy
2367 // of this software and associated documentation files (the 'Software'), to
2368 // deal in the Software without restriction, including without limitation the
2369 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2370 // sell copies of the Software, and to permit persons to whom the Software is
2371 // furnished to do so, subject to the following conditions:
2373 // The above copyright notice and this permission notice shall be included in
2374 // all copies or substantial portions of the Software.
2376 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2377 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2378 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2379 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2380 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2381 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2383 // when used in node, this will actually load the util module we depend on
2384 // versus loading the builtin util module as happens otherwise
2385 // this is a bug in node module loading as far as I am concerned
2386 var util = require('util/');
2388 var pSlice = Array.prototype.slice;
2389 var hasOwn = Object.prototype.hasOwnProperty;
2391 //
1. The assert module provides functions that throw
2392 // AssertionError's when particular conditions are not met. The
2393 // assert module must conform to the following interface.
2395 var assert = module.exports = ok;
2397 //
2. The AssertionError is defined in assert.
2398 // new assert.AssertionError({ message: message,
2400 // expected: expected })
2402 assert.AssertionError = function AssertionError(options) {
2403 this.name = 'AssertionError';
2404 this.actual = options.actual;
2405 this.expected = options.expected;
2406 this.operator = options.operator;
2407 if (options.message) {
2408 this.message = options.message;
2409 this.generatedMessage = false;
2411 this.message = getMessage(this);
2412 this.generatedMessage = true;
2414 var stackStartFunction = options.stackStartFunction || fail;
2416 if (Error.captureStackTrace) {
2417 Error.captureStackTrace(this, stackStartFunction);
2420 // non v8 browsers so we can have a stacktrace
2421 var err = new Error();
2423 var out = err.stack;
2425 // try to strip useless frames
2426 var fn_name = stackStartFunction.name;
2427 var idx = out.indexOf('\n' + fn_name);
2429 // once we have located the function frame
2430 // we need to strip out everything before it (and its line)
2431 var next_line = out.indexOf('\n', idx +
1);
2432 out = out.substring(next_line +
1);
2440 // assert.AssertionError instanceof Error
2441 util.inherits(assert.AssertionError, Error);
2443 function replacer(key, value) {
2444 if (util.isUndefined(value)) {
2447 if (util.isNumber(value) && !isFinite(value)) {
2448 return value.toString();
2450 if (util.isFunction(value) || util.isRegExp(value)) {
2451 return value.toString();
2456 function truncate(s, n) {
2457 if (util.isString(s)) {
2458 return s.length < n ? s : s.slice(
0, n);
2464 function getMessage(self) {
2465 return truncate(JSON.stringify(self.actual, replacer),
128) + ' ' +
2466 self.operator + ' ' +
2467 truncate(JSON.stringify(self.expected, replacer),
128);
2470 // At present only the three keys mentioned above are used and
2471 // understood by the spec. Implementations or sub modules can pass
2472 // other keys to the AssertionError's constructor - they will be
2475 //
3. All of the following functions must throw an AssertionError
2476 // when a corresponding condition is not met, with a message that
2477 // may be undefined if not provided. All assertion methods provide
2478 // both the actual and expected values to the assertion error for
2479 // display purposes.
2481 function fail(actual, expected, message, operator, stackStartFunction) {
2482 throw new assert.AssertionError({
2487 stackStartFunction: stackStartFunction
2491 // EXTENSION! allows for well behaved errors defined elsewhere.
2494 //
4. Pure assertion tests whether a value is truthy, as determined
2496 // assert.ok(guard, message_opt);
2497 // This statement is equivalent to assert.equal(true, !!guard,
2498 // message_opt);. To test strictly for the value true, use
2499 // assert.strictEqual(true, guard, message_opt);.
2501 function ok(value, message) {
2502 if (!value) fail(value, true, message, '==', assert.ok);
2506 //
5. The equality assertion tests shallow, coercive equality with
2508 // assert.equal(actual, expected, message_opt);
2510 assert.equal = function equal(actual, expected, message) {
2511 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2514 //
6. The non-equality assertion tests for whether two objects are not equal
2515 // with != assert.notEqual(actual, expected, message_opt);
2517 assert.notEqual = function notEqual(actual, expected, message) {
2518 if (actual == expected) {
2519 fail(actual, expected, message, '!=', assert.notEqual);
2523 //
7. The equivalence assertion tests a deep equality relation.
2524 // assert.deepEqual(actual, expected, message_opt);
2526 assert.deepEqual = function deepEqual(actual, expected, message) {
2527 if (!_deepEqual(actual, expected)) {
2528 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2532 function _deepEqual(actual, expected) {
2533 //
7.1. All identical values are equivalent, as determined by ===.
2534 if (actual === expected) {
2537 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2538 if (actual.length != expected.length) return false;
2540 for (var i =
0; i < actual.length; i++) {
2541 if (actual[i] !== expected[i]) return false;
2546 //
7.2. If the expected value is a Date object, the actual value is
2547 // equivalent if it is also a Date object that refers to the same time.
2548 } else if (util.isDate(actual) && util.isDate(expected)) {
2549 return actual.getTime() === expected.getTime();
2551 //
7.3 If the expected value is a RegExp object, the actual value is
2552 // equivalent if it is also a RegExp object with the same source and
2553 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2554 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2555 return actual.source === expected.source &&
2556 actual.global === expected.global &&
2557 actual.multiline === expected.multiline &&
2558 actual.lastIndex === expected.lastIndex &&
2559 actual.ignoreCase === expected.ignoreCase;
2561 //
7.4. Other pairs that do not both pass typeof value == 'object',
2562 // equivalence is determined by ==.
2563 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2564 return actual == expected;
2566 //
7.5 For all other Object pairs, including Array objects, equivalence is
2567 // determined by having the same number of owned properties (as verified
2568 // with Object.prototype.hasOwnProperty.call), the same set of keys
2569 // (although not necessarily the same order), equivalent values for every
2570 // corresponding key, and an identical 'prototype' property. Note: this
2571 // accounts for both named and indexed properties on Arrays.
2573 return objEquiv(actual, expected);
2577 function isArguments(object) {
2578 return Object.prototype.toString.call(object) == '[object Arguments]';
2581 function objEquiv(a, b) {
2582 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2584 // an identical 'prototype' property.
2585 if (a.prototype !== b.prototype) return false;
2586 // if one is a primitive, the other must be same
2587 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2590 var aIsArgs = isArguments(a),
2591 bIsArgs = isArguments(b);
2592 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2597 return _deepEqual(a, b);
2599 var ka = objectKeys(a),
2602 // having the same number of owned properties (keys incorporates
2604 if (ka.length != kb.length)
2606 //the same set of keys (although not necessarily the same order),
2610 for (i = ka.length -
1; i
>=
0; i--) {
2614 //equivalent values for every corresponding key, and
2615 //~~~possibly expensive deep test
2616 for (i = ka.length -
1; i
>=
0; i--) {
2618 if (!_deepEqual(a[key], b[key])) return false;
2623 //
8. The non-equivalence assertion tests for any deep inequality.
2624 // assert.notDeepEqual(actual, expected, message_opt);
2626 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2627 if (_deepEqual(actual, expected)) {
2628 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2632 //
9. The strict equality assertion tests strict equality, as determined by ===.
2633 // assert.strictEqual(actual, expected, message_opt);
2635 assert.strictEqual = function strictEqual(actual, expected, message) {
2636 if (actual !== expected) {
2637 fail(actual, expected, message, '===', assert.strictEqual);
2641 //
10. The strict non-equality assertion tests for strict inequality, as
2642 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2644 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2645 if (actual === expected) {
2646 fail(actual, expected, message, '!==', assert.notStrictEqual);
2650 function expectedException(actual, expected) {
2651 if (!actual || !expected) {
2655 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2656 return expected.test(actual);
2657 } else if (actual instanceof expected) {
2659 } else if (expected.call({}, actual) === true) {
2666 function _throws(shouldThrow, block, expected, message) {
2669 if (util.isString(expected)) {
2680 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2681 (message ? ' ' + message : '.');
2683 if (shouldThrow && !actual) {
2684 fail(actual, expected, 'Missing expected exception' + message);
2687 if (!shouldThrow && expectedException(actual, expected)) {
2688 fail(actual, expected, 'Got unwanted exception' + message);
2691 if ((shouldThrow && actual && expected &&
2692 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2697 //
11. Expected to throw an error:
2698 // assert.throws(block, Error_opt, message_opt);
2700 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2701 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2704 // EXTENSION! This is annoying to write outside this module.
2705 assert.doesNotThrow = function(block, /*optional*/message) {
2706 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2709 assert.ifError = function(err) { if (err) {throw err;}};
2711 var objectKeys = Object.keys || function (obj) {
2713 for (var key in obj) {
2714 if (hasOwn.call(obj, key)) keys.push(key);
2719 },{"util/":
29}],
6:[function(require,module,exports){
2721 },{}],
7:[function(require,module,exports){
2723 * The buffer module from node.js, for the browser.
2725 * @author Feross Aboukhadijeh
<feross@feross.org
> <http://feross.org
>
2729 var base64 = require('base64-js')
2730 var ieee754 = require('ieee754')
2731 var isArray = require('is-array')
2733 exports.Buffer = Buffer
2734 exports.SlowBuffer = SlowBuffer
2735 exports.INSPECT_MAX_BYTES =
50
2736 Buffer.poolSize =
8192 // not used by this implementation
2741 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2742 * === true Use Uint8Array implementation (fastest)
2743 * === false Use Object implementation (most compatible, even IE6)
2745 * Browsers that support typed arrays are IE
10+, Firefox
4+, Chrome
7+, Safari
5.1+,
2746 * Opera
11.6+, iOS
4.2+.
2748 * Due to various browser bugs, sometimes the Object implementation will be used even
2749 * when the browser supports typed arrays.
2753 * - Firefox
4-
29 lacks support for adding new properties to `Uint8Array` instances,
2754 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=
695438.
2756 * - Safari
5-
7 lacks support for changing the `Object.prototype.constructor` property
2759 * - Chrome
9-
10 is missing the `TypedArray.prototype.subarray` function.
2761 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2762 * incorrect length in some situations.
2764 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2765 * get the Object implementation, which is slower but behaves correctly.
2767 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2770 var arr = new Uint8Array(
1)
2771 arr.foo = function () { return
42 }
2772 arr.constructor = Bar
2773 return arr.foo() ===
42 && // typed array instances can be augmented
2774 arr.constructor === Bar && // constructor can be set
2775 typeof arr.subarray === 'function' && // chrome
9-
10 lack `subarray`
2776 arr.subarray(
1,
1).byteLength ===
0 // ie10 has broken `subarray`
2782 function kMaxLength () {
2783 return Buffer.TYPED_ARRAY_SUPPORT
2792 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2793 * with function properties for all the node `Buffer` API functions. We use
2794 * `Uint8Array` so that square bracket notation works as expected -- it returns
2797 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2800 function Buffer (arg) {
2801 if (!(this instanceof Buffer)) {
2802 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2803 if (arguments.length
> 1) return new Buffer(arg, arguments[
1])
2804 return new Buffer(arg)
2808 this.parent = undefined
2811 if (typeof arg === 'number') {
2812 return fromNumber(this, arg)
2815 // Slightly less common case.
2816 if (typeof arg === 'string') {
2817 return fromString(this, arg, arguments.length
> 1 ? arguments[
1] : 'utf8')
2821 return fromObject(this, arg)
2824 function fromNumber (that, length) {
2825 that = allocate(that, length <
0 ?
0 : checked(length) |
0)
2826 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2827 for (var i =
0; i < length; i++) {
2834 function fromString (that, string, encoding) {
2835 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2837 // Assumption: byteLength() return value is always < kMaxLength.
2838 var length = byteLength(string, encoding) |
0
2839 that = allocate(that, length)
2841 that.write(string, encoding)
2845 function fromObject (that, object) {
2846 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2848 if (isArray(object)) return fromArray(that, object)
2850 if (object == null) {
2851 throw new TypeError('must start with number, buffer, array or string')
2854 if (typeof ArrayBuffer !== 'undefined') {
2855 if (object.buffer instanceof ArrayBuffer) {
2856 return fromTypedArray(that, object)
2858 if (object instanceof ArrayBuffer) {
2859 return fromArrayBuffer(that, object)
2863 if (object.length) return fromArrayLike(that, object)
2865 return fromJsonObject(that, object)
2868 function fromBuffer (that, buffer) {
2869 var length = checked(buffer.length) |
0
2870 that = allocate(that, length)
2871 buffer.copy(that,
0,
0, length)
2875 function fromArray (that, array) {
2876 var length = checked(array.length) |
0
2877 that = allocate(that, length)
2878 for (var i =
0; i < length; i +=
1) {
2879 that[i] = array[i] &
255
2884 // Duplicate of fromArray() to keep fromArray() monomorphic.
2885 function fromTypedArray (that, array) {
2886 var length = checked(array.length) |
0
2887 that = allocate(that, length)
2888 // Truncating the elements is probably not what people expect from typed
2889 // arrays with BYTES_PER_ELEMENT
> 1 but it's compatible with the behavior
2890 // of the old Buffer constructor.
2891 for (var i =
0; i < length; i +=
1) {
2892 that[i] = array[i] &
255
2897 function fromArrayBuffer (that, array) {
2898 if (Buffer.TYPED_ARRAY_SUPPORT) {
2899 // Return an augmented `Uint8Array` instance, for best performance
2901 that = Buffer._augment(new Uint8Array(array))
2903 // Fallback: Return an object instance of the Buffer class
2904 that = fromTypedArray(that, new Uint8Array(array))
2909 function fromArrayLike (that, array) {
2910 var length = checked(array.length) |
0
2911 that = allocate(that, length)
2912 for (var i =
0; i < length; i +=
1) {
2913 that[i] = array[i] &
255
2918 // Deserialize { type: 'Buffer', data: [
1,
2,
3,...] } into a Buffer object.
2919 // Returns a zero-length buffer for inputs that don't conform to the spec.
2920 function fromJsonObject (that, object) {
2924 if (object.type === 'Buffer' && isArray(object.data)) {
2926 length = checked(array.length) |
0
2928 that = allocate(that, length)
2930 for (var i =
0; i < length; i +=
1) {
2931 that[i] = array[i] &
255
2936 function allocate (that, length) {
2937 if (Buffer.TYPED_ARRAY_SUPPORT) {
2938 // Return an augmented `Uint8Array` instance, for best performance
2939 that = Buffer._augment(new Uint8Array(length))
2941 // Fallback: Return an object instance of the Buffer class
2942 that.length = length
2943 that._isBuffer = true
2946 var fromPool = length !==
0 && length <= Buffer.poolSize
>>> 1
2947 if (fromPool) that.parent = rootParent
2952 function checked (length) {
2953 // Note: cannot use `length < kMaxLength` here because that fails when
2954 // length is NaN (which is otherwise coerced to zero.)
2955 if (length
>= kMaxLength()) {
2956 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2957 'size:
0x' + kMaxLength().toString(
16) + ' bytes')
2962 function SlowBuffer (subject, encoding) {
2963 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2965 var buf = new Buffer(subject, encoding)
2970 Buffer.isBuffer = function isBuffer (b) {
2971 return !!(b != null && b._isBuffer)
2974 Buffer.compare = function compare (a, b) {
2975 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2976 throw new TypeError('Arguments must be Buffers')
2979 if (a === b) return
0
2985 var len = Math.min(x, y)
2987 if (a[i] !== b[i]) break
2997 if (x < y) return -
1
3002 Buffer.isEncoding = function isEncoding (encoding) {
3003 switch (String(encoding).toLowerCase()) {
3021 Buffer.concat = function concat (list, length) {
3022 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3024 if (list.length ===
0) {
3025 return new Buffer(
0)
3029 if (length === undefined) {
3031 for (i =
0; i < list.length; i++) {
3032 length += list[i].length
3036 var buf = new Buffer(length)
3038 for (i =
0; i < list.length; i++) {
3046 function byteLength (string, encoding) {
3047 if (typeof string !== 'string') string = '' + string
3049 var len = string.length
3050 if (len ===
0) return
0
3052 // Use a for loop to avoid recursion
3053 var loweredCase = false
3064 return utf8ToBytes(string).length
3073 return base64ToBytes(string).length
3075 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3076 encoding = ('' + encoding).toLowerCase()
3081 Buffer.byteLength = byteLength
3083 // pre-set for values that may exist in the future
3084 Buffer.prototype.length = undefined
3085 Buffer.prototype.parent = undefined
3087 function slowToString (encoding, start, end) {
3088 var loweredCase = false
3091 end = end === undefined || end === Infinity ? this.length : end |
0
3093 if (!encoding) encoding = 'utf8'
3094 if (start <
0) start =
0
3095 if (end
> this.length) end = this.length
3096 if (end <= start) return ''
3101 return hexSlice(this, start, end)
3105 return utf8Slice(this, start, end)
3108 return asciiSlice(this, start, end)
3111 return binarySlice(this, start, end)
3114 return base64Slice(this, start, end)
3120 return utf16leSlice(this, start, end)
3123 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3124 encoding = (encoding + '').toLowerCase()
3130 Buffer.prototype.toString = function toString () {
3131 var length = this.length |
0
3132 if (length ===
0) return ''
3133 if (arguments.length ===
0) return utf8Slice(this,
0, length)
3134 return slowToString.apply(this, arguments)
3137 Buffer.prototype.equals = function equals (b) {
3138 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3139 if (this === b) return true
3140 return Buffer.compare(this, b) ===
0
3143 Buffer.prototype.inspect = function inspect () {
3145 var max = exports.INSPECT_MAX_BYTES
3146 if (this.length
> 0) {
3147 str = this.toString('hex',
0, max).match(/.{
2}/g).join(' ')
3148 if (this.length
> max) str += ' ... '
3150 return '
<Buffer ' + str + '
>'
3153 Buffer.prototype.compare = function compare (b) {
3154 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3155 if (this === b) return
0
3156 return Buffer.compare(this, b)
3159 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3160 if (byteOffset
> 0x7fffffff) byteOffset =
0x7fffffff
3161 else if (byteOffset < -
0x80000000) byteOffset = -
0x80000000
3164 if (this.length ===
0) return -
1
3165 if (byteOffset
>= this.length) return -
1
3167 // Negative offsets start from the end of the buffer
3168 if (byteOffset <
0) byteOffset = Math.max(this.length + byteOffset,
0)
3170 if (typeof val === 'string') {
3171 if (val.length ===
0) return -
1 // special case: looking for empty string always fails
3172 return String.prototype.indexOf.call(this, val, byteOffset)
3174 if (Buffer.isBuffer(val)) {
3175 return arrayIndexOf(this, val, byteOffset)
3177 if (typeof val === 'number') {
3178 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3179 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3181 return arrayIndexOf(this, [ val ], byteOffset)
3184 function arrayIndexOf (arr, val, byteOffset) {
3186 for (var i =
0; byteOffset + i < arr.length; i++) {
3187 if (arr[byteOffset + i] === val[foundIndex === -
1 ?
0 : i - foundIndex]) {
3188 if (foundIndex === -
1) foundIndex = i
3189 if (i - foundIndex +
1 === val.length) return byteOffset + foundIndex
3197 throw new TypeError('val must be string, number or Buffer')
3200 // `get` is deprecated
3201 Buffer.prototype.get = function get (offset) {
3202 console.log('.get() is deprecated. Access using array indexes instead.')
3203 return this.readUInt8(offset)
3206 // `set` is deprecated
3207 Buffer.prototype.set = function set (v, offset) {
3208 console.log('.set() is deprecated. Access using array indexes instead.')
3209 return this.writeUInt8(v, offset)
3212 function hexWrite (buf, string, offset, length) {
3213 offset = Number(offset) ||
0
3214 var remaining = buf.length - offset
3218 length = Number(length)
3219 if (length
> remaining) {
3224 // must be an even number of digits
3225 var strLen = string.length
3226 if (strLen %
2 !==
0) throw new Error('Invalid hex string')
3228 if (length
> strLen /
2) {
3231 for (var i =
0; i < length; i++) {
3232 var parsed = parseInt(string.substr(i *
2,
2),
16)
3233 if (isNaN(parsed)) throw new Error('Invalid hex string')
3234 buf[offset + i] = parsed
3239 function utf8Write (buf, string, offset, length) {
3240 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3243 function asciiWrite (buf, string, offset, length) {
3244 return blitBuffer(asciiToBytes(string), buf, offset, length)
3247 function binaryWrite (buf, string, offset, length) {
3248 return asciiWrite(buf, string, offset, length)
3251 function base64Write (buf, string, offset, length) {
3252 return blitBuffer(base64ToBytes(string), buf, offset, length)
3255 function ucs2Write (buf, string, offset, length) {
3256 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3259 Buffer.prototype.write = function write (string, offset, length, encoding) {
3260 // Buffer#write(string)
3261 if (offset === undefined) {
3263 length = this.length
3265 // Buffer#write(string, encoding)
3266 } else if (length === undefined && typeof offset === 'string') {
3268 length = this.length
3270 // Buffer#write(string, offset[, length][, encoding])
3271 } else if (isFinite(offset)) {
3273 if (isFinite(length)) {
3275 if (encoding === undefined) encoding = 'utf8'
3280 // legacy write(string, encoding, offset, length) - remove in v0.13
3288 var remaining = this.length - offset
3289 if (length === undefined || length
> remaining) length = remaining
3291 if ((string.length
> 0 && (length <
0 || offset <
0)) || offset
> this.length) {
3292 throw new RangeError('attempt to write outside buffer bounds')
3295 if (!encoding) encoding = 'utf8'
3297 var loweredCase = false
3301 return hexWrite(this, string, offset, length)
3305 return utf8Write(this, string, offset, length)
3308 return asciiWrite(this, string, offset, length)
3311 return binaryWrite(this, string, offset, length)
3314 // Warning: maxLength not taken into account in base64Write
3315 return base64Write(this, string, offset, length)
3321 return ucs2Write(this, string, offset, length)
3324 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3325 encoding = ('' + encoding).toLowerCase()
3331 Buffer.prototype.toJSON = function toJSON () {
3334 data: Array.prototype.slice.call(this._arr || this,
0)
3338 function base64Slice (buf, start, end) {
3339 if (start ===
0 && end === buf.length) {
3340 return base64.fromByteArray(buf)
3342 return base64.fromByteArray(buf.slice(start, end))
3346 function utf8Slice (buf, start, end) {
3347 end = Math.min(buf.length, end)
3352 var bytesPerSequence
3358 for (; i < end; i += bytesPerSequence) {
3362 if (firstByte
> 0xEF) {
3363 bytesPerSequence =
4
3364 } else if (firstByte
> 0xDF) {
3365 bytesPerSequence =
3
3366 } else if (firstByte
> 0xBF) {
3367 bytesPerSequence =
2
3369 bytesPerSequence =
1
3372 if (i + bytesPerSequence <= end) {
3373 switch (bytesPerSequence) {
3375 if (firstByte <
0x80) {
3376 codePoint = firstByte
3380 secondByte = buf[i +
1]
3381 if ((secondByte &
0xC0) ===
0x80) {
3382 tempCodePoint = (firstByte &
0x1F) <<
0x6 | (secondByte &
0x3F)
3383 if (tempCodePoint
> 0x7F) {
3384 codePoint = tempCodePoint
3389 secondByte = buf[i +
1]
3390 thirdByte = buf[i +
2]
3391 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80) {
3392 tempCodePoint = (firstByte &
0xF) <<
0xC | (secondByte &
0x3F) <<
0x6 | (thirdByte &
0x3F)
3393 if (tempCodePoint
> 0x7FF && (tempCodePoint <
0xD800 || tempCodePoint
> 0xDFFF)) {
3394 codePoint = tempCodePoint
3399 secondByte = buf[i +
1]
3400 thirdByte = buf[i +
2]
3401 fourthByte = buf[i +
3]
3402 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80 && (fourthByte &
0xC0) ===
0x80) {
3403 tempCodePoint = (firstByte &
0xF) <<
0x12 | (secondByte &
0x3F) <<
0xC | (thirdByte &
0x3F) <<
0x6 | (fourthByte &
0x3F)
3404 if (tempCodePoint
> 0xFFFF && tempCodePoint <
0x110000) {
3405 codePoint = tempCodePoint
3411 if (codePoint ===
0xFFFD) {
3412 // we generated an invalid codePoint so make sure to only advance by
1 byte
3413 bytesPerSequence =
1
3414 } else if (codePoint
> 0xFFFF) {
3415 // encode to utf16 (surrogate pair dance)
3416 codePoint -=
0x10000
3417 res.push(codePoint
>>> 10 &
0x3FF |
0xD800)
3418 codePoint =
0xDC00 | codePoint &
0x3FF
3424 return String.fromCharCode.apply(String, res)
3427 function asciiSlice (buf, start, end) {
3429 end = Math.min(buf.length, end)
3431 for (var i = start; i < end; i++) {
3432 ret += String.fromCharCode(buf[i] &
0x7F)
3437 function binarySlice (buf, start, end) {
3439 end = Math.min(buf.length, end)
3441 for (var i = start; i < end; i++) {
3442 ret += String.fromCharCode(buf[i])
3447 function hexSlice (buf, start, end) {
3448 var len = buf.length
3450 if (!start || start <
0) start =
0
3451 if (!end || end <
0 || end
> len) end = len
3454 for (var i = start; i < end; i++) {
3455 out += toHex(buf[i])
3460 function utf16leSlice (buf, start, end) {
3461 var bytes = buf.slice(start, end)
3463 for (var i =
0; i < bytes.length; i +=
2) {
3464 res += String.fromCharCode(bytes[i] + bytes[i +
1] *
256)
3469 Buffer.prototype.slice = function slice (start, end) {
3470 var len = this.length
3472 end = end === undefined ? len : ~~end
3476 if (start <
0) start =
0
3477 } else if (start
> len) {
3483 if (end <
0) end =
0
3484 } else if (end
> len) {
3488 if (end < start) end = start
3491 if (Buffer.TYPED_ARRAY_SUPPORT) {
3492 newBuf = Buffer._augment(this.subarray(start, end))
3494 var sliceLen = end - start
3495 newBuf = new Buffer(sliceLen, undefined)
3496 for (var i =
0; i < sliceLen; i++) {
3497 newBuf[i] = this[i + start]
3501 if (newBuf.length) newBuf.parent = this.parent || this
3507 * Need to make sure that buffer isn't trying to write out of bounds.
3509 function checkOffset (offset, ext, length) {
3510 if ((offset %
1) !==
0 || offset <
0) throw new RangeError('offset is not uint')
3511 if (offset + ext
> length) throw new RangeError('Trying to access beyond buffer length')
3514 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3516 byteLength = byteLength |
0
3517 if (!noAssert) checkOffset(offset, byteLength, this.length)
3519 var val = this[offset]
3522 while (++i < byteLength && (mul *=
0x100)) {
3523 val += this[offset + i] * mul
3529 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3531 byteLength = byteLength |
0
3533 checkOffset(offset, byteLength, this.length)
3536 var val = this[offset + --byteLength]
3538 while (byteLength
> 0 && (mul *=
0x100)) {
3539 val += this[offset + --byteLength] * mul
3545 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3546 if (!noAssert) checkOffset(offset,
1, this.length)
3550 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3551 if (!noAssert) checkOffset(offset,
2, this.length)
3552 return this[offset] | (this[offset +
1] <<
8)
3555 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3556 if (!noAssert) checkOffset(offset,
2, this.length)
3557 return (this[offset] <<
8) | this[offset +
1]
3560 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3561 if (!noAssert) checkOffset(offset,
4, this.length)
3563 return ((this[offset]) |
3564 (this[offset +
1] <<
8) |
3565 (this[offset +
2] <<
16)) +
3566 (this[offset +
3] *
0x1000000)
3569 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3570 if (!noAssert) checkOffset(offset,
4, this.length)
3572 return (this[offset] *
0x1000000) +
3573 ((this[offset +
1] <<
16) |
3574 (this[offset +
2] <<
8) |
3578 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3580 byteLength = byteLength |
0
3581 if (!noAssert) checkOffset(offset, byteLength, this.length)
3583 var val = this[offset]
3586 while (++i < byteLength && (mul *=
0x100)) {
3587 val += this[offset + i] * mul
3591 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3596 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3598 byteLength = byteLength |
0
3599 if (!noAssert) checkOffset(offset, byteLength, this.length)
3603 var val = this[offset + --i]
3604 while (i
> 0 && (mul *=
0x100)) {
3605 val += this[offset + --i] * mul
3609 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3614 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3615 if (!noAssert) checkOffset(offset,
1, this.length)
3616 if (!(this[offset] &
0x80)) return (this[offset])
3617 return ((
0xff - this[offset] +
1) * -
1)
3620 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3621 if (!noAssert) checkOffset(offset,
2, this.length)
3622 var val = this[offset] | (this[offset +
1] <<
8)
3623 return (val &
0x8000) ? val |
0xFFFF0000 : val
3626 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3627 if (!noAssert) checkOffset(offset,
2, this.length)
3628 var val = this[offset +
1] | (this[offset] <<
8)
3629 return (val &
0x8000) ? val |
0xFFFF0000 : val
3632 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3633 if (!noAssert) checkOffset(offset,
4, this.length)
3635 return (this[offset]) |
3636 (this[offset +
1] <<
8) |
3637 (this[offset +
2] <<
16) |
3638 (this[offset +
3] <<
24)
3641 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3642 if (!noAssert) checkOffset(offset,
4, this.length)
3644 return (this[offset] <<
24) |
3645 (this[offset +
1] <<
16) |
3646 (this[offset +
2] <<
8) |
3650 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3651 if (!noAssert) checkOffset(offset,
4, this.length)
3652 return ieee754.read(this, offset, true,
23,
4)
3655 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3656 if (!noAssert) checkOffset(offset,
4, this.length)
3657 return ieee754.read(this, offset, false,
23,
4)
3660 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3661 if (!noAssert) checkOffset(offset,
8, this.length)
3662 return ieee754.read(this, offset, true,
52,
8)
3665 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3666 if (!noAssert) checkOffset(offset,
8, this.length)
3667 return ieee754.read(this, offset, false,
52,
8)
3670 function checkInt (buf, value, offset, ext, max, min) {
3671 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3672 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3673 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3676 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3679 byteLength = byteLength |
0
3680 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3684 this[offset] = value &
0xFF
3685 while (++i < byteLength && (mul *=
0x100)) {
3686 this[offset + i] = (value / mul) &
0xFF
3689 return offset + byteLength
3692 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3695 byteLength = byteLength |
0
3696 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3698 var i = byteLength -
1
3700 this[offset + i] = value &
0xFF
3701 while (--i
>=
0 && (mul *=
0x100)) {
3702 this[offset + i] = (value / mul) &
0xFF
3705 return offset + byteLength
3708 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3711 if (!noAssert) checkInt(this, value, offset,
1,
0xff,
0)
3712 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3713 this[offset] = value
3717 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3718 if (value <
0) value =
0xffff + value +
1
3719 for (var i =
0, j = Math.min(buf.length - offset,
2); i < j; i++) {
3720 buf[offset + i] = (value & (
0xff << (
8 * (littleEndian ? i :
1 - i))))
>>>
3721 (littleEndian ? i :
1 - i) *
8
3725 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3728 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3729 if (Buffer.TYPED_ARRAY_SUPPORT) {
3730 this[offset] = value
3731 this[offset +
1] = (value
>>> 8)
3733 objectWriteUInt16(this, value, offset, true)
3738 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3741 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3742 if (Buffer.TYPED_ARRAY_SUPPORT) {
3743 this[offset] = (value
>>> 8)
3744 this[offset +
1] = value
3746 objectWriteUInt16(this, value, offset, false)
3751 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3752 if (value <
0) value =
0xffffffff + value +
1
3753 for (var i =
0, j = Math.min(buf.length - offset,
4); i < j; i++) {
3754 buf[offset + i] = (value
>>> (littleEndian ? i :
3 - i) *
8) &
0xff
3758 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3761 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3762 if (Buffer.TYPED_ARRAY_SUPPORT) {
3763 this[offset +
3] = (value
>>> 24)
3764 this[offset +
2] = (value
>>> 16)
3765 this[offset +
1] = (value
>>> 8)
3766 this[offset] = value
3768 objectWriteUInt32(this, value, offset, true)
3773 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3776 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3777 if (Buffer.TYPED_ARRAY_SUPPORT) {
3778 this[offset] = (value
>>> 24)
3779 this[offset +
1] = (value
>>> 16)
3780 this[offset +
2] = (value
>>> 8)
3781 this[offset +
3] = value
3783 objectWriteUInt32(this, value, offset, false)
3788 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3792 var limit = Math.pow(
2,
8 * byteLength -
1)
3794 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3799 var sub = value <
0 ?
1 :
0
3800 this[offset] = value &
0xFF
3801 while (++i < byteLength && (mul *=
0x100)) {
3802 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3805 return offset + byteLength
3808 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3812 var limit = Math.pow(
2,
8 * byteLength -
1)
3814 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3817 var i = byteLength -
1
3819 var sub = value <
0 ?
1 :
0
3820 this[offset + i] = value &
0xFF
3821 while (--i
>=
0 && (mul *=
0x100)) {
3822 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3825 return offset + byteLength
3828 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3831 if (!noAssert) checkInt(this, value, offset,
1,
0x7f, -
0x80)
3832 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3833 if (value <
0) value =
0xff + value +
1
3834 this[offset] = value
3838 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3841 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3842 if (Buffer.TYPED_ARRAY_SUPPORT) {
3843 this[offset] = value
3844 this[offset +
1] = (value
>>> 8)
3846 objectWriteUInt16(this, value, offset, true)
3851 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3854 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3855 if (Buffer.TYPED_ARRAY_SUPPORT) {
3856 this[offset] = (value
>>> 8)
3857 this[offset +
1] = value
3859 objectWriteUInt16(this, value, offset, false)
3864 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3867 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3868 if (Buffer.TYPED_ARRAY_SUPPORT) {
3869 this[offset] = value
3870 this[offset +
1] = (value
>>> 8)
3871 this[offset +
2] = (value
>>> 16)
3872 this[offset +
3] = (value
>>> 24)
3874 objectWriteUInt32(this, value, offset, true)
3879 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3882 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3883 if (value <
0) value =
0xffffffff + value +
1
3884 if (Buffer.TYPED_ARRAY_SUPPORT) {
3885 this[offset] = (value
>>> 24)
3886 this[offset +
1] = (value
>>> 16)
3887 this[offset +
2] = (value
>>> 8)
3888 this[offset +
3] = value
3890 objectWriteUInt32(this, value, offset, false)
3895 function checkIEEE754 (buf, value, offset, ext, max, min) {
3896 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3897 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3898 if (offset <
0) throw new RangeError('index out of range')
3901 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3903 checkIEEE754(buf, value, offset,
4,
3.4028234663852886e+38, -
3.4028234663852886e+38)
3905 ieee754.write(buf, value, offset, littleEndian,
23,
4)
3909 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3910 return writeFloat(this, value, offset, true, noAssert)
3913 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3914 return writeFloat(this, value, offset, false, noAssert)
3917 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3919 checkIEEE754(buf, value, offset,
8,
1.7976931348623157E+308, -
1.7976931348623157E+308)
3921 ieee754.write(buf, value, offset, littleEndian,
52,
8)
3925 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3926 return writeDouble(this, value, offset, true, noAssert)
3929 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3930 return writeDouble(this, value, offset, false, noAssert)
3933 // copy(targetBuffer, targetStart=
0, sourceStart=
0, sourceEnd=buffer.length)
3934 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3935 if (!start) start =
0
3936 if (!end && end !==
0) end = this.length
3937 if (targetStart
>= target.length) targetStart = target.length
3938 if (!targetStart) targetStart =
0
3939 if (end
> 0 && end < start) end = start
3941 // Copy
0 bytes; we're done
3942 if (end === start) return
0
3943 if (target.length ===
0 || this.length ===
0) return
0
3945 // Fatal error conditions
3946 if (targetStart <
0) {
3947 throw new RangeError('targetStart out of bounds')
3949 if (start <
0 || start
>= this.length) throw new RangeError('sourceStart out of bounds')
3950 if (end <
0) throw new RangeError('sourceEnd out of bounds')
3953 if (end
> this.length) end = this.length
3954 if (target.length - targetStart < end - start) {
3955 end = target.length - targetStart + start
3958 var len = end - start
3961 if (this === target && start < targetStart && targetStart < end) {
3962 // descending copy from end
3963 for (i = len -
1; i
>=
0; i--) {
3964 target[i + targetStart] = this[i + start]
3966 } else if (len <
1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3967 // ascending copy from start
3968 for (i =
0; i < len; i++) {
3969 target[i + targetStart] = this[i + start]
3972 target._set(this.subarray(start, start + len), targetStart)
3978 // fill(value, start=
0, end=buffer.length)
3979 Buffer.prototype.fill = function fill (value, start, end) {
3980 if (!value) value =
0
3981 if (!start) start =
0
3982 if (!end) end = this.length
3984 if (end < start) throw new RangeError('end < start')
3986 // Fill
0 bytes; we're done
3987 if (end === start) return
3988 if (this.length ===
0) return
3990 if (start <
0 || start
>= this.length) throw new RangeError('start out of bounds')
3991 if (end <
0 || end
> this.length) throw new RangeError('end out of bounds')
3994 if (typeof value === 'number') {
3995 for (i = start; i < end; i++) {
3999 var bytes = utf8ToBytes(value.toString())
4000 var len = bytes.length
4001 for (i = start; i < end; i++) {
4002 this[i] = bytes[i % len]
4010 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4011 * Added in Node
0.12. Only available in browsers that support ArrayBuffer.
4013 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4014 if (typeof Uint8Array !== 'undefined') {
4015 if (Buffer.TYPED_ARRAY_SUPPORT) {
4016 return (new Buffer(this)).buffer
4018 var buf = new Uint8Array(this.length)
4019 for (var i =
0, len = buf.length; i < len; i +=
1) {
4025 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4032 var BP = Buffer.prototype
4035 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4037 Buffer._augment = function _augment (arr) {
4038 arr.constructor = Buffer
4039 arr._isBuffer = true
4041 // save reference to original Uint8Array set method before overwriting
4048 arr.write = BP.write
4049 arr.toString = BP.toString
4050 arr.toLocaleString = BP.toString
4051 arr.toJSON = BP.toJSON
4052 arr.equals = BP.equals
4053 arr.compare = BP.compare
4054 arr.indexOf = BP.indexOf
4056 arr.slice = BP.slice
4057 arr.readUIntLE = BP.readUIntLE
4058 arr.readUIntBE = BP.readUIntBE
4059 arr.readUInt8 = BP.readUInt8
4060 arr.readUInt16LE = BP.readUInt16LE
4061 arr.readUInt16BE = BP.readUInt16BE
4062 arr.readUInt32LE = BP.readUInt32LE
4063 arr.readUInt32BE = BP.readUInt32BE
4064 arr.readIntLE = BP.readIntLE
4065 arr.readIntBE = BP.readIntBE
4066 arr.readInt8 = BP.readInt8
4067 arr.readInt16LE = BP.readInt16LE
4068 arr.readInt16BE = BP.readInt16BE
4069 arr.readInt32LE = BP.readInt32LE
4070 arr.readInt32BE = BP.readInt32BE
4071 arr.readFloatLE = BP.readFloatLE
4072 arr.readFloatBE = BP.readFloatBE
4073 arr.readDoubleLE = BP.readDoubleLE
4074 arr.readDoubleBE = BP.readDoubleBE
4075 arr.writeUInt8 = BP.writeUInt8
4076 arr.writeUIntLE = BP.writeUIntLE
4077 arr.writeUIntBE = BP.writeUIntBE
4078 arr.writeUInt16LE = BP.writeUInt16LE
4079 arr.writeUInt16BE = BP.writeUInt16BE
4080 arr.writeUInt32LE = BP.writeUInt32LE
4081 arr.writeUInt32BE = BP.writeUInt32BE
4082 arr.writeIntLE = BP.writeIntLE
4083 arr.writeIntBE = BP.writeIntBE
4084 arr.writeInt8 = BP.writeInt8
4085 arr.writeInt16LE = BP.writeInt16LE
4086 arr.writeInt16BE = BP.writeInt16BE
4087 arr.writeInt32LE = BP.writeInt32LE
4088 arr.writeInt32BE = BP.writeInt32BE
4089 arr.writeFloatLE = BP.writeFloatLE
4090 arr.writeFloatBE = BP.writeFloatBE
4091 arr.writeDoubleLE = BP.writeDoubleLE
4092 arr.writeDoubleBE = BP.writeDoubleBE
4094 arr.inspect = BP.inspect
4095 arr.toArrayBuffer = BP.toArrayBuffer
4100 var INVALID_BASE64_RE = /[^+\/
0-
9A-Za-z-_]/g
4102 function base64clean (str) {
4103 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4104 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4105 // Node converts strings with length <
2 to ''
4106 if (str.length <
2) return ''
4107 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4108 while (str.length %
4 !==
0) {
4114 function stringtrim (str) {
4115 if (str.trim) return str.trim()
4116 return str.replace(/^\s+|\s+$/g, '')
4119 function toHex (n) {
4120 if (n <
16) return '
0' + n.toString(
16)
4121 return n.toString(
16)
4124 function utf8ToBytes (string, units) {
4125 units = units || Infinity
4127 var length = string.length
4128 var leadSurrogate = null
4131 for (var i =
0; i < length; i++) {
4132 codePoint = string.charCodeAt(i)
4134 // is surrogate component
4135 if (codePoint
> 0xD7FF && codePoint <
0xE000) {
4136 // last char was a lead
4137 if (!leadSurrogate) {
4139 if (codePoint
> 0xDBFF) {
4141 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4144 } else if (i +
1 === length) {
4146 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4151 leadSurrogate = codePoint
4157 if (codePoint <
0xDC00) {
4158 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4159 leadSurrogate = codePoint
4163 // valid surrogate pair
4164 codePoint = leadSurrogate -
0xD800 <<
10 | codePoint -
0xDC00 |
0x10000
4166 } else if (leadSurrogate) {
4167 // valid bmp char, but last char was a lead
4168 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4171 leadSurrogate = null
4174 if (codePoint <
0x80) {
4175 if ((units -=
1) <
0) break
4176 bytes.push(codePoint)
4177 } else if (codePoint <
0x800) {
4178 if ((units -=
2) <
0) break
4180 codePoint
>> 0x6 |
0xC0,
4181 codePoint &
0x3F |
0x80
4183 } else if (codePoint <
0x10000) {
4184 if ((units -=
3) <
0) break
4186 codePoint
>> 0xC |
0xE0,
4187 codePoint
>> 0x6 &
0x3F |
0x80,
4188 codePoint &
0x3F |
0x80
4190 } else if (codePoint <
0x110000) {
4191 if ((units -=
4) <
0) break
4193 codePoint
>> 0x12 |
0xF0,
4194 codePoint
>> 0xC &
0x3F |
0x80,
4195 codePoint
>> 0x6 &
0x3F |
0x80,
4196 codePoint &
0x3F |
0x80
4199 throw new Error('Invalid code point')
4206 function asciiToBytes (str) {
4208 for (var i =
0; i < str.length; i++) {
4209 // Node's code seems to be doing this and not &
0x7F..
4210 byteArray.push(str.charCodeAt(i) &
0xFF)
4215 function utf16leToBytes (str, units) {
4218 for (var i =
0; i < str.length; i++) {
4219 if ((units -=
2) <
0) break
4221 c = str.charCodeAt(i)
4231 function base64ToBytes (str) {
4232 return base64.toByteArray(base64clean(str))
4235 function blitBuffer (src, dst, offset, length) {
4236 for (var i =
0; i < length; i++) {
4237 if ((i + offset
>= dst.length) || (i
>= src.length)) break
4238 dst[i + offset] = src[i]
4243 },{"base64-js":
8,"ieee754":
9,"is-array":
10}],
8:[function(require,module,exports){
4244 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4246 ;(function (exports) {
4249 var Arr = (typeof Uint8Array !== 'undefined')
4253 var PLUS = '+'.charCodeAt(
0)
4254 var SLASH = '/'.charCodeAt(
0)
4255 var NUMBER = '
0'.charCodeAt(
0)
4256 var LOWER = 'a'.charCodeAt(
0)
4257 var UPPER = 'A'.charCodeAt(
0)
4258 var PLUS_URL_SAFE = '-'.charCodeAt(
0)
4259 var SLASH_URL_SAFE = '_'.charCodeAt(
0)
4261 function decode (elt) {
4262 var code = elt.charCodeAt(
0)
4263 if (code === PLUS ||
4264 code === PLUS_URL_SAFE)
4266 if (code === SLASH ||
4267 code === SLASH_URL_SAFE)
4270 return -
1 //no match
4271 if (code < NUMBER +
10)
4272 return code - NUMBER +
26 +
26
4273 if (code < UPPER +
26)
4275 if (code < LOWER +
26)
4276 return code - LOWER +
26
4279 function b64ToByteArray (b64) {
4280 var i, j, l, tmp, placeHolders, arr
4282 if (b64.length %
4 > 0) {
4283 throw new Error('Invalid string. Length must be a multiple of
4')
4286 // the number of equal signs (place holders)
4287 // if there are two placeholders, than the two characters before it
4288 // represent one byte
4289 // if there is only one, then the three characters before it represent
2 bytes
4290 // this is just a cheap hack to not do indexOf twice
4291 var len = b64.length
4292 placeHolders = '=' === b64.charAt(len -
2) ?
2 : '=' === b64.charAt(len -
1) ?
1 :
0
4294 // base64 is
4/
3 + up to two characters of the original data
4295 arr = new Arr(b64.length *
3 /
4 - placeHolders)
4297 // if there are placeholders, only get up to the last complete
4 chars
4298 l = placeHolders
> 0 ? b64.length -
4 : b64.length
4306 for (i =
0, j =
0; i < l; i +=
4, j +=
3) {
4307 tmp = (decode(b64.charAt(i)) <<
18) | (decode(b64.charAt(i +
1)) <<
12) | (decode(b64.charAt(i +
2)) <<
6) | decode(b64.charAt(i +
3))
4308 push((tmp &
0xFF0000)
>> 16)
4309 push((tmp &
0xFF00)
>> 8)
4313 if (placeHolders ===
2) {
4314 tmp = (decode(b64.charAt(i)) <<
2) | (decode(b64.charAt(i +
1))
>> 4)
4316 } else if (placeHolders ===
1) {
4317 tmp = (decode(b64.charAt(i)) <<
10) | (decode(b64.charAt(i +
1)) <<
4) | (decode(b64.charAt(i +
2))
>> 2)
4318 push((tmp
>> 8) &
0xFF)
4325 function uint8ToBase64 (uint8) {
4327 extraBytes = uint8.length %
3, // if we have
1 byte left, pad
2 bytes
4331 function encode (num) {
4332 return lookup.charAt(num)
4335 function tripletToBase64 (num) {
4336 return encode(num
>> 18 &
0x3F) + encode(num
>> 12 &
0x3F) + encode(num
>> 6 &
0x3F) + encode(num &
0x3F)
4339 // go through the array every three bytes, we'll deal with trailing stuff later
4340 for (i =
0, length = uint8.length - extraBytes; i < length; i +=
3) {
4341 temp = (uint8[i] <<
16) + (uint8[i +
1] <<
8) + (uint8[i +
2])
4342 output += tripletToBase64(temp)
4345 // pad the end with zeros, but make sure to not forget the extra bytes
4346 switch (extraBytes) {
4348 temp = uint8[uint8.length -
1]
4349 output += encode(temp
>> 2)
4350 output += encode((temp <<
4) &
0x3F)
4354 temp = (uint8[uint8.length -
2] <<
8) + (uint8[uint8.length -
1])
4355 output += encode(temp
>> 10)
4356 output += encode((temp
>> 4) &
0x3F)
4357 output += encode((temp <<
2) &
0x3F)
4365 exports.toByteArray = b64ToByteArray
4366 exports.fromByteArray = uint8ToBase64
4367 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4369 },{}],
9:[function(require,module,exports){
4370 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4372 var eLen = nBytes *
8 - mLen -
1
4373 var eMax = (
1 << eLen) -
1
4374 var eBias = eMax
>> 1
4376 var i = isLE ? (nBytes -
1) :
0
4377 var d = isLE ? -
1 :
1
4378 var s = buffer[offset + i]
4382 e = s & ((
1 << (-nBits)) -
1)
4385 for (; nBits
> 0; e = e *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4387 m = e & ((
1 << (-nBits)) -
1)
4390 for (; nBits
> 0; m = m *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4394 } else if (e === eMax) {
4395 return m ? NaN : ((s ? -
1 :
1) * Infinity)
4397 m = m + Math.pow(
2, mLen)
4400 return (s ? -
1 :
1) * m * Math.pow(
2, e - mLen)
4403 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4405 var eLen = nBytes *
8 - mLen -
1
4406 var eMax = (
1 << eLen) -
1
4407 var eBias = eMax
>> 1
4408 var rt = (mLen ===
23 ? Math.pow(
2, -
24) - Math.pow(
2, -
77) :
0)
4409 var i = isLE ?
0 : (nBytes -
1)
4410 var d = isLE ?
1 : -
1
4411 var s = value <
0 || (value ===
0 &&
1 / value <
0) ?
1 :
0
4413 value = Math.abs(value)
4415 if (isNaN(value) || value === Infinity) {
4416 m = isNaN(value) ?
1 :
0
4419 e = Math.floor(Math.log(value) / Math.LN2)
4420 if (value * (c = Math.pow(
2, -e)) <
1) {
4424 if (e + eBias
>=
1) {
4427 value += rt * Math.pow(
2,
1 - eBias)
4429 if (value * c
>=
2) {
4434 if (e + eBias
>= eMax) {
4437 } else if (e + eBias
>=
1) {
4438 m = (value * c -
1) * Math.pow(
2, mLen)
4441 m = value * Math.pow(
2, eBias -
1) * Math.pow(
2, mLen)
4446 for (; mLen
>=
8; buffer[offset + i] = m &
0xff, i += d, m /=
256, mLen -=
8) {}
4450 for (; eLen
> 0; buffer[offset + i] = e &
0xff, i += d, e /=
256, eLen -=
8) {}
4452 buffer[offset + i - d] |= s *
128
4455 },{}],
10:[function(require,module,exports){
4461 var isArray = Array.isArray;
4467 var str = Object.prototype.toString;
4470 * Whether or not the given `val`
4477 * isArray(arguments);
4482 * @param {mixed} val
4486 module.exports = isArray || function (val) {
4487 return !! val && '[object Array]' == str.call(val);
4490 },{}],
11:[function(require,module,exports){
4491 // Copyright Joyent, Inc. and other Node contributors.
4493 // Permission is hereby granted, free of charge, to any person obtaining a
4494 // copy of this software and associated documentation files (the
4495 // "Software"), to deal in the Software without restriction, including
4496 // without limitation the rights to use, copy, modify, merge, publish,
4497 // distribute, sublicense, and/or sell copies of the Software, and to permit
4498 // persons to whom the Software is furnished to do so, subject to the
4499 // following conditions:
4501 // The above copyright notice and this permission notice shall be included
4502 // in all copies or substantial portions of the Software.
4504 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4505 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4506 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4507 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4508 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4509 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4510 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4512 function EventEmitter() {
4513 this._events = this._events || {};
4514 this._maxListeners = this._maxListeners || undefined;
4516 module.exports = EventEmitter;
4518 // Backwards-compat with node
0.10.x
4519 EventEmitter.EventEmitter = EventEmitter;
4521 EventEmitter.prototype._events = undefined;
4522 EventEmitter.prototype._maxListeners = undefined;
4524 // By default EventEmitters will print a warning if more than
10 listeners are
4525 // added to it. This is a useful default which helps finding memory leaks.
4526 EventEmitter.defaultMaxListeners =
10;
4528 // Obviously not all Emitters should be limited to
10. This function allows
4529 // that to be increased. Set to zero for unlimited.
4530 EventEmitter.prototype.setMaxListeners = function(n) {
4531 if (!isNumber(n) || n <
0 || isNaN(n))
4532 throw TypeError('n must be a positive number');
4533 this._maxListeners = n;
4537 EventEmitter.prototype.emit = function(type) {
4538 var er, handler, len, args, i, listeners;
4543 // If there is no 'error' event listener then throw.
4544 if (type === 'error') {
4545 if (!this._events.error ||
4546 (isObject(this._events.error) && !this._events.error.length)) {
4548 if (er instanceof Error) {
4549 throw er; // Unhandled 'error' event
4551 throw TypeError('Uncaught, unspecified "error" event.');
4555 handler = this._events[type];
4557 if (isUndefined(handler))
4560 if (isFunction(handler)) {
4561 switch (arguments.length) {
4567 handler.call(this, arguments[
1]);
4570 handler.call(this, arguments[
1], arguments[
2]);
4574 len = arguments.length;
4575 args = new Array(len -
1);
4576 for (i =
1; i < len; i++)
4577 args[i -
1] = arguments[i];
4578 handler.apply(this, args);
4580 } else if (isObject(handler)) {
4581 len = arguments.length;
4582 args = new Array(len -
1);
4583 for (i =
1; i < len; i++)
4584 args[i -
1] = arguments[i];
4586 listeners = handler.slice();
4587 len = listeners.length;
4588 for (i =
0; i < len; i++)
4589 listeners[i].apply(this, args);
4595 EventEmitter.prototype.addListener = function(type, listener) {
4598 if (!isFunction(listener))
4599 throw TypeError('listener must be a function');
4604 // To avoid recursion in the case that type === "newListener"! Before
4605 // adding it to the listeners, first emit "newListener".
4606 if (this._events.newListener)
4607 this.emit('newListener', type,
4608 isFunction(listener.listener) ?
4609 listener.listener : listener);
4611 if (!this._events[type])
4612 // Optimize the case of one listener. Don't need the extra array object.
4613 this._events[type] = listener;
4614 else if (isObject(this._events[type]))
4615 // If we've already got an array, just append.
4616 this._events[type].push(listener);
4618 // Adding the second element, need to change to array.
4619 this._events[type] = [this._events[type], listener];
4621 // Check for listener leak
4622 if (isObject(this._events[type]) && !this._events[type].warned) {
4624 if (!isUndefined(this._maxListeners)) {
4625 m = this._maxListeners;
4627 m = EventEmitter.defaultMaxListeners;
4630 if (m && m
> 0 && this._events[type].length
> m) {
4631 this._events[type].warned = true;
4632 console.error('(node) warning: possible EventEmitter memory ' +
4633 'leak detected. %d listeners added. ' +
4634 'Use emitter.setMaxListeners() to increase limit.',
4635 this._events[type].length);
4636 if (typeof console.trace === 'function') {
4637 // not supported in IE
10
4646 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4648 EventEmitter.prototype.once = function(type, listener) {
4649 if (!isFunction(listener))
4650 throw TypeError('listener must be a function');
4655 this.removeListener(type, g);
4659 listener.apply(this, arguments);
4663 g.listener = listener;
4669 // emits a 'removeListener' event iff the listener was removed
4670 EventEmitter.prototype.removeListener = function(type, listener) {
4671 var list, position, length, i;
4673 if (!isFunction(listener))
4674 throw TypeError('listener must be a function');
4676 if (!this._events || !this._events[type])
4679 list = this._events[type];
4680 length = list.length;
4683 if (list === listener ||
4684 (isFunction(list.listener) && list.listener === listener)) {
4685 delete this._events[type];
4686 if (this._events.removeListener)
4687 this.emit('removeListener', type, listener);
4689 } else if (isObject(list)) {
4690 for (i = length; i--
> 0;) {
4691 if (list[i] === listener ||
4692 (list[i].listener && list[i].listener === listener)) {
4701 if (list.length ===
1) {
4703 delete this._events[type];
4705 list.splice(position,
1);
4708 if (this._events.removeListener)
4709 this.emit('removeListener', type, listener);
4715 EventEmitter.prototype.removeAllListeners = function(type) {
4721 // not listening for removeListener, no need to emit
4722 if (!this._events.removeListener) {
4723 if (arguments.length ===
0)
4725 else if (this._events[type])
4726 delete this._events[type];
4730 // emit removeListener for all listeners on all events
4731 if (arguments.length ===
0) {
4732 for (key in this._events) {
4733 if (key === 'removeListener') continue;
4734 this.removeAllListeners(key);
4736 this.removeAllListeners('removeListener');
4741 listeners = this._events[type];
4743 if (isFunction(listeners)) {
4744 this.removeListener(type, listeners);
4747 while (listeners.length)
4748 this.removeListener(type, listeners[listeners.length -
1]);
4750 delete this._events[type];
4755 EventEmitter.prototype.listeners = function(type) {
4757 if (!this._events || !this._events[type])
4759 else if (isFunction(this._events[type]))
4760 ret = [this._events[type]];
4762 ret = this._events[type].slice();
4766 EventEmitter.listenerCount = function(emitter, type) {
4768 if (!emitter._events || !emitter._events[type])
4770 else if (isFunction(emitter._events[type]))
4773 ret = emitter._events[type].length;
4777 function isFunction(arg) {
4778 return typeof arg === 'function';
4781 function isNumber(arg) {
4782 return typeof arg === 'number';
4785 function isObject(arg) {
4786 return typeof arg === 'object' && arg !== null;
4789 function isUndefined(arg) {
4790 return arg === void
0;
4793 },{}],
12:[function(require,module,exports){
4794 if (typeof Object.create === 'function') {
4795 // implementation from standard node.js 'util' module
4796 module.exports = function inherits(ctor, superCtor) {
4797 ctor.super_ = superCtor
4798 ctor.prototype = Object.create(superCtor.prototype, {
4808 // old school shim for old browsers
4809 module.exports = function inherits(ctor, superCtor) {
4810 ctor.super_ = superCtor
4811 var TempCtor = function () {}
4812 TempCtor.prototype = superCtor.prototype
4813 ctor.prototype = new TempCtor()
4814 ctor.prototype.constructor = ctor
4818 },{}],
13:[function(require,module,exports){
4819 module.exports = Array.isArray || function (arr) {
4820 return Object.prototype.toString.call(arr) == '[object Array]';
4823 },{}],
14:[function(require,module,exports){
4824 // shim for using process in browser
4826 var process = module.exports = {};
4828 var draining = false;
4830 var queueIndex = -
1;
4832 function cleanUpNextTick() {
4834 if (currentQueue.length) {
4835 queue = currentQueue.concat(queue);
4844 function drainQueue() {
4848 var timeout = setTimeout(cleanUpNextTick);
4851 var len = queue.length;
4853 currentQueue = queue;
4855 while (++queueIndex < len) {
4856 currentQueue[queueIndex].run();
4861 currentQueue = null;
4863 clearTimeout(timeout);
4866 process.nextTick = function (fun) {
4867 var args = new Array(arguments.length -
1);
4868 if (arguments.length
> 1) {
4869 for (var i =
1; i < arguments.length; i++) {
4870 args[i -
1] = arguments[i];
4873 queue.push(new Item(fun, args));
4874 if (queue.length ===
1 && !draining) {
4875 setTimeout(drainQueue,
0);
4879 // v8 likes predictible objects
4880 function Item(fun, array) {
4884 Item.prototype.run = function () {
4885 this.fun.apply(null, this.array);
4887 process.title = 'browser';
4888 process.browser = true;
4891 process.version = ''; // empty string to avoid regexp issues
4892 process.versions = {};
4897 process.addListener = noop;
4898 process.once = noop;
4900 process.removeListener = noop;
4901 process.removeAllListeners = noop;
4902 process.emit = noop;
4904 process.binding = function (name) {
4905 throw new Error('process.binding is not supported');
4909 process.cwd = function () { return '/' };
4910 process.chdir = function (dir) {
4911 throw new Error('process.chdir is not supported');
4913 process.umask = function() { return
0; };
4915 },{}],
15:[function(require,module,exports){
4916 module.exports = require(
"./lib/_stream_duplex.js")
4918 },{
"./lib/_stream_duplex.js":
16}],
16:[function(require,module,exports){
4919 (function (process){
4920 // Copyright Joyent, Inc. and other Node contributors.
4922 // Permission is hereby granted, free of charge, to any person obtaining a
4923 // copy of this software and associated documentation files (the
4924 //
"Software"), to deal in the Software without restriction, including
4925 // without limitation the rights to use, copy, modify, merge, publish,
4926 // distribute, sublicense, and/or sell copies of the Software, and to permit
4927 // persons to whom the Software is furnished to do so, subject to the
4928 // following conditions:
4930 // The above copyright notice and this permission notice shall be included
4931 // in all copies or substantial portions of the Software.
4933 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4934 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4935 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4936 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4937 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4938 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4939 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4941 // a duplex stream is just a stream that is both readable and writable.
4942 // Since JS doesn't have multiple prototypal inheritance, this class
4943 // prototypally inherits from Readable, and then parasitically from
4946 module.exports = Duplex;
4949 var objectKeys = Object.keys || function (obj) {
4951 for (var key in obj) keys.push(key);
4958 var util = require('core-util-is');
4959 util.inherits = require('inherits');
4962 var Readable = require('./_stream_readable');
4963 var Writable = require('./_stream_writable');
4965 util.inherits(Duplex, Readable);
4967 forEach(objectKeys(Writable.prototype), function(method) {
4968 if (!Duplex.prototype[method])
4969 Duplex.prototype[method] = Writable.prototype[method];
4972 function Duplex(options) {
4973 if (!(this instanceof Duplex))
4974 return new Duplex(options);
4976 Readable.call(this, options);
4977 Writable.call(this, options);
4979 if (options && options.readable === false)
4980 this.readable = false;
4982 if (options && options.writable === false)
4983 this.writable = false;
4985 this.allowHalfOpen = true;
4986 if (options && options.allowHalfOpen === false)
4987 this.allowHalfOpen = false;
4989 this.once('end', onend);
4992 // the no-half-open enforcer
4994 // if we allow half-open state, or if the writable side ended,
4996 if (this.allowHalfOpen || this._writableState.ended)
4999 // no more data can be written.
5000 // But allow more writes to happen in this tick.
5001 process.nextTick(this.end.bind(this));
5004 function forEach (xs, f) {
5005 for (var i =
0, l = xs.length; i < l; i++) {
5010 }).call(this,require('_process'))
5011 },{"./_stream_readable":
18,"./_stream_writable":
20,"_process":
14,"core-util-is":
21,"inherits":
12}],
17:[function(require,module,exports){
5012 // Copyright Joyent, Inc. and other Node contributors.
5014 // Permission is hereby granted, free of charge, to any person obtaining a
5015 // copy of this software and associated documentation files (the
5016 // "Software"), to deal in the Software without restriction, including
5017 // without limitation the rights to use, copy, modify, merge, publish,
5018 // distribute, sublicense, and/or sell copies of the Software, and to permit
5019 // persons to whom the Software is furnished to do so, subject to the
5020 // following conditions:
5022 // The above copyright notice and this permission notice shall be included
5023 // in all copies or substantial portions of the Software.
5025 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5026 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5027 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5028 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5029 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5030 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5031 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5033 // a passthrough stream.
5034 // basically just the most minimal sort of Transform stream.
5035 // Every written chunk gets output as-is.
5037 module.exports = PassThrough;
5039 var Transform = require('./_stream_transform');
5042 var util = require('core-util-is');
5043 util.inherits = require('inherits');
5046 util.inherits(PassThrough, Transform);
5048 function PassThrough(options) {
5049 if (!(this instanceof PassThrough))
5050 return new PassThrough(options);
5052 Transform.call(this, options);
5055 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5059 },{"./_stream_transform":
19,"core-util-is":
21,"inherits":
12}],
18:[function(require,module,exports){
5060 (function (process){
5061 // Copyright Joyent, Inc. and other Node contributors.
5063 // Permission is hereby granted, free of charge, to any person obtaining a
5064 // copy of this software and associated documentation files (the
5065 // "Software"), to deal in the Software without restriction, including
5066 // without limitation the rights to use, copy, modify, merge, publish,
5067 // distribute, sublicense, and/or sell copies of the Software, and to permit
5068 // persons to whom the Software is furnished to do so, subject to the
5069 // following conditions:
5071 // The above copyright notice and this permission notice shall be included
5072 // in all copies or substantial portions of the Software.
5074 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5075 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5076 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5077 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5078 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5079 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5080 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5082 module.exports = Readable;
5085 var isArray = require('isarray');
5090 var Buffer = require('buffer').Buffer;
5093 Readable.ReadableState = ReadableState;
5095 var EE = require('events').EventEmitter;
5098 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5099 return emitter.listeners(type).length;
5103 var Stream = require('stream');
5106 var util = require('core-util-is');
5107 util.inherits = require('inherits');
5114 var debug = require('util');
5115 if (debug && debug.debuglog) {
5116 debug = debug.debuglog('stream');
5118 debug = function () {};
5123 util.inherits(Readable, Stream);
5125 function ReadableState(options, stream) {
5126 var Duplex = require('./_stream_duplex');
5128 options = options || {};
5130 // the point at which it stops calling _read() to fill the buffer
5131 // Note:
0 is a valid value, means "don't call _read preemptively ever"
5132 var hwm = options.highWaterMark;
5133 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
5134 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
5137 this.highWaterMark = ~~this.highWaterMark;
5142 this.pipesCount =
0;
5143 this.flowing = null;
5145 this.endEmitted = false;
5146 this.reading = false;
5148 // a flag to be able to tell if the onwrite cb is called immediately,
5149 // or on a later tick. We set this to true at first, because any
5150 // actions that shouldn't happen until "later" should generally also
5151 // not happen before the first write call.
5154 // whenever we return null, then we set a flag to say
5155 // that we're awaiting a 'readable' event emission.
5156 this.needReadable = false;
5157 this.emittedReadable = false;
5158 this.readableListening = false;
5161 // object stream flag. Used to make read(n) ignore n and to
5162 // make all the buffer merging and length checks go away
5163 this.objectMode = !!options.objectMode;
5165 if (stream instanceof Duplex)
5166 this.objectMode = this.objectMode || !!options.readableObjectMode;
5168 // Crypto is kind of old and crusty. Historically, its default string
5169 // encoding is 'binary' so we have to make this configurable.
5170 // Everything else in the universe uses 'utf8', though.
5171 this.defaultEncoding = options.defaultEncoding || 'utf8';
5173 // when piping, we only care about 'readable' events that happen
5174 // after read()ing all the bytes and not getting any pushback.
5175 this.ranOut = false;
5177 // the number of writers that are awaiting a drain event in .pipe()s
5178 this.awaitDrain =
0;
5180 // if true, a maybeReadMore has been scheduled
5181 this.readingMore = false;
5183 this.decoder = null;
5184 this.encoding = null;
5185 if (options.encoding) {
5187 StringDecoder = require('string_decoder/').StringDecoder;
5188 this.decoder = new StringDecoder(options.encoding);
5189 this.encoding = options.encoding;
5193 function Readable(options) {
5194 var Duplex = require('./_stream_duplex');
5196 if (!(this instanceof Readable))
5197 return new Readable(options);
5199 this._readableState = new ReadableState(options, this);
5202 this.readable = true;
5207 // Manually shove something into the read() buffer.
5208 // This returns true if the highWaterMark has not been hit yet,
5209 // similar to how Writable.write() returns true if you should
5210 // write() some more.
5211 Readable.prototype.push = function(chunk, encoding) {
5212 var state = this._readableState;
5214 if (util.isString(chunk) && !state.objectMode) {
5215 encoding = encoding || state.defaultEncoding;
5216 if (encoding !== state.encoding) {
5217 chunk = new Buffer(chunk, encoding);
5222 return readableAddChunk(this, state, chunk, encoding, false);
5225 // Unshift should *always* be something directly out of read()
5226 Readable.prototype.unshift = function(chunk) {
5227 var state = this._readableState;
5228 return readableAddChunk(this, state, chunk, '', true);
5231 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5232 var er = chunkInvalid(state, chunk);
5234 stream.emit('error', er);
5235 } else if (util.isNullOrUndefined(chunk)) {
5236 state.reading = false;
5238 onEofChunk(stream, state);
5239 } else if (state.objectMode || chunk && chunk.length
> 0) {
5240 if (state.ended && !addToFront) {
5241 var e = new Error('stream.push() after EOF');
5242 stream.emit('error', e);
5243 } else if (state.endEmitted && addToFront) {
5244 var e = new Error('stream.unshift() after end event');
5245 stream.emit('error', e);
5247 if (state.decoder && !addToFront && !encoding)
5248 chunk = state.decoder.write(chunk);
5251 state.reading = false;
5253 // if we want the data now, just emit it.
5254 if (state.flowing && state.length ===
0 && !state.sync) {
5255 stream.emit('data', chunk);
5258 // update the buffer info.
5259 state.length += state.objectMode ?
1 : chunk.length;
5261 state.buffer.unshift(chunk);
5263 state.buffer.push(chunk);
5265 if (state.needReadable)
5266 emitReadable(stream);
5269 maybeReadMore(stream, state);
5271 } else if (!addToFront) {
5272 state.reading = false;
5275 return needMoreData(state);
5280 // if it's past the high water mark, we can push in some more.
5281 // Also, if we have no data yet, we can stand some
5282 // more bytes. This is to work around cases where hwm=
0,
5283 // such as the repl. Also, if the push() triggered a
5284 // readable event, and the user called read(largeNumber) such that
5285 // needReadable was set, then we ought to push more, so that another
5286 // 'readable' event will be triggered.
5287 function needMoreData(state) {
5288 return !state.ended &&
5289 (state.needReadable ||
5290 state.length < state.highWaterMark ||
5291 state.length ===
0);
5294 // backwards compatibility.
5295 Readable.prototype.setEncoding = function(enc) {
5297 StringDecoder = require('string_decoder/').StringDecoder;
5298 this._readableState.decoder = new StringDecoder(enc);
5299 this._readableState.encoding = enc;
5303 // Don't raise the hwm
> 128MB
5304 var MAX_HWM =
0x800000;
5305 function roundUpToNextPowerOf2(n) {
5309 // Get the next highest power of
2
5311 for (var p =
1; p <
32; p <<=
1) n |= n
>> p;
5317 function howMuchToRead(n, state) {
5318 if (state.length ===
0 && state.ended)
5321 if (state.objectMode)
5322 return n ===
0 ?
0 :
1;
5324 if (isNaN(n) || util.isNull(n)) {
5325 // only flow one buffer at a time
5326 if (state.flowing && state.buffer.length)
5327 return state.buffer[
0].length;
5329 return state.length;
5335 // If we're asking for more than the target buffer level,
5336 // then raise the water mark. Bump up to the next highest
5337 // power of
2, to prevent increasing it excessively in tiny
5339 if (n
> state.highWaterMark)
5340 state.highWaterMark = roundUpToNextPowerOf2(n);
5342 // don't have that much. return null, unless we've ended.
5343 if (n
> state.length) {
5345 state.needReadable = true;
5348 return state.length;
5354 // you can override either this method, or the async _read(n) below.
5355 Readable.prototype.read = function(n) {
5357 var state = this._readableState;
5360 if (!util.isNumber(n) || n
> 0)
5361 state.emittedReadable = false;
5363 // if we're doing read(
0) to trigger a readable event, but we
5364 // already have a bunch of data in the buffer, then just trigger
5365 // the 'readable' event and move on.
5367 state.needReadable &&
5368 (state.length
>= state.highWaterMark || state.ended)) {
5369 debug('read: emitReadable', state.length, state.ended);
5370 if (state.length ===
0 && state.ended)
5377 n = howMuchToRead(n, state);
5379 // if we've ended, and we're now clear, then finish it up.
5380 if (n ===
0 && state.ended) {
5381 if (state.length ===
0)
5386 // All the actual chunk generation logic needs to be
5387 // *below* the call to _read. The reason is that in certain
5388 // synthetic stream cases, such as passthrough streams, _read
5389 // may be a completely synchronous operation which may change
5390 // the state of the read buffer, providing enough data when
5391 // before there was *not* enough.
5393 // So, the steps are:
5394 //
1. Figure out what the state of things will be after we do
5395 // a read from the buffer.
5397 //
2. If that resulting state will trigger a _read, then call _read.
5398 // Note that this may be asynchronous, or synchronous. Yes, it is
5399 // deeply ugly to write APIs this way, but that still doesn't mean
5400 // that the Readable class should behave improperly, as streams are
5401 // designed to be sync/async agnostic.
5402 // Take note if the _read call is sync or async (ie, if the read call
5403 // has returned yet), so that we know whether or not it's safe to emit
5406 //
3. Actually pull the requested chunks out of the buffer and return.
5408 // if we need a readable event, then we need to do some reading.
5409 var doRead = state.needReadable;
5410 debug('need readable', doRead);
5412 // if we currently have less than the highWaterMark, then also read some
5413 if (state.length ===
0 || state.length - n < state.highWaterMark) {
5415 debug('length less than watermark', doRead);
5418 // however, if we've ended, then there's no point, and if we're already
5419 // reading, then it's unnecessary.
5420 if (state.ended || state.reading) {
5422 debug('reading or ended', doRead);
5427 state.reading = true;
5429 // if the length is currently zero, then we *need* a readable event.
5430 if (state.length ===
0)
5431 state.needReadable = true;
5432 // call internal read method
5433 this._read(state.highWaterMark);
5437 // If _read pushed data synchronously, then `reading` will be false,
5438 // and we need to re-evaluate how much data we can return to the user.
5439 if (doRead && !state.reading)
5440 n = howMuchToRead(nOrig, state);
5444 ret = fromList(n, state);
5448 if (util.isNull(ret)) {
5449 state.needReadable = true;
5455 // If we have nothing in the buffer, then we want to know
5456 // as soon as we *do* get something into the buffer.
5457 if (state.length ===
0 && !state.ended)
5458 state.needReadable = true;
5460 // If we tried to read() past the EOF, then emit end on the next tick.
5461 if (nOrig !== n && state.ended && state.length ===
0)
5464 if (!util.isNull(ret))
5465 this.emit('data', ret);
5470 function chunkInvalid(state, chunk) {
5472 if (!util.isBuffer(chunk) &&
5473 !util.isString(chunk) &&
5474 !util.isNullOrUndefined(chunk) &&
5475 !state.objectMode) {
5476 er = new TypeError('Invalid non-string/buffer chunk');
5482 function onEofChunk(stream, state) {
5483 if (state.decoder && !state.ended) {
5484 var chunk = state.decoder.end();
5485 if (chunk && chunk.length) {
5486 state.buffer.push(chunk);
5487 state.length += state.objectMode ?
1 : chunk.length;
5492 // emit 'readable' now to make sure it gets picked up.
5493 emitReadable(stream);
5496 // Don't emit readable right away in sync mode, because this can trigger
5497 // another read() call =
> stack overflow. This way, it might trigger
5498 // a nextTick recursion warning, but that's not so bad.
5499 function emitReadable(stream) {
5500 var state = stream._readableState;
5501 state.needReadable = false;
5502 if (!state.emittedReadable) {
5503 debug('emitReadable', state.flowing);
5504 state.emittedReadable = true;
5506 process.nextTick(function() {
5507 emitReadable_(stream);
5510 emitReadable_(stream);
5514 function emitReadable_(stream) {
5515 debug('emit readable');
5516 stream.emit('readable');
5521 // at this point, the user has presumably seen the 'readable' event,
5522 // and called read() to consume some data. that may have triggered
5523 // in turn another _read(n) call, in which case reading = true if
5524 // it's in progress.
5525 // However, if we're not ended, or reading, and the length < hwm,
5526 // then go ahead and try to read some more preemptively.
5527 function maybeReadMore(stream, state) {
5528 if (!state.readingMore) {
5529 state.readingMore = true;
5530 process.nextTick(function() {
5531 maybeReadMore_(stream, state);
5536 function maybeReadMore_(stream, state) {
5537 var len = state.length;
5538 while (!state.reading && !state.flowing && !state.ended &&
5539 state.length < state.highWaterMark) {
5540 debug('maybeReadMore read
0');
5542 if (len === state.length)
5543 // didn't get any data, stop spinning.
5548 state.readingMore = false;
5551 // abstract method. to be overridden in specific implementation classes.
5552 // call cb(er, data) where data is <= n in length.
5553 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5554 // arbitrary, and perhaps not very meaningful.
5555 Readable.prototype._read = function(n) {
5556 this.emit('error', new Error('not implemented'));
5559 Readable.prototype.pipe = function(dest, pipeOpts) {
5561 var state = this._readableState;
5563 switch (state.pipesCount) {
5568 state.pipes = [state.pipes, dest];
5571 state.pipes.push(dest);
5574 state.pipesCount +=
1;
5575 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5577 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5578 dest !== process.stdout &&
5579 dest !== process.stderr;
5581 var endFn = doEnd ? onend : cleanup;
5582 if (state.endEmitted)
5583 process.nextTick(endFn);
5585 src.once('end', endFn);
5587 dest.on('unpipe', onunpipe);
5588 function onunpipe(readable) {
5590 if (readable === src) {
5600 // when the dest drains, it reduces the awaitDrain counter
5601 // on the source. This would be more elegant with a .once()
5602 // handler in flow(), but adding and removing repeatedly is
5604 var ondrain = pipeOnDrain(src);
5605 dest.on('drain', ondrain);
5607 function cleanup() {
5609 // cleanup event handlers once the pipe is broken
5610 dest.removeListener('close', onclose);
5611 dest.removeListener('finish', onfinish);
5612 dest.removeListener('drain', ondrain);
5613 dest.removeListener('error', onerror);
5614 dest.removeListener('unpipe', onunpipe);
5615 src.removeListener('end', onend);
5616 src.removeListener('end', cleanup);
5617 src.removeListener('data', ondata);
5619 // if the reader is waiting for a drain event from this
5620 // specific writer, then it would cause it to never start
5622 // So, if this is awaiting a drain, then we just call it now.
5623 // If we don't know, then assume that we are waiting for one.
5624 if (state.awaitDrain &&
5625 (!dest._writableState || dest._writableState.needDrain))
5629 src.on('data', ondata);
5630 function ondata(chunk) {
5632 var ret = dest.write(chunk);
5633 if (false === ret) {
5634 debug('false write response, pause',
5635 src._readableState.awaitDrain);
5636 src._readableState.awaitDrain++;
5641 // if the dest has an error, then stop piping into it.
5642 // however, don't suppress the throwing behavior for this.
5643 function onerror(er) {
5644 debug('onerror', er);
5646 dest.removeListener('error', onerror);
5647 if (EE.listenerCount(dest, 'error') ===
0)
5648 dest.emit('error', er);
5650 // This is a brutally ugly hack to make sure that our error handler
5651 // is attached before any userland ones. NEVER DO THIS.
5652 if (!dest._events || !dest._events.error)
5653 dest.on('error', onerror);
5654 else if (isArray(dest._events.error))
5655 dest._events.error.unshift(onerror);
5657 dest._events.error = [onerror, dest._events.error];
5661 // Both close and finish should trigger unpipe, but only once.
5662 function onclose() {
5663 dest.removeListener('finish', onfinish);
5666 dest.once('close', onclose);
5667 function onfinish() {
5669 dest.removeListener('close', onclose);
5672 dest.once('finish', onfinish);
5679 // tell the dest that it's being piped to
5680 dest.emit('pipe', src);
5682 // start the flow if it hasn't been started already.
5683 if (!state.flowing) {
5684 debug('pipe resume');
5691 function pipeOnDrain(src) {
5693 var state = src._readableState;
5694 debug('pipeOnDrain', state.awaitDrain);
5695 if (state.awaitDrain)
5697 if (state.awaitDrain ===
0 && EE.listenerCount(src, 'data')) {
5698 state.flowing = true;
5705 Readable.prototype.unpipe = function(dest) {
5706 var state = this._readableState;
5708 // if we're not piping anywhere, then do nothing.
5709 if (state.pipesCount ===
0)
5712 // just one destination. most common case.
5713 if (state.pipesCount ===
1) {
5714 // passed in one, but it's not the right one.
5715 if (dest && dest !== state.pipes)
5723 state.pipesCount =
0;
5724 state.flowing = false;
5726 dest.emit('unpipe', this);
5730 // slow case. multiple pipe destinations.
5734 var dests = state.pipes;
5735 var len = state.pipesCount;
5737 state.pipesCount =
0;
5738 state.flowing = false;
5740 for (var i =
0; i < len; i++)
5741 dests[i].emit('unpipe', this);
5745 // try to find the right one.
5746 var i = indexOf(state.pipes, dest);
5750 state.pipes.splice(i,
1);
5751 state.pipesCount -=
1;
5752 if (state.pipesCount ===
1)
5753 state.pipes = state.pipes[
0];
5755 dest.emit('unpipe', this);
5760 // set up data events if they are asked for
5761 // Ensure readable listeners eventually get something
5762 Readable.prototype.on = function(ev, fn) {
5763 var res = Stream.prototype.on.call(this, ev, fn);
5765 // If listening to data, and it has not explicitly been paused,
5766 // then call resume to start the flow of data on the next tick.
5767 if (ev === 'data' && false !== this._readableState.flowing) {
5771 if (ev === 'readable' && this.readable) {
5772 var state = this._readableState;
5773 if (!state.readableListening) {
5774 state.readableListening = true;
5775 state.emittedReadable = false;
5776 state.needReadable = true;
5777 if (!state.reading) {
5779 process.nextTick(function() {
5780 debug('readable nexttick read
0');
5783 } else if (state.length) {
5784 emitReadable(this, state);
5791 Readable.prototype.addListener = Readable.prototype.on;
5793 // pause() and resume() are remnants of the legacy readable stream API
5794 // If the user uses them, then switch into old mode.
5795 Readable.prototype.resume = function() {
5796 var state = this._readableState;
5797 if (!state.flowing) {
5799 state.flowing = true;
5800 if (!state.reading) {
5801 debug('resume read
0');
5804 resume(this, state);
5809 function resume(stream, state) {
5810 if (!state.resumeScheduled) {
5811 state.resumeScheduled = true;
5812 process.nextTick(function() {
5813 resume_(stream, state);
5818 function resume_(stream, state) {
5819 state.resumeScheduled = false;
5820 stream.emit('resume');
5822 if (state.flowing && !state.reading)
5826 Readable.prototype.pause = function() {
5827 debug('call pause flowing=%j', this._readableState.flowing);
5828 if (false !== this._readableState.flowing) {
5830 this._readableState.flowing = false;
5836 function flow(stream) {
5837 var state = stream._readableState;
5838 debug('flow', state.flowing);
5839 if (state.flowing) {
5841 var chunk = stream.read();
5842 } while (null !== chunk && state.flowing);
5846 // wrap an old-style stream as the async data source.
5847 // This is *not* part of the readable stream interface.
5848 // It is an ugly unfortunate mess of history.
5849 Readable.prototype.wrap = function(stream) {
5850 var state = this._readableState;
5854 stream.on('end', function() {
5855 debug('wrapped end');
5856 if (state.decoder && !state.ended) {
5857 var chunk = state.decoder.end();
5858 if (chunk && chunk.length)
5865 stream.on('data', function(chunk) {
5866 debug('wrapped data');
5868 chunk = state.decoder.write(chunk);
5869 if (!chunk || !state.objectMode && !chunk.length)
5872 var ret = self.push(chunk);
5879 // proxy all the other methods.
5880 // important when wrapping filters and duplexes.
5881 for (var i in stream) {
5882 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5883 this[i] = function(method) { return function() {
5884 return stream[method].apply(stream, arguments);
5889 // proxy certain important events.
5890 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5891 forEach(events, function(ev) {
5892 stream.on(ev, self.emit.bind(self, ev));
5895 // when we try to consume some more bytes, simply unpause the
5896 // underlying stream.
5897 self._read = function(n) {
5898 debug('wrapped _read', n);
5910 // exposed for testing purposes only.
5911 Readable._fromList = fromList;
5913 // Pluck off n bytes from an array of buffers.
5914 // Length is the combined lengths of all the buffers in the list.
5915 function fromList(n, state) {
5916 var list = state.buffer;
5917 var length = state.length;
5918 var stringMode = !!state.decoder;
5919 var objectMode = !!state.objectMode;
5922 // nothing in the list, definitely empty.
5923 if (list.length ===
0)
5928 else if (objectMode)
5930 else if (!n || n
>= length) {
5931 // read it all, truncate the array.
5933 ret = list.join('');
5935 ret = Buffer.concat(list, length);
5938 // read just some of it.
5939 if (n < list[
0].length) {
5940 // just take a part of the first list item.
5941 // slice is the same for buffers and strings.
5943 ret = buf.slice(
0, n);
5944 list[
0] = buf.slice(n);
5945 } else if (n === list[
0].length) {
5946 // first list is a perfect match
5950 // we have enough to cover it, but it spans past the first buffer.
5954 ret = new Buffer(n);
5957 for (var i =
0, l = list.length; i < l && c < n; i++) {
5959 var cpy = Math.min(n - c, buf.length);
5962 ret += buf.slice(
0, cpy);
5964 buf.copy(ret, c,
0, cpy);
5966 if (cpy < buf.length)
5967 list[
0] = buf.slice(cpy);
5979 function endReadable(stream) {
5980 var state = stream._readableState;
5982 // If we get here before consuming all the bytes, then that is a
5983 // bug in node. Should never happen.
5984 if (state.length
> 0)
5985 throw new Error('endReadable called on non-empty stream');
5987 if (!state.endEmitted) {
5989 process.nextTick(function() {
5990 // Check that we didn't get one last unshift.
5991 if (!state.endEmitted && state.length ===
0) {
5992 state.endEmitted = true;
5993 stream.readable = false;
6000 function forEach (xs, f) {
6001 for (var i =
0, l = xs.length; i < l; i++) {
6006 function indexOf (xs, x) {
6007 for (var i =
0, l = xs.length; i < l; i++) {
6008 if (xs[i] === x) return i;
6013 }).call(this,require('_process'))
6014 },{
"./_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){
6015 // Copyright Joyent, Inc. and other Node contributors.
6017 // Permission is hereby granted, free of charge, to any person obtaining a
6018 // copy of this software and associated documentation files (the
6019 //
"Software"), to deal in the Software without restriction, including
6020 // without limitation the rights to use, copy, modify, merge, publish,
6021 // distribute, sublicense, and/or sell copies of the Software, and to permit
6022 // persons to whom the Software is furnished to do so, subject to the
6023 // following conditions:
6025 // The above copyright notice and this permission notice shall be included
6026 // in all copies or substantial portions of the Software.
6028 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6029 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6030 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6031 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6032 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6033 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6034 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6037 // a transform stream is a readable/writable stream where you do
6038 // something with the data. Sometimes it's called a
"filter",
6039 // but that's not a great name for it, since that implies a thing where
6040 // some bits pass through, and others are simply ignored. (That would
6041 // be a valid example of a transform, of course.)
6043 // While the output is causally related to the input, it's not a
6044 // necessarily symmetric or synchronous transformation. For example,
6045 // a zlib stream might take multiple plain-text writes(), and then
6046 // emit a single compressed chunk some time in the future.
6048 // Here's how this works:
6050 // The Transform stream has all the aspects of the readable and writable
6051 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6052 // internally, and returns false if there's a lot of pending writes
6053 // buffered up. When you call read(), that calls _read(n) until
6054 // there's enough pending readable data buffered up.
6056 // In a transform stream, the written data is placed in a buffer. When
6057 // _read(n) is called, it transforms the queued up data, calling the
6058 // buffered _write cb's as it consumes chunks. If consuming a single
6059 // written chunk would result in multiple output chunks, then the first
6060 // outputted bit calls the readcb, and subsequent chunks just go into
6061 // the read buffer, and will cause it to emit 'readable' if necessary.
6063 // This way, back-pressure is actually determined by the reading side,
6064 // since _read has to be called to start processing a new chunk. However,
6065 // a pathological inflate type of transform can cause excessive buffering
6066 // here. For example, imagine a stream where every byte of input is
6067 // interpreted as an integer from
0-
255, and then results in that many
6068 // bytes of output. Writing the
4 bytes {ff,ff,ff,ff} would result in
6069 //
1kb of data being output. In this case, you could write a very small
6070 // amount of input, and end up with a very large amount of output. In
6071 // such a pathological inflating mechanism, there'd be no way to tell
6072 // the system to stop doing the transform. A single
4MB write could
6073 // cause the system to run out of memory.
6075 // However, even in such a pathological case, only a single written chunk
6076 // would be consumed, and then the rest would wait (un-transformed) until
6077 // the results of the previous transformed chunk were consumed.
6079 module.exports = Transform;
6081 var Duplex = require('./_stream_duplex');
6084 var util = require('core-util-is');
6085 util.inherits = require('inherits');
6088 util.inherits(Transform, Duplex);
6091 function TransformState(options, stream) {
6092 this.afterTransform = function(er, data) {
6093 return afterTransform(stream, er, data);
6096 this.needTransform = false;
6097 this.transforming = false;
6098 this.writecb = null;
6099 this.writechunk = null;
6102 function afterTransform(stream, er, data) {
6103 var ts = stream._transformState;
6104 ts.transforming = false;
6106 var cb = ts.writecb;
6109 return stream.emit('error', new Error('no writecb in Transform class'));
6111 ts.writechunk = null;
6114 if (!util.isNullOrUndefined(data))
6120 var rs = stream._readableState;
6122 if (rs.needReadable || rs.length < rs.highWaterMark) {
6123 stream._read(rs.highWaterMark);
6128 function Transform(options) {
6129 if (!(this instanceof Transform))
6130 return new Transform(options);
6132 Duplex.call(this, options);
6134 this._transformState = new TransformState(options, this);
6136 // when the writable side finishes, then flush out anything remaining.
6139 // start out asking for a readable event once data is transformed.
6140 this._readableState.needReadable = true;
6142 // we have implemented the _read method, and done the other things
6143 // that Readable wants before the first _read call, so unset the
6145 this._readableState.sync = false;
6147 this.once('prefinish', function() {
6148 if (util.isFunction(this._flush))
6149 this._flush(function(er) {
6157 Transform.prototype.push = function(chunk, encoding) {
6158 this._transformState.needTransform = false;
6159 return Duplex.prototype.push.call(this, chunk, encoding);
6162 // This is the part where you do stuff!
6163 // override this function in implementation classes.
6164 // 'chunk' is an input chunk.
6166 // Call `push(newChunk)` to pass along transformed output
6167 // to the readable side. You may call 'push' zero or more times.
6169 // Call `cb(err)` when you are done with this chunk. If you pass
6170 // an error, then that'll put the hurt on the whole operation. If you
6171 // never call cb(), then you'll never get another chunk.
6172 Transform.prototype._transform = function(chunk, encoding, cb) {
6173 throw new Error('not implemented');
6176 Transform.prototype._write = function(chunk, encoding, cb) {
6177 var ts = this._transformState;
6179 ts.writechunk = chunk;
6180 ts.writeencoding = encoding;
6181 if (!ts.transforming) {
6182 var rs = this._readableState;
6183 if (ts.needTransform ||
6185 rs.length < rs.highWaterMark)
6186 this._read(rs.highWaterMark);
6190 // Doesn't matter what the args are here.
6191 // _transform does all the work.
6192 // That we got here means that the readable side wants more data.
6193 Transform.prototype._read = function(n) {
6194 var ts = this._transformState;
6196 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6197 ts.transforming = true;
6198 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6200 // mark that we need a transform, so that any data that comes in
6201 // will get processed, now that we've asked for it.
6202 ts.needTransform = true;
6207 function done(stream, er) {
6209 return stream.emit('error', er);
6211 // if there's nothing in the write buffer, then that means
6212 // that nothing more will ever be provided
6213 var ws = stream._writableState;
6214 var ts = stream._transformState;
6217 throw new Error('calling transform done when ws.length !=
0');
6219 if (ts.transforming)
6220 throw new Error('calling transform done when still transforming');
6222 return stream.push(null);
6225 },{"./_stream_duplex":
16,"core-util-is":
21,"inherits":
12}],
20:[function(require,module,exports){
6226 (function (process){
6227 // Copyright Joyent, Inc. and other Node contributors.
6229 // Permission is hereby granted, free of charge, to any person obtaining a
6230 // copy of this software and associated documentation files (the
6231 // "Software"), to deal in the Software without restriction, including
6232 // without limitation the rights to use, copy, modify, merge, publish,
6233 // distribute, sublicense, and/or sell copies of the Software, and to permit
6234 // persons to whom the Software is furnished to do so, subject to the
6235 // following conditions:
6237 // The above copyright notice and this permission notice shall be included
6238 // in all copies or substantial portions of the Software.
6240 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6241 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6242 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6243 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6244 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6245 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6246 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6248 // A bit simpler than readable streams.
6249 // Implement an async ._write(chunk, cb), and it'll handle all
6250 // the drain event emission and buffering.
6252 module.exports = Writable;
6255 var Buffer = require('buffer').Buffer;
6258 Writable.WritableState = WritableState;
6262 var util = require('core-util-is');
6263 util.inherits = require('inherits');
6266 var Stream = require('stream');
6268 util.inherits(Writable, Stream);
6270 function WriteReq(chunk, encoding, cb) {
6272 this.encoding = encoding;
6276 function WritableState(options, stream) {
6277 var Duplex = require('./_stream_duplex');
6279 options = options || {};
6281 // the point at which write() starts returning false
6282 // Note:
0 is a valid value, means that we always return false if
6283 // the entire buffer is not flushed immediately on write()
6284 var hwm = options.highWaterMark;
6285 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
6286 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
6288 // object stream flag to indicate whether or not this stream
6289 // contains buffers or objects.
6290 this.objectMode = !!options.objectMode;
6292 if (stream instanceof Duplex)
6293 this.objectMode = this.objectMode || !!options.writableObjectMode;
6296 this.highWaterMark = ~~this.highWaterMark;
6298 this.needDrain = false;
6299 // at the start of calling end()
6300 this.ending = false;
6301 // when end() has been called, and returned
6303 // when 'finish' is emitted
6304 this.finished = false;
6306 // should we decode strings into buffers before passing to _write?
6307 // this is here so that some node-core streams can optimize string
6308 // handling at a lower level.
6309 var noDecode = options.decodeStrings === false;
6310 this.decodeStrings = !noDecode;
6312 // Crypto is kind of old and crusty. Historically, its default string
6313 // encoding is 'binary' so we have to make this configurable.
6314 // Everything else in the universe uses 'utf8', though.
6315 this.defaultEncoding = options.defaultEncoding || 'utf8';
6317 // not an actual buffer we keep track of, but a measurement
6318 // of how much we're waiting to get pushed to some underlying
6322 // a flag to see when we're in the middle of a write.
6323 this.writing = false;
6325 // when true all writes will be buffered until .uncork() call
6328 // a flag to be able to tell if the onwrite cb is called immediately,
6329 // or on a later tick. We set this to true at first, because any
6330 // actions that shouldn't happen until "later" should generally also
6331 // not happen before the first write call.
6334 // a flag to know if we're processing previously buffered items, which
6335 // may call the _write() callback in the same tick, so that we don't
6336 // end up in an overlapped onwrite situation.
6337 this.bufferProcessing = false;
6339 // the callback that's passed to _write(chunk,cb)
6340 this.onwrite = function(er) {
6341 onwrite(stream, er);
6344 // the callback that the user supplies to write(chunk,encoding,cb)
6345 this.writecb = null;
6347 // the amount that is being written when _write is called.
6352 // number of pending user-supplied write callbacks
6353 // this must be
0 before 'finish' can be emitted
6356 // emit prefinish if the only thing we're waiting for is _write cbs
6357 // This is relevant for synchronous Transform streams
6358 this.prefinished = false;
6360 // True if the error was already emitted and should not be thrown again
6361 this.errorEmitted = false;
6364 function Writable(options) {
6365 var Duplex = require('./_stream_duplex');
6367 // Writable ctor is applied to Duplexes, though they're not
6368 // instanceof Writable, they're instanceof Readable.
6369 if (!(this instanceof Writable) && !(this instanceof Duplex))
6370 return new Writable(options);
6372 this._writableState = new WritableState(options, this);
6375 this.writable = true;
6380 // Otherwise people can pipe Writable streams, which is just wrong.
6381 Writable.prototype.pipe = function() {
6382 this.emit('error', new Error('Cannot pipe. Not readable.'));
6386 function writeAfterEnd(stream, state, cb) {
6387 var er = new Error('write after end');
6388 // TODO: defer error events consistently everywhere, not just the cb
6389 stream.emit('error', er);
6390 process.nextTick(function() {
6395 // If we get something that is not a buffer, string, null, or undefined,
6396 // and we're not in objectMode, then that's an error.
6397 // Otherwise stream chunks are all considered to be of length=
1, and the
6398 // watermarks determine how many objects to keep in the buffer, rather than
6399 // how many bytes or characters.
6400 function validChunk(stream, state, chunk, cb) {
6402 if (!util.isBuffer(chunk) &&
6403 !util.isString(chunk) &&
6404 !util.isNullOrUndefined(chunk) &&
6405 !state.objectMode) {
6406 var er = new TypeError('Invalid non-string/buffer chunk');
6407 stream.emit('error', er);
6408 process.nextTick(function() {
6416 Writable.prototype.write = function(chunk, encoding, cb) {
6417 var state = this._writableState;
6420 if (util.isFunction(encoding)) {
6425 if (util.isBuffer(chunk))
6426 encoding = 'buffer';
6428 encoding = state.defaultEncoding;
6430 if (!util.isFunction(cb))
6434 writeAfterEnd(this, state, cb);
6435 else if (validChunk(this, state, chunk, cb)) {
6437 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6443 Writable.prototype.cork = function() {
6444 var state = this._writableState;
6449 Writable.prototype.uncork = function() {
6450 var state = this._writableState;
6455 if (!state.writing &&
6458 !state.bufferProcessing &&
6459 state.buffer.length)
6460 clearBuffer(this, state);
6464 function decodeChunk(state, chunk, encoding) {
6465 if (!state.objectMode &&
6466 state.decodeStrings !== false &&
6467 util.isString(chunk)) {
6468 chunk = new Buffer(chunk, encoding);
6473 // if we're already writing something, then just put this
6474 // in the queue, and wait our turn. Otherwise, call _write
6475 // If we return false, then we need a drain event, so set that flag.
6476 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6477 chunk = decodeChunk(state, chunk, encoding);
6478 if (util.isBuffer(chunk))
6479 encoding = 'buffer';
6480 var len = state.objectMode ?
1 : chunk.length;
6482 state.length += len;
6484 var ret = state.length < state.highWaterMark;
6485 // we must ensure that previous needDrain will not be reset to false.
6487 state.needDrain = true;
6489 if (state.writing || state.corked)
6490 state.buffer.push(new WriteReq(chunk, encoding, cb));
6492 doWrite(stream, state, false, len, chunk, encoding, cb);
6497 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6498 state.writelen = len;
6500 state.writing = true;
6503 stream._writev(chunk, state.onwrite);
6505 stream._write(chunk, encoding, state.onwrite);
6509 function onwriteError(stream, state, sync, er, cb) {
6511 process.nextTick(function() {
6520 stream._writableState.errorEmitted = true;
6521 stream.emit('error', er);
6524 function onwriteStateUpdate(state) {
6525 state.writing = false;
6526 state.writecb = null;
6527 state.length -= state.writelen;
6531 function onwrite(stream, er) {
6532 var state = stream._writableState;
6533 var sync = state.sync;
6534 var cb = state.writecb;
6536 onwriteStateUpdate(state);
6539 onwriteError(stream, state, sync, er, cb);
6541 // Check if we're actually ready to finish, but don't emit yet
6542 var finished = needFinish(stream, state);
6546 !state.bufferProcessing &&
6547 state.buffer.length) {
6548 clearBuffer(stream, state);
6552 process.nextTick(function() {
6553 afterWrite(stream, state, finished, cb);
6556 afterWrite(stream, state, finished, cb);
6561 function afterWrite(stream, state, finished, cb) {
6563 onwriteDrain(stream, state);
6566 finishMaybe(stream, state);
6569 // Must force callback to be called on nextTick, so that we don't
6570 // emit 'drain' before the write() consumer gets the 'false' return
6571 // value, and has a chance to attach a 'drain' listener.
6572 function onwriteDrain(stream, state) {
6573 if (state.length ===
0 && state.needDrain) {
6574 state.needDrain = false;
6575 stream.emit('drain');
6580 // if there's something in the buffer waiting, then process it
6581 function clearBuffer(stream, state) {
6582 state.bufferProcessing = true;
6584 if (stream._writev && state.buffer.length
> 1) {
6585 // Fast case, write everything using _writev()
6587 for (var c =
0; c < state.buffer.length; c++)
6588 cbs.push(state.buffer[c].callback);
6590 // count the one we are adding, as well.
6591 // TODO(isaacs) clean this up
6593 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6594 for (var i =
0; i < cbs.length; i++) {
6603 // Slow case, write chunks one-by-one
6604 for (var c =
0; c < state.buffer.length; c++) {
6605 var entry = state.buffer[c];
6606 var chunk = entry.chunk;
6607 var encoding = entry.encoding;
6608 var cb = entry.callback;
6609 var len = state.objectMode ?
1 : chunk.length;
6611 doWrite(stream, state, false, len, chunk, encoding, cb);
6613 // if we didn't call the onwrite immediately, then
6614 // it means that we need to wait until it does.
6615 // also, that means that the chunk and cb are currently
6616 // being processed, so move the buffer counter past them.
6617 if (state.writing) {
6623 if (c < state.buffer.length)
6624 state.buffer = state.buffer.slice(c);
6626 state.buffer.length =
0;
6629 state.bufferProcessing = false;
6632 Writable.prototype._write = function(chunk, encoding, cb) {
6633 cb(new Error('not implemented'));
6637 Writable.prototype._writev = null;
6639 Writable.prototype.end = function(chunk, encoding, cb) {
6640 var state = this._writableState;
6642 if (util.isFunction(chunk)) {
6646 } else if (util.isFunction(encoding)) {
6651 if (!util.isNullOrUndefined(chunk))
6652 this.write(chunk, encoding);
6654 // .end() fully uncorks
6660 // ignore unnecessary end() calls.
6661 if (!state.ending && !state.finished)
6662 endWritable(this, state, cb);
6666 function needFinish(stream, state) {
6667 return (state.ending &&
6668 state.length ===
0 &&
6673 function prefinish(stream, state) {
6674 if (!state.prefinished) {
6675 state.prefinished = true;
6676 stream.emit('prefinish');
6680 function finishMaybe(stream, state) {
6681 var need = needFinish(stream, state);
6683 if (state.pendingcb ===
0) {
6684 prefinish(stream, state);
6685 state.finished = true;
6686 stream.emit('finish');
6688 prefinish(stream, state);
6693 function endWritable(stream, state, cb) {
6694 state.ending = true;
6695 finishMaybe(stream, state);
6698 process.nextTick(cb);
6700 stream.once('finish', cb);
6705 }).call(this,require('_process'))
6706 },{
"./_stream_duplex":
16,
"_process":
14,
"buffer":
7,
"core-util-is":
21,
"inherits":
12,
"stream":
26}],
21:[function(require,module,exports){
6708 // Copyright Joyent, Inc. and other Node contributors.
6710 // Permission is hereby granted, free of charge, to any person obtaining a
6711 // copy of this software and associated documentation files (the
6712 //
"Software"), to deal in the Software without restriction, including
6713 // without limitation the rights to use, copy, modify, merge, publish,
6714 // distribute, sublicense, and/or sell copies of the Software, and to permit
6715 // persons to whom the Software is furnished to do so, subject to the
6716 // following conditions:
6718 // The above copyright notice and this permission notice shall be included
6719 // in all copies or substantial portions of the Software.
6721 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6722 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6723 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6724 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6725 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6726 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6727 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6729 // NOTE: These type checking functions intentionally don't use `instanceof`
6730 // because it is fragile and can be easily faked with `Object.create()`.
6731 function isArray(ar) {
6732 return Array.isArray(ar);
6734 exports.isArray = isArray;
6736 function isBoolean(arg) {
6737 return typeof arg === 'boolean';
6739 exports.isBoolean = isBoolean;
6741 function isNull(arg) {
6742 return arg === null;
6744 exports.isNull = isNull;
6746 function isNullOrUndefined(arg) {
6749 exports.isNullOrUndefined = isNullOrUndefined;
6751 function isNumber(arg) {
6752 return typeof arg === 'number';
6754 exports.isNumber = isNumber;
6756 function isString(arg) {
6757 return typeof arg === 'string';
6759 exports.isString = isString;
6761 function isSymbol(arg) {
6762 return typeof arg === 'symbol';
6764 exports.isSymbol = isSymbol;
6766 function isUndefined(arg) {
6767 return arg === void
0;
6769 exports.isUndefined = isUndefined;
6771 function isRegExp(re) {
6772 return isObject(re) && objectToString(re) === '[object RegExp]';
6774 exports.isRegExp = isRegExp;
6776 function isObject(arg) {
6777 return typeof arg === 'object' && arg !== null;
6779 exports.isObject = isObject;
6781 function isDate(d) {
6782 return isObject(d) && objectToString(d) === '[object Date]';
6784 exports.isDate = isDate;
6786 function isError(e) {
6787 return isObject(e) &&
6788 (objectToString(e) === '[object Error]' || e instanceof Error);
6790 exports.isError = isError;
6792 function isFunction(arg) {
6793 return typeof arg === 'function';
6795 exports.isFunction = isFunction;
6797 function isPrimitive(arg) {
6798 return arg === null ||
6799 typeof arg === 'boolean' ||
6800 typeof arg === 'number' ||
6801 typeof arg === 'string' ||
6802 typeof arg === 'symbol' || // ES6 symbol
6803 typeof arg === 'undefined';
6805 exports.isPrimitive = isPrimitive;
6807 function isBuffer(arg) {
6808 return Buffer.isBuffer(arg);
6810 exports.isBuffer = isBuffer;
6812 function objectToString(o) {
6813 return Object.prototype.toString.call(o);
6815 }).call(this,require(
"buffer").Buffer)
6816 },{
"buffer":
7}],
22:[function(require,module,exports){
6817 module.exports = require(
"./lib/_stream_passthrough.js")
6819 },{
"./lib/_stream_passthrough.js":
17}],
23:[function(require,module,exports){
6820 exports = module.exports = require('./lib/_stream_readable.js');
6821 exports.Stream = require('stream');
6822 exports.Readable = exports;
6823 exports.Writable = require('./lib/_stream_writable.js');
6824 exports.Duplex = require('./lib/_stream_duplex.js');
6825 exports.Transform = require('./lib/_stream_transform.js');
6826 exports.PassThrough = require('./lib/_stream_passthrough.js');
6828 },{
"./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){
6829 module.exports = require(
"./lib/_stream_transform.js")
6831 },{
"./lib/_stream_transform.js":
19}],
25:[function(require,module,exports){
6832 module.exports = require(
"./lib/_stream_writable.js")
6834 },{
"./lib/_stream_writable.js":
20}],
26:[function(require,module,exports){
6835 // Copyright Joyent, Inc. and other Node contributors.
6837 // Permission is hereby granted, free of charge, to any person obtaining a
6838 // copy of this software and associated documentation files (the
6839 //
"Software"), to deal in the Software without restriction, including
6840 // without limitation the rights to use, copy, modify, merge, publish,
6841 // distribute, sublicense, and/or sell copies of the Software, and to permit
6842 // persons to whom the Software is furnished to do so, subject to the
6843 // following conditions:
6845 // The above copyright notice and this permission notice shall be included
6846 // in all copies or substantial portions of the Software.
6848 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6849 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6850 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6851 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6852 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6853 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6854 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6856 module.exports = Stream;
6858 var EE = require('events').EventEmitter;
6859 var inherits = require('inherits');
6861 inherits(Stream, EE);
6862 Stream.Readable = require('readable-stream/readable.js');
6863 Stream.Writable = require('readable-stream/writable.js');
6864 Stream.Duplex = require('readable-stream/duplex.js');
6865 Stream.Transform = require('readable-stream/transform.js');
6866 Stream.PassThrough = require('readable-stream/passthrough.js');
6868 // Backwards-compat with node
0.4.x
6869 Stream.Stream = Stream;
6873 // old-style streams. Note that the pipe method (the only relevant
6874 // part of this class) is overridden in the Readable class.
6880 Stream.prototype.pipe = function(dest, options) {
6883 function ondata(chunk) {
6884 if (dest.writable) {
6885 if (false === dest.write(chunk) && source.pause) {
6891 source.on('data', ondata);
6893 function ondrain() {
6894 if (source.readable && source.resume) {
6899 dest.on('drain', ondrain);
6901 // If the 'end' option is not supplied, dest.end() will be called when
6902 // source gets the 'end' or 'close' events. Only dest.end() once.
6903 if (!dest._isStdio && (!options || options.end !== false)) {
6904 source.on('end', onend);
6905 source.on('close', onclose);
6908 var didOnEnd = false;
6910 if (didOnEnd) return;
6917 function onclose() {
6918 if (didOnEnd) return;
6921 if (typeof dest.destroy === 'function') dest.destroy();
6924 // don't leave dangling pipes when there are errors.
6925 function onerror(er) {
6927 if (EE.listenerCount(this, 'error') ===
0) {
6928 throw er; // Unhandled stream error in pipe.
6932 source.on('error', onerror);
6933 dest.on('error', onerror);
6935 // remove all the event listeners that were added.
6936 function cleanup() {
6937 source.removeListener('data', ondata);
6938 dest.removeListener('drain', ondrain);
6940 source.removeListener('end', onend);
6941 source.removeListener('close', onclose);
6943 source.removeListener('error', onerror);
6944 dest.removeListener('error', onerror);
6946 source.removeListener('end', cleanup);
6947 source.removeListener('close', cleanup);
6949 dest.removeListener('close', cleanup);
6952 source.on('end', cleanup);
6953 source.on('close', cleanup);
6955 dest.on('close', cleanup);
6957 dest.emit('pipe', source);
6959 // Allow for unix-like usage: A.pipe(B).pipe(C)
6963 },{
"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){
6964 // Copyright Joyent, Inc. and other Node contributors.
6966 // Permission is hereby granted, free of charge, to any person obtaining a
6967 // copy of this software and associated documentation files (the
6968 //
"Software"), to deal in the Software without restriction, including
6969 // without limitation the rights to use, copy, modify, merge, publish,
6970 // distribute, sublicense, and/or sell copies of the Software, and to permit
6971 // persons to whom the Software is furnished to do so, subject to the
6972 // following conditions:
6974 // The above copyright notice and this permission notice shall be included
6975 // in all copies or substantial portions of the Software.
6977 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6978 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6979 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6980 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6981 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6982 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6983 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6985 var Buffer = require('buffer').Buffer;
6987 var isBufferEncoding = Buffer.isEncoding
6988 || function(encoding) {
6989 switch (encoding && encoding.toLowerCase()) {
6990 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;
6991 default: return false;
6996 function assertEncoding(encoding) {
6997 if (encoding && !isBufferEncoding(encoding)) {
6998 throw new Error('Unknown encoding: ' + encoding);
7002 // StringDecoder provides an interface for efficiently splitting a series of
7003 // buffers into a series of JS strings without breaking apart multi-byte
7004 // characters. CESU-
8 is handled as part of the UTF-
8 encoding.
7006 // @TODO Handling all encodings inside a single object makes it very difficult
7007 // to reason about this code, so it should be split up in the future.
7008 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-
8 code
7009 // points as used by CESU-
8.
7010 var StringDecoder = exports.StringDecoder = function(encoding) {
7011 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7012 assertEncoding(encoding);
7013 switch (this.encoding) {
7015 // CESU-
8 represents each of Surrogate Pair by
3-bytes
7016 this.surrogateSize =
3;
7020 // UTF-
16 represents each of Surrogate Pair by
2-bytes
7021 this.surrogateSize =
2;
7022 this.detectIncompleteChar = utf16DetectIncompleteChar;
7025 // Base-
64 stores
3 bytes in
4 chars, and pads the remainder.
7026 this.surrogateSize =
3;
7027 this.detectIncompleteChar = base64DetectIncompleteChar;
7030 this.write = passThroughWrite;
7034 // Enough space to store all bytes of a single character. UTF-
8 needs
4
7035 // bytes, but CESU-
8 may require up to
6 (
3 bytes per surrogate).
7036 this.charBuffer = new Buffer(
6);
7037 // Number of bytes received for the current incomplete multi-byte character.
7038 this.charReceived =
0;
7039 // Number of bytes expected for the current incomplete multi-byte character.
7040 this.charLength =
0;
7044 // write decodes the given buffer and returns it as JS string that is
7045 // guaranteed to not contain any partial multi-byte characters. Any partial
7046 // character found at the end of the buffer is buffered up, and will be
7047 // returned when calling write again with the remaining bytes.
7049 // Note: Converting a Buffer containing an orphan surrogate to a String
7050 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7051 // Buffer#write) will replace incomplete surrogates with the unicode
7052 // replacement character. See https://codereview.chromium.org/
121173009/ .
7053 StringDecoder.prototype.write = function(buffer) {
7055 // if our last write ended with an incomplete multibyte character
7056 while (this.charLength) {
7057 // determine how many remaining bytes this buffer has to offer for this char
7058 var available = (buffer.length
>= this.charLength - this.charReceived) ?
7059 this.charLength - this.charReceived :
7062 // add the new bytes to the char buffer
7063 buffer.copy(this.charBuffer, this.charReceived,
0, available);
7064 this.charReceived += available;
7066 if (this.charReceived < this.charLength) {
7067 // still not enough chars in this buffer? wait for more ...
7071 // remove bytes belonging to the current character from the buffer
7072 buffer = buffer.slice(available, buffer.length);
7074 // get the character that was split
7075 charStr = this.charBuffer.slice(
0, this.charLength).toString(this.encoding);
7077 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7078 var charCode = charStr.charCodeAt(charStr.length -
1);
7079 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7080 this.charLength += this.surrogateSize;
7084 this.charReceived = this.charLength =
0;
7086 // if there are no more bytes in this buffer, just emit our char
7087 if (buffer.length ===
0) {
7093 // determine and set charLength / charReceived
7094 this.detectIncompleteChar(buffer);
7096 var end = buffer.length;
7097 if (this.charLength) {
7098 // buffer the incomplete character bytes we got
7099 buffer.copy(this.charBuffer,
0, buffer.length - this.charReceived, end);
7100 end -= this.charReceived;
7103 charStr += buffer.toString(this.encoding,
0, end);
7105 var end = charStr.length -
1;
7106 var charCode = charStr.charCodeAt(end);
7107 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7108 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7109 var size = this.surrogateSize;
7110 this.charLength += size;
7111 this.charReceived += size;
7112 this.charBuffer.copy(this.charBuffer, size,
0, size);
7113 buffer.copy(this.charBuffer,
0,
0, size);
7114 return charStr.substring(
0, end);
7117 // or just emit the charStr
7121 // detectIncompleteChar determines if there is an incomplete UTF-
8 character at
7122 // the end of the given buffer. If so, it sets this.charLength to the byte
7123 // length that character, and sets this.charReceived to the number of bytes
7124 // that are available for this character.
7125 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7126 // determine how many bytes we have to check at the end of this buffer
7127 var i = (buffer.length
>=
3) ?
3 : buffer.length;
7129 // Figure out if one of the last i bytes of our buffer announces an
7131 for (; i
> 0; i--) {
7132 var c = buffer[buffer.length - i];
7134 // See http://en.wikipedia.org/wiki/UTF-
8#Description
7137 if (i ==
1 && c
>> 5 ==
0x06) {
7138 this.charLength =
2;
7143 if (i <=
2 && c
>> 4 ==
0x0E) {
7144 this.charLength =
3;
7149 if (i <=
3 && c
>> 3 ==
0x1E) {
7150 this.charLength =
4;
7154 this.charReceived = i;
7157 StringDecoder.prototype.end = function(buffer) {
7159 if (buffer && buffer.length)
7160 res = this.write(buffer);
7162 if (this.charReceived) {
7163 var cr = this.charReceived;
7164 var buf = this.charBuffer;
7165 var enc = this.encoding;
7166 res += buf.slice(
0, cr).toString(enc);
7172 function passThroughWrite(buffer) {
7173 return buffer.toString(this.encoding);
7176 function utf16DetectIncompleteChar(buffer) {
7177 this.charReceived = buffer.length %
2;
7178 this.charLength = this.charReceived ?
2 :
0;
7181 function base64DetectIncompleteChar(buffer) {
7182 this.charReceived = buffer.length %
3;
7183 this.charLength = this.charReceived ?
3 :
0;
7186 },{
"buffer":
7}],
28:[function(require,module,exports){
7187 module.exports = function isBuffer(arg) {
7188 return arg && typeof arg === 'object'
7189 && typeof arg.copy === 'function'
7190 && typeof arg.fill === 'function'
7191 && typeof arg.readUInt8 === 'function';
7193 },{}],
29:[function(require,module,exports){
7194 (function (process,global){
7195 // Copyright Joyent, Inc. and other Node contributors.
7197 // Permission is hereby granted, free of charge, to any person obtaining a
7198 // copy of this software and associated documentation files (the
7199 //
"Software"), to deal in the Software without restriction, including
7200 // without limitation the rights to use, copy, modify, merge, publish,
7201 // distribute, sublicense, and/or sell copies of the Software, and to permit
7202 // persons to whom the Software is furnished to do so, subject to the
7203 // following conditions:
7205 // The above copyright notice and this permission notice shall be included
7206 // in all copies or substantial portions of the Software.
7208 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7209 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7210 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7211 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7212 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7213 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7214 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7216 var formatRegExp = /%[sdj%]/g;
7217 exports.format = function(f) {
7220 for (var i =
0; i < arguments.length; i++) {
7221 objects.push(inspect(arguments[i]));
7223 return objects.join(' ');
7227 var args = arguments;
7228 var len = args.length;
7229 var str = String(f).replace(formatRegExp, function(x) {
7230 if (x === '%%') return '%';
7231 if (i
>= len) return x;
7233 case '%s': return String(args[i++]);
7234 case '%d': return Number(args[i++]);
7237 return JSON.stringify(args[i++]);
7239 return '[Circular]';
7245 for (var x = args[i]; i < len; x = args[++i]) {
7246 if (isNull(x) || !isObject(x)) {
7249 str += ' ' + inspect(x);
7256 // Mark that a method should not be used.
7257 // Returns a modified function which warns once by default.
7258 // If --no-deprecation is set, then it is a no-op.
7259 exports.deprecate = function(fn, msg) {
7260 // Allow for deprecating things in the process of starting up.
7261 if (isUndefined(global.process)) {
7263 return exports.deprecate(fn, msg).apply(this, arguments);
7267 if (process.noDeprecation === true) {
7272 function deprecated() {
7274 if (process.throwDeprecation) {
7275 throw new Error(msg);
7276 } else if (process.traceDeprecation) {
7283 return fn.apply(this, arguments);
7292 exports.debuglog = function(set) {
7293 if (isUndefined(debugEnviron))
7294 debugEnviron = process.env.NODE_DEBUG || '';
7295 set = set.toUpperCase();
7297 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7298 var pid = process.pid;
7299 debugs[set] = function() {
7300 var msg = exports.format.apply(exports, arguments);
7301 console.error('%s %d: %s', set, pid, msg);
7304 debugs[set] = function() {};
7312 * Echos the value of a value. Trys to print the value out
7313 * in the best way possible given the different types.
7315 * @param {Object} obj The object to print out.
7316 * @param {Object} opts Optional options object that alters the output.
7318 /* legacy: obj, showHidden, depth, colors*/
7319 function inspect(obj, opts) {
7323 stylize: stylizeNoColor
7326 if (arguments.length
>=
3) ctx.depth = arguments[
2];
7327 if (arguments.length
>=
4) ctx.colors = arguments[
3];
7328 if (isBoolean(opts)) {
7330 ctx.showHidden = opts;
7332 // got an "options" object
7333 exports._extend(ctx, opts);
7335 // set default options
7336 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7337 if (isUndefined(ctx.depth)) ctx.depth =
2;
7338 if (isUndefined(ctx.colors)) ctx.colors = false;
7339 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7340 if (ctx.colors) ctx.stylize = stylizeWithColor;
7341 return formatValue(ctx, obj, ctx.depth);
7343 exports.inspect = inspect;
7346 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7350 'underline' : [
4,
24],
7351 'inverse' : [
7,
27],
7358 'magenta' : [
35,
39],
7363 // Don't use 'blue' not visible on cmd.exe
7367 'boolean': 'yellow',
7368 'undefined': 'grey',
7372 // "name": intentionally not styling
7377 function stylizeWithColor(str, styleType) {
7378 var style = inspect.styles[styleType];
7381 return '\u001b[' + inspect.colors[style][
0] + 'm' + str +
7382 '\u001b[' + inspect.colors[style][
1] + 'm';
7389 function stylizeNoColor(str, styleType) {
7394 function arrayToHash(array) {
7397 array.forEach(function(val, idx) {
7405 function formatValue(ctx, value, recurseTimes) {
7406 // Provide a hook for user-specified inspect functions.
7407 // Check that value is an object with an inspect function on it
7408 if (ctx.customInspect &&
7410 isFunction(value.inspect) &&
7411 // Filter out the util module, it's inspect function is special
7412 value.inspect !== exports.inspect &&
7413 // Also filter out any prototype objects using the circular check.
7414 !(value.constructor && value.constructor.prototype === value)) {
7415 var ret = value.inspect(recurseTimes, ctx);
7416 if (!isString(ret)) {
7417 ret = formatValue(ctx, ret, recurseTimes);
7422 // Primitive types cannot have properties
7423 var primitive = formatPrimitive(ctx, value);
7428 // Look up the keys of the object.
7429 var keys = Object.keys(value);
7430 var visibleKeys = arrayToHash(keys);
7432 if (ctx.showHidden) {
7433 keys = Object.getOwnPropertyNames(value);
7436 // IE doesn't make error fields non-enumerable
7437 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs
.94).aspx
7439 && (keys.indexOf('message')
>=
0 || keys.indexOf('description')
>=
0)) {
7440 return formatError(value);
7443 // Some type of object without properties can be shortcutted.
7444 if (keys.length ===
0) {
7445 if (isFunction(value)) {
7446 var name = value.name ? ': ' + value.name : '';
7447 return ctx.stylize('[Function' + name + ']', 'special');
7449 if (isRegExp(value)) {
7450 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7452 if (isDate(value)) {
7453 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7455 if (isError(value)) {
7456 return formatError(value);
7460 var base = '', array = false, braces = ['{', '}'];
7462 // Make Array say that they are Array
7463 if (isArray(value)) {
7465 braces = ['[', ']'];
7468 // Make functions say that they are functions
7469 if (isFunction(value)) {
7470 var n = value.name ? ': ' + value.name : '';
7471 base = ' [Function' + n + ']';
7474 // Make RegExps say that they are RegExps
7475 if (isRegExp(value)) {
7476 base = ' ' + RegExp.prototype.toString.call(value);
7479 // Make dates with properties first say the date
7480 if (isDate(value)) {
7481 base = ' ' + Date.prototype.toUTCString.call(value);
7484 // Make error with message first say the error
7485 if (isError(value)) {
7486 base = ' ' + formatError(value);
7489 if (keys.length ===
0 && (!array || value.length ==
0)) {
7490 return braces[
0] + base + braces[
1];
7493 if (recurseTimes <
0) {
7494 if (isRegExp(value)) {
7495 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7497 return ctx.stylize('[Object]', 'special');
7501 ctx.seen.push(value);
7505 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7507 output = keys.map(function(key) {
7508 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7514 return reduceToSingleString(output, base, braces);
7518 function formatPrimitive(ctx, value) {
7519 if (isUndefined(value))
7520 return ctx.stylize('undefined', 'undefined');
7521 if (isString(value)) {
7522 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7523 .replace(/'/g, "\\'")
7524 .replace(/\\"/g, '"') + '\'';
7525 return ctx.stylize(simple, 'string');
7527 if (isNumber(value))
7528 return ctx.stylize('' + value, 'number');
7529 if (isBoolean(value))
7530 return ctx.stylize('' + value, 'boolean');
7531 // For some reason typeof null is "object", so special case here.
7533 return ctx.stylize('null', 'null');
7537 function formatError(value) {
7538 return '[' + Error.prototype.toString.call(value) + ']';
7542 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7544 for (var i =
0, l = value.length; i < l; ++i) {
7545 if (hasOwnProperty(value, String(i))) {
7546 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7552 keys.forEach(function(key) {
7553 if (!key.match(/^\d+$/)) {
7554 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7562 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7563 var name, str, desc;
7564 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7567 str = ctx.stylize('[Getter/Setter]', 'special');
7569 str = ctx.stylize('[Getter]', 'special');
7573 str = ctx.stylize('[Setter]', 'special');
7576 if (!hasOwnProperty(visibleKeys, key)) {
7577 name = '[' + key + ']';
7580 if (ctx.seen.indexOf(desc.value) <
0) {
7581 if (isNull(recurseTimes)) {
7582 str = formatValue(ctx, desc.value, null);
7584 str = formatValue(ctx, desc.value, recurseTimes -
1);
7586 if (str.indexOf('\n')
> -
1) {
7588 str = str.split('\n').map(function(line) {
7590 }).join('\n').substr(
2);
7592 str = '\n' + str.split('\n').map(function(line) {
7598 str = ctx.stylize('[Circular]', 'special');
7601 if (isUndefined(name)) {
7602 if (array && key.match(/^\d+$/)) {
7605 name = JSON.stringify('' + key);
7606 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-
9]*)"$/)) {
7607 name = name.substr(
1, name.length -
2);
7608 name = ctx.stylize(name, 'name');
7610 name = name.replace(/'/g, "\\'")
7611 .replace(/\\"/g, '"')
7612 .replace(/(^"|"$)/g, "'");
7613 name = ctx.stylize(name, 'string');
7617 return name + ': ' + str;
7621 function reduceToSingleString(output, base, braces) {
7622 var numLinesEst =
0;
7623 var length = output.reduce(function(prev, cur) {
7625 if (cur.indexOf('\n')
>=
0) numLinesEst++;
7626 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length +
1;
7631 (base === '' ? '' : base + '\n ') +
7633 output.join(',\n ') +
7638 return braces[
0] + base + ' ' + output.join(', ') + ' ' + braces[
1];
7642 // NOTE: These type checking functions intentionally don't use `instanceof`
7643 // because it is fragile and can be easily faked with `Object.create()`.
7644 function isArray(ar) {
7645 return Array.isArray(ar);
7647 exports.isArray = isArray;
7649 function isBoolean(arg) {
7650 return typeof arg === 'boolean';
7652 exports.isBoolean = isBoolean;
7654 function isNull(arg) {
7655 return arg === null;
7657 exports.isNull = isNull;
7659 function isNullOrUndefined(arg) {
7662 exports.isNullOrUndefined = isNullOrUndefined;
7664 function isNumber(arg) {
7665 return typeof arg === 'number';
7667 exports.isNumber = isNumber;
7669 function isString(arg) {
7670 return typeof arg === 'string';
7672 exports.isString = isString;
7674 function isSymbol(arg) {
7675 return typeof arg === 'symbol';
7677 exports.isSymbol = isSymbol;
7679 function isUndefined(arg) {
7680 return arg === void
0;
7682 exports.isUndefined = isUndefined;
7684 function isRegExp(re) {
7685 return isObject(re) && objectToString(re) === '[object RegExp]';
7687 exports.isRegExp = isRegExp;
7689 function isObject(arg) {
7690 return typeof arg === 'object' && arg !== null;
7692 exports.isObject = isObject;
7694 function isDate(d) {
7695 return isObject(d) && objectToString(d) === '[object Date]';
7697 exports.isDate = isDate;
7699 function isError(e) {
7700 return isObject(e) &&
7701 (objectToString(e) === '[object Error]' || e instanceof Error);
7703 exports.isError = isError;
7705 function isFunction(arg) {
7706 return typeof arg === 'function';
7708 exports.isFunction = isFunction;
7710 function isPrimitive(arg) {
7711 return arg === null ||
7712 typeof arg === 'boolean' ||
7713 typeof arg === 'number' ||
7714 typeof arg === 'string' ||
7715 typeof arg === 'symbol' || // ES6 symbol
7716 typeof arg === 'undefined';
7718 exports.isPrimitive = isPrimitive;
7720 exports.isBuffer = require('./support/isBuffer');
7722 function objectToString(o) {
7723 return Object.prototype.toString.call(o);
7728 return n <
10 ? '
0' + n.toString(
10) : n.toString(
10);
7732 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7733 'Oct', 'Nov', 'Dec'];
7736 function timestamp() {
7738 var time = [pad(d.getHours()),
7739 pad(d.getMinutes()),
7740 pad(d.getSeconds())].join(':');
7741 return [d.getDate(), months[d.getMonth()], time].join(' ');
7745 // log is just a thin wrapper to console.log that prepends a timestamp
7746 exports.log = function() {
7747 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7752 * Inherit the prototype methods from one constructor into another.
7754 * The Function.prototype.inherits from lang.js rewritten as a standalone
7755 * function (not on Function.prototype). NOTE: If this file is to be loaded
7756 * during bootstrapping this function needs to be rewritten using some native
7757 * functions as prototype setup using normal JavaScript does not work as
7758 * expected during bootstrapping (see mirror.js in r114903).
7760 * @param {function} ctor Constructor function which needs to inherit the
7762 * @param {function} superCtor Constructor function to inherit prototype from.
7764 exports.inherits = require('inherits');
7766 exports._extend = function(origin, add) {
7767 // Don't do anything if add isn't an object
7768 if (!add || !isObject(add)) return origin;
7770 var keys = Object.keys(add);
7771 var i = keys.length;
7773 origin[keys[i]] = add[keys[i]];
7778 function hasOwnProperty(obj, prop) {
7779 return Object.prototype.hasOwnProperty.call(obj, prop);
7782 }).call(this,require('_process'),typeof global !==
"undefined" ? global : typeof self !==
"undefined" ? self : typeof window !==
"undefined" ? window : {})
7783 },{
"./support/isBuffer":
28,
"_process":
14,
"inherits":
12}],
30:[function(require,module,exports){
7784 // Base58 encoding/decoding
7785 // Originally written by Mike Hearn for BitcoinJ
7786 // Copyright (c)
2011 Google Inc
7787 // Ported to JavaScript by Stefan Thomas
7788 // Merged Buffer refactorings from base58-native by Stephen Pair
7789 // Copyright (c)
2013 BitPay Inc
7791 var ALPHABET = '
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7792 var ALPHABET_MAP = {}
7793 for(var i =
0; i < ALPHABET.length; i++) {
7794 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7798 function encode(buffer) {
7799 if (buffer.length ===
0) return ''
7801 var i, j, digits = [
0]
7802 for (i =
0; i < buffer.length; i++) {
7803 for (j =
0; j < digits.length; j++) digits[j] <<=
8
7805 digits[
0] += buffer[i]
7808 for (j =
0; j < digits.length; ++j) {
7811 carry = (digits[j] / BASE) |
0
7816 digits.push(carry % BASE)
7818 carry = (carry / BASE) |
0
7822 // deal with leading zeros
7823 for (i =
0; buffer[i] ===
0 && i < buffer.length -
1; i++) digits.push(
0)
7825 // convert digits to a string
7826 var stringOutput =
""
7827 for (var i = digits.length -
1; i
>=
0; i--) {
7828 stringOutput = stringOutput + ALPHABET[digits[i]]
7833 function decode(string) {
7834 if (string.length ===
0) return []
7836 var i, j, bytes = [
0]
7837 for (i =
0; i < string.length; i++) {
7839 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7841 for (j =
0; j < bytes.length; j++) bytes[j] *= BASE
7842 bytes[
0] += ALPHABET_MAP[c]
7845 for (j =
0; j < bytes.length; ++j) {
7848 carry = bytes[j]
>> 8
7853 bytes.push(carry &
0xff)
7859 // deal with leading zeros
7860 for (i =
0; string[i] === '
1' && i < string.length -
1; i++) bytes.push(
0)
7862 return bytes.reverse()
7870 },{}],
31:[function(require,module,exports){
7874 var base58 = require('bs58')
7875 var createHash = require('create-hash')
7877 // SHA256(SHA256(buffer))
7878 function sha256x2 (buffer) {
7879 buffer = createHash('sha256').update(buffer).digest()
7880 return createHash('sha256').update(buffer).digest()
7883 // Encode a buffer as a base58-check encoded string
7884 function encode (payload) {
7885 var checksum = sha256x2(payload).slice(
0,
4)
7887 return base58.encode(Buffer.concat([
7893 // Decode a base58-check encoded string to a buffer
7894 function decode (string) {
7895 var buffer = new Buffer(base58.decode(string))
7897 var payload = buffer.slice(
0, -
4)
7898 var checksum = buffer.slice(-
4)
7899 var newChecksum = sha256x2(payload).slice(
0,
4)
7901 for (var i =
0; i < newChecksum.length; ++i) {
7902 if (newChecksum[i] === checksum[i]) continue
7904 throw new Error('Invalid checksum')
7915 }).call(this,require("buffer").Buffer)
7916 },{"bs58":
30,"buffer":
7,"create-hash":
32}],
32:[function(require,module,exports){
7919 var inherits = require('inherits')
7920 var md5 = require('./md5')
7921 var rmd160 = require('ripemd160')
7922 var sha = require('sha.js')
7924 var Transform = require('stream').Transform
7926 function HashNoConstructor(hash) {
7927 Transform.call(this)
7933 inherits(HashNoConstructor, Transform)
7935 HashNoConstructor.prototype._transform = function (data, _, next) {
7936 this.buffers.push(data)
7941 HashNoConstructor.prototype._flush = function (next) {
7942 this.push(this.digest())
7946 HashNoConstructor.prototype.update = function (data, enc) {
7947 if (typeof data === 'string') {
7948 data = new Buffer(data, enc)
7951 this.buffers.push(data)
7955 HashNoConstructor.prototype.digest = function (enc) {
7956 var buf = Buffer.concat(this.buffers)
7957 var r = this._hash(buf)
7960 return enc ? r.toString(enc) : r
7963 function Hash(hash) {
7964 Transform.call(this)
7969 inherits(Hash, Transform)
7971 Hash.prototype._transform = function (data, enc, next) {
7972 if (enc) data = new Buffer(data, enc)
7974 this._hash.update(data)
7979 Hash.prototype._flush = function (next) {
7980 this.push(this._hash.digest())
7986 Hash.prototype.update = function (data, enc) {
7987 if (typeof data === 'string') {
7988 data = new Buffer(data, enc)
7991 this._hash.update(data)
7995 Hash.prototype.digest = function (enc) {
7996 var outData = this._hash.digest()
7998 return enc ? outData.toString(enc) : outData
8001 module.exports = function createHash (alg) {
8002 if ('md5' === alg) return new HashNoConstructor(md5)
8003 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8005 return new Hash(sha(alg))
8008 }).call(this,require("buffer").Buffer)
8009 },{"./md5":
34,"buffer":
7,"inherits":
35,"ripemd160":
36,"sha.js":
38,"stream":
26}],
33:[function(require,module,exports){
8013 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(
0);
8016 function toArray(buf, bigEndian) {
8017 if ((buf.length % intSize) !==
0) {
8018 var len = buf.length + (intSize - (buf.length % intSize));
8019 buf = Buffer.concat([buf, zeroBuffer], len);
8023 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8024 for (var i =
0; i < buf.length; i += intSize) {
8025 arr.push(fn.call(buf, i));
8030 function toBuffer(arr, size, bigEndian) {
8031 var buf = new Buffer(size);
8032 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8033 for (var i =
0; i < arr.length; i++) {
8034 fn.call(buf, arr[i], i *
4, true);
8039 function hash(buf, fn, hashSize, bigEndian) {
8040 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8041 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8042 return toBuffer(arr, hashSize, bigEndian);
8044 exports.hash = hash;
8045 }).call(this,require("buffer").Buffer)
8046 },{"buffer":
7}],
34:[function(require,module,exports){
8049 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8050 * Digest Algorithm, as defined in RFC
1321.
8051 * Version
2.1 Copyright (C) Paul Johnston
1999 -
2002.
8052 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8053 * Distributed under the BSD License
8054 * See http://pajhome.org.uk/crypt/md5 for more info.
8057 var helpers = require('./helpers');
8060 * Calculate the MD5 of an array of little-endian words, and a bit length
8062 function core_md5(x, len)
8064 /* append padding */
8065 x[len
>> 5] |=
0x80 << ((len) %
32);
8066 x[(((len +
64)
>>> 9) <<
4) +
14] = len;
8070 var c = -
1732584194;
8073 for(var i =
0; i < x.length; i +=
16)
8080 a = md5_ff(a, b, c, d, x[i+
0],
7 , -
680876936);
8081 d = md5_ff(d, a, b, c, x[i+
1],
12, -
389564586);
8082 c = md5_ff(c, d, a, b, x[i+
2],
17,
606105819);
8083 b = md5_ff(b, c, d, a, x[i+
3],
22, -
1044525330);
8084 a = md5_ff(a, b, c, d, x[i+
4],
7 , -
176418897);
8085 d = md5_ff(d, a, b, c, x[i+
5],
12,
1200080426);
8086 c = md5_ff(c, d, a, b, x[i+
6],
17, -
1473231341);
8087 b = md5_ff(b, c, d, a, x[i+
7],
22, -
45705983);
8088 a = md5_ff(a, b, c, d, x[i+
8],
7 ,
1770035416);
8089 d = md5_ff(d, a, b, c, x[i+
9],
12, -
1958414417);
8090 c = md5_ff(c, d, a, b, x[i+
10],
17, -
42063);
8091 b = md5_ff(b, c, d, a, x[i+
11],
22, -
1990404162);
8092 a = md5_ff(a, b, c, d, x[i+
12],
7 ,
1804603682);
8093 d = md5_ff(d, a, b, c, x[i+
13],
12, -
40341101);
8094 c = md5_ff(c, d, a, b, x[i+
14],
17, -
1502002290);
8095 b = md5_ff(b, c, d, a, x[i+
15],
22,
1236535329);
8097 a = md5_gg(a, b, c, d, x[i+
1],
5 , -
165796510);
8098 d = md5_gg(d, a, b, c, x[i+
6],
9 , -
1069501632);
8099 c = md5_gg(c, d, a, b, x[i+
11],
14,
643717713);
8100 b = md5_gg(b, c, d, a, x[i+
0],
20, -
373897302);
8101 a = md5_gg(a, b, c, d, x[i+
5],
5 , -
701558691);
8102 d = md5_gg(d, a, b, c, x[i+
10],
9 ,
38016083);
8103 c = md5_gg(c, d, a, b, x[i+
15],
14, -
660478335);
8104 b = md5_gg(b, c, d, a, x[i+
4],
20, -
405537848);
8105 a = md5_gg(a, b, c, d, x[i+
9],
5 ,
568446438);
8106 d = md5_gg(d, a, b, c, x[i+
14],
9 , -
1019803690);
8107 c = md5_gg(c, d, a, b, x[i+
3],
14, -
187363961);
8108 b = md5_gg(b, c, d, a, x[i+
8],
20,
1163531501);
8109 a = md5_gg(a, b, c, d, x[i+
13],
5 , -
1444681467);
8110 d = md5_gg(d, a, b, c, x[i+
2],
9 , -
51403784);
8111 c = md5_gg(c, d, a, b, x[i+
7],
14,
1735328473);
8112 b = md5_gg(b, c, d, a, x[i+
12],
20, -
1926607734);
8114 a = md5_hh(a, b, c, d, x[i+
5],
4 , -
378558);
8115 d = md5_hh(d, a, b, c, x[i+
8],
11, -
2022574463);
8116 c = md5_hh(c, d, a, b, x[i+
11],
16,
1839030562);
8117 b = md5_hh(b, c, d, a, x[i+
14],
23, -
35309556);
8118 a = md5_hh(a, b, c, d, x[i+
1],
4 , -
1530992060);
8119 d = md5_hh(d, a, b, c, x[i+
4],
11,
1272893353);
8120 c = md5_hh(c, d, a, b, x[i+
7],
16, -
155497632);
8121 b = md5_hh(b, c, d, a, x[i+
10],
23, -
1094730640);
8122 a = md5_hh(a, b, c, d, x[i+
13],
4 ,
681279174);
8123 d = md5_hh(d, a, b, c, x[i+
0],
11, -
358537222);
8124 c = md5_hh(c, d, a, b, x[i+
3],
16, -
722521979);
8125 b = md5_hh(b, c, d, a, x[i+
6],
23,
76029189);
8126 a = md5_hh(a, b, c, d, x[i+
9],
4 , -
640364487);
8127 d = md5_hh(d, a, b, c, x[i+
12],
11, -
421815835);
8128 c = md5_hh(c, d, a, b, x[i+
15],
16,
530742520);
8129 b = md5_hh(b, c, d, a, x[i+
2],
23, -
995338651);
8131 a = md5_ii(a, b, c, d, x[i+
0],
6 , -
198630844);
8132 d = md5_ii(d, a, b, c, x[i+
7],
10,
1126891415);
8133 c = md5_ii(c, d, a, b, x[i+
14],
15, -
1416354905);
8134 b = md5_ii(b, c, d, a, x[i+
5],
21, -
57434055);
8135 a = md5_ii(a, b, c, d, x[i+
12],
6 ,
1700485571);
8136 d = md5_ii(d, a, b, c, x[i+
3],
10, -
1894986606);
8137 c = md5_ii(c, d, a, b, x[i+
10],
15, -
1051523);
8138 b = md5_ii(b, c, d, a, x[i+
1],
21, -
2054922799);
8139 a = md5_ii(a, b, c, d, x[i+
8],
6 ,
1873313359);
8140 d = md5_ii(d, a, b, c, x[i+
15],
10, -
30611744);
8141 c = md5_ii(c, d, a, b, x[i+
6],
15, -
1560198380);
8142 b = md5_ii(b, c, d, a, x[i+
13],
21,
1309151649);
8143 a = md5_ii(a, b, c, d, x[i+
4],
6 , -
145523070);
8144 d = md5_ii(d, a, b, c, x[i+
11],
10, -
1120210379);
8145 c = md5_ii(c, d, a, b, x[i+
2],
15,
718787259);
8146 b = md5_ii(b, c, d, a, x[i+
9],
21, -
343485551);
8148 a = safe_add(a, olda);
8149 b = safe_add(b, oldb);
8150 c = safe_add(c, oldc);
8151 d = safe_add(d, oldd);
8153 return Array(a, b, c, d);
8158 * These functions implement the four basic operations the algorithm uses.
8160 function md5_cmn(q, a, b, x, s, t)
8162 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8164 function md5_ff(a, b, c, d, x, s, t)
8166 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8168 function md5_gg(a, b, c, d, x, s, t)
8170 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8172 function md5_hh(a, b, c, d, x, s, t)
8174 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8176 function md5_ii(a, b, c, d, x, s, t)
8178 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8182 * Add integers, wrapping at
2^
32. This uses
16-bit operations internally
8183 * to work around bugs in some JS interpreters.
8185 function safe_add(x, y)
8187 var lsw = (x &
0xFFFF) + (y &
0xFFFF);
8188 var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
8189 return (msw <<
16) | (lsw &
0xFFFF);
8193 * Bitwise rotate a
32-bit number to the left.
8195 function bit_rol(num, cnt)
8197 return (num << cnt) | (num
>>> (
32 - cnt));
8200 module.exports = function md5(buf) {
8201 return helpers.hash(buf, core_md5,
16);
8203 },{"./helpers":
33}],
35:[function(require,module,exports){
8204 arguments[
4][
12][
0].apply(exports,arguments)
8205 },{"dup":
12}],
36:[function(require,module,exports){
8209 code.google.com/p/crypto-js
8210 (c)
2009-
2013 by Jeff Mott. All rights reserved.
8211 code.google.com/p/crypto-js/wiki/License
8214 (c)
2012 by Cédric Mesnil. All rights reserved.
8216 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8218 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8219 - 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.
8221 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8226 0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
8227 7,
4,
13,
1,
10,
6,
15,
3,
12,
0,
9,
5,
2,
14,
11,
8,
8228 3,
10,
14,
4,
9,
15,
8,
1,
2,
7,
0,
6,
13,
11,
5,
12,
8229 1,
9,
11,
10,
0,
8,
12,
4,
13,
3,
7,
15,
14,
5,
6,
2,
8230 4,
0,
5,
9,
7,
12,
2,
10,
14,
1,
3,
8,
11,
6,
15,
13
8234 5,
14,
7,
0,
9,
2,
11,
4,
13,
6,
15,
8,
1,
10,
3,
12,
8235 6,
11,
3,
7,
0,
13,
5,
10,
14,
15,
8,
12,
4,
9,
1,
2,
8236 15,
5,
1,
3,
7,
14,
6,
9,
11,
8,
12,
2,
10,
0,
4,
13,
8237 8,
6,
4,
1,
3,
11,
15,
0,
5,
12,
2,
13,
9,
7,
10,
14,
8238 12,
15,
10,
4,
1,
5,
8,
7,
6,
2,
13,
14,
0,
3,
9,
11
8242 11,
14,
15,
12,
5,
8,
7,
9,
11,
13,
14,
15,
6,
7,
9,
8,
8243 7,
6,
8,
13,
11,
9,
7,
15,
7,
12,
15,
9,
11,
7,
13,
12,
8244 11,
13,
6,
7,
14,
9,
13,
15,
14,
8,
13,
6,
5,
12,
7,
5,
8245 11,
12,
14,
15,
14,
15,
9,
8,
9,
14,
5,
6,
8,
6,
5,
12,
8246 9,
15,
5,
11,
6,
8,
13,
12,
5,
12,
13,
14,
11,
8,
5,
6
8250 8,
9,
9,
11,
13,
15,
15,
5,
7,
7,
8,
11,
14,
14,
12,
6,
8251 9,
13,
15,
7,
12,
8,
9,
11,
7,
7,
12,
7,
6,
15,
13,
11,
8252 9,
7,
15,
11,
8,
6,
6,
14,
12,
13,
5,
14,
13,
13,
7,
5,
8253 15,
5,
8,
11,
14,
14,
6,
14,
6,
9,
12,
9,
12,
5,
15,
8,
8254 8,
5,
12,
9,
12,
5,
14,
6,
8,
13,
6,
5,
15,
13,
11,
11
8257 var hl = [
0x00000000,
0x5A827999,
0x6ED9EBA1,
0x8F1BBCDC,
0xA953FD4E]
8258 var hr = [
0x50A28BE6,
0x5C4DD124,
0x6D703EF3,
0x7A6D76E9,
0x00000000]
8260 function bytesToWords (bytes) {
8262 for (var i =
0, b =
0; i < bytes.length; i++, b +=
8) {
8263 words[b
>>> 5] |= bytes[i] << (
24 - b %
32)
8268 function wordsToBytes (words) {
8270 for (var b =
0; b < words.length *
32; b +=
8) {
8271 bytes.push((words[b
>>> 5]
>>> (
24 - b %
32)) &
0xFF)
8276 function processBlock (H, M, offset) {
8278 for (var i =
0; i <
16; i++) {
8279 var offset_i = offset + i
8280 var M_offset_i = M[offset_i]
8284 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
8285 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
8289 // Working variables
8290 var al, bl, cl, dl, el
8291 var ar, br, cr, dr, er
8301 for (i =
0; i <
80; i +=
1) {
8302 t = (al + M[offset + zl[i]]) |
0
8304 t += f1(bl, cl, dl) + hl[
0]
8305 } else if (i <
32) {
8306 t += f2(bl, cl, dl) + hl[
1]
8307 } else if (i <
48) {
8308 t += f3(bl, cl, dl) + hl[
2]
8309 } else if (i <
64) {
8310 t += f4(bl, cl, dl) + hl[
3]
8311 } else {// if (i
<80) {
8312 t += f5(bl, cl, dl) + hl[
4]
8323 t = (ar + M[offset + zr[i]]) |
0
8325 t += f5(br, cr, dr) + hr[
0]
8326 } else if (i <
32) {
8327 t += f4(br, cr, dr) + hr[
1]
8328 } else if (i <
48) {
8329 t += f3(br, cr, dr) + hr[
2]
8330 } else if (i <
64) {
8331 t += f2(br, cr, dr) + hr[
3]
8332 } else {// if (i
<80) {
8333 t += f1(br, cr, dr) + hr[
4]
8346 // intermediate hash value
8347 t = (H[
1] + cl + dr) |
0
8348 H[
1] = (H[
2] + dl + er) |
0
8349 H[
2] = (H[
3] + el + ar) |
0
8350 H[
3] = (H[
4] + al + br) |
0
8351 H[
4] = (H[
0] + bl + cr) |
0
8355 function f1 (x, y, z) {
8356 return ((x) ^ (y) ^ (z))
8359 function f2 (x, y, z) {
8360 return (((x) & (y)) | ((~x) & (z)))
8363 function f3 (x, y, z) {
8364 return (((x) | (~(y))) ^ (z))
8367 function f4 (x, y, z) {
8368 return (((x) & (z)) | ((y) & (~(z))))
8371 function f5 (x, y, z) {
8372 return ((x) ^ ((y) | (~(z))))
8375 function rotl (x, n) {
8376 return (x << n) | (x
>>> (
32 - n))
8379 function ripemd160 (message) {
8380 var H = [
0x67452301,
0xEFCDAB89,
0x98BADCFE,
0x10325476,
0xC3D2E1F0]
8382 if (typeof message === 'string') {
8383 message = new Buffer(message, 'utf8')
8386 var m = bytesToWords(message)
8388 var nBitsLeft = message.length *
8
8389 var nBitsTotal = message.length *
8
8392 m[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32)
8393 m[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
8394 (((nBitsTotal <<
8) | (nBitsTotal
>>> 24)) &
0x00ff00ff) |
8395 (((nBitsTotal <<
24) | (nBitsTotal
>>> 8)) &
0xff00ff00)
8398 for (var i =
0; i < m.length; i +=
16) {
8399 processBlock(H, m, i)
8403 for (i =
0; i <
5; i++) {
8408 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
8409 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00)
8412 var digestbytes = wordsToBytes(H)
8413 return new Buffer(digestbytes)
8416 module.exports = ripemd160
8418 }).call(this,require(
"buffer").Buffer)
8419 },{
"buffer":
7}],
37:[function(require,module,exports){
8421 // prototype class for hash functions
8422 function Hash (blockSize, finalSize) {
8423 this._block = new Buffer(blockSize)
8424 this._finalSize = finalSize
8425 this._blockSize = blockSize
8430 Hash.prototype.update = function (data, enc) {
8431 if (typeof data === 'string') {
8433 data = new Buffer(data, enc)
8436 var l = this._len += data.length
8437 var s = this._s ||
0
8439 var buffer = this._block
8442 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8445 for (var i =
0; i < ch; i++) {
8446 buffer[(s % this._blockSize) + i] = data[i + f]
8452 if ((s % this._blockSize) ===
0) {
8453 this._update(buffer)
8461 Hash.prototype.digest = function (enc) {
8462 // Suppose the length of the message M, in bits, is l
8463 var l = this._len *
8
8465 // Append the bit
1 to the end of the message
8466 this._block[this._len % this._blockSize] =
0x80
8468 // and then k zero bits, where k is the smallest non-negative solution to the equation (l +
1 + k) === finalSize mod blockSize
8469 this._block.fill(
0, this._len % this._blockSize +
1)
8471 if (l % (this._blockSize *
8)
>= this._finalSize *
8) {
8472 this._update(this._block)
8476 // to this append the block which is equal to the number l written in binary
8477 // TODO: handle case where l is
> Math.pow(
2,
29)
8478 this._block.writeInt32BE(l, this._blockSize -
4)
8480 var hash = this._update(this._block) || this._hash()
8482 return enc ? hash.toString(enc) : hash
8485 Hash.prototype._update = function () {
8486 throw new Error('_update must be implemented by subclass')
8489 module.exports = Hash
8491 }).call(this,require("buffer").Buffer)
8492 },{"buffer":
7}],
38:[function(require,module,exports){
8493 var exports = module.exports = function SHA (algorithm) {
8494 algorithm = algorithm.toLowerCase()
8496 var Algorithm = exports[algorithm]
8497 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8499 return new Algorithm()
8502 exports.sha = require('./sha')
8503 exports.sha1 = require('./sha1')
8504 exports.sha224 = require('./sha224')
8505 exports.sha256 = require('./sha256')
8506 exports.sha384 = require('./sha384')
8507 exports.sha512 = require('./sha512')
8509 },{"./sha":
39,"./sha1":
40,"./sha224":
41,"./sha256":
42,"./sha384":
43,"./sha512":
44}],
39:[function(require,module,exports){
8512 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
0, as defined
8514 * This source code is derived from sha1.js of the same repository.
8515 * The difference between SHA-
0 and SHA-
1 is just a bitwise rotate left
8516 * operation was added.
8519 var inherits = require('inherits')
8520 var Hash = require('./hash')
8522 var W = new Array(
80)
8528 Hash.call(this,
64,
56)
8533 Sha.prototype.init = function () {
8534 this._a =
0x67452301 |
0
8535 this._b =
0xefcdab89 |
0
8536 this._c =
0x98badcfe |
0
8537 this._d =
0x10325476 |
0
8538 this._e =
0xc3d2e1f0 |
0
8544 * Bitwise rotate a
32-bit number to the left.
8546 function rol (num, cnt) {
8547 return (num << cnt) | (num
>>> (
32 - cnt))
8550 Sha.prototype._update = function (M) {
8562 * SHA-
1 has a bitwise rotate left operation. But, SHA is not
8563 * function calcW() { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8565 function calcW () { return W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16] }
8566 function loop (w, f) {
8569 var t = rol(a,
5) + f + e + w + k
8580 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8581 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8583 while (j <
40) loop(calcW(), b ^ c ^ d)
8585 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8587 while (j <
80) loop(calcW(), b ^ c ^ d)
8589 this._a = (a + this._a) |
0
8590 this._b = (b + this._b) |
0
8591 this._c = (c + this._c) |
0
8592 this._d = (d + this._d) |
0
8593 this._e = (e + this._e) |
0
8596 Sha.prototype._hash = function () {
8597 var H = new Buffer(
20)
8599 H.writeInt32BE(this._a |
0,
0)
8600 H.writeInt32BE(this._b |
0,
4)
8601 H.writeInt32BE(this._c |
0,
8)
8602 H.writeInt32BE(this._d |
0,
12)
8603 H.writeInt32BE(this._e |
0,
16)
8608 module.exports = Sha
8611 }).call(this,require("buffer").Buffer)
8612 },{"./hash":
37,"buffer":
7,"inherits":
35}],
40:[function(require,module,exports){
8615 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
1, as defined
8617 * Version
2.1a Copyright Paul Johnston
2000 -
2002.
8618 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8619 * Distributed under the BSD License
8620 * See http://pajhome.org.uk/crypt/md5 for details.
8623 var inherits = require('inherits')
8624 var Hash = require('./hash')
8626 var W = new Array(
80)
8632 Hash.call(this,
64,
56)
8635 inherits(Sha1, Hash)
8637 Sha1.prototype.init = function () {
8638 this._a =
0x67452301 |
0
8639 this._b =
0xefcdab89 |
0
8640 this._c =
0x98badcfe |
0
8641 this._d =
0x10325476 |
0
8642 this._e =
0xc3d2e1f0 |
0
8648 * Bitwise rotate a
32-bit number to the left.
8650 function rol (num, cnt) {
8651 return (num << cnt) | (num
>>> (
32 - cnt))
8654 Sha1.prototype._update = function (M) {
8665 function calcW () { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8666 function loop (w, f) {
8669 var t = rol(a,
5) + f + e + w + k
8680 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8681 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8683 while (j <
40) loop(calcW(), b ^ c ^ d)
8685 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8687 while (j <
80) loop(calcW(), b ^ c ^ d)
8689 this._a = (a + this._a) |
0
8690 this._b = (b + this._b) |
0
8691 this._c = (c + this._c) |
0
8692 this._d = (d + this._d) |
0
8693 this._e = (e + this._e) |
0
8696 Sha1.prototype._hash = function () {
8697 var H = new Buffer(
20)
8699 H.writeInt32BE(this._a |
0,
0)
8700 H.writeInt32BE(this._b |
0,
4)
8701 H.writeInt32BE(this._c |
0,
8)
8702 H.writeInt32BE(this._d |
0,
12)
8703 H.writeInt32BE(this._e |
0,
16)
8708 module.exports = Sha1
8710 }).call(this,require("buffer").Buffer)
8711 },{"./hash":
37,"buffer":
7,"inherits":
35}],
41:[function(require,module,exports){
8714 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8716 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8717 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8721 var inherits = require('inherits')
8722 var Sha256 = require('./sha256')
8723 var Hash = require('./hash')
8725 var W = new Array(
64)
8727 function Sha224 () {
8730 this._w = W // new Array(
64)
8732 Hash.call(this,
64,
56)
8735 inherits(Sha224, Sha256)
8737 Sha224.prototype.init = function () {
8738 this._a =
0xc1059ed8 |
0
8739 this._b =
0x367cd507 |
0
8740 this._c =
0x3070dd17 |
0
8741 this._d =
0xf70e5939 |
0
8742 this._e =
0xffc00b31 |
0
8743 this._f =
0x68581511 |
0
8744 this._g =
0x64f98fa7 |
0
8745 this._h =
0xbefa4fa4 |
0
8750 Sha224.prototype._hash = function () {
8751 var H = new Buffer(
28)
8753 H.writeInt32BE(this._a,
0)
8754 H.writeInt32BE(this._b,
4)
8755 H.writeInt32BE(this._c,
8)
8756 H.writeInt32BE(this._d,
12)
8757 H.writeInt32BE(this._e,
16)
8758 H.writeInt32BE(this._f,
20)
8759 H.writeInt32BE(this._g,
24)
8764 module.exports = Sha224
8766 }).call(this,require("buffer").Buffer)
8767 },{"./hash":
37,"./sha256":
42,"buffer":
7,"inherits":
35}],
42:[function(require,module,exports){
8770 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8772 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8773 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8777 var inherits = require('inherits')
8778 var Hash = require('./hash')
8781 0x428A2F98,
0x71374491,
0xB5C0FBCF,
0xE9B5DBA5,
8782 0x3956C25B,
0x59F111F1,
0x923F82A4,
0xAB1C5ED5,
8783 0xD807AA98,
0x12835B01,
0x243185BE,
0x550C7DC3,
8784 0x72BE5D74,
0x80DEB1FE,
0x9BDC06A7,
0xC19BF174,
8785 0xE49B69C1,
0xEFBE4786,
0x0FC19DC6,
0x240CA1CC,
8786 0x2DE92C6F,
0x4A7484AA,
0x5CB0A9DC,
0x76F988DA,
8787 0x983E5152,
0xA831C66D,
0xB00327C8,
0xBF597FC7,
8788 0xC6E00BF3,
0xD5A79147,
0x06CA6351,
0x14292967,
8789 0x27B70A85,
0x2E1B2138,
0x4D2C6DFC,
0x53380D13,
8790 0x650A7354,
0x766A0ABB,
0x81C2C92E,
0x92722C85,
8791 0xA2BFE8A1,
0xA81A664B,
0xC24B8B70,
0xC76C51A3,
8792 0xD192E819,
0xD6990624,
0xF40E3585,
0x106AA070,
8793 0x19A4C116,
0x1E376C08,
0x2748774C,
0x34B0BCB5,
8794 0x391C0CB3,
0x4ED8AA4A,
0x5B9CCA4F,
0x682E6FF3,
8795 0x748F82EE,
0x78A5636F,
0x84C87814,
0x8CC70208,
8796 0x90BEFFFA,
0xA4506CEB,
0xBEF9A3F7,
0xC67178F2
8799 var W = new Array(
64)
8801 function Sha256 () {
8804 this._w = W // new Array(
64)
8806 Hash.call(this,
64,
56)
8809 inherits(Sha256, Hash)
8811 Sha256.prototype.init = function () {
8812 this._a =
0x6a09e667 |
0
8813 this._b =
0xbb67ae85 |
0
8814 this._c =
0x3c6ef372 |
0
8815 this._d =
0xa54ff53a |
0
8816 this._e =
0x510e527f |
0
8817 this._f =
0x9b05688c |
0
8818 this._g =
0x1f83d9ab |
0
8819 this._h =
0x5be0cd19 |
0
8825 return (X
>>> n) | (X << (
32 - n))
8832 function Ch (x, y, z) {
8833 return ((x & y) ^ ((~x) & z))
8836 function Maj (x, y, z) {
8837 return ((x & y) ^ (x & z) ^ (y & z))
8840 function Sigma0256 (x) {
8841 return (S(x,
2) ^ S(x,
13) ^ S(x,
22))
8844 function Sigma1256 (x) {
8845 return (S(x,
6) ^ S(x,
11) ^ S(x,
25))
8848 function Gamma0256 (x) {
8849 return (S(x,
7) ^ S(x,
18) ^ R(x,
3))
8852 function Gamma1256 (x) {
8853 return (S(x,
17) ^ S(x,
19) ^ R(x,
10))
8856 Sha256.prototype._update = function (M) {
8870 function calcW () { return Gamma1256(W[j -
2]) + W[j -
7] + Gamma0256(W[j -
15]) + W[j -
16] }
8874 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8875 var T2 = Sigma0256(a) + Maj(a, b, c)
8889 while (j <
16) loop(M.readInt32BE(j *
4))
8890 while (j <
64) loop(calcW())
8892 this._a = (a + this._a) |
0
8893 this._b = (b + this._b) |
0
8894 this._c = (c + this._c) |
0
8895 this._d = (d + this._d) |
0
8896 this._e = (e + this._e) |
0
8897 this._f = (f + this._f) |
0
8898 this._g = (g + this._g) |
0
8899 this._h = (h + this._h) |
0
8902 Sha256.prototype._hash = function () {
8903 var H = new Buffer(
32)
8905 H.writeInt32BE(this._a,
0)
8906 H.writeInt32BE(this._b,
4)
8907 H.writeInt32BE(this._c,
8)
8908 H.writeInt32BE(this._d,
12)
8909 H.writeInt32BE(this._e,
16)
8910 H.writeInt32BE(this._f,
20)
8911 H.writeInt32BE(this._g,
24)
8912 H.writeInt32BE(this._h,
28)
8917 module.exports = Sha256
8919 }).call(this,require("buffer").Buffer)
8920 },{"./hash":
37,"buffer":
7,"inherits":
35}],
43:[function(require,module,exports){
8922 var inherits = require('inherits')
8923 var SHA512 = require('./sha512')
8924 var Hash = require('./hash')
8926 var W = new Array(
160)
8928 function Sha384 () {
8932 Hash.call(this,
128,
112)
8935 inherits(Sha384, SHA512)
8937 Sha384.prototype.init = function () {
8938 this._a =
0xcbbb9d5d |
0
8939 this._b =
0x629a292a |
0
8940 this._c =
0x9159015a |
0
8941 this._d =
0x152fecd8 |
0
8942 this._e =
0x67332667 |
0
8943 this._f =
0x8eb44a87 |
0
8944 this._g =
0xdb0c2e0d |
0
8945 this._h =
0x47b5481d |
0
8947 this._al =
0xc1059ed8 |
0
8948 this._bl =
0x367cd507 |
0
8949 this._cl =
0x3070dd17 |
0
8950 this._dl =
0xf70e5939 |
0
8951 this._el =
0xffc00b31 |
0
8952 this._fl =
0x68581511 |
0
8953 this._gl =
0x64f98fa7 |
0
8954 this._hl =
0xbefa4fa4 |
0
8959 Sha384.prototype._hash = function () {
8960 var H = new Buffer(
48)
8962 function writeInt64BE (h, l, offset) {
8963 H.writeInt32BE(h, offset)
8964 H.writeInt32BE(l, offset +
4)
8967 writeInt64BE(this._a, this._al,
0)
8968 writeInt64BE(this._b, this._bl,
8)
8969 writeInt64BE(this._c, this._cl,
16)
8970 writeInt64BE(this._d, this._dl,
24)
8971 writeInt64BE(this._e, this._el,
32)
8972 writeInt64BE(this._f, this._fl,
40)
8977 module.exports = Sha384
8979 }).call(this,require("buffer").Buffer)
8980 },{"./hash":
37,"./sha512":
44,"buffer":
7,"inherits":
35}],
44:[function(require,module,exports){
8982 var inherits = require('inherits')
8983 var Hash = require('./hash')
8986 0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
8987 0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
8988 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
8989 0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
8990 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
8991 0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
8992 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
8993 0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
8994 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
8995 0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
8996 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
8997 0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
8998 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
8999 0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
9000 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
9001 0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
9002 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
9003 0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
9004 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
9005 0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
9006 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
9007 0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
9008 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
9009 0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
9010 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
9011 0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
9012 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
9013 0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
9014 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
9015 0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
9016 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
9017 0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
9018 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
9019 0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
9020 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
9021 0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
9022 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
9023 0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
9024 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
9025 0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817
9028 var W = new Array(
160)
9030 function Sha512 () {
9034 Hash.call(this,
128,
112)
9037 inherits(Sha512, Hash)
9039 Sha512.prototype.init = function () {
9040 this._a =
0x6a09e667 |
0
9041 this._b =
0xbb67ae85 |
0
9042 this._c =
0x3c6ef372 |
0
9043 this._d =
0xa54ff53a |
0
9044 this._e =
0x510e527f |
0
9045 this._f =
0x9b05688c |
0
9046 this._g =
0x1f83d9ab |
0
9047 this._h =
0x5be0cd19 |
0
9049 this._al =
0xf3bcc908 |
0
9050 this._bl =
0x84caa73b |
0
9051 this._cl =
0xfe94f82b |
0
9052 this._dl =
0x5f1d36f1 |
0
9053 this._el =
0xade682d1 |
0
9054 this._fl =
0x2b3e6c1f |
0
9055 this._gl =
0xfb41bd6b |
0
9056 this._hl =
0x137e2179 |
0
9061 function S (X, Xl, n) {
9062 return (X
>>> n) | (Xl << (
32 - n))
9065 function Ch (x, y, z) {
9066 return ((x & y) ^ ((~x) & z))
9069 function Maj (x, y, z) {
9070 return ((x & y) ^ (x & z) ^ (y & z))
9073 Sha512.prototype._update = function (M) {
9085 var al = this._al |
0
9086 var bl = this._bl |
0
9087 var cl = this._cl |
0
9088 var dl = this._dl |
0
9089 var el = this._el |
0
9090 var fl = this._fl |
0
9091 var gl = this._gl |
0
9092 var hl = this._hl |
0
9097 var x = W[j -
15 *
2]
9098 var xl = W[j -
15 *
2 +
1]
9099 var gamma0 = S(x, xl,
1) ^ S(x, xl,
8) ^ (x
>>> 7)
9100 var gamma0l = S(xl, x,
1) ^ S(xl, x,
8) ^ S(xl, x,
7)
9103 xl = W[j -
2 *
2 +
1]
9104 var gamma1 = S(x, xl,
19) ^ S(xl, x,
29) ^ (x
>>> 6)
9105 var gamma1l = S(xl, x,
19) ^ S(x, xl,
29) ^ S(xl, x,
6)
9107 // W[i] = gamma0 + W[i -
7] + gamma1 + W[i -
16]
9108 var Wi7 = W[j -
7 *
2]
9109 var Wi7l = W[j -
7 *
2 +
1]
9111 var Wi16 = W[j -
16 *
2]
9112 var Wi16l = W[j -
16 *
2 +
1]
9114 Wil = gamma0l + Wi7l
9115 Wi = gamma0 + Wi7 + ((Wil
>>> 0) < (gamma0l
>>> 0) ?
1 :
0)
9117 Wi = Wi + gamma1 + ((Wil
>>> 0) < (gamma1l
>>> 0) ?
1 :
0)
9119 Wi = Wi + Wi16 + ((Wil
>>> 0) < (Wi16l
>>> 0) ?
1 :
0)
9126 var maj = Maj(a, b, c)
9127 var majl = Maj(al, bl, cl)
9129 var sigma0h = S(a, al,
28) ^ S(al, a,
2) ^ S(al, a,
7)
9130 var sigma0l = S(al, a,
28) ^ S(a, al,
2) ^ S(a, al,
7)
9131 var sigma1h = S(e, el,
14) ^ S(e, el,
18) ^ S(el, e,
9)
9132 var sigma1l = S(el, e,
14) ^ S(el, e,
18) ^ S(e, el,
9)
9134 // t1 = h + sigma1 + ch + K[i] + W[i]
9138 var ch = Ch(e, f, g)
9139 var chl = Ch(el, fl, gl)
9141 var t1l = hl + sigma1l
9142 var t1 = h + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0)
9144 t1 = t1 + ch + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0)
9146 t1 = t1 + Ki + ((t1l
>>> 0) < (Kil
>>> 0) ?
1 :
0)
9148 t1 = t1 + Wi + ((t1l
>>> 0) < (Wil
>>> 0) ?
1 :
0)
9150 // t2 = sigma0 + maj
9151 var t2l = sigma0l + majl
9152 var t2 = sigma0h + maj + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0)
9161 e = (d + t1 + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9168 al = (t1l + t2l) |
0
9169 a = (t1 + t2 + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0
9176 Wi = M.readInt32BE(j *
4)
9177 Wil = M.readInt32BE(j *
4 +
4)
9187 this._al = (this._al + al) |
0
9188 this._bl = (this._bl + bl) |
0
9189 this._cl = (this._cl + cl) |
0
9190 this._dl = (this._dl + dl) |
0
9191 this._el = (this._el + el) |
0
9192 this._fl = (this._fl + fl) |
0
9193 this._gl = (this._gl + gl) |
0
9194 this._hl = (this._hl + hl) |
0
9196 this._a = (this._a + a + ((this._al
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0
9197 this._b = (this._b + b + ((this._bl
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0
9198 this._c = (this._c + c + ((this._cl
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0
9199 this._d = (this._d + d + ((this._dl
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9200 this._e = (this._e + e + ((this._el
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0
9201 this._f = (this._f + f + ((this._fl
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0
9202 this._g = (this._g + g + ((this._gl
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0
9203 this._h = (this._h + h + ((this._hl
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0
9206 Sha512.prototype._hash = function () {
9207 var H = new Buffer(
64)
9209 function writeInt64BE (h, l, offset) {
9210 H.writeInt32BE(h, offset)
9211 H.writeInt32BE(l, offset +
4)
9214 writeInt64BE(this._a, this._al,
0)
9215 writeInt64BE(this._b, this._bl,
8)
9216 writeInt64BE(this._c, this._cl,
16)
9217 writeInt64BE(this._d, this._dl,
24)
9218 writeInt64BE(this._e, this._el,
32)
9219 writeInt64BE(this._f, this._fl,
40)
9220 writeInt64BE(this._g, this._gl,
48)
9221 writeInt64BE(this._h, this._hl,
56)
9226 module.exports = Sha512
9228 }).call(this,require(
"buffer").Buffer)
9229 },{
"./hash":
37,
"buffer":
7,
"inherits":
35}],
45:[function(require,module,exports){
9232 var createHash = require('create-hash/browser');
9233 var inherits = require('inherits')
9235 var Transform = require('stream').Transform
9237 var ZEROS = new Buffer(
128)
9240 function Hmac(alg, key) {
9241 Transform.call(this)
9243 if (typeof key === 'string') {
9244 key = new Buffer(key)
9247 var blocksize = (alg === 'sha512' || alg === 'sha384') ?
128 :
64
9252 if (key.length
> blocksize) {
9253 key = createHash(alg).update(key).digest()
9255 } else if (key.length < blocksize) {
9256 key = Buffer.concat([key, ZEROS], blocksize)
9259 var ipad = this._ipad = new Buffer(blocksize)
9260 var opad = this._opad = new Buffer(blocksize)
9262 for (var i =
0; i < blocksize; i++) {
9263 ipad[i] = key[i] ^
0x36
9264 opad[i] = key[i] ^
0x5C
9267 this._hash = createHash(alg).update(ipad)
9270 inherits(Hmac, Transform)
9272 Hmac.prototype.update = function (data, enc) {
9273 this._hash.update(data, enc)
9278 Hmac.prototype._transform = function (data, _, next) {
9279 this._hash.update(data)
9284 Hmac.prototype._flush = function (next) {
9285 this.push(this.digest())
9290 Hmac.prototype.digest = function (enc) {
9291 var h = this._hash.digest()
9293 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9296 module.exports = function createHmac(alg, key) {
9297 return new Hmac(alg, key)
9300 }).call(this,require("buffer").Buffer)
9301 },{"buffer":
7,"create-hash/browser":
32,"inherits":
46,"stream":
26}],
46:[function(require,module,exports){
9302 arguments[
4][
12][
0].apply(exports,arguments)
9303 },{"dup":
12}],
47:[function(require,module,exports){
9304 var assert = require('assert')
9305 var BigInteger = require('bigi')
9307 var Point = require('./point')
9309 function Curve(p, a, b, Gx, Gy, n, h) {
9313 this.G = Point.fromAffine(this, Gx, Gy)
9317 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9320 this.pOverFour = p.add(BigInteger.ONE).shiftRight(
2)
9323 Curve.prototype.pointFromX = function(isOdd, x) {
9324 var alpha = x.pow(
3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9325 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9328 if (beta.isEven() ^ !isOdd) {
9329 y = this.p.subtract(y) // -y % p
9332 return Point.fromAffine(this, x, y)
9335 Curve.prototype.isInfinity = function(Q) {
9336 if (Q === this.infinity) return true
9338 return Q.z.signum() ===
0 && Q.y.signum() !==
0
9341 Curve.prototype.isOnCurve = function(Q) {
9342 if (this.isInfinity(Q)) return true
9350 // Check that xQ and yQ are integers in the interval [
0, p -
1]
9351 if (x.signum() <
0 || x.compareTo(p)
>=
0) return false
9352 if (y.signum() <
0 || y.compareTo(p)
>=
0) return false
9354 // and check that y^
2 = x^
3 + ax + b (mod p)
9355 var lhs = y.square().mod(p)
9356 var rhs = x.pow(
3).add(a.multiply(x)).add(b).mod(p)
9357 return lhs.equals(rhs)
9361 * Validate an elliptic curve point.
9363 * See SEC
1, section
3.2.2.1: Elliptic Curve Public Key Validation Primitive
9365 Curve.prototype.validate = function(Q) {
9367 assert(!this.isInfinity(Q), 'Point is at infinity')
9368 assert(this.isOnCurve(Q), 'Point is not on the curve')
9370 // Check nQ = O (where Q is a scalar multiple of G)
9371 var nQ = Q.multiply(this.n)
9372 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9377 module.exports = Curve
9379 },{"./point":
51,"assert":
5,"bigi":
3}],
48:[function(require,module,exports){
9382 "p": "fffffffdffffffffffffffffffffffff",
9383 "a": "fffffffdfffffffffffffffffffffffc",
9384 "b": "e87579c11079f43dd824993c2cee5ed3",
9385 "n": "fffffffe0000000075a30d1b9038a115",
9387 "Gx": "
161ff7528b899b2d0c28607ca52c5b86",
9388 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9391 "p": "fffffffffffffffffffffffffffffffeffffac73",
9394 "n": "
0100000000000000000001b8fa16dfab9aca16b6b3",
9396 "Gx": "
3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9397 "Gy": "
938cf935318fdced6bc28286531733c3f03c4fee"
9400 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9401 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9402 "b": "
1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9403 "n": "
0100000000000000000001f4c8f927aed3ca752257",
9405 "Gx": "
4a96b5688ef573284664698968c38bb913cbfc82",
9406 "Gy": "
23a628553168947d59dcc912042351377ac5fb32"
9409 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9412 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9414 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9415 "Gy": "
9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9418 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9419 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9420 "b": "
64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9421 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9423 "Gx": "
188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9424 "Gy": "
07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9427 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9430 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9432 "Gx": "
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9433 "Gy": "
483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9436 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9437 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9438 "b": "
5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9439 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9441 "Gx": "
6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9442 "Gy": "
4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9446 },{}],
49:[function(require,module,exports){
9447 var Point = require('./point')
9448 var Curve = require('./curve')
9450 var getCurveByName = require('./names')
9455 getCurveByName: getCurveByName
9458 },{"./curve":
47,"./names":
50,"./point":
51}],
50:[function(require,module,exports){
9459 var BigInteger = require('bigi')
9461 var curves = require('./curves')
9462 var Curve = require('./curve')
9464 function getCurveByName(name) {
9465 var curve = curves[name]
9466 if (!curve) return null
9468 var p = new BigInteger(curve.p,
16)
9469 var a = new BigInteger(curve.a,
16)
9470 var b = new BigInteger(curve.b,
16)
9471 var n = new BigInteger(curve.n,
16)
9472 var h = new BigInteger(curve.h,
16)
9473 var Gx = new BigInteger(curve.Gx,
16)
9474 var Gy = new BigInteger(curve.Gy,
16)
9476 return new Curve(p, a, b, Gx, Gy, n, h)
9479 module.exports = getCurveByName
9481 },{"./curve":
47,"./curves":
48,"bigi":
3}],
51:[function(require,module,exports){
9483 var assert = require('assert')
9484 var BigInteger = require('bigi')
9486 var THREE = BigInteger.valueOf(
3)
9488 function Point(curve, x, y, z) {
9489 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9497 this.compressed = true
9500 Object.defineProperty(Point.prototype, 'zInv', {
9502 if (this._zInv === null) {
9503 this._zInv = this.z.modInverse(this.curve.p)
9510 Object.defineProperty(Point.prototype, 'affineX', {
9512 return this.x.multiply(this.zInv).mod(this.curve.p)
9516 Object.defineProperty(Point.prototype, 'affineY', {
9518 return this.y.multiply(this.zInv).mod(this.curve.p)
9522 Point.fromAffine = function(curve, x, y) {
9523 return new Point(curve, x, y, BigInteger.ONE)
9526 Point.prototype.equals = function(other) {
9527 if (other === this) return true
9528 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9529 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9531 // u = Y2 * Z1 - Y1 * Z2
9532 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9534 if (u.signum() !==
0) return false
9536 // v = X2 * Z1 - X1 * Z2
9537 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9539 return v.signum() ===
0
9542 Point.prototype.negate = function() {
9543 var y = this.curve.p.subtract(this.y)
9545 return new Point(this.curve, this.x, y, this.z)
9548 Point.prototype.add = function(b) {
9549 if (this.curve.isInfinity(this)) return b
9550 if (this.curve.isInfinity(b)) return this
9557 // u = Y2 * Z1 - Y1 * Z2
9558 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9559 // v = X2 * Z1 - X1 * Z2
9560 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9562 if (v.signum() ===
0) {
9563 if (u.signum() ===
0) {
9564 return this.twice() // this == b, so double
9567 return this.curve.infinity // this = -b, so infinity
9571 var v3 = v2.multiply(v)
9572 var x1v2 = x1.multiply(v2)
9573 var zu2 = u.square().multiply(this.z)
9575 // x3 = v * (z2 * (z1 * u^
2 -
2 * x1 * v^
2) - v^
3)
9576 var x3 = zu2.subtract(x1v2.shiftLeft(
1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9577 // y3 = z2 * (
3 * x1 * u * v^
2 - y1 * v^
3 - z1 * u^
3) + u * v^
3
9578 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)
9579 // z3 = v^
3 * z1 * z2
9580 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9582 return new Point(this.curve, x3, y3, z3)
9585 Point.prototype.twice = function() {
9586 if (this.curve.isInfinity(this)) return this
9587 if (this.y.signum() ===
0) return this.curve.infinity
9592 var y1z1 = y1.multiply(this.z)
9593 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9594 var a = this.curve.a
9596 // w =
3 * x1^
2 + a * z1^
2
9597 var w = x1.square().multiply(THREE)
9599 if (a.signum() !==
0) {
9600 w = w.add(this.z.square().multiply(a))
9603 w = w.mod(this.curve.p)
9604 // x3 =
2 * y1 * z1 * (w^
2 -
8 * x1 * y1^
2 * z1)
9605 var x3 = w.square().subtract(x1.shiftLeft(
3).multiply(y1sqz1)).shiftLeft(
1).multiply(y1z1).mod(this.curve.p)
9606 // y3 =
4 * y1^
2 * z1 * (
3 * w * x1 -
2 * y1^
2 * z1) - w^
3
9607 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(
1)).shiftLeft(
2).multiply(y1sqz1).subtract(w.pow(
3)).mod(this.curve.p)
9608 // z3 =
8 * (y1 * z1)^
3
9609 var z3 = y1z1.pow(
3).shiftLeft(
3).mod(this.curve.p)
9611 return new Point(this.curve, x3, y3, z3)
9614 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9615 // TODO: modularize the multiplication algorithm
9616 Point.prototype.multiply = function(k) {
9617 if (this.curve.isInfinity(this)) return this
9618 if (k.signum() ===
0) return this.curve.infinity
9621 var h = e.multiply(THREE)
9623 var neg = this.negate()
9626 for (var i = h.bitLength() -
2; i
> 0; --i) {
9629 var hBit = h.testBit(i)
9630 var eBit = e.testBit(i)
9633 R = R.add(hBit ? this : neg)
9640 // Compute this*j + x*k (simultaneous multiplication)
9641 Point.prototype.multiplyTwo = function(j, x, k) {
9644 if (j.bitLength()
> k.bitLength())
9645 i = j.bitLength() -
1
9647 i = k.bitLength() -
1
9649 var R = this.curve.infinity
9650 var both = this.add(x)
9655 var jBit = j.testBit(i)
9656 var kBit = k.testBit(i)
9677 Point.prototype.getEncoded = function(compressed) {
9678 if (compressed == undefined) compressed = this.compressed
9679 if (this.curve.isInfinity(this)) return new Buffer('
00', 'hex') // Infinity point encoded is simply '
00'
9681 var x = this.affineX
9682 var y = this.affineY
9686 // Determine size of q in bytes
9687 var byteLength = Math.floor((this.curve.p.bitLength() +
7) /
8)
9691 buffer = new Buffer(
1 + byteLength)
9692 buffer.writeUInt8(y.isEven() ?
0x02 :
0x03,
0)
9696 buffer = new Buffer(
1 + byteLength + byteLength)
9697 buffer.writeUInt8(
0x04,
0)
9699 y.toBuffer(byteLength).copy(buffer,
1 + byteLength)
9702 x.toBuffer(byteLength).copy(buffer,
1)
9707 Point.decodeFrom = function(curve, buffer) {
9708 var type = buffer.readUInt8(
0)
9709 var compressed = (type !==
4)
9711 var byteLength = Math.floor((curve.p.bitLength() +
7) /
8)
9712 var x = BigInteger.fromBuffer(buffer.slice(
1,
1 + byteLength))
9716 assert.equal(buffer.length, byteLength +
1, 'Invalid sequence length')
9717 assert(type ===
0x02 || type ===
0x03, 'Invalid sequence tag')
9719 var isOdd = (type ===
0x03)
9720 Q = curve.pointFromX(isOdd, x)
9723 assert.equal(buffer.length,
1 + byteLength + byteLength, 'Invalid sequence length')
9725 var y = BigInteger.fromBuffer(buffer.slice(
1 + byteLength))
9726 Q = Point.fromAffine(curve, x, y)
9729 Q.compressed = compressed
9733 Point.prototype.toString = function () {
9734 if (this.curve.isInfinity(this)) return '(INFINITY)'
9736 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9739 module.exports = Point
9741 }).call(this,require("buffer").Buffer)
9742 },{"assert":
5,"bigi":
3,"buffer":
7}],
52:[function(require,module,exports){
9743 (function (process,global,Buffer){
9746 var crypto = global.crypto || global.msCrypto
9747 if(crypto && crypto.getRandomValues) {
9748 module.exports = randomBytes;
9750 module.exports = oldBrowser;
9752 function randomBytes(size, cb) {
9753 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9754 /* This will not work in older browsers.
9755 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9758 crypto.getRandomValues(bytes);
9759 if (typeof cb === 'function') {
9760 return process.nextTick(function () {
9766 function oldBrowser() {
9768 'secure random number generation not supported by this browser\n'+
9769 'use chrome, FireFox or Internet Explorer
11'
9773 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9774 },{"_process":
14,"buffer":
7}],
53:[function(require,module,exports){
9778 function getFunctionName(fn) {
9779 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[
1];
9782 function getTypeTypeName(type) {
9783 if (nativeTypes.Function(type)) {
9784 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9786 if (nativeTypes.Object(type)) return JSON.stringify(type);
9791 function getValueTypeName(value) {
9792 if (nativeTypes.Null(value)) return '';
9794 return getFunctionName(value.constructor);
9797 function tfErrorString(type, value) {
9798 var typeTypeName = getTypeTypeName(type);
9799 var valueTypeName = getValueTypeName(value);
9801 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9804 function tfPropertyErrorString(type, name, value) {
9805 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9809 Array: (function (_Array) {
9810 function Array(_x) {
9811 return _Array.apply(this, arguments);
9814 Array.toString = function () {
9815 return _Array.toString();
9819 })(function (value) {
9820 return value !== null && value !== undefined && value.constructor === Array;
9822 Boolean: function Boolean(value) {
9823 return typeof value === 'boolean';
9825 Buffer: (function (_Buffer) {
9826 function Buffer(_x2) {
9827 return _Buffer.apply(this, arguments);
9830 Buffer.toString = function () {
9831 return _Buffer.toString();
9835 })(function (value) {
9836 return Buffer.isBuffer(value);
9838 Function: function Function(value) {
9839 return typeof value === 'function';
9841 Null: function Null(value) {
9842 return value === undefined || value === null;
9844 Number: function Number(value) {
9845 return typeof value === 'number';
9847 Object: function Object(value) {
9848 return typeof value === 'object';
9850 String: function String(value) {
9851 return typeof value === 'string';
9858 function tJSON(type) {
9859 return type && type.toJSON ? type.toJSON() : type;
9862 function sJSON(type) {
9863 var json = tJSON(type);
9864 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9868 arrayOf: function arrayOf(type) {
9869 function arrayOf(value, strict) {
9871 return nativeTypes.Array(value) && value.every(function (x) {
9872 return typeforce(type, x, strict);
9878 arrayOf.toJSON = function () {
9879 return [tJSON(type)];
9885 maybe: function maybe(type) {
9886 function maybe(value, strict) {
9887 return nativeTypes.Null(value) || typeforce(type, value, strict);
9889 maybe.toJSON = function () {
9890 return '?' + sJSON(type);
9896 object: function object(type) {
9897 function object(value, strict) {
9898 typeforce(nativeTypes.Object, value, strict);
9900 var propertyName, propertyType, propertyValue;
9903 for (propertyName in type) {
9904 propertyType = type[propertyName];
9905 propertyValue = value[propertyName];
9907 typeforce(propertyType, propertyValue, strict);
9910 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9914 for (propertyName in value) {
9915 if (type[propertyName]) continue;
9917 throw new TypeError('Unexpected property "' + propertyName + '"');
9923 object.toJSON = function () {
9930 oneOf: function oneOf() {
9931 for (var _len = arguments.length, types = Array(_len), _key =
0; _key < _len; _key++) {
9932 types[_key] = arguments[_key];
9935 function oneOf(value, strict) {
9936 return types.some(function (type) {
9938 return typeforce(type, value, strict);
9944 oneOf.toJSON = function () {
9945 return types.map(sJSON).join('|');
9951 quacksLike: function quacksLike(type) {
9952 function quacksLike(value, strict) {
9953 return type === getValueTypeName(value);
9955 quacksLike.toJSON = function () {
9962 tuple: function tuple() {
9963 for (var _len2 = arguments.length, types = Array(_len2), _key2 =
0; _key2 < _len2; _key2++) {
9964 types[_key2] = arguments[_key2];
9967 function tuple(value, strict) {
9968 return types.every(function (type, i) {
9969 return typeforce(type, value[i], strict);
9972 tuple.toJSON = function () {
9973 return '(' + types.map(sJSON).join(', ') + ')';
9979 value: function value(expected) {
9980 function value(actual) {
9981 return actual === expected;
9983 value.toJSON = function () {
9991 function compile(type) {
9992 if (nativeTypes.String(type)) {
9993 if (type[
0] === '?') return otherTypes.maybe(compile(type.slice(
1)));
9995 return nativeTypes[type] || otherTypes.quacksLike(type);
9996 } else if (type && nativeTypes.Object(type)) {
9997 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[
0]));
10001 for (var propertyName in type) {
10002 compiled[propertyName] = compile(type[propertyName]);
10005 return otherTypes.object(compiled);
10006 } else if (nativeTypes.Function(type)) {
10010 return otherTypes.value(type);
10013 function typeforce(_x3, _x4, _x5) {
10016 _function: while (_again) {
10022 if (nativeTypes.Function(type)) {
10023 if (type(value, strict)) return true;
10025 throw new TypeError(tfErrorString(type, value));
10029 _x3 = compile(type);
10033 continue _function;
10037 // assign all types to typeforce function
10039 Object.keys(nativeTypes).forEach(function (typeName) {
10040 var nativeType = nativeTypes[typeName];
10041 nativeType.toJSON = function () {
10045 typeforce[typeName] = nativeType;
10048 for (typeName in otherTypes) {
10049 typeforce[typeName] = otherTypes[typeName];
10052 module.exports = typeforce;
10053 module.exports.compile = compile;
10054 }).call(this,require("buffer").Buffer)
10055 },{"buffer":
7}],
54:[function(require,module,exports){
10056 (function (Buffer){
10057 var assert = require('assert')
10058 var base58check = require('bs58check')
10059 var typeForce = require('typeforce')
10060 var networks = require('./networks')
10061 var scripts = require('./scripts')
10063 function findScriptTypeByVersion (version) {
10064 for (var networkName in networks) {
10065 var network = networks[networkName]
10067 if (version === network.pubKeyHash) return 'pubkeyhash'
10068 if (version === network.scriptHash) return 'scripthash'
10072 function Address (hash, version) {
10073 typeForce('Buffer', hash)
10075 assert.strictEqual(hash.length,
20, 'Invalid hash length')
10076 assert.strictEqual(version &
0xff, version, 'Invalid version byte')
10079 this.version = version
10082 Address.fromBase58Check = function (string) {
10083 var payload = base58check.decode(string)
10084 var version = payload.readUInt8(
0)
10085 var hash = payload.slice(
1)
10087 return new Address(hash, version)
10090 Address.fromOutputScript = function (script, network) {
10091 network = network || networks.bitcoin
10093 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[
2], network.pubKeyHash)
10094 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[
1], network.scriptHash)
10096 assert(false, script.toASM() + ' has no matching Address')
10099 Address.prototype.toBase58Check = function () {
10100 var payload = new Buffer(
21)
10101 payload.writeUInt8(this.version,
0)
10102 this.hash.copy(payload,
1)
10104 return base58check.encode(payload)
10107 Address.prototype.toOutputScript = function () {
10108 var scriptType = findScriptTypeByVersion(this.version)
10110 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10111 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10113 assert(false, this.toString() + ' has no matching Script')
10116 Address.prototype.toString = Address.prototype.toBase58Check
10118 module.exports = Address
10120 }).call(this,require("buffer").Buffer)
10121 },{"./networks":
66,"./scripts":
69,"assert":
5,"bs58check":
31,"buffer":
7,"typeforce":
53}],
55:[function(require,module,exports){
10122 var bs58check = require('bs58check')
10124 function decode () {
10125 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10127 return bs58check.decode.apply(undefined, arguments)
10130 function encode () {
10131 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10133 return bs58check.encode.apply(undefined, arguments)
10141 },{"bs58check":
31}],
56:[function(require,module,exports){
10142 (function (Buffer){
10143 var assert = require('assert')
10144 var bufferutils = require('./bufferutils')
10145 var crypto = require('./crypto')
10147 var Transaction = require('./transaction')
10149 function Block () {
10151 this.prevHash = null
10152 this.merkleRoot = null
10158 Block.fromBuffer = function (buffer) {
10159 assert(buffer.length
>=
80, 'Buffer too small (<
80 bytes)')
10162 function readSlice (n) {
10164 return buffer.slice(offset - n, offset)
10167 function readUInt32 () {
10168 var i = buffer.readUInt32LE(offset)
10173 var block = new Block()
10174 block.version = readUInt32()
10175 block.prevHash = readSlice(
32)
10176 block.merkleRoot = readSlice(
32)
10177 block.timestamp = readUInt32()
10178 block.bits = readUInt32()
10179 block.nonce = readUInt32()
10181 if (buffer.length ===
80) return block
10183 function readVarInt () {
10184 var vi = bufferutils.readVarInt(buffer, offset)
10189 // FIXME: poor performance
10190 function readTransaction () {
10191 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10193 offset += tx.toBuffer().length
10197 var nTransactions = readVarInt()
10198 block.transactions = []
10200 for (var i =
0; i < nTransactions; ++i) {
10201 var tx = readTransaction()
10202 block.transactions.push(tx)
10208 Block.fromHex = function (hex) {
10209 return Block.fromBuffer(new Buffer(hex, 'hex'))
10212 Block.prototype.getHash = function () {
10213 return crypto.hash256(this.toBuffer(true))
10216 Block.prototype.getId = function () {
10217 return bufferutils.reverse(this.getHash()).toString('hex')
10220 Block.prototype.getUTCDate = function () {
10221 var date = new Date(
0) // epoch
10222 date.setUTCSeconds(this.timestamp)
10227 Block.prototype.toBuffer = function (headersOnly) {
10228 var buffer = new Buffer(
80)
10231 function writeSlice (slice) {
10232 slice.copy(buffer, offset)
10233 offset += slice.length
10236 function writeUInt32 (i) {
10237 buffer.writeUInt32LE(i, offset)
10241 writeUInt32(this.version)
10242 writeSlice(this.prevHash)
10243 writeSlice(this.merkleRoot)
10244 writeUInt32(this.timestamp)
10245 writeUInt32(this.bits)
10246 writeUInt32(this.nonce)
10248 if (headersOnly || !this.transactions) return buffer
10250 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10251 var txBuffers = this.transactions.map(function (tx) {
10252 return tx.toBuffer()
10255 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10258 Block.prototype.toHex = function (headersOnly) {
10259 return this.toBuffer(headersOnly).toString('hex')
10262 module.exports = Block
10264 }).call(this,require("buffer").Buffer)
10265 },{"./bufferutils":
57,"./crypto":
58,"./transaction":
70,"assert":
5,"buffer":
7}],
57:[function(require,module,exports){
10266 (function (Buffer){
10267 var assert = require('assert')
10268 var opcodes = require('./opcodes')
10270 // https://github.com/feross/buffer/blob/master/index.js#L1127
10271 function verifuint (value, max) {
10272 assert(typeof value === 'number', 'cannot write a non-number as a number')
10273 assert(value
>=
0, 'specified a negative value for writing an unsigned value')
10274 assert(value <= max, 'value is larger than maximum value for type')
10275 assert(Math.floor(value) === value, 'value has a fractional component')
10278 function pushDataSize (i) {
10279 return i < opcodes.OP_PUSHDATA1 ?
1
10285 function readPushDataInt (buffer, offset) {
10286 var opcode = buffer.readUInt8(offset)
10290 if (opcode < opcodes.OP_PUSHDATA1) {
10295 } else if (opcode === opcodes.OP_PUSHDATA1) {
10296 if (offset +
2 > buffer.length) return null
10297 number = buffer.readUInt8(offset +
1)
10301 } else if (opcode === opcodes.OP_PUSHDATA2) {
10302 if (offset +
3 > buffer.length) return null
10303 number = buffer.readUInt16LE(offset +
1)
10308 if (offset +
5 > buffer.length) return null
10309 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10311 number = buffer.readUInt32LE(offset +
1)
10322 function readUInt64LE (buffer, offset) {
10323 var a = buffer.readUInt32LE(offset)
10324 var b = buffer.readUInt32LE(offset +
4)
10327 verifuint(b + a,
0x001fffffffffffff)
10332 function readVarInt (buffer, offset) {
10333 var t = buffer.readUInt8(offset)
10342 } else if (t <
254) {
10343 number = buffer.readUInt16LE(offset +
1)
10347 } else if (t <
255) {
10348 number = buffer.readUInt32LE(offset +
1)
10353 number = readUInt64LE(buffer, offset +
1)
10363 function writePushDataInt (buffer, number, offset) {
10364 var size = pushDataSize(number)
10368 buffer.writeUInt8(number, offset)
10371 } else if (size ===
2) {
10372 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10373 buffer.writeUInt8(number, offset +
1)
10376 } else if (size ===
3) {
10377 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10378 buffer.writeUInt16LE(number, offset +
1)
10382 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10383 buffer.writeUInt32LE(number, offset +
1)
10389 function writeUInt64LE (buffer, value, offset) {
10390 verifuint(value,
0x001fffffffffffff)
10392 buffer.writeInt32LE(value & -
1, offset)
10393 buffer.writeUInt32LE(Math.floor(value /
0x100000000), offset +
4)
10396 function varIntSize (i) {
10399 : i <
0x100000000 ?
5
10403 function writeVarInt (buffer, number, offset) {
10404 var size = varIntSize(number)
10408 buffer.writeUInt8(number, offset)
10411 } else if (size ===
3) {
10412 buffer.writeUInt8(
253, offset)
10413 buffer.writeUInt16LE(number, offset +
1)
10416 } else if (size ===
5) {
10417 buffer.writeUInt8(
254, offset)
10418 buffer.writeUInt32LE(number, offset +
1)
10422 buffer.writeUInt8(
255, offset)
10423 writeUInt64LE(buffer, number, offset +
1)
10429 function varIntBuffer (i) {
10430 var size = varIntSize(i)
10431 var buffer = new Buffer(size)
10432 writeVarInt(buffer, i,
0)
10437 function reverse (buffer) {
10438 var buffer2 = new Buffer(buffer)
10439 Array.prototype.reverse.call(buffer2)
10444 pushDataSize: pushDataSize,
10445 readPushDataInt: readPushDataInt,
10446 readUInt64LE: readUInt64LE,
10447 readVarInt: readVarInt,
10449 varIntBuffer: varIntBuffer,
10450 varIntSize: varIntSize,
10451 writePushDataInt: writePushDataInt,
10452 writeUInt64LE: writeUInt64LE,
10453 writeVarInt: writeVarInt
10456 }).call(this,require("buffer").Buffer)
10457 },{"./opcodes":
67,"assert":
5,"buffer":
7}],
58:[function(require,module,exports){
10458 var createHash = require('create-hash')
10460 function hash160 (buffer) {
10461 return ripemd160(sha256(buffer))
10464 function hash256 (buffer) {
10465 return sha256(sha256(buffer))
10468 function ripemd160 (buffer) {
10469 return createHash('rmd160').update(buffer).digest()
10472 function sha1 (buffer) {
10473 return createHash('sha1').update(buffer).digest()
10476 function sha256 (buffer) {
10477 return createHash('sha256').update(buffer).digest()
10480 // FIXME: Name not consistent with others
10481 var createHmac = require('create-hmac')
10483 function HmacSHA256 (buffer, secret) {
10484 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10485 return createHmac('sha256', secret).update(buffer).digest()
10488 function HmacSHA512 (buffer, secret) {
10489 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10490 return createHmac('sha512', secret).update(buffer).digest()
10494 ripemd160: ripemd160,
10499 HmacSHA256: HmacSHA256,
10500 HmacSHA512: HmacSHA512
10503 },{"create-hash":
32,"create-hmac":
45}],
59:[function(require,module,exports){
10504 (function (Buffer){
10505 var assert = require('assert')
10506 var createHmac = require('create-hmac')
10507 var typeForce = require('typeforce')
10509 var BigInteger = require('bigi')
10510 var ECSignature = require('./ecsignature')
10512 var ZERO = new Buffer([
0])
10513 var ONE = new Buffer([
1])
10515 // https://tools.ietf.org/html/rfc6979#section-
3.2
10516 function deterministicGenerateK (curve, hash, d, checkSig) {
10517 typeForce('Buffer', hash)
10518 typeForce('BigInteger', d)
10520 // FIXME: remove/uncomment for
2.0.0
10521 // typeForce('Function', checkSig)
10523 if (typeof checkSig !== 'function') {
10524 console.warn('deterministicGenerateK requires a checkSig callback in
2.0.0, see #
337 for more information')
10526 checkSig = function (k) {
10529 var e = BigInteger.fromBuffer(hash)
10531 var Q = G.multiply(k)
10533 if (curve.isInfinity(Q))
10536 var r = Q.affineX.mod(n)
10537 if (r.signum() ===
0)
10540 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10541 if (s.signum() ===
0)
10549 assert.equal(hash.length,
32, 'Hash must be
256 bit')
10551 var x = d.toBuffer(
32)
10552 var k = new Buffer(
32)
10553 var v = new Buffer(
32)
10555 // Step A, ignored as hash already provided
10563 k = createHmac('sha256', k)
10571 v = createHmac('sha256', k).update(v).digest()
10574 k = createHmac('sha256', k)
10582 v = createHmac('sha256', k).update(v).digest()
10584 // Step H1/H2a, ignored as tlen === qlen (
256 bit)
10586 v = createHmac('sha256', k).update(v).digest()
10588 var T = BigInteger.fromBuffer(v)
10590 // Step H3, repeat until T is within the interval [
1, n -
1] and is suitable for ECDSA
10591 while ((T.signum() <=
0) || (T.compareTo(curve.n)
>=
0) || !checkSig(T)) {
10592 k = createHmac('sha256', k)
10597 v = createHmac('sha256', k).update(v).digest()
10599 // Step H1/H2a, again, ignored as tlen === qlen (
256 bit)
10601 v = createHmac('sha256', k).update(v).digest()
10602 T = BigInteger.fromBuffer(v)
10608 function sign (curve, hash, d) {
10611 var e = BigInteger.fromBuffer(hash)
10615 deterministicGenerateK(curve, hash, d, function (k) {
10616 var Q = G.multiply(k)
10618 if (curve.isInfinity(Q))
10621 r = Q.affineX.mod(n)
10622 if (r.signum() ===
0)
10625 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10626 if (s.signum() ===
0)
10632 var N_OVER_TWO = n.shiftRight(
1)
10634 // enforce low S values, see bip62: 'low s values in signatures'
10635 if (s.compareTo(N_OVER_TWO)
> 0) {
10639 return new ECSignature(r, s)
10642 function verifyRaw (curve, e, signature, Q) {
10646 var r = signature.r
10647 var s = signature.s
10649 //
1.4.1 Enforce r and s are both integers in the interval [
1, n −
1]
10650 if (r.signum() <=
0 || r.compareTo(n)
>=
0) return false
10651 if (s.signum() <=
0 || s.compareTo(n)
>=
0) return false
10654 var c = s.modInverse(n)
10656 //
1.4.4 Compute u1 = es^−
1 mod n
10657 // u2 = rs^−
1 mod n
10658 var u1 = e.multiply(c).mod(n)
10659 var u2 = r.multiply(c).mod(n)
10661 //
1.4.5 Compute R = (xR, yR) = u1G + u2Q
10662 var R = G.multiplyTwo(u1, Q, u2)
10663 var v = R.affineX.mod(n)
10665 //
1.4.5 (cont.) Enforce R is not at infinity
10666 if (curve.isInfinity(R)) return false
10668 //
1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10672 function verify (curve, hash, signature, Q) {
10673 //
1.4.2 H = Hash(M), already done by the user
10675 var e = BigInteger.fromBuffer(hash)
10677 return verifyRaw(curve, e, signature, Q)
10681 * Recover a public key from a signature.
10683 * See SEC
1: Elliptic Curve Cryptography, section
4.1.6, "Public
10684 * Key Recovery Operation".
10686 * http://www.secg.org/download/aid-
780/sec1-v2.pdf
10688 function recoverPubKey (curve, e, signature, i) {
10689 assert.strictEqual(i &
3, i, 'Recovery param is more than two bits')
10694 var r = signature.r
10695 var s = signature.s
10697 assert(r.signum()
> 0 && r.compareTo(n) <
0, 'Invalid r value')
10698 assert(s.signum()
> 0 && s.compareTo(n) <
0, 'Invalid s value')
10700 // A set LSB signifies that the y-coordinate is odd
10703 // The more significant bit specifies whether we should use the
10704 // first or second candidate key.
10705 var isSecondKey = i
>> 1
10707 //
1.1 Let x = r + jn
10708 var x = isSecondKey ? r.add(n) : r
10709 var R = curve.pointFromX(isYOdd, x)
10711 //
1.4 Check that nR is at infinity
10712 var nR = R.multiply(n)
10713 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10715 // Compute -e from e
10716 var eNeg = e.negate().mod(n)
10718 //
1.6.1 Compute Q = r^-
1 (sR - eG)
10719 // Q = r^-
1 (sR + -eG)
10720 var rInv = r.modInverse(n)
10722 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10729 * Calculate pubkey extraction parameter.
10731 * When extracting a pubkey from a signature, we have to
10732 * distinguish four different cases. Rather than putting this
10733 * burden on the verifier, Bitcoin includes a
2-bit value with the
10736 * This function simply tries all four cases and returns the value
10737 * that resulted in a successful pubkey recovery.
10739 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10740 for (var i =
0; i <
4; i++) {
10741 var Qprime = recoverPubKey(curve, e, signature, i)
10744 if (Qprime.equals(Q)) {
10749 throw new Error('Unable to find valid recovery factor')
10753 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10754 deterministicGenerateK: deterministicGenerateK,
10755 recoverPubKey: recoverPubKey,
10758 verifyRaw: verifyRaw
10761 }).call(this,require(
"buffer").Buffer)
10762 },{
"./ecsignature":
62,
"assert":
5,
"bigi":
3,
"buffer":
7,
"create-hmac":
45,
"typeforce":
53}],
60:[function(require,module,exports){
10763 (function (Buffer){
10764 var assert = require('assert')
10765 var base58check = require('bs58check')
10766 var ecdsa = require('./ecdsa')
10767 var networks = require('./networks')
10768 var randomBytes = require('randombytes')
10769 var typeForce = require('typeforce')
10771 var BigInteger = require('bigi')
10772 var ECPubKey = require('./ecpubkey')
10774 var ecurve = require('ecurve')
10775 var secp256k1 = ecurve.getCurveByName('secp256k1')
10777 function ECKey (d, compressed) {
10778 assert(d.signum()
> 0, 'Private key must be greater than
0')
10779 assert(d.compareTo(ECKey.curve.n) <
0, 'Private key must be less than the curve order')
10781 var Q = ECKey.curve.G.multiply(d)
10784 this.pub = new ECPubKey(Q, compressed)
10788 ECKey.curve = secp256k1
10790 // Static constructors
10791 ECKey.fromWIF = function (string) {
10792 var payload = base58check.decode(string)
10793 var compressed = false
10795 // Ignore the version byte
10796 payload = payload.slice(
1)
10798 if (payload.length ===
33) {
10799 assert.strictEqual(payload[
32],
0x01, 'Invalid compression flag')
10801 // Truncate the compression flag
10802 payload = payload.slice(
0, -
1)
10806 assert.equal(payload.length,
32, 'Invalid WIF payload length')
10808 var d = BigInteger.fromBuffer(payload)
10809 return new ECKey(d, compressed)
10812 ECKey.makeRandom = function (compressed, rng) {
10813 rng = rng || randomBytes
10815 var buffer = rng(
32)
10816 typeForce('Buffer', buffer)
10817 assert.equal(buffer.length,
32, 'Expected
256-bit Buffer from RNG')
10819 var d = BigInteger.fromBuffer(buffer)
10820 d = d.mod(ECKey.curve.n)
10822 return new ECKey(d, compressed)
10825 // Export functions
10826 ECKey.prototype.toWIF = function (network) {
10827 network = network || networks.bitcoin
10829 var bufferLen = this.pub.compressed ?
34 :
33
10830 var buffer = new Buffer(bufferLen)
10832 buffer.writeUInt8(network.wif,
0)
10833 this.d.toBuffer(
32).copy(buffer,
1)
10835 if (this.pub.compressed) {
10836 buffer.writeUInt8(
0x01,
33)
10839 return base58check.encode(buffer)
10843 ECKey.prototype.sign = function (hash) {
10844 return ecdsa.sign(ECKey.curve, hash, this.d)
10847 module.exports = ECKey
10849 }).call(this,require(
"buffer").Buffer)
10850 },{
"./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){
10851 (function (Buffer){
10852 var crypto = require('./crypto')
10853 var ecdsa = require('./ecdsa')
10854 var typeForce = require('typeforce')
10855 var networks = require('./networks')
10857 var Address = require('./address')
10859 var ecurve = require('ecurve')
10860 var secp256k1 = ecurve.getCurveByName('secp256k1')
10862 function ECPubKey (Q, compressed) {
10863 if (compressed === undefined) {
10867 typeForce('Point', Q)
10868 typeForce('Boolean', compressed)
10870 this.compressed = compressed
10875 ECPubKey.curve = secp256k1
10877 // Static constructors
10878 ECPubKey.fromBuffer = function (buffer) {
10879 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10880 return new ECPubKey(Q, Q.compressed)
10883 ECPubKey.fromHex = function (hex) {
10884 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10888 ECPubKey.prototype.getAddress = function (network) {
10889 network = network || networks.bitcoin
10891 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10894 ECPubKey.prototype.verify = function (hash, signature) {
10895 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10898 // Export functions
10899 ECPubKey.prototype.toBuffer = function () {
10900 return this.Q.getEncoded(this.compressed)
10903 ECPubKey.prototype.toHex = function () {
10904 return this.toBuffer().toString('hex')
10907 module.exports = ECPubKey
10909 }).call(this,require(
"buffer").Buffer)
10910 },{
"./address":
54,
"./crypto":
58,
"./ecdsa":
59,
"./networks":
66,
"buffer":
7,
"ecurve":
49,
"typeforce":
53}],
62:[function(require,module,exports){
10911 (function (Buffer){
10912 var assert = require('assert')
10913 var typeForce = require('typeforce')
10915 var BigInteger = require('bigi')
10917 function ECSignature (r, s) {
10918 typeForce('BigInteger', r)
10919 typeForce('BigInteger', s)
10925 ECSignature.parseCompact = function (buffer) {
10926 assert.equal(buffer.length,
65, 'Invalid signature length')
10927 var i = buffer.readUInt8(
0) -
27
10930 assert.equal(i, i &
7, 'Invalid signature parameter')
10931 var compressed = !!(i &
4)
10933 // Recovery param only
10936 var r = BigInteger.fromBuffer(buffer.slice(
1,
33))
10937 var s = BigInteger.fromBuffer(buffer.slice(
33))
10940 compressed: compressed,
10942 signature: new ECSignature(r, s)
10946 ECSignature.fromDER = function (buffer) {
10947 assert.equal(buffer.readUInt8(
0),
0x30, 'Not a DER sequence')
10948 assert.equal(buffer.readUInt8(
1), buffer.length -
2, 'Invalid sequence length')
10949 assert.equal(buffer.readUInt8(
2),
0x02, 'Expected a DER integer')
10951 var rLen = buffer.readUInt8(
3)
10952 assert(rLen
> 0, 'R length is zero')
10954 var offset =
4 + rLen
10955 assert.equal(buffer.readUInt8(offset),
0x02, 'Expected a DER integer (
2)')
10957 var sLen = buffer.readUInt8(offset +
1)
10958 assert(sLen
> 0, 'S length is zero')
10960 var rB = buffer.slice(
4, offset)
10961 var sB = buffer.slice(offset +
2)
10964 if (rLen
> 1 && rB.readUInt8(
0) ===
0x00) {
10965 assert(rB.readUInt8(
1) &
0x80, 'R value excessively padded')
10968 if (sLen
> 1 && sB.readUInt8(
0) ===
0x00) {
10969 assert(sB.readUInt8(
1) &
0x80, 'S value excessively padded')
10972 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10973 var r = BigInteger.fromDERInteger(rB)
10974 var s = BigInteger.fromDERInteger(sB)
10976 assert(r.signum()
>=
0, 'R value is negative')
10977 assert(s.signum()
>=
0, 'S value is negative')
10979 return new ECSignature(r, s)
10982 // BIP62:
1 byte hashType flag (only
0x01,
0x02,
0x03,
0x81,
0x82 and
0x83 are allowed)
10983 ECSignature.parseScriptSignature = function (buffer) {
10984 var hashType = buffer.readUInt8(buffer.length -
1)
10985 var hashTypeMod = hashType & ~
0x80
10987 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
10990 signature: ECSignature.fromDER(buffer.slice(
0, -
1)),
10995 ECSignature.prototype.toCompact = function (i, compressed) {
11002 var buffer = new Buffer(
65)
11003 buffer.writeUInt8(i,
0)
11005 this.r.toBuffer(
32).copy(buffer,
1)
11006 this.s.toBuffer(
32).copy(buffer,
33)
11011 ECSignature.prototype.toDER = function () {
11012 var rBa = this.r.toDERInteger()
11013 var sBa = this.s.toDERInteger()
11018 sequence.push(
0x02, rBa.length)
11019 sequence = sequence.concat(rBa)
11022 sequence.push(
0x02, sBa.length)
11023 sequence = sequence.concat(sBa)
11026 sequence.unshift(
0x30, sequence.length)
11028 return new Buffer(sequence)
11031 ECSignature.prototype.toScriptSignature = function (hashType) {
11032 var hashTypeMod = hashType & ~
0x80
11033 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
11035 var hashTypeBuffer = new Buffer(
1)
11036 hashTypeBuffer.writeUInt8(hashType,
0)
11038 return Buffer.concat([this.toDER(), hashTypeBuffer])
11041 module.exports = ECSignature
11043 }).call(this,require(
"buffer").Buffer)
11044 },{
"assert":
5,
"bigi":
3,
"buffer":
7,
"typeforce":
53}],
63:[function(require,module,exports){
11045 (function (Buffer){
11046 var assert = require('assert')
11047 var base58check = require('bs58check')
11048 var bcrypto = require('./crypto')
11049 var createHmac = require('create-hmac')
11050 var typeForce = require('typeforce')
11051 var networks = require('./networks')
11053 var BigInteger = require('bigi')
11054 var ECKey = require('./eckey')
11055 var ECPubKey = require('./ecpubkey')
11057 var ecurve = require('ecurve')
11058 var curve = ecurve.getCurveByName('secp256k1')
11060 function findBIP32NetworkByVersion (version) {
11061 for (var name in networks) {
11062 var network = networks[name]
11064 if (version === network.bip32.private || version === network.bip32.public) {
11069 assert(false, 'Could not find network for ' + version.toString(
16))
11072 function HDNode (K, chainCode, network) {
11073 network = network || networks.bitcoin
11075 typeForce('Buffer', chainCode)
11077 assert.equal(chainCode.length,
32, 'Expected chainCode length of
32, got ' + chainCode.length)
11078 assert(network.bip32, 'Unknown BIP32 constants for network')
11080 this.chainCode = chainCode
11083 this.parentFingerprint =
0x00000000
11084 this.network = network
11086 if (K instanceof BigInteger) {
11087 this.privKey = new ECKey(K, true)
11088 this.pubKey = this.privKey.pub
11089 } else if (K instanceof ECKey) {
11090 assert(K.pub.compressed, 'ECKey must be compressed')
11092 this.pubKey = K.pub
11093 } else if (K instanceof ECPubKey) {
11094 assert(K.compressed, 'ECPubKey must be compressed')
11097 this.pubKey = new ECPubKey(K, true)
11101 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11102 HDNode.HIGHEST_BIT =
0x80000000
11105 HDNode.fromSeedBuffer = function (seed, network) {
11106 typeForce('Buffer', seed)
11108 assert(seed.length
>=
16, 'Seed should be at least
128 bits')
11109 assert(seed.length <=
64, 'Seed should be at most
512 bits')
11111 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11112 var IL = I.slice(
0,
32)
11113 var IR = I.slice(
32)
11115 // In case IL is
0 or
>= n, the master key is invalid
11116 // This is handled by `new ECKey` in the HDNode constructor
11117 var pIL = BigInteger.fromBuffer(IL)
11119 return new HDNode(pIL, IR, network)
11122 HDNode.fromSeedHex = function (hex, network) {
11123 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11126 HDNode.fromBase58 = function (string, network) {
11127 return HDNode.fromBuffer(base58check.decode(string), network, true)
11130 // FIXME: remove in
2.x.y
11131 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11132 if (!__ignoreDeprecation) {
11133 console.warn('HDNode.fromBuffer() is deprecated for removal in
2.x.y, use fromBase58 instead')
11136 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11138 //
4 byte: version bytes
11139 var version = buffer.readUInt32BE(
0)
11142 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11146 network = findBIP32NetworkByVersion(version)
11149 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ...
11150 var depth = buffer.readUInt8(
4)
11152 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11153 var parentFingerprint = buffer.readUInt32BE(
5)
11155 assert.strictEqual(parentFingerprint,
0x00000000, 'Invalid parent fingerprint')
11158 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11159 // This is encoded in MSB order. (
0x00000000 if master key)
11160 var index = buffer.readUInt32BE(
9)
11161 assert(depth
> 0 || index ===
0, 'Invalid index')
11163 //
32 bytes: the chain code
11164 var chainCode = buffer.slice(
13,
45)
11167 //
33 bytes: private key data (
0x00 + k)
11168 if (version === network.bip32.private) {
11169 assert.strictEqual(buffer.readUInt8(
45),
0x00, 'Invalid private key')
11170 data = buffer.slice(
46,
78)
11171 var d = BigInteger.fromBuffer(data)
11172 hd = new HDNode(d, chainCode, network)
11174 //
33 bytes: public key data (
0x02 + X or
0x03 + X)
11176 data = buffer.slice(
45,
78)
11177 var Q = ecurve.Point.decodeFrom(curve, data)
11178 assert.equal(Q.compressed, true, 'Invalid public key')
11180 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11181 // If not, the extended public key is invalid.
11184 hd = new HDNode(Q, chainCode, network)
11189 hd.parentFingerprint = parentFingerprint
11194 // FIXME: remove in
2.x.y
11195 HDNode.fromHex = function (hex, network) {
11196 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11199 HDNode.prototype.getIdentifier = function () {
11200 return bcrypto.hash160(this.pubKey.toBuffer())
11203 HDNode.prototype.getFingerprint = function () {
11204 return this.getIdentifier().slice(
0,
4)
11207 HDNode.prototype.getAddress = function () {
11208 return this.pubKey.getAddress(this.network)
11211 HDNode.prototype.neutered = function () {
11212 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11213 neutered.depth = this.depth
11214 neutered.index = this.index
11215 neutered.parentFingerprint = this.parentFingerprint
11220 HDNode.prototype.toBase58 = function (isPrivate) {
11221 return base58check.encode(this.toBuffer(isPrivate, true))
11224 // FIXME: remove in
2.x.y
11225 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11226 if (isPrivate === undefined) {
11227 isPrivate = !!this.privKey
11229 // FIXME: remove in
2.x.y
11231 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11234 if (!__ignoreDeprecation) {
11235 console.warn('HDNode.toBuffer() is deprecated for removal in
2.x.y, use toBase58 instead')
11239 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11240 var buffer = new Buffer(HDNode.LENGTH)
11242 //
4 bytes: version bytes
11243 buffer.writeUInt32BE(version,
0)
11246 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ....
11247 buffer.writeUInt8(this.depth,
4)
11249 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11250 buffer.writeUInt32BE(this.parentFingerprint,
5)
11252 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11253 // This is encoded in Big endian. (
0x00000000 if master key)
11254 buffer.writeUInt32BE(this.index,
9)
11256 //
32 bytes: the chain code
11257 this.chainCode.copy(buffer,
13)
11259 //
33 bytes: the public key or private key data
11261 // FIXME: remove in
2.x.y
11262 assert(this.privKey, 'Missing private key')
11264 //
0x00 + k for private keys
11265 buffer.writeUInt8(
0,
45)
11266 this.privKey.d.toBuffer(
32).copy(buffer,
46)
11268 // X9.62 encoding for public keys
11269 this.pubKey.toBuffer().copy(buffer,
45)
11275 // FIXME: remove in
2.x.y
11276 HDNode.prototype.toHex = function (isPrivate) {
11277 return this.toBuffer(isPrivate).toString('hex')
11280 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#child-key-derivation-ckd-functions
11281 HDNode.prototype.derive = function (index) {
11282 var isHardened = index
>= HDNode.HIGHEST_BIT
11283 var indexBuffer = new Buffer(
4)
11284 indexBuffer.writeUInt32BE(index,
0)
11290 assert(this.privKey, 'Could not derive hardened child key')
11292 // data =
0x00 || ser256(kpar) || ser32(index)
11293 data = Buffer.concat([
11294 this.privKey.d.toBuffer(
33),
11300 // data = serP(point(kpar)) || ser32(index)
11301 // = serP(Kpar) || ser32(index)
11302 data = Buffer.concat([
11303 this.pubKey.toBuffer(),
11308 var I = createHmac('sha512', this.chainCode).update(data).digest()
11309 var IL = I.slice(
0,
32)
11310 var IR = I.slice(
32)
11312 var pIL = BigInteger.fromBuffer(IL)
11314 // In case parse256(IL)
>= n, proceed with the next value for i
11315 if (pIL.compareTo(curve.n)
>=
0) {
11316 return this.derive(index +
1)
11319 // Private parent key -
> private child key
11321 if (this.privKey) {
11322 // ki = parse256(IL) + kpar (mod n)
11323 var ki = pIL.add(this.privKey.d).mod(curve.n)
11325 // In case ki ==
0, proceed with the next value for i
11326 if (ki.signum() ===
0) {
11327 return this.derive(index +
1)
11330 hd = new HDNode(ki, IR, this.network)
11332 // Public parent key -
> public child key
11334 // Ki = point(parse256(IL)) + Kpar
11336 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11338 // In case Ki is the point at infinity, proceed with the next value for i
11339 if (curve.isInfinity(Ki)) {
11340 return this.derive(index +
1)
11343 hd = new HDNode(Ki, IR, this.network)
11346 hd.depth = this.depth +
1
11348 hd.parentFingerprint = this.getFingerprint().readUInt32BE(
0)
11353 HDNode.prototype.deriveHardened = function (index) {
11354 // Only derives hardened private keys by default
11355 return this.derive(index + HDNode.HIGHEST_BIT)
11358 HDNode.prototype.toString = HDNode.prototype.toBase58
11360 module.exports = HDNode
11362 }).call(this,require("buffer").Buffer)
11363 },{"./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){
11365 Address: require('./address'),
11366 base58check: require('./base58check'),
11367 Block: require('./block'),
11368 bufferutils: require('./bufferutils'),
11369 crypto: require('./crypto'),
11370 ecdsa: require('./ecdsa'),
11371 ECKey: require('./eckey'),
11372 ECPubKey: require('./ecpubkey'),
11373 ECSignature: require('./ecsignature'),
11374 Message: require('./message'),
11375 opcodes: require('./opcodes'),
11376 HDNode: require('./hdnode'),
11377 Script: require('./script'),
11378 scripts: require('./scripts'),
11379 Transaction: require('./transaction'),
11380 TransactionBuilder: require('./transaction_builder'),
11381 networks: require('./networks'),
11382 Wallet: require('./wallet')
11385 },{"./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){
11386 (function (Buffer){
11387 var bufferutils = require('./bufferutils')
11388 var crypto = require('./crypto')
11389 var ecdsa = require('./ecdsa')
11390 var networks = require('./networks')
11392 var BigInteger = require('bigi')
11393 var ECPubKey = require('./ecpubkey')
11394 var ECSignature = require('./ecsignature')
11396 var ecurve = require('ecurve')
11397 var ecparams = ecurve.getCurveByName('secp256k1')
11399 function magicHash (message, network) {
11400 var magicPrefix = new Buffer(network.magicPrefix)
11401 var messageBuffer = new Buffer(message)
11402 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11404 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11405 return crypto.hash256(buffer)
11408 function sign (privKey, message, network) {
11409 network = network || networks.bitcoin
11411 var hash = magicHash(message, network)
11412 var signature = privKey.sign(hash)
11413 var e = BigInteger.fromBuffer(hash)
11414 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11416 return signature.toCompact(i, privKey.pub.compressed)
11419 // TODO: network could be implied from address
11420 function verify (address, signature, message, network) {
11421 if (!Buffer.isBuffer(signature)) {
11422 signature = new Buffer(signature, 'base64')
11425 network = network || networks.bitcoin
11427 var hash = magicHash(message, network)
11428 var parsed = ECSignature.parseCompact(signature)
11429 var e = BigInteger.fromBuffer(hash)
11430 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11432 var pubKey = new ECPubKey(Q, parsed.compressed)
11433 return pubKey.getAddress(network).toString() === address.toString()
11437 magicHash: magicHash,
11442 }).call(this,require("buffer").Buffer)
11443 },{"./bufferutils":
57,"./crypto":
58,"./ecdsa":
59,"./ecpubkey":
61,"./ecsignature":
62,"./networks":
66,"bigi":
3,"buffer":
7,"ecurve":
49}],
66:[function(require,module,exports){
11444 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11445 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=
409731
11449 magicPrefix: '\x18Bitcoin Signed Message:\n',
11451 public:
0x0488b21e,
11452 private:
0x0488ade4
11457 dustThreshold:
546, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/core.h#L151-L162
11458 feePerKb:
10000, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/main.cpp#L53
11459 estimateFee: estimateFee('bitcoin')
11462 magicPrefix: '\x18Bitcoin Signed Message:\n',
11464 public:
0x043587cf,
11465 private:
0x04358394
11470 dustThreshold:
546,
11472 estimateFee: estimateFee('testnet')
11475 magicPrefix: '\x19Litecoin Signed Message:\n',
11477 public:
0x019da462,
11478 private:
0x019d9cfe
11483 dustThreshold:
0, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L360-L365
11484 dustSoftThreshold:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.h#L53
11485 feePerKb:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L56
11486 estimateFee: estimateFee('litecoin')
11489 magicPrefix: '\x19Dogecoin Signed Message:\n',
11491 public:
0x02facafd,
11492 private:
0x02fac398
11497 dustThreshold:
0, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/core.h#L155-L160
11498 dustSoftThreshold:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.h#L62
11499 feePerKb:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.cpp#L58
11500 estimateFee: estimateFee('dogecoin')
11503 magicPrefix: '\x18Viacoin Signed Message:\n',
11505 public:
0x0488b21e,
11506 private:
0x0488ade4
11511 dustThreshold:
560,
11512 dustSoftThreshold:
100000,
11513 feePerKb:
100000, //
11514 estimateFee: estimateFee('viacoin')
11517 magicPrefix: '\x18Viacoin Signed Message:\n',
11519 public:
0x043587cf,
11520 private:
0x04358394
11525 dustThreshold:
560,
11526 dustSoftThreshold:
100000,
11528 estimateFee: estimateFee('viacointestnet')
11531 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11533 public:
0x019da462,
11534 private:
0x019d9cfe
11539 dustThreshold:
0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11540 dustSoftThreshold:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11541 feePerKb:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11542 estimateFee: estimateFee('gamerscoin')
11545 magicPrefix: '\x19Jumbucks Signed Message:\n',
11547 public:
0x037a689a,
11548 private:
0x037a6460
11554 dustSoftThreshold:
10000,
11556 estimateFee: estimateFee('jumbucks')
11559 magicPrefix: '\x18Zetacoin Signed Message:\n',
11561 public:
0x0488b21e,
11562 private:
0x0488ade4
11567 dustThreshold:
546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11568 feePerKb:
10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11569 estimateFee: estimateFee('zetacoin')
11573 function estimateFee (type) {
11574 return function (tx) {
11575 var network = networks[type]
11576 var baseFee = network.feePerKb
11577 var byteSize = tx.toBuffer().length
11579 var fee = baseFee * Math.ceil(byteSize /
1000)
11580 if (network.dustSoftThreshold === undefined) return fee
11582 tx.outs.forEach(function (e) {
11583 if (e.value < network.dustSoftThreshold) {
11592 module.exports = networks
11594 },{}],
67:[function(require,module,exports){
11635 OP_TOALTSTACK:
107,
11636 OP_FROMALTSTACK:
108,
11668 OP_EQUALVERIFY:
136,
11693 OP_NUMEQUALVERIFY:
157,
11694 OP_NUMNOTEQUAL:
158,
11696 OP_GREATERTHAN:
160,
11697 OP_LESSTHANOREQUAL:
161,
11698 OP_GREATERTHANOREQUAL:
162,
11710 OP_CODESEPARATOR:
171,
11712 OP_CHECKSIGVERIFY:
173,
11713 OP_CHECKMULTISIG:
174,
11714 OP_CHECKMULTISIGVERIFY:
175,
11728 // template matching params
11729 OP_PUBKEYHASH:
253,
11731 OP_INVALIDOPCODE:
255
11734 },{}],
68:[function(require,module,exports){
11735 (function (Buffer){
11736 var assert = require('assert')
11737 var bufferutils = require('./bufferutils')
11738 var crypto = require('./crypto')
11739 var typeForce = require('typeforce')
11740 var opcodes = require('./opcodes')
11742 function Script (buffer, chunks) {
11743 typeForce('Buffer', buffer)
11744 typeForce('Array', chunks)
11746 this.buffer = buffer
11747 this.chunks = chunks
11750 Script.fromASM = function (asm) {
11751 var strChunks = asm.split(' ')
11752 var chunks = strChunks.map(function (strChunk) {
11754 if (strChunk in opcodes) {
11755 return opcodes[strChunk]
11759 return new Buffer(strChunk, 'hex')
11763 return Script.fromChunks(chunks)
11766 Script.fromBuffer = function (buffer) {
11770 while (i < buffer.length) {
11771 var opcode = buffer.readUInt8(i)
11774 if ((opcode
> opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11775 var d = bufferutils.readPushDataInt(buffer, i)
11777 // did reading a pushDataInt fail? return non-chunked script
11778 if (d === null) return new Script(buffer, [])
11781 // attempt to read too much data?
11782 if (i + d.number
> buffer.length) return new Script(buffer, [])
11784 var data = buffer.slice(i, i + d.number)
11791 chunks.push(opcode)
11797 return new Script(buffer, chunks)
11800 Script.fromChunks = function (chunks) {
11801 typeForce('Array', chunks)
11803 var bufferSize = chunks.reduce(function (accum, chunk) {
11805 if (Buffer.isBuffer(chunk)) {
11806 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11813 var buffer = new Buffer(bufferSize)
11816 chunks.forEach(function (chunk) {
11818 if (Buffer.isBuffer(chunk)) {
11819 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11821 chunk.copy(buffer, offset)
11822 offset += chunk.length
11826 buffer.writeUInt8(chunk, offset)
11831 assert.equal(offset, buffer.length, 'Could not decode chunks')
11832 return new Script(buffer, chunks)
11835 Script.fromHex = function (hex) {
11836 return Script.fromBuffer(new Buffer(hex, 'hex'))
11839 Script.EMPTY = Script.fromChunks([])
11841 Script.prototype.getHash = function () {
11842 return crypto.hash160(this.buffer)
11845 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11846 Script.prototype.without = function (needle) {
11847 return Script.fromChunks(this.chunks.filter(function (op) {
11848 return op !== needle
11852 var reverseOps = []
11853 for (var op in opcodes) {
11854 var code = opcodes[op]
11855 reverseOps[code] = op
11858 Script.prototype.toASM = function () {
11859 return this.chunks.map(function (chunk) {
11861 if (Buffer.isBuffer(chunk)) {
11862 return chunk.toString('hex')
11866 return reverseOps[chunk]
11871 Script.prototype.toBuffer = function () {
11875 Script.prototype.toHex = function () {
11876 return this.toBuffer().toString('hex')
11879 module.exports = Script
11881 }).call(this,require("buffer").Buffer)
11882 },{"./bufferutils":
57,"./crypto":
58,"./opcodes":
67,"assert":
5,"buffer":
7,"typeforce":
53}],
69:[function(require,module,exports){
11883 (function (Buffer){
11884 var assert = require('assert')
11885 var ops = require('./opcodes')
11886 var typeForce = require('typeforce')
11888 var ecurve = require('ecurve')
11889 var curve = ecurve.getCurveByName('secp256k1')
11891 var ECSignature = require('./ecsignature')
11892 var Script = require('./script')
11894 function isCanonicalPubKey (buffer) {
11895 if (!Buffer.isBuffer(buffer)) return false
11898 ecurve.Point.decodeFrom(curve, buffer)
11900 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11909 function isCanonicalSignature (buffer) {
11910 if (!Buffer.isBuffer(buffer)) return false
11913 ECSignature.parseScriptSignature(buffer)
11915 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/))) {
11925 function isPubKeyHashInput (script) {
11926 return script.chunks.length ===
2 &&
11927 isCanonicalSignature(script.chunks[
0]) &&
11928 isCanonicalPubKey(script.chunks[
1])
11931 function isPubKeyHashOutput (script) {
11932 return script.chunks.length ===
5 &&
11933 script.chunks[
0] === ops.OP_DUP &&
11934 script.chunks[
1] === ops.OP_HASH160 &&
11935 Buffer.isBuffer(script.chunks[
2]) &&
11936 script.chunks[
2].length ===
20 &&
11937 script.chunks[
3] === ops.OP_EQUALVERIFY &&
11938 script.chunks[
4] === ops.OP_CHECKSIG
11941 function isPubKeyInput (script) {
11942 return script.chunks.length ===
1 &&
11943 isCanonicalSignature(script.chunks[
0])
11946 function isPubKeyOutput (script) {
11947 return script.chunks.length ===
2 &&
11948 isCanonicalPubKey(script.chunks[
0]) &&
11949 script.chunks[
1] === ops.OP_CHECKSIG
11952 function isScriptHashInput (script, allowIncomplete) {
11953 if (script.chunks.length <
2) return false
11955 var lastChunk = script.chunks[script.chunks.length -
1]
11956 if (!Buffer.isBuffer(lastChunk)) return false
11958 var scriptSig = Script.fromChunks(script.chunks.slice(
0, -
1))
11959 var redeemScript = Script.fromBuffer(lastChunk)
11961 // is redeemScript a valid script?
11962 if (redeemScript.chunks.length ===
0) return false
11964 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11967 function isScriptHashOutput (script) {
11968 return script.chunks.length ===
3 &&
11969 script.chunks[
0] === ops.OP_HASH160 &&
11970 Buffer.isBuffer(script.chunks[
1]) &&
11971 script.chunks[
1].length ===
20 &&
11972 script.chunks[
2] === ops.OP_EQUAL
11975 // allowIncomplete is to account for combining signatures
11976 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11977 function isMultisigInput (script, allowIncomplete) {
11978 if (script.chunks.length <
2) return false
11979 if (script.chunks[
0] !== ops.OP_0) return false
11981 if (allowIncomplete) {
11982 return script.chunks.slice(
1).every(function (chunk) {
11983 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11987 return script.chunks.slice(
1).every(isCanonicalSignature)
11990 function isMultisigOutput (script) {
11991 if (script.chunks.length <
4) return false
11992 if (script.chunks[script.chunks.length -
1] !== ops.OP_CHECKMULTISIG) return false
11994 var mOp = script.chunks[
0]
11995 if (mOp === ops.OP_0) return false
11996 if (mOp < ops.OP_1) return false
11997 if (mOp
> ops.OP_16) return false
11999 var nOp = script.chunks[script.chunks.length -
2]
12000 if (nOp === ops.OP_0) return false
12001 if (nOp < ops.OP_1) return false
12002 if (nOp
> ops.OP_16) return false
12004 var m = mOp - (ops.OP_1 -
1)
12005 var n = nOp - (ops.OP_1 -
1)
12006 if (n < m) return false
12008 var pubKeys = script.chunks.slice(
1, -
2)
12009 if (n < pubKeys.length) return false
12011 return pubKeys.every(isCanonicalPubKey)
12014 function isNullDataOutput (script) {
12015 return script.chunks[
0] === ops.OP_RETURN
12018 function classifyOutput (script) {
12019 typeForce('Script', script)
12021 if (isPubKeyHashOutput(script)) {
12022 return 'pubkeyhash'
12023 } else if (isScriptHashOutput(script)) {
12024 return 'scripthash'
12025 } else if (isMultisigOutput(script)) {
12027 } else if (isPubKeyOutput(script)) {
12029 } else if (isNullDataOutput(script)) {
12033 return 'nonstandard'
12036 function classifyInput (script, allowIncomplete) {
12037 typeForce('Script', script)
12039 if (isPubKeyHashInput(script)) {
12040 return 'pubkeyhash'
12041 } else if (isMultisigInput(script, allowIncomplete)) {
12043 } else if (isScriptHashInput(script, allowIncomplete)) {
12044 return 'scripthash'
12045 } else if (isPubKeyInput(script)) {
12049 return 'nonstandard'
12052 // Standard Script Templates
12053 // {pubKey} OP_CHECKSIG
12054 function pubKeyOutput (pubKey) {
12055 return Script.fromChunks([
12061 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12062 function pubKeyHashOutput (hash) {
12063 typeForce('Buffer', hash)
12065 return Script.fromChunks([
12069 ops.OP_EQUALVERIFY,
12074 // OP_HASH160 {scriptHash} OP_EQUAL
12075 function scriptHashOutput (hash) {
12076 typeForce('Buffer', hash)
12078 return Script.fromChunks([
12085 // m [pubKeys ...] n OP_CHECKMULTISIG
12086 function multisigOutput (m, pubKeys) {
12087 typeForce(['ECPubKey'], pubKeys)
12089 assert(pubKeys.length
>= m, 'Not enough pubKeys provided')
12091 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12092 return pubKey.toBuffer()
12094 var n = pubKeys.length
12096 return Script.fromChunks([].concat(
12097 (ops.OP_1 -
1) + m,
12099 (ops.OP_1 -
1) + n,
12100 ops.OP_CHECKMULTISIG
12105 function pubKeyInput (signature) {
12106 typeForce('Buffer', signature)
12108 return Script.fromChunks([signature])
12111 // {signature} {pubKey}
12112 function pubKeyHashInput (signature, pubKey) {
12113 typeForce('Buffer', signature)
12115 return Script.fromChunks([signature, pubKey.toBuffer()])
12118 //
<scriptSig> {serialized scriptPubKey script}
12119 function scriptHashInput (scriptSig, scriptPubKey) {
12120 return Script.fromChunks([].concat(
12122 scriptPubKey.toBuffer()
12126 // OP_0 [signatures ...]
12127 function multisigInput (signatures, scriptPubKey) {
12128 if (scriptPubKey) {
12129 assert(isMultisigOutput(scriptPubKey))
12131 var mOp = scriptPubKey.chunks[
0]
12132 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length -
2]
12133 var m = mOp - (ops.OP_1 -
1)
12134 var n = nOp - (ops.OP_1 -
1)
12136 assert(signatures.length
>= m, 'Not enough signatures provided')
12137 assert(signatures.length <= n, 'Too many signatures provided')
12140 return Script.fromChunks([].concat(ops.OP_0, signatures))
12143 function nullDataOutput (data) {
12144 return Script.fromChunks([ops.OP_RETURN, data])
12148 isCanonicalPubKey: isCanonicalPubKey,
12149 isCanonicalSignature: isCanonicalSignature,
12150 isPubKeyHashInput: isPubKeyHashInput,
12151 isPubKeyHashOutput: isPubKeyHashOutput,
12152 isPubKeyInput: isPubKeyInput,
12153 isPubKeyOutput: isPubKeyOutput,
12154 isScriptHashInput: isScriptHashInput,
12155 isScriptHashOutput: isScriptHashOutput,
12156 isMultisigInput: isMultisigInput,
12157 isMultisigOutput: isMultisigOutput,
12158 isNullDataOutput: isNullDataOutput,
12159 classifyOutput: classifyOutput,
12160 classifyInput: classifyInput,
12161 pubKeyOutput: pubKeyOutput,
12162 pubKeyHashOutput: pubKeyHashOutput,
12163 scriptHashOutput: scriptHashOutput,
12164 multisigOutput: multisigOutput,
12165 pubKeyInput: pubKeyInput,
12166 pubKeyHashInput: pubKeyHashInput,
12167 scriptHashInput: scriptHashInput,
12168 multisigInput: multisigInput,
12169 dataOutput: function (data) {
12170 console.warn('dataOutput is deprecated, use nullDataOutput by
2.0.0')
12171 return nullDataOutput(data)
12173 nullDataOutput: nullDataOutput
12176 }).call(this,require("buffer").Buffer)
12177 },{"./ecsignature":
62,"./opcodes":
67,"./script":
68,"assert":
5,"buffer":
7,"ecurve":
49,"typeforce":
53}],
70:[function(require,module,exports){
12178 (function (Buffer){
12179 var assert = require('assert')
12180 var bufferutils = require('./bufferutils')
12181 var crypto = require('./crypto')
12182 var typeForce = require('typeforce')
12183 var opcodes = require('./opcodes')
12184 var scripts = require('./scripts')
12186 var Address = require('./address')
12187 var ECSignature = require('./ecsignature')
12188 var Script = require('./script')
12190 function Transaction () {
12197 Transaction.DEFAULT_SEQUENCE =
0xffffffff
12198 Transaction.SIGHASH_ALL =
0x01
12199 Transaction.SIGHASH_NONE =
0x02
12200 Transaction.SIGHASH_SINGLE =
0x03
12201 Transaction.SIGHASH_ANYONECANPAY =
0x80
12203 Transaction.fromBuffer = function (buffer, __disableAssert) {
12205 function readSlice (n) {
12207 return buffer.slice(offset - n, offset)
12210 function readUInt32 () {
12211 var i = buffer.readUInt32LE(offset)
12216 function readUInt64 () {
12217 var i = bufferutils.readUInt64LE(buffer, offset)
12222 function readVarInt () {
12223 var vi = bufferutils.readVarInt(buffer, offset)
12228 function readScript () {
12229 return Script.fromBuffer(readSlice(readVarInt()))
12232 function readGenerationScript () {
12233 return new Script(readSlice(readVarInt()), [])
12236 var tx = new Transaction()
12237 tx.version = readUInt32()
12239 var vinLen = readVarInt()
12240 for (var i =
0; i < vinLen; ++i) {
12241 var hash = readSlice(
32)
12243 if (Transaction.isCoinbaseHash(hash)) {
12246 index: readUInt32(),
12247 script: readGenerationScript(),
12248 sequence: readUInt32()
12253 index: readUInt32(),
12254 script: readScript(),
12255 sequence: readUInt32()
12260 var voutLen = readVarInt()
12261 for (i =
0; i < voutLen; ++i) {
12263 value: readUInt64(),
12264 script: readScript()
12268 tx.locktime = readUInt32()
12270 if (!__disableAssert) {
12271 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12277 Transaction.fromHex = function (hex) {
12278 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12281 Transaction.isCoinbaseHash = function (buffer) {
12282 return Array.prototype.every.call(buffer, function (x) {
12288 * Create a new txIn.
12290 * Can be called with any of:
12292 * - A transaction and an index
12293 * - A transaction hash and an index
12295 * Note that this method does not sign the created input.
12297 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12298 if (sequence === undefined || sequence === null) {
12299 sequence = Transaction.DEFAULT_SEQUENCE
12302 script = script || Script.EMPTY
12304 if (typeof hash === 'string') {
12305 // TxId hex is big-endian, we need little-endian
12306 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12307 } else if (hash instanceof Transaction) {
12308 hash = hash.getHash()
12311 typeForce('Buffer', hash)
12312 typeForce('Number', index)
12313 typeForce('Number', sequence)
12314 typeForce('Script', script)
12316 assert.equal(hash.length,
32, 'Expected hash length of
32, got ' + hash.length)
12318 // Add the input and return the input's index
12319 return (this.ins.push({
12328 * Create a new txOut.
12330 * Can be called with:
12332 * - A base58 address string and a value
12333 * - An Address object and a value
12334 * - A scriptPubKey Script and a value
12336 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12337 // Attempt to get a valid address if it's a base58 address string
12338 if (typeof scriptPubKey === 'string') {
12339 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12342 // Attempt to get a valid script if it's an Address object
12343 if (scriptPubKey instanceof Address) {
12344 scriptPubKey = scriptPubKey.toOutputScript()
12347 typeForce('Script', scriptPubKey)
12348 typeForce('Number', value)
12350 // Add the output and return the output's index
12351 return (this.outs.push({
12352 script: scriptPubKey,
12357 Transaction.prototype.clone = function () {
12358 var newTx = new Transaction()
12359 newTx.version = this.version
12360 newTx.locktime = this.locktime
12362 newTx.ins = this.ins.map(function (txIn) {
12366 script: txIn.script,
12367 sequence: txIn.sequence
12371 newTx.outs = this.outs.map(function (txOut) {
12373 script: txOut.script,
12382 * Hash transaction for signing a specific input.
12384 * Bitcoin uses a different hash for each signed transaction input. This
12385 * method copies the transaction, makes the necessary changes based on the
12386 * hashType, serializes and finally hashes the result. This hash can then be
12387 * used to sign the transaction input in question.
12389 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12390 // FIXME: remove in
2.x.y
12391 if (arguments[
0] instanceof Script) {
12392 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12394 // swap the arguments (must be stored in tmp, arguments is special)
12395 var tmp = arguments[
0]
12396 inIndex = arguments[
1]
12397 prevOutScript = tmp
12400 typeForce('Number', inIndex)
12401 typeForce('Script', prevOutScript)
12402 typeForce('Number', hashType)
12404 assert(inIndex
>=
0, 'Invalid vin index')
12405 assert(inIndex < this.ins.length, 'Invalid vin index')
12407 var txTmp = this.clone()
12408 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12410 // Blank out other inputs' signatures
12411 txTmp.ins.forEach(function (txIn) {
12412 txIn.script = Script.EMPTY
12414 txTmp.ins[inIndex].script = hashScript
12416 var hashTypeModifier = hashType &
0x1f
12418 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12419 assert(false, 'SIGHASH_NONE not yet supported')
12420 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12421 assert(false, 'SIGHASH_SINGLE not yet supported')
12424 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12425 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12428 var hashTypeBuffer = new Buffer(
4)
12429 hashTypeBuffer.writeInt32LE(hashType,
0)
12431 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12432 return crypto.hash256(buffer)
12435 Transaction.prototype.getHash = function () {
12436 return crypto.hash256(this.toBuffer())
12439 Transaction.prototype.getId = function () {
12440 // TxHash is little-endian, we need big-endian
12441 return bufferutils.reverse(this.getHash()).toString('hex')
12444 Transaction.prototype.toBuffer = function () {
12445 function scriptSize (script) {
12446 var length = script.buffer.length
12448 return bufferutils.varIntSize(length) + length
12451 var buffer = new Buffer(
12453 bufferutils.varIntSize(this.ins.length) +
12454 bufferutils.varIntSize(this.outs.length) +
12455 this.ins.reduce(function (sum, input) { return sum +
40 + scriptSize(input.script) },
0) +
12456 this.outs.reduce(function (sum, output) { return sum +
8 + scriptSize(output.script) },
0)
12460 function writeSlice (slice) {
12461 slice.copy(buffer, offset)
12462 offset += slice.length
12465 function writeUInt32 (i) {
12466 buffer.writeUInt32LE(i, offset)
12470 function writeUInt64 (i) {
12471 bufferutils.writeUInt64LE(buffer, i, offset)
12475 function writeVarInt (i) {
12476 var n = bufferutils.writeVarInt(buffer, i, offset)
12480 writeUInt32(this.version)
12481 writeVarInt(this.ins.length)
12483 this.ins.forEach(function (txIn) {
12484 writeSlice(txIn.hash)
12485 writeUInt32(txIn.index)
12486 writeVarInt(txIn.script.buffer.length)
12487 writeSlice(txIn.script.buffer)
12488 writeUInt32(txIn.sequence)
12491 writeVarInt(this.outs.length)
12492 this.outs.forEach(function (txOut) {
12493 writeUInt64(txOut.value)
12494 writeVarInt(txOut.script.buffer.length)
12495 writeSlice(txOut.script.buffer)
12498 writeUInt32(this.locktime)
12503 Transaction.prototype.toHex = function () {
12504 return this.toBuffer().toString('hex')
12507 Transaction.prototype.setInputScript = function (index, script) {
12508 typeForce('Number', index)
12509 typeForce('Script', script)
12511 this.ins[index].script = script
12514 // FIXME: remove in
2.x.y
12515 Transaction.prototype.sign = function (index, privKey, hashType) {
12516 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12518 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12519 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12521 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12522 this.setInputScript(index, scriptSig)
12525 // FIXME: remove in
2.x.y
12526 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12527 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12529 hashType = hashType || Transaction.SIGHASH_ALL
12531 var hash = this.hashForSignature(index, prevOutScript, hashType)
12532 var signature = privKey.sign(hash)
12534 return signature.toScriptSignature(hashType)
12537 // FIXME: remove in
2.x.y
12538 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12539 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12541 var parsed = ECSignature.parseScriptSignature(buffer)
12542 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12544 return pubKey.verify(hash, parsed.signature)
12547 module.exports = Transaction
12549 }).call(this,require("buffer").Buffer)
12550 },{"./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){
12551 (function (Buffer){
12552 var assert = require('assert')
12553 var ops = require('./opcodes')
12554 var scripts = require('./scripts')
12556 var ECPubKey = require('./ecpubkey')
12557 var ECSignature = require('./ecsignature')
12558 var Script = require('./script')
12559 var Transaction = require('./transaction')
12561 function extractInput (txIn) {
12563 var scriptSig = txIn.script
12565 var prevOutType = scripts.classifyInput(scriptSig, true)
12568 // Re-classify if scriptHash
12569 if (prevOutType === 'scripthash') {
12570 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-
1)[
0])
12571 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12573 scriptSig = Script.fromChunks(scriptSig.chunks.slice(
0, -
1))
12574 scriptType = scripts.classifyInput(scriptSig, true)
12576 scriptType = prevOutType
12579 // Extract hashType, pubKeys and signatures
12580 var hashType, parsed, pubKeys, signatures
12582 switch (scriptType) {
12583 case 'pubkeyhash': {
12584 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12585 hashType = parsed.hashType
12586 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[
1])]
12587 signatures = [parsed.signature]
12588 prevOutScript = pubKeys[
0].getAddress().toOutputScript()
12594 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12595 hashType = parsed.hashType
12596 signatures = [parsed.signature]
12598 if (redeemScript) {
12599 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[
0])]
12606 signatures = scriptSig.chunks.slice(
1).map(function (chunk) {
12607 if (chunk === ops.OP_0) return chunk
12609 var parsed = ECSignature.parseScriptSignature(chunk)
12610 hashType = parsed.hashType
12612 return parsed.signature
12615 if (redeemScript) {
12616 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12624 hashType: hashType,
12625 prevOutScript: prevOutScript,
12626 prevOutType: prevOutType,
12628 redeemScript: redeemScript,
12629 scriptType: scriptType,
12630 signatures: signatures
12634 function TransactionBuilder () {
12635 this.prevTxMap = {}
12636 this.prevOutScripts = {}
12637 this.prevOutTypes = {}
12640 this.tx = new Transaction()
12643 TransactionBuilder.fromTransaction = function (transaction) {
12644 var txb = new TransactionBuilder()
12646 // Copy other transaction fields
12647 txb.tx.version = transaction.version
12648 txb.tx.locktime = transaction.locktime
12650 // Extract/add inputs
12651 transaction.ins.forEach(function (txIn) {
12652 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12655 // Extract/add outputs
12656 transaction.outs.forEach(function (txOut) {
12657 txb.addOutput(txOut.script, txOut.value)
12660 // Extract/add signatures
12661 txb.inputs = transaction.ins.map(function (txIn) {
12662 // TODO: remove me after testcase added
12663 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12665 // Ignore empty scripts
12666 if (txIn.script.buffer.length ===
0) return {}
12668 return extractInput(txIn)
12674 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12678 if (typeof prevTx === 'string') {
12679 prevOutHash = new Buffer(prevTx, 'hex')
12681 // TxId hex is big-endian, we want little-endian hash
12682 Array.prototype.reverse.call(prevOutHash)
12685 } else if (prevTx instanceof Transaction) {
12686 prevOutHash = prevTx.getHash()
12687 prevOutScript = prevTx.outs[index].script
12691 prevOutHash = prevTx
12695 if (prevOutScript) {
12696 var prevOutType = scripts.classifyOutput(prevOutScript)
12698 // if we can, extract pubKey information
12699 switch (prevOutType) {
12701 input.pubKeys = prevOutScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12706 input.pubKeys = prevOutScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12711 if (prevOutType !== 'scripthash') {
12712 input.scriptType = prevOutType
12715 input.prevOutScript = prevOutScript
12716 input.prevOutType = prevOutType
12719 assert(this.inputs.every(function (input2) {
12720 if (input2.hashType === undefined) return true
12722 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12723 }), 'No, this would invalidate signatures')
12725 var prevOut = prevOutHash.toString('hex') + ':' + index
12726 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12728 var vin = this.tx.addInput(prevOutHash, index, sequence)
12729 this.inputs[vin] = input
12730 this.prevTxMap[prevOut] = vin
12735 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12736 assert(this.inputs.every(function (input) {
12737 if (input.hashType === undefined) return true
12739 return (input.hashType &
0x1f) === Transaction.SIGHASH_SINGLE
12740 }), 'No, this would invalidate signatures')
12742 return this.tx.addOutput(scriptPubKey, value)
12745 TransactionBuilder.prototype.build = function () {
12746 return this.__build(false)
12748 TransactionBuilder.prototype.buildIncomplete = function () {
12749 return this.__build(true)
12752 var canSignTypes = {
12753 'pubkeyhash': true,
12758 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12759 if (!allowIncomplete) {
12760 assert(this.tx.ins.length
> 0, 'Transaction has no inputs')
12761 assert(this.tx.outs.length
> 0, 'Transaction has no outputs')
12764 var tx = this.tx.clone()
12766 // Create script signatures from signature meta-data
12767 this.inputs.forEach(function (input, index) {
12768 var scriptType = input.scriptType
12771 if (!allowIncomplete) {
12772 assert(!!scriptType, 'Transaction is not complete')
12773 assert(scriptType in canSignTypes, scriptType + ' not supported')
12774 assert(input.signatures, 'Transaction is missing signatures')
12777 if (input.signatures) {
12778 switch (scriptType) {
12779 case 'pubkeyhash': {
12780 var pkhSignature = input.signatures[
0].toScriptSignature(input.hashType)
12781 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[
0])
12786 // Array.prototype.map is sparse-compatible
12787 var msSignatures = input.signatures.map(function (signature) {
12788 return signature && signature.toScriptSignature(input.hashType)
12791 // fill in blanks with OP_0
12792 if (allowIncomplete) {
12793 for (var i =
0; i < msSignatures.length; ++i) {
12794 if (msSignatures[i]) continue
12796 msSignatures[i] = ops.OP_0
12799 // Array.prototype.filter returns non-sparse array
12800 msSignatures = msSignatures.filter(function (x) { return x })
12803 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12804 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12809 var pkSignature = input.signatures[
0].toScriptSignature(input.hashType)
12810 scriptSig = scripts.pubKeyInput(pkSignature)
12816 // did we build a scriptSig?
12818 // wrap as scriptHash if necessary
12819 if (input.prevOutType === 'scripthash') {
12820 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12823 tx.setInputScript(index, scriptSig)
12830 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12831 assert(index in this.inputs, 'No input at index: ' + index)
12832 hashType = hashType || Transaction.SIGHASH_ALL
12834 var input = this.inputs[index]
12835 var canSign = input.hashType &&
12836 input.prevOutScript &&
12837 input.prevOutType &&
12839 input.scriptType &&
12842 // are we almost ready to sign?
12844 // if redeemScript was provided, enforce consistency
12845 if (redeemScript) {
12846 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12849 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12853 // must be pay-to-scriptHash?
12854 if (redeemScript) {
12855 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12856 if (input.prevOutScript) {
12857 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12859 var scriptHash = input.prevOutScript.chunks[
1]
12860 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12863 var scriptType = scripts.classifyOutput(redeemScript)
12864 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12867 switch (scriptType) {
12869 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12873 case 'pubkeyhash': {
12874 var pkh1 = redeemScript.chunks[
2]
12875 var pkh2 = privKey.pub.getAddress().hash
12877 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12878 pubKeys = [privKey.pub]
12883 pubKeys = redeemScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12888 if (!input.prevOutScript) {
12889 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12890 input.prevOutType = 'scripthash'
12893 input.pubKeys = pubKeys
12894 input.redeemScript = redeemScript
12895 input.scriptType = scriptType
12897 // cannot be pay-to-scriptHash
12899 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12901 // can we otherwise sign this?
12902 if (input.scriptType) {
12903 assert(input.pubKeys, input.scriptType + ' not supported')
12905 // we know nothin' Jon Snow, assume pubKeyHash
12907 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12908 input.prevOutType = 'pubkeyhash'
12909 input.pubKeys = [privKey.pub]
12910 input.scriptType = input.prevOutType
12914 input.hashType = hashType
12915 input.signatures = input.signatures || []
12918 var signatureScript = input.redeemScript || input.prevOutScript
12919 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12921 // enforce signature order matches public keys
12922 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12923 // maintain a local copy of unmatched signatures
12924 var unmatched = input.signatures.slice()
12926 input.signatures = input.pubKeys.map(function (pubKey) {
12929 // check for any matching signatures
12930 unmatched.some(function (signature, i) {
12931 if (!pubKey.verify(signatureHash, signature)) return false
12934 // remove matched signature from unmatched
12935 unmatched.splice(i,
1)
12940 return match || undefined
12944 // enforce in order signing of public keys
12945 assert(input.pubKeys.some(function (pubKey, i) {
12946 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12948 assert(!input.signatures[i], 'Signature already exists')
12949 var signature = privKey.sign(signatureHash)
12950 input.signatures[i] = signature
12953 }, this), 'privateKey cannot sign for this input')
12956 module.exports = TransactionBuilder
12958 }).call(this,require(
"buffer").Buffer)
12959 },{
"./ecpubkey":
61,
"./ecsignature":
62,
"./opcodes":
67,
"./script":
68,
"./scripts":
69,
"./transaction":
70,
"assert":
5,
"buffer":
7}],
72:[function(require,module,exports){
12960 (function (Buffer){
12961 var assert = require('assert')
12962 var bufferutils = require('./bufferutils')
12963 var typeForce = require('typeforce')
12964 var networks = require('./networks')
12965 var randomBytes = require('randombytes')
12967 var Address = require('./address')
12968 var HDNode = require('./hdnode')
12969 var TransactionBuilder = require('./transaction_builder')
12970 var Script = require('./script')
12972 function Wallet (seed, network) {
12973 console.warn('Wallet is deprecated and will be removed in
2.0.0, see #
296')
12975 seed = seed || randomBytes(
32)
12976 network = network || networks.bitcoin
12978 // Stored in a closure to make accidental serialization less likely
12979 var masterKey = HDNode.fromSeedBuffer(seed, network)
12981 // HD first-level child derivation method should be hardened
12982 // See https://bitcointalk.org/index.php?topic=
405179.msg4415254#msg4415254
12983 var accountZero = masterKey.deriveHardened(
0)
12984 var externalAccount = accountZero.derive(
0)
12985 var internalAccount = accountZero.derive(
1)
12987 this.addresses = []
12988 this.changeAddresses = []
12989 this.network = network
12992 // FIXME: remove in
2.0.0
12993 this.unspentMap = {}
12995 // FIXME: remove in
2.0.0
12997 this.newMasterKey = function (seed) {
12998 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
13000 seed = seed || randomBytes(
32)
13001 masterKey = HDNode.fromSeedBuffer(seed, network)
13003 accountZero = masterKey.deriveHardened(
0)
13004 externalAccount = accountZero.derive(
0)
13005 internalAccount = accountZero.derive(
1)
13008 me.changeAddresses = []
13014 this.getMasterKey = function () {
13017 this.getAccountZero = function () {
13020 this.getExternalAccount = function () {
13021 return externalAccount
13023 this.getInternalAccount = function () {
13024 return internalAccount
13028 Wallet.prototype.createTransaction = function (to, value, options) {
13029 // FIXME: remove in
2.0.0
13030 if (typeof options !== 'object') {
13031 if (options !== undefined) {
13032 console.warn('Non options object parameters are deprecated, use options object instead')
13035 fixedFee: arguments[
2],
13036 changeAddress: arguments[
3]
13041 options = options || {}
13043 assert(value
> this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13045 var changeAddress = options.changeAddress
13046 var fixedFee = options.fixedFee
13047 var minConf = options.minConf === undefined ?
0 : options.minConf // FIXME: change minConf:
1 by default in
2.0.0
13049 // filter by minConf, then pending and sort by descending value
13050 var unspents = this.unspents.filter(function (unspent) {
13051 return unspent.confirmations
>= minConf
13052 }).filter(function (unspent) {
13053 return !unspent.pending
13054 }).sort(function (o1, o2) {
13055 return o2.value - o1.value
13060 var subTotal = value
13062 var txb = new TransactionBuilder()
13063 txb.addOutput(to, value)
13065 for (var i =
0; i < unspents.length; ++i) {
13066 var unspent = unspents[i]
13067 addresses.push(unspent.address)
13069 txb.addInput(unspent.txHash, unspent.index)
13071 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13073 accum += unspent.value
13074 subTotal = value + fee
13076 if (accum
>= subTotal) {
13077 var change = accum - subTotal
13079 if (change
> this.network.dustThreshold) {
13080 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13087 assert(accum
>= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13089 return this.signWith(txb, addresses).build()
13092 // FIXME: remove in
2.0.0
13093 Wallet.prototype.processPendingTx = function (tx) {
13094 this.__processTx(tx, true)
13097 // FIXME: remove in
2.0.0
13098 Wallet.prototype.processConfirmedTx = function (tx) {
13099 this.__processTx(tx, false)
13102 // FIXME: remove in
2.0.0
13103 Wallet.prototype.__processTx = function (tx, isPending) {
13104 console.warn('processTransaction is considered harmful, see issue #
260 for more information')
13106 var txId = tx.getId()
13107 var txHash = tx.getHash()
13109 tx.outs.forEach(function (txOut, i) {
13113 address = Address.fromOutputScript(txOut.script, this.network).toString()
13115 if (!(e.message.match(/has no matching Address/)))
13119 var myAddresses = this.addresses.concat(this.changeAddresses)
13120 if (myAddresses.indexOf(address)
> -
1) {
13121 var lookup = txId + ':' + i
13122 if (lookup in this.unspentMap) return
13124 // its unique, add it
13127 confirmations:
0, // no way to determine this without more information
13131 value: txOut.value,
13135 this.unspentMap[lookup] = unspent
13136 this.unspents.push(unspent)
13140 tx.ins.forEach(function (txIn) {
13141 // copy and convert to big-endian hex
13142 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13144 var lookup = txInId + ':' + txIn.index
13145 if (!(lookup in this.unspentMap)) return
13147 var unspent = this.unspentMap[lookup]
13150 unspent.pending = true
13151 unspent.spent = true
13153 delete this.unspentMap[lookup]
13155 this.unspents = this.unspents.filter(function (unspent2) {
13156 return unspent !== unspent2
13162 Wallet.prototype.generateAddress = function () {
13163 var k = this.addresses.length
13164 var address = this.getExternalAccount().derive(k).getAddress()
13166 this.addresses.push(address.toString())
13168 return this.getReceiveAddress()
13171 Wallet.prototype.generateChangeAddress = function () {
13172 var k = this.changeAddresses.length
13173 var address = this.getInternalAccount().derive(k).getAddress()
13175 this.changeAddresses.push(address.toString())
13177 return this.getChangeAddress()
13180 Wallet.prototype.getAddress = function () {
13181 if (this.addresses.length ===
0) {
13182 this.generateAddress()
13185 return this.addresses[this.addresses.length -
1]
13188 Wallet.prototype.getBalance = function (minConf) {
13189 minConf = minConf ||
0
13191 return this.unspents.filter(function (unspent) {
13192 return unspent.confirmations
>= minConf
13194 // FIXME: remove spent filter in
2.0.0
13195 }).filter(function (unspent) {
13196 return !unspent.spent
13197 }).reduce(function (accum, unspent) {
13198 return accum + unspent.value
13202 Wallet.prototype.getChangeAddress = function () {
13203 if (this.changeAddresses.length ===
0) {
13204 this.generateChangeAddress()
13207 return this.changeAddresses[this.changeAddresses.length -
1]
13210 Wallet.prototype.getInternalPrivateKey = function (index) {
13211 return this.getInternalAccount().derive(index).privKey
13214 Wallet.prototype.getPrivateKey = function (index) {
13215 return this.getExternalAccount().derive(index).privKey
13218 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13221 if ((index = this.addresses.indexOf(address))
> -
1) {
13222 return this.getPrivateKey(index)
13225 if ((index = this.changeAddresses.indexOf(address))
> -
1) {
13226 return this.getInternalPrivateKey(index)
13229 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13232 Wallet.prototype.getUnspentOutputs = function (minConf) {
13233 minConf = minConf ||
0
13235 return this.unspents.filter(function (unspent) {
13236 return unspent.confirmations
>= minConf
13238 // FIXME: remove spent filter in
2.0.0
13239 }).filter(function (unspent) {
13240 return !unspent.spent
13241 }).map(function (unspent) {
13243 address: unspent.address,
13244 confirmations: unspent.confirmations,
13245 index: unspent.index,
13246 txId: unspent.txId,
13247 value: unspent.value,
13249 // FIXME: remove in
2.0.0
13250 hash: unspent.txId,
13251 pending: unspent.pending
13256 Wallet.prototype.setUnspentOutputs = function (unspents) {
13257 this.unspentMap = {}
13258 this.unspents = unspents.map(function (unspent) {
13259 // FIXME: remove unspent.hash in
2.0.0
13260 var txId = unspent.txId || unspent.hash
13261 var index = unspent.index
13263 // FIXME: remove in
2.0.0
13264 if (unspent.hash !== undefined) {
13265 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13268 // FIXME: remove in
2.0.0
13269 if (index === undefined) {
13270 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13271 index = unspent.outputIndex
13274 typeForce('String', txId)
13275 typeForce('Number', index)
13276 typeForce('Number', unspent.value)
13278 assert.equal(txId.length,
64, 'Expected valid txId, got ' + txId)
13279 assert.doesNotThrow(function () {
13280 Address.fromBase58Check(unspent.address)
13281 }, 'Expected Base58 Address, got ' + unspent.address)
13282 assert(isFinite(index), 'Expected finite index, got ' + index)
13284 // FIXME: remove branch in
2.0.0
13285 if (unspent.confirmations !== undefined) {
13286 typeForce('Number', unspent.confirmations)
13289 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13292 address: unspent.address,
13293 confirmations: unspent.confirmations ||
0,
13297 value: unspent.value,
13299 // FIXME: remove in
2.0.0
13300 pending: unspent.pending || false
13303 // FIXME: remove in
2.0.0
13304 this.unspentMap[txId + ':' + index] = unspent
13310 Wallet.prototype.signWith = function (tx, addresses) {
13311 addresses.forEach(function (address, i) {
13312 var privKey = this.getPrivateKeyForAddress(address)
13314 tx.sign(i, privKey)
13320 function estimatePaddedFee (tx, network) {
13321 var tmpTx = tx.clone()
13322 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold ||
0)
13324 return network.estimateFee(tmpTx)
13327 // FIXME:
1.0.0 shims, remove in
2.0.0
13328 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13329 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13331 module.exports = Wallet
13333 }).call(this,require("buffer").Buffer)
13334 },{"./address":
54,"./bufferutils":
57,"./hdnode":
63,"./networks":
66,"./script":
68,"./transaction_builder":
71,"assert":
5,"buffer":
7,"randombytes":
52,"typeforce":
53}]},{},[
64])(
64)
13336 <script>bitcoin.networks.shadow = {
13337 magicPrefix: '\x19ShadowCash Signed Message:\n',
13339 public:
0xEE80286A,
13340 private:
0xEE8031E8
13347 estimateFee: function() { return "unused in this app" },
13350 bitcoin.networks.shadowtn = {
13351 magicPrefix: '\x19ShadowCash Signed Message:\n',
13353 public:
0x76C0FDFB,
13354 private:
0x76C1077A
13361 estimateFee: function() { return "unused in this app" },
13364 bitcoin.networks.clam = {
13366 public:
0xa8c26d64,
13367 private:
0xa8c17826
13373 bitcoin.networks.dash = {
13375 public:
0x0488b21e,
13376 private:
0x0488ade4
13383 bitcoin.networks.namecoin = {
13385 public:
0x0488b21e,
13386 private:
0x0488ade4
13389 //scriptHash:
0x10,
13393 bitcoin.networks.peercoin = {
13395 public:
0x0488b21e,
13396 private:
0x0488ade4
13399 //scriptHash:
0x10,
13404 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13408 /** @fileOverview Javascript cryptography implementation.
13410 * Crush to remove comments, shorten variable names and
13411 * generally reduce transmission size.
13413 * @author Emily Stark
13414 * @author Mike Hamburg
13415 * @author Dan Boneh
13419 /*jslint indent:
2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13420 /*global document, window, escape, unescape, module, require, Uint32Array */
13422 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13424 /** @namespace Symmetric ciphers. */
13427 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13430 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13433 /** @namespace Block cipher modes of operation. */
13436 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13440 * @namespace Bit array encoders and decoders.
13443 * The members of this namespace are functions which translate between
13444 * SJCL's bitArrays and other objects (usually strings). Because it
13445 * isn't always clear which direction is encoding and which is decoding,
13446 * the method names are "fromBits" and "toBits".
13450 /** @namespace Exceptions. */
13452 /** @constructor Ciphertext is corrupt. */
13453 corrupt: function(message) {
13454 this.toString = function() { return "CORRUPT: "+this.message; };
13455 this.message = message;
13458 /** @constructor Invalid parameter. */
13459 invalid: function(message) {
13460 this.toString = function() { return "INVALID: "+this.message; };
13461 this.message = message;
13464 /** @constructor Bug or missing feature in SJCL. @constructor */
13465 bug: function(message) {
13466 this.toString = function() { return "BUG: "+this.message; };
13467 this.message = message;
13470 /** @constructor Something isn't ready. */
13471 notReady: function(message) {
13472 this.toString = function() { return "NOT READY: "+this.message; };
13473 this.message = message;
13478 if(typeof module !== 'undefined' && module.exports){
13479 module.exports = sjcl;
13481 if (typeof define === "function") {
13482 define([], function () {
13490 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13492 * @author Emily Stark
13493 * @author Mike Hamburg
13494 * @author Dan Boneh
13497 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13501 * These objects are the currency accepted by SJCL's crypto functions.
13505 * Most of our crypto primitives operate on arrays of
4-byte words internally,
13506 * but many of them can take arguments that are not a multiple of
4 bytes.
13507 * This library encodes arrays of bits (whose size need not be a multiple of
8
13508 * bits) as arrays of
32-bit words. The bits are packed, big-endian, into an
13509 * array of words,
32 bits at a time. Since the words are double-precision
13510 * floating point numbers, they fit some extra data. We use this (in a private,
13511 * possibly-changing manner) to encode the number of bits actually present
13512 * in the last word of the array.
13516 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13517 * to ciphers like AES which want arrays of words.
13522 * Array slices in units of bits.
13523 * @param {bitArray} a The array to slice.
13524 * @param {Number} bstart The offset to the start of the slice, in bits.
13525 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13526 * slice until the end of the array.
13527 * @return {bitArray} The requested slice.
13529 bitSlice: function (a, bstart, bend) {
13530 a = sjcl.bitArray._shiftRight(a.slice(bstart/
32),
32 - (bstart &
31)).slice(
1);
13531 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13535 * Extract a number packed into a bit array.
13536 * @param {bitArray} a The array to slice.
13537 * @param {Number} bstart The offset to the start of the slice, in bits.
13538 * @param {Number} length The length of the number to extract.
13539 * @return {Number} The requested slice.
13541 extract: function(a, bstart, blength) {
13542 // FIXME: this Math.floor is not necessary at all, but for some reason
13543 // seems to suppress a bug in the Chromium JIT.
13544 var x, sh = Math.floor((-bstart-blength) &
31);
13545 if ((bstart + blength -
1 ^ bstart) & -
32) {
13546 // it crosses a boundary
13547 x = (a[bstart/
32|
0] << (
32 - sh)) ^ (a[bstart/
32+
1|
0]
>>> sh);
13549 // within a single word
13550 x = a[bstart/
32|
0]
>>> sh;
13552 return x & ((
1<
<blength) -
1);
13556 * Concatenate two bit arrays.
13557 * @param {bitArray} a1 The first array.
13558 * @param {bitArray} a2 The second array.
13559 * @return {bitArray} The concatenation of a1 and a2.
13561 concat: function (a1, a2) {
13562 if (a1.length ===
0 || a2.length ===
0) {
13563 return a1.concat(a2);
13566 var last = a1[a1.length-
1], shift = sjcl.bitArray.getPartial(last);
13567 if (shift ===
32) {
13568 return a1.concat(a2);
13570 return sjcl.bitArray._shiftRight(a2, shift, last|
0, a1.slice(
0,a1.length-
1));
13575 * Find the length of an array of bits.
13576 * @param {bitArray} a The array.
13577 * @return {Number} The length of a, in bits.
13579 bitLength: function (a) {
13580 var l = a.length, x;
13581 if (l ===
0) { return
0; }
13583 return (l-
1) *
32 + sjcl.bitArray.getPartial(x);
13587 * Truncate an array.
13588 * @param {bitArray} a The array.
13589 * @param {Number} len The length to truncate to, in bits.
13590 * @return {bitArray} A new array, truncated to len bits.
13592 clamp: function (a, len) {
13593 if (a.length *
32 < len) { return a; }
13594 a = a.slice(
0, Math.ceil(len /
32));
13597 if (l
> 0 && len) {
13598 a[l-
1] = sjcl.bitArray.partial(len, a[l-
1] &
0x80000000 >> (len-
1),
1);
13604 * Make a partial word for a bit array.
13605 * @param {Number} len The number of bits in the word.
13606 * @param {Number} x The bits.
13607 * @param {Number} [
0] _end Pass
1 if x has already been shifted to the high side.
13608 * @return {Number} The partial word.
13610 partial: function (len, x, _end) {
13611 if (len ===
32) { return x; }
13612 return (_end ? x|
0 : x << (
32-len)) + len *
0x10000000000;
13616 * Get the number of bits used by a partial word.
13617 * @param {Number} x The partial word.
13618 * @return {Number} The number of bits used by the partial word.
13620 getPartial: function (x) {
13621 return Math.round(x/
0x10000000000) ||
32;
13625 * Compare two arrays for equality in a predictable amount of time.
13626 * @param {bitArray} a The first array.
13627 * @param {bitArray} b The second array.
13628 * @return {boolean} true if a == b; false otherwise.
13630 equal: function (a, b) {
13631 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13635 for (i=
0; i
<a.length; i++) {
13641 /** Shift an array right.
13642 * @param {bitArray} a The array to shift.
13643 * @param {Number} shift The number of bits to shift.
13644 * @param {Number} [carry=
0] A byte to carry in
13645 * @param {bitArray} [out=[]] An array to prepend to the output.
13648 _shiftRight: function (a, shift, carry, out) {
13649 var i, last2=
0, shift2;
13650 if (out === undefined) { out = []; }
13652 for (; shift
>=
32; shift -=
32) {
13657 return out.concat(a);
13660 for (i=
0; i
<a.length; i++) {
13661 out.push(carry | a[i]
>>>shift);
13662 carry = a[i] << (
32-shift);
13664 last2 = a.length ? a[a.length-
1] :
0;
13665 shift2 = sjcl.bitArray.getPartial(last2);
13666 out.push(sjcl.bitArray.partial(shift+shift2 &
31, (shift + shift2
> 32) ? carry : out.pop(),
1));
13670 /** xor a block of
4 words together.
13673 _xor4: function(x,y) {
13674 return [x[
0]^y[
0],x[
1]^y[
1],x[
2]^y[
2],x[
3]^y[
3]];
13677 /** byteswap a word array inplace.
13678 * (does not handle partial words)
13679 * @param {sjcl.bitArray} a word array
13680 * @return {sjcl.bitArray} byteswapped array
13682 byteswapM: function(a) {
13683 var i, v, m =
0xff00;
13684 for (i =
0; i < a.length; ++i) {
13686 a[i] = (v
>>> 24) | ((v
>>> 8) & m) | ((v & m) <<
8) | (v <<
24);
13693 //// codecString.js
13695 /** @fileOverview Bit array codec implementations.
13697 * @author Emily Stark
13698 * @author Mike Hamburg
13699 * @author Dan Boneh
13702 /** @namespace UTF-
8 strings */
13703 sjcl.codec.utf8String = {
13704 /** Convert from a bitArray to a UTF-
8 string. */
13705 fromBits: function (arr) {
13706 var out =
"", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13707 for (i=
0; i
<bl/
8; i++) {
13711 out += String.fromCharCode(tmp
>>> 24);
13714 return decodeURIComponent(escape(out));
13717 /** Convert from a UTF-
8 string to a bitArray. */
13718 toBits: function (str) {
13719 str = unescape(encodeURIComponent(str));
13720 var out = [], i, tmp=
0;
13721 for (i=
0; i
<str.length; i++) {
13722 tmp = tmp <<
8 | str.charCodeAt(i);
13729 out.push(sjcl.bitArray.partial(
8*(i&
3), tmp));
13738 /** @fileOverview Bit array codec implementations.
13740 * @author Emily Stark
13741 * @author Mike Hamburg
13742 * @author Dan Boneh
13745 /** @namespace Hexadecimal */
13747 /** Convert from a bitArray to a hex string. */
13748 fromBits: function (arr) {
13750 for (i=
0; i
<arr.length; i++) {
13751 out += ((arr[i]|
0)+
0xF00000000000).toString(
16).substr(
4);
13753 return out.substr(
0, sjcl.bitArray.bitLength(arr)/
4);//.replace(/(.{
8})/g,
"$1 ");
13755 /** Convert from a hex string to a bitArray. */
13756 toBits: function (str) {
13757 var i, out=[], len;
13758 str = str.replace(/\s|
0x/g,
"");
13760 str = str +
"00000000";
13761 for (i=
0; i
<str.length; i+=
8) {
13762 out.push(parseInt(str.substr(i,
8),
16)^
0);
13764 return sjcl.bitArray.clamp(out, len*
4);
13771 /** @fileOverview Javascript SHA-
512 implementation.
13773 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13774 * SJCL by Stefan Thomas.
13776 * CryptoJS (c)
2009–
2012 by Jeff Mott. All rights reserved.
13777 * Released with New BSD License
13779 * @author Emily Stark
13780 * @author Mike Hamburg
13781 * @author Dan Boneh
13782 * @author Jeff Mott
13783 * @author Stefan Thomas
13787 * Context for a SHA-
512 operation in progress.
13789 * @class Secure Hash Algorithm,
512 bits.
13791 sjcl.hash.sha512 = function (hash) {
13792 if (!this._key[
0]) { this._precompute(); }
13794 this._h = hash._h.slice(
0);
13795 this._buffer = hash._buffer.slice(
0);
13796 this._length = hash._length;
13803 * Hash a string or an array of words.
13805 * @param {bitArray|String} data the data to hash.
13806 * @return {bitArray} The hash value, an array of
16 big-endian words.
13808 sjcl.hash.sha512.hash = function (data) {
13809 return (new sjcl.hash.sha512()).update(data).finalize();
13812 sjcl.hash.sha512.prototype = {
13814 * The hash's block size, in bits.
13820 * Reset the hash state.
13823 reset:function () {
13824 this._h = this._init.slice(
0);
13831 * Input several words to the hash.
13832 * @param {bitArray|String} data the data to hash.
13835 update: function (data) {
13836 if (typeof data ===
"string") {
13837 data = sjcl.codec.utf8String.toBits(data);
13839 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13841 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13842 for (i =
1024+ol & -
1024; i <= nl; i+=
1024) {
13843 this._block(b.splice(
0,
32));
13849 * Complete hashing and output the hash value.
13850 * @return {bitArray} The hash value, an array of
16 big-endian words.
13852 finalize:function () {
13853 var i, b = this._buffer, h = this._h;
13855 // Round out and push the buffer
13856 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
13858 // Round out the buffer to a multiple of
32 words, less the
4 length words.
13859 for (i = b.length +
4; i &
31; i++) {
13863 // append the length
13866 b.push(Math.floor(this._length /
0x100000000));
13867 b.push(this._length |
0);
13870 this._block(b.splice(
0,
32));
13878 * The SHA-
512 initialization vector, to be precomputed.
13884 * Least significant
24 bits of SHA512 initialization values.
13886 * Javascript only has
53 bits of precision, so we compute the
40 most
13887 * significant bits and add the remaining
24 bits as constants.
13891 _initr: [
0xbcc908,
0xcaa73b,
0x94f82b,
0x1d36f1,
0xe682d1,
0x3e6c1f,
0x41bd6b,
0x7e2179 ],
13895 [
0x6a09e667,
0xf3bcc908,
0xbb67ae85,
0x84caa73b,
0x3c6ef372,
0xfe94f82b,
0xa54ff53a,
0x5f1d36f1,
13896 0x510e527f,
0xade682d1,
0x9b05688c,
0x2b3e6c1f,
0x1f83d9ab,
0xfb41bd6b,
0x5be0cd19,
0x137e2179],
13900 * The SHA-
512 hash key, to be precomputed.
13906 * Least significant
24 bits of SHA512 key values.
13910 [
0x28ae22,
0xef65cd,
0x4d3b2f,
0x89dbbc,
0x48b538,
0x05d019,
0x194f9b,
0x6d8118,
13911 0x030242,
0x706fbe,
0xe4b28c,
0xffb4e2,
0x7b896f,
0x1696b1,
0xc71235,
0x692694,
13912 0xf14ad2,
0x4f25e3,
0x8cd5b5,
0xac9c65,
0x2b0275,
0xa6e483,
0x41fbd4,
0x1153b5,
13913 0x66dfab,
0xb43210,
0xfb213f,
0xef0ee4,
0xa88fc2,
0x0aa725,
0x03826f,
0x0e6e70,
13914 0xd22ffc,
0x26c926,
0xc42aed,
0x95b3df,
0xaf63de,
0x77b2a8,
0xedaee6,
0x82353b,
13915 0xf10364,
0x423001,
0xf89791,
0x54be30,
0xef5218,
0x65a910,
0x71202a,
0xbbd1b8,
13916 0xd2d0c8,
0x41ab53,
0x8eeb99,
0x9b48a8,
0xc95a63,
0x418acb,
0x63e373,
0xb2b8a3,
13917 0xefb2fc,
0x172f60,
0xf0ab72,
0x6439ec,
0x631e28,
0x82bde9,
0xc67915,
0x72532b,
13918 0x26619c,
0xc0c207,
0xe0eb1e,
0x6ed178,
0x176fba,
0xc898a6,
0xf90dae,
0x1c471b,
13919 0x047d84,
0xc72493,
0xc9bebc,
0x100d4c,
0x3e42b6,
0x657e2a,
0xd6faec,
0x475817],
13923 [
0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
13924 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
13925 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
13926 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
13927 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
13928 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
13929 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
13930 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
13931 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
13932 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
13933 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
13934 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
13935 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
13936 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
13937 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
13938 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
13939 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
13940 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
13941 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
13942 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817],
13946 * Function to precompute _init and _key.
13949 _precompute: function () {
13950 // XXX: This code is for precomputing the SHA256 constants, change for
13951 // SHA512 and re-enable.
13952 var i =
0, prime =
2, factor;
13954 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
13955 function frac2(x) { return (x-Math.floor(x)) *
0x10000000000 &
0xff; }
13957 outer: for (; i
<80; prime++) {
13958 for (factor=
2; factor*factor <= prime; factor++) {
13959 if (prime % factor ===
0) {
13966 this._init[i*
2] = frac(Math.pow(prime,
1/
2));
13967 this._init[i*
2+
1] = (frac2(Math.pow(prime,
1/
2)) <<
24) | this._initr[i];
13969 this._key[i*
2] = frac(Math.pow(prime,
1/
3));
13970 this._key[i*
2+
1] = (frac2(Math.pow(prime,
1/
3)) <<
24) | this._keyr[i];
13976 * Perform one cycle of SHA-
512.
13977 * @param {bitArray} words one block of words.
13980 _block:function (words) {
13982 w = words.slice(
0),
13985 h0h = h[
0], h0l = h[
1], h1h = h[
2], h1l = h[
3],
13986 h2h = h[
4], h2l = h[
5], h3h = h[
6], h3l = h[
7],
13987 h4h = h[
8], h4l = h[
9], h5h = h[
10], h5l = h[
11],
13988 h6h = h[
12], h6l = h[
13], h7h = h[
14], h7l = h[
15];
13990 // Working variables
13991 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13992 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13993 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13994 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13996 for (i=
0; i
<80; i++) {
13997 // load up the input word for this round
14000 wrl = w[i *
2 +
1];
14003 var gamma0xh = w[(i-
15) *
2];
14004 var gamma0xl = w[(i-
15) *
2 +
1];
14006 ((gamma0xl <<
31) | (gamma0xh
>>> 1)) ^
14007 ((gamma0xl <<
24) | (gamma0xh
>>> 8)) ^
14010 ((gamma0xh <<
31) | (gamma0xl
>>> 1)) ^
14011 ((gamma0xh <<
24) | (gamma0xl
>>> 8)) ^
14012 ((gamma0xh <<
25) | (gamma0xl
>>> 7));
14015 var gamma1xh = w[(i-
2) *
2];
14016 var gamma1xl = w[(i-
2) *
2 +
1];
14018 ((gamma1xl <<
13) | (gamma1xh
>>> 19)) ^
14019 ((gamma1xh <<
3) | (gamma1xl
>>> 29)) ^
14022 ((gamma1xh <<
13) | (gamma1xl
>>> 19)) ^
14023 ((gamma1xl <<
3) | (gamma1xh
>>> 29)) ^
14024 ((gamma1xh <<
26) | (gamma1xl
>>> 6));
14027 var wr7h = w[(i-
7) *
2];
14028 var wr7l = w[(i-
7) *
2 +
1];
14030 var wr16h = w[(i-
16) *
2];
14031 var wr16l = w[(i-
16) *
2 +
1];
14033 // W(round) = gamma0 + W(round -
7) + gamma1 + W(round -
16)
14034 wrl = gamma0l + wr7l;
14035 wrh = gamma0h + wr7h + ((wrl
>>> 0) < (gamma0l
>>> 0) ?
1 :
0);
14037 wrh += gamma1h + ((wrl
>>> 0) < (gamma1l
>>> 0) ?
1 :
0);
14039 wrh += wr16h + ((wrl
>>> 0) < (wr16l
>>> 0) ?
1 :
0);
14043 w[i*
2 +
1] = wrl |=
0;
14046 var chh = (eh & fh) ^ (~eh & gh);
14047 var chl = (el & fl) ^ (~el & gl);
14050 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14051 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14054 var sigma0h = ((al <<
4) | (ah
>>> 28)) ^ ((ah <<
30) | (al
>>> 2)) ^ ((ah <<
25) | (al
>>> 7));
14055 var sigma0l = ((ah <<
4) | (al
>>> 28)) ^ ((al <<
30) | (ah
>>> 2)) ^ ((al <<
25) | (ah
>>> 7));
14058 var sigma1h = ((el <<
18) | (eh
>>> 14)) ^ ((el <<
14) | (eh
>>> 18)) ^ ((eh <<
23) | (el
>>> 9));
14059 var sigma1l = ((eh <<
18) | (el
>>> 14)) ^ ((eh <<
14) | (el
>>> 18)) ^ ((el <<
23) | (eh
>>> 9));
14063 var krl = k[i*
2+
1];
14065 // t1 = h + sigma1 + ch + K(round) + W(round)
14066 var t1l = hl + sigma1l;
14067 var t1h = hh + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0);
14069 t1h += chh + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0);
14071 t1h += krh + ((t1l
>>> 0) < (krl
>>> 0) ?
1 :
0);
14072 t1l = t1l + wrl|
0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=
1054972
14073 t1h += wrh + ((t1l
>>> 0) < (wrl
>>> 0) ?
1 :
0);
14075 // t2 = sigma0 + maj
14076 var t2l = sigma0l + majl;
14077 var t2h = sigma0h + majh + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0);
14079 // Update working variables
14086 el = (dl + t1l) |
0;
14087 eh = (dh + t1h + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14094 al = (t1l + t2l) |
0;
14095 ah = (t1h + t2h + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0;
14098 // Intermediate hash
14099 h0l = h[
1] = (h0l + al) |
0;
14100 h[
0] = (h0h + ah + ((h0l
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0;
14101 h1l = h[
3] = (h1l + bl) |
0;
14102 h[
2] = (h1h + bh + ((h1l
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0;
14103 h2l = h[
5] = (h2l + cl) |
0;
14104 h[
4] = (h2h + ch + ((h2l
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0;
14105 h3l = h[
7] = (h3l + dl) |
0;
14106 h[
6] = (h3h + dh + ((h3l
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14107 h4l = h[
9] = (h4l + el) |
0;
14108 h[
8] = (h4h + eh + ((h4l
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0;
14109 h5l = h[
11] = (h5l + fl) |
0;
14110 h[
10] = (h5h + fh + ((h5l
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0;
14111 h6l = h[
13] = (h6l + gl) |
0;
14112 h[
12] = (h6h + gh + ((h6l
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0;
14113 h7l = h[
15] = (h7l + hl) |
0;
14114 h[
14] = (h7h + hh + ((h7l
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0;
14121 /** @fileOverview HMAC implementation.
14123 * @author Emily Stark
14124 * @author Mike Hamburg
14125 * @author Dan Boneh
14128 /** HMAC with the specified hash function.
14130 * @param {bitArray} key the key for HMAC.
14131 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14133 sjcl.misc.hmac = function (key, Hash) {
14134 this._hash = Hash = Hash || sjcl.hash.sha256;
14135 var exKey = [[],[]], i,
14136 bs = Hash.prototype.blockSize /
32;
14137 this._baseHash = [new Hash(), new Hash()];
14139 if (key.length
> bs) {
14140 key = Hash.hash(key);
14143 for (i=
0; i
<bs; i++) {
14144 exKey[
0][i] = key[i]^
0x36363636;
14145 exKey[
1][i] = key[i]^
0x5C5C5C5C;
14148 this._baseHash[
0].update(exKey[
0]);
14149 this._baseHash[
1].update(exKey[
1]);
14150 this._resultHash = new Hash(this._baseHash[
0]);
14153 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14154 * @param {bitArray|String} data The data to mac.
14156 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14157 if (!this._updated) {
14159 return this.digest(data);
14161 throw new sjcl.exception.invalid(
"encrypt on already updated hmac called!");
14165 sjcl.misc.hmac.prototype.reset = function () {
14166 this._resultHash = new this._hash(this._baseHash[
0]);
14167 this._updated = false;
14170 sjcl.misc.hmac.prototype.update = function (data) {
14171 this._updated = true;
14172 this._resultHash.update(data);
14175 sjcl.misc.hmac.prototype.digest = function () {
14176 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[
1]).update(w).finalize();
14187 /** @fileOverview Password-based key-derivation function, version
2.0.
14189 * @author Emily Stark
14190 * @author Mike Hamburg
14191 * @author Dan Boneh
14194 /** Password-Based Key-Derivation Function, version
2.0.
14196 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14198 * This is the method specified by RSA's PKCS #
5 standard.
14200 * @param {bitArray|String} password The password.
14201 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14202 * @param {Number} [count=
1000] The number of iterations. Higher numbers make the function slower but more secure.
14203 * @param {Number} [length] The length of the derived key. Defaults to the
14204 output size of the hash function.
14205 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14206 * @return {bitArray} the derived key.
14208 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14209 count = count ||
1000;
14211 if (length <
0 || count <
0) {
14212 throw sjcl.exception.invalid(
"invalid params to pbkdf2");
14215 if (typeof password ===
"string") {
14216 password = sjcl.codec.utf8String.toBits(password);
14219 if (typeof salt ===
"string") {
14220 salt = sjcl.codec.utf8String.toBits(salt);
14223 Prff = Prff || sjcl.misc.hmac;
14225 var prf = new Prff(password),
14226 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14228 for (k =
1;
32 * out.length < (length ||
1); k++) {
14229 u = ui = prf.encrypt(b.concat(salt,[k]));
14231 for (i=
1; i
<count; i++) {
14232 ui = prf.encrypt(ui);
14233 for (j=
0; j
<ui.length; j++) {
14238 out = out.concat(u);
14241 if (length) { out = b.clamp(out, length); }
14249 /** @fileOverview Javascript SHA-
256 implementation.
14251 * An older version of this implementation is available in the public
14252 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14253 * Stanford University
2008-
2010 and BSD-licensed for liability
14256 * Special thanks to Aldo Cortesi for pointing out several bugs in
14259 * @author Emily Stark
14260 * @author Mike Hamburg
14261 * @author Dan Boneh
14265 * Context for a SHA-
256 operation in progress.
14267 * @class Secure Hash Algorithm,
256 bits.
14269 sjcl.hash.sha256 = function (hash) {
14270 if (!this._key[
0]) { this._precompute(); }
14272 this._h = hash._h.slice(
0);
14273 this._buffer = hash._buffer.slice(
0);
14274 this._length = hash._length;
14281 * Hash a string or an array of words.
14283 * @param {bitArray|String} data the data to hash.
14284 * @return {bitArray} The hash value, an array of
16 big-endian words.
14286 sjcl.hash.sha256.hash = function (data) {
14287 return (new sjcl.hash.sha256()).update(data).finalize();
14290 sjcl.hash.sha256.prototype = {
14292 * The hash's block size, in bits.
14298 * Reset the hash state.
14301 reset:function () {
14302 this._h = this._init.slice(
0);
14309 * Input several words to the hash.
14310 * @param {bitArray|String} data the data to hash.
14313 update: function (data) {
14314 if (typeof data ===
"string") {
14315 data = sjcl.codec.utf8String.toBits(data);
14317 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14319 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14320 for (i =
512+ol & -
512; i <= nl; i+=
512) {
14321 this._block(b.splice(
0,
16));
14327 * Complete hashing and output the hash value.
14328 * @return {bitArray} The hash value, an array of
8 big-endian words.
14330 finalize:function () {
14331 var i, b = this._buffer, h = this._h;
14333 // Round out and push the buffer
14334 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
14336 // Round out the buffer to a multiple of
16 words, less the
2 length words.
14337 for (i = b.length +
2; i &
15; i++) {
14341 // append the length
14342 b.push(Math.floor(this._length /
0x100000000));
14343 b.push(this._length |
0);
14346 this._block(b.splice(
0,
16));
14354 * The SHA-
256 initialization vector, to be precomputed.
14359 _init:[
0x6a09e667,
0xbb67ae85,
0x3c6ef372,
0xa54ff53a,
0x510e527f,
0x9b05688c,
0x1f83d9ab,
0x5be0cd19],
14363 * The SHA-
256 hash key, to be precomputed.
14369 [
0x428a2f98,
0x71374491,
0xb5c0fbcf,
0xe9b5dba5,
0x3956c25b,
0x59f111f1,
0x923f82a4,
0xab1c5ed5,
14370 0xd807aa98,
0x12835b01,
0x243185be,
0x550c7dc3,
0x72be5d74,
0x80deb1fe,
0x9bdc06a7,
0xc19bf174,
14371 0xe49b69c1,
0xefbe4786,
0x0fc19dc6,
0x240ca1cc,
0x2de92c6f,
0x4a7484aa,
0x5cb0a9dc,
0x76f988da,
14372 0x983e5152,
0xa831c66d,
0xb00327c8,
0xbf597fc7,
0xc6e00bf3,
0xd5a79147,
0x06ca6351,
0x14292967,
14373 0x27b70a85,
0x2e1b2138,
0x4d2c6dfc,
0x53380d13,
0x650a7354,
0x766a0abb,
0x81c2c92e,
0x92722c85,
14374 0xa2bfe8a1,
0xa81a664b,
0xc24b8b70,
0xc76c51a3,
0xd192e819,
0xd6990624,
0xf40e3585,
0x106aa070,
14375 0x19a4c116,
0x1e376c08,
0x2748774c,
0x34b0bcb5,
0x391c0cb3,
0x4ed8aa4a,
0x5b9cca4f,
0x682e6ff3,
14376 0x748f82ee,
0x78a5636f,
0x84c87814,
0x8cc70208,
0x90befffa,
0xa4506ceb,
0xbef9a3f7,
0xc67178f2],
14381 * Function to precompute _init and _key.
14384 _precompute: function () {
14385 var i =
0, prime =
2, factor;
14387 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
14389 outer: for (; i
<64; prime++) {
14390 for (factor=
2; factor*factor <= prime; factor++) {
14391 if (prime % factor ===
0) {
14398 this._init[i] = frac(Math.pow(prime,
1/
2));
14400 this._key[i] = frac(Math.pow(prime,
1/
3));
14406 * Perform one cycle of SHA-
256.
14407 * @param {bitArray} words one block of words.
14410 _block:function (words) {
14412 w = words.slice(
0),
14415 h0 = h[
0], h1 = h[
1], h2 = h[
2], h3 = h[
3],
14416 h4 = h[
4], h5 = h[
5], h6 = h[
6], h7 = h[
7];
14418 /* Rationale for placement of |
0 :
14419 * If a value can overflow is original
32 bits by a factor of more than a few
14420 * million (
2^
23 ish), there is a possibility that it might overflow the
14421 *
53-bit mantissa and lose precision.
14423 * To avoid this, we clamp back to
32 bits by |'ing with
0 on any value that
14424 * propagates around the loop, and on the hash state h[]. I don't believe
14425 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14426 * (for h4 anyway), and better safe than sorry.
14428 * The clamps on h[] are necessary for the output to be correct even in the
14429 * common case and for short inputs.
14431 for (i=
0; i
<64; i++) {
14432 // load up the input word for this round
14436 a = w[(i+
1 ) &
15];
14437 b = w[(i+
14) &
15];
14438 tmp = w[i&
15] = ((a
>>>7 ^ a
>>>18 ^ a
>>>3 ^ a<
<25 ^ a<
<14) +
14439 (b
>>>17 ^ b
>>>19 ^ b
>>>10 ^ b<
<15 ^ b<
<13) +
14440 w[i&
15] + w[(i+
9) &
15]) |
0;
14443 tmp = (tmp + h7 + (h4
>>>6 ^ h4
>>>11 ^ h4
>>>25 ^ h4<
<26 ^ h4<
<21 ^ h4<
<7) + (h6 ^ h4&(h5^h6)) + k[i]); // |
0;
14446 h7 = h6; h6 = h5; h5 = h4;
14448 h3 = h2; h2 = h1; h1 = h0;
14450 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1
>>>2 ^ h1
>>>13 ^ h1
>>>22 ^ h1<
<30 ^ h1<
<19 ^ h1<
<10)) |
0;
14453 h[
0] = h[
0]+h0 |
0;
14454 h[
1] = h[
1]+h1 |
0;
14455 h[
2] = h[
2]+h2 |
0;
14456 h[
3] = h[
3]+h3 |
0;
14457 h[
4] = h[
4]+h4 |
0;
14458 h[
5] = h[
5]+h5 |
0;
14459 h[
6] = h[
6]+h6 |
0;
14460 h[
7] = h[
7]+h7 |
0;
14464 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14465 WORDLISTS["english"] = [
14466 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14467 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14468 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14469 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14470 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14471 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14472 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14473 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14474 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14475 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14476 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14477 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14478 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14479 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14480 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14481 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14482 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14483 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14484 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14485 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14486 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14487 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14488 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14489 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14490 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14491 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14492 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14493 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14494 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14495 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14496 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14497 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14498 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14499 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14500 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14501 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14502 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14503 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14504 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14505 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14506 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14507 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14508 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14509 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14510 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14511 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14512 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14513 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14514 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14515 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14516 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14517 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14518 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14519 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14520 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14521 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14522 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14523 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14524 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14525 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14526 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14527 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14528 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14529 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14530 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14531 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14532 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14533 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14534 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14535 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14536 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14537 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14538 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14539 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14540 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14541 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14542 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14543 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14544 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14545 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14546 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14547 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14548 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14549 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14550 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14551 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14552 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14553 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14554 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14555 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14556 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14557 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14558 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14559 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14560 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14561 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14562 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14563 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14564 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14565 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14566 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14567 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14568 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14569 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14570 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14571 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14572 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14573 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14574 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14575 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14576 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14577 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14578 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14579 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14580 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14581 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14582 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14583 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14584 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14585 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14586 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14587 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14588 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14589 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14590 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14591 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14592 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14593 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14594 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14595 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14596 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14597 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14598 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14599 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14600 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14601 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14602 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14603 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14604 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14605 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14606 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14607 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14608 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14609 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14610 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14611 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14612 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14613 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14614 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14615 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14616 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14617 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14618 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14619 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14620 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14621 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14622 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14623 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14624 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14625 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14626 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14627 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14628 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14629 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14630 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14631 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14632 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14633 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14634 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14635 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14636 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14637 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14638 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14639 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14640 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14641 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14642 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14643 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14644 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14645 "thank","that","theme","then","theory","there","they","thing","this","thought",
14646 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14647 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14648 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14649 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14650 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14651 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14652 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14653 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14654 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14655 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14656 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14657 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14658 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14659 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14660 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14661 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14662 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14663 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14664 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14665 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14666 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14667 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14668 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14669 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14670 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14673 * Copyright (c)
2013 Pavol Rusnak
14675 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14676 * this software and associated documentation files (the "Software"), to deal in
14677 * the Software without restriction, including without limitation the rights to
14678 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14679 * of the Software, and to permit persons to whom the Software is furnished to do
14680 * so, subject to the following conditions:
14682 * The above copyright notice and this permission notice shall be included in all
14683 * copies or substantial portions of the Software.
14685 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14686 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14687 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14688 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14689 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14690 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14694 * Javascript port from python by Ian Coleman
14696 * Requires code from sjcl
14697 * https://github.com/bitwiseshiftleft/sjcl
14700 var Mnemonic = function(language) {
14702 var PBKDF2_ROUNDS =
2048;
14708 var hmacSHA512 = function(key) {
14709 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14710 this.encrypt = function() {
14711 return hasher.encrypt.apply(hasher, arguments);
14716 wordlist = WORDLISTS[language];
14717 if (wordlist.length != RADIX) {
14718 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14723 self.generate = function(strength) {
14724 strength = strength ||
128;
14725 var r = strength %
32;
14727 throw 'Strength should be divisible by
32, but it is not (' + r + ').';
14729 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14730 if (!hasStrongCrypto) {
14731 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14733 var buffer = new Uint8Array(strength /
8);
14734 var data = crypto.getRandomValues(buffer);
14735 return self.toMnemonic(data);
14738 self.toMnemonic = function(byteArray) {
14739 if (byteArray.length %
4 > 0) {
14740 throw 'Data length in bits should be divisible by
32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*
8 + ' bits).'
14743 //h = hashlib.sha256(data).hexdigest()
14744 var data = byteArrayToWordArray(byteArray);
14745 var hash = sjcl.hash.sha256.hash(data);
14746 var h = sjcl.codec.hex.fromBits(hash);
14748 // b is a binary string, eg '
00111010101100...'
14749 //b = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8) + \
14750 // bin(int(h,
16))[
2:].zfill(
256)[:len(data) *
8 /
32]
14752 // a = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8)
14753 // c = bin(int(h,
16))[
2:].zfill(
256)
14754 // d = c[:len(data) *
8 /
32]
14755 var a = byteArrayToBinaryString(byteArray);
14756 var c = zfill(hexStringToBinaryString(h),
256);
14757 var d = c.substring(
0, byteArray.length *
8 /
32);
14758 // b = line1 + line2
14762 var blen = b.length /
11;
14763 for (var i=
0; i
<blen; i++) {
14764 var idx = parseInt(b.substring(i *
11, (i +
1) *
11),
2);
14765 result.push(wordlist[idx]);
14767 return result.join(' ');
14770 self.check = function(mnemonic) {
14771 var mnemonic = mnemonic.split(' ')
14772 if (mnemonic.length %
3 > 0) {
14775 // idx = map(lambda x: bin(self.wordlist.index(x))[
2:].zfill(
11), mnemonic)
14777 for (var i=
0; i
<mnemonic.length; i++) {
14778 var word = mnemonic[i];
14779 var wordIndex = wordlist.indexOf(word);
14780 if (wordIndex == -
1) {
14783 var binaryIndex = zfill(wordIndex.toString(
2),
11);
14784 idx.push(binaryIndex);
14786 var b = idx.join('');
14788 //d = b[:l /
33 *
32]
14790 var d = b.substring(
0, l /
33 *
32);
14791 var h = b.substring(l - l /
33, l);
14792 //nd = binascii.unhexlify(hex(int(d,
2))[
2:].rstrip('L').zfill(l /
33 *
8))
14793 var nd = binaryStringToWordArray(d);
14794 //nh = bin(int(hashlib.sha256(nd).hexdigest(),
16))[
2:].zfill(
256)[:l /
33]
14795 var ndHash = sjcl.hash.sha256.hash(nd);
14796 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14797 var ndBstr = zfill(hexStringToBinaryString(ndHex),
256);
14798 var nh = ndBstr.substring(
0,l/
33);
14802 self.toSeed = function(mnemonic, passphrase) {
14803 passphrase = passphrase || '';
14804 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
14805 passphrase = self.normalizeString(passphrase)
14806 passphrase =
"mnemonic" + passphrase;
14807 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14808 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14809 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS,
512, hmacSHA512);
14810 var hashHex = sjcl.codec.hex.fromBits(result);
14814 self.normalizeString = function(str) {
14815 if (typeof str.normalize ==
"function") {
14816 return str.normalize(
"NFKD");
14819 // TODO decide how to handle this in the future.
14820 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14825 function byteArrayToWordArray(data) {
14827 for (var i=
0; i
<data.length/
4; i++) {
14829 v += data[i*
4 +
0] <<
8 *
3;
14830 v += data[i*
4 +
1] <<
8 *
2;
14831 v += data[i*
4 +
2] <<
8 *
1;
14832 v += data[i*
4 +
3] <<
8 *
0;
14838 function byteArrayToBinaryString(data) {
14840 for (var i=
0; i
<data.length; i++) {
14841 bin += zfill(data[i].toString(
2),
8);
14846 function hexStringToBinaryString(hexString) {
14848 for (var i=
0; i
<hexString.length; i++) {
14849 binaryString += zfill(parseInt(hexString[i],
16).toString(
2),
4);
14851 return binaryString;
14854 function binaryStringToWordArray(binary) {
14855 var aLen = binary.length /
32;
14857 for (var i=
0; i
<aLen; i++) {
14858 var valueStr = binary.substring(
0,
32);
14859 var value = parseInt(valueStr,
2);
14861 binary = binary.slice(
32);
14866 // Pad a numeric string on the left with zero digits until the given width
14868 // Note this differs to the python implementation because it does not
14869 // handle numbers starting with a sign.
14870 function zfill(source, length) {
14871 source = source.toString();
14872 while (source.length < length) {
14873 source = '
0' + source;
14882 <script>(function() {
14884 var mnemonic = new Mnemonic("english");
14886 var bip32RootKey = null;
14887 var bip32ExtendedKey = null;
14888 var network = bitcoin.networks.bitcoin;
14889 var addressRowTemplate = $("#address-row-template");
14891 var showIndex = true;
14892 var showAddress = true;
14893 var showPrivKey = true;
14895 var phraseChangeTimeoutEvent = null;
14896 var rootKeyChangedTimeoutEvent = null;
14899 DOM.network = $(".network");
14900 DOM.phraseNetwork = $("#network-phrase");
14901 DOM.phrase = $(".phrase");
14902 DOM.passphrase = $(".passphrase");
14903 DOM.generate = $(".generate");
14904 DOM.seed = $(".seed");
14905 DOM.rootKey = $(".root-key");
14906 DOM.extendedPrivKey = $(".extended-priv-key");
14907 DOM.extendedPubKey = $(".extended-pub-key");
14908 DOM.bip32tab = $("#bip32-tab");
14909 DOM.bip44tab = $("#bip44-tab");
14910 DOM.bip32panel = $("#bip32");
14911 DOM.bip44panel = $("#bip44");
14912 DOM.bip32path = $("#bip32-path");
14913 DOM.bip44path = $("#bip44-path");
14914 DOM.bip44purpose = $("#bip44 .purpose");
14915 DOM.bip44coin = $("#bip44 .coin");
14916 DOM.bip44account = $("#bip44 .account");
14917 DOM.bip44change = $("#bip44 .change");
14918 DOM.strength = $(".strength");
14919 DOM.hardenedAddresses = $(".hardened-addresses");
14920 DOM.addresses = $(".addresses");
14921 DOM.rowsToAdd = $(".rows-to-add");
14922 DOM.more = $(".more");
14923 DOM.feedback = $(".feedback");
14924 DOM.tab = $(".derivation-type a");
14925 DOM.indexToggle = $(".index-toggle");
14926 DOM.addressToggle = $(".address-toggle");
14927 DOM.privateKeyToggle = $(".private-key-toggle");
14931 DOM.network.on("change", networkChanged);
14932 DOM.phrase.on("input", delayedPhraseChanged);
14933 DOM.passphrase.on("input", delayedPhraseChanged);
14934 DOM.generate.on("click", generateClicked);
14935 DOM.more.on("click", showMore);
14936 DOM.rootKey.on("input", delayedRootKeyChanged);
14937 DOM.bip32path.on("input", calcForDerivationPath);
14938 DOM.bip44purpose.on("input", calcForDerivationPath);
14939 DOM.bip44coin.on("input", calcForDerivationPath);
14940 DOM.bip44account.on("input", calcForDerivationPath);
14941 DOM.bip44change.on("input", calcForDerivationPath);
14942 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
14943 DOM.hardenedAddresses.on("change", calcForDerivationPath);
14944 DOM.indexToggle.on("click", toggleIndexes);
14945 DOM.addressToggle.on("click", toggleAddresses);
14946 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14949 hideValidationError();
14950 populateNetworkSelect();
14955 function networkChanged(e) {
14956 var networkIndex = e.target.value;
14957 networks[networkIndex].onSelect();
14958 if (seed != null) {
14966 function delayedPhraseChanged() {
14967 hideValidationError();
14969 if (phraseChangeTimeoutEvent != null) {
14970 clearTimeout(phraseChangeTimeoutEvent);
14972 phraseChangeTimeoutEvent = setTimeout(phraseChanged,
400);
14975 function phraseChanged() {
14977 hideValidationError();
14978 // Get the mnemonic phrase
14979 var phrase = DOM.phrase.val();
14980 var errorText = findPhraseErrors(phrase);
14982 showValidationError(errorText);
14985 // Calculate and display
14986 var passphrase = DOM.passphrase.val();
14987 calcBip32RootKeyFromSeed(phrase, passphrase);
14988 calcForDerivationPath();
14992 function delayedRootKeyChanged() {
14993 // Warn if there is an existing mnemonic or passphrase.
14994 if (DOM.phrase.val().length
> 0 || DOM.passphrase.val().length
> 0) {
14995 if (!confirm(
"This will clear existing mnemonic and passphrase")) {
14996 DOM.rootKey.val(bip32RootKey);
15000 hideValidationError();
15002 // Clear existing mnemonic and passphrase
15003 DOM.phrase.val(
"");
15004 DOM.passphrase.val(
"");
15006 if (rootKeyChangedTimeoutEvent != null) {
15007 clearTimeout(rootKeyChangedTimeoutEvent);
15009 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged,
400);
15012 function rootKeyChanged() {
15014 hideValidationError();
15015 // Validate the root key TODO
15016 var rootKeyBase58 = DOM.rootKey.val();
15017 var errorText = validateRootKey(rootKeyBase58);
15019 showValidationError(errorText);
15022 // Calculate and display
15023 calcBip32RootKeyFromBase58(rootKeyBase58);
15024 calcForDerivationPath();
15028 function calcForDerivationPath() {
15030 hideValidationError();
15031 // Get the derivation path
15032 var derivationPath = getDerivationPath();
15033 var errorText = findDerivationPathErrors(derivationPath);
15035 showValidationError(errorText);
15038 calcBip32ExtendedKey(derivationPath);
15039 displayBip32Info();
15043 function generateClicked() {
15046 setTimeout(function() {
15047 var phrase = generateRandomPhrase();
15055 function toggleIndexes() {
15056 showIndex = !showIndex;
15057 $(
"td.index span").toggleClass(
"invisible");
15060 function toggleAddresses() {
15061 showAddress = !showAddress;
15062 $(
"td.address span").toggleClass(
"invisible");
15065 function togglePrivateKeys() {
15066 showPrivKey = !showPrivKey;
15067 $(
"td.privkey span").toggleClass(
"invisible");
15072 function generateRandomPhrase() {
15073 if (!hasStrongRandom()) {
15074 var errorText =
"This browser does not support strong randomness";
15075 showValidationError(errorText);
15078 var numWords = parseInt(DOM.strength.val());
15079 var strength = numWords /
3 *
32;
15080 var words = mnemonic.generate(strength);
15081 DOM.phrase.val(words);
15085 function calcBip32RootKeyFromSeed(phrase, passphrase) {
15086 seed = mnemonic.toSeed(phrase, passphrase);
15087 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
15090 function calcBip32RootKeyFromBase58(rootKeyBase58) {
15091 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
15094 function calcBip32ExtendedKey(path) {
15095 bip32ExtendedKey = bip32RootKey;
15096 // Derive the key from the path
15097 var pathBits = path.split(
"/");
15098 for (var i=
0; i
<pathBits.length; i++) {
15099 var bit = pathBits[i];
15100 var index = parseInt(bit);
15101 if (isNaN(index)) {
15104 var hardened = bit[bit.length-
1] ==
"'";
15106 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
15109 bip32ExtendedKey = bip32ExtendedKey.derive(index);
15114 function showValidationError(errorText) {
15120 function hideValidationError() {
15126 function findPhraseErrors(phrase) {
15127 // TODO make this right
15128 // Preprocess the words
15129 phrase = mnemonic.normalizeString(phrase);
15130 var parts = phrase.split(
" ");
15132 for (var i=
0; i
<parts.length; i++) {
15133 var part = parts[i];
15134 if (part.length
> 0) {
15135 // TODO check that lowercasing is always valid to do
15136 proper.push(part.toLowerCase());
15139 var properPhrase = proper.join(' ');
15141 for (var i=
0; i
<proper.length; i++) {
15142 var word = proper[i];
15143 if (WORDLISTS[
"english"].indexOf(word) == -
1) {
15144 console.log(
"Finding closest match to " + word);
15145 var nearestWord = findNearestWord(word);
15146 return word +
" not in wordlist, did you mean " + nearestWord +
"?";
15149 // Check the words are valid
15150 var isValid = mnemonic.check(properPhrase);
15152 return
"Invalid mnemonic";
15157 function validateRootKey(rootKeyBase58) {
15159 bitcoin.HDNode.fromBase58(rootKeyBase58);
15162 return
"Invalid root key";
15167 function getDerivationPath() {
15168 if (DOM.bip44tab.hasClass(
"active")) {
15169 var purpose = parseIntNoNaN(DOM.bip44purpose.val(),
44);
15170 var coin = parseIntNoNaN(DOM.bip44coin.val(),
0);
15171 var account = parseIntNoNaN(DOM.bip44account.val(),
0);
15172 var change = parseIntNoNaN(DOM.bip44change.val(),
0);
15174 path += purpose +
"'/";
15175 path += coin +
"'/";
15176 path += account +
"'/";
15178 DOM.bip44path.val(path);
15179 var derivationPath = DOM.bip44path.val();
15180 console.log(
"Using derivation path from BIP44 tab: " + derivationPath);
15181 return derivationPath;
15183 else if (DOM.bip32tab.hasClass(
"active")) {
15184 var derivationPath = DOM.bip32path.val();
15185 console.log(
"Using derivation path from BIP32 tab: " + derivationPath);
15186 return derivationPath;
15189 console.log(
"Unknown derivation path");
15193 function findDerivationPathErrors(path) {
15194 // TODO is not perfect but is better than nothing
15196 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#test-vectors
15198 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#extended-keys
15199 var maxDepth =
255; // TODO verify this!!
15200 var maxIndexValue = Math.pow(
2,
31); // TODO verify this!!
15201 if (path[
0] !=
"m") {
15202 return
"First character must be 'm'";
15204 if (path.length
> 1) {
15205 if (path[
1] !=
"/") {
15206 return
"Separator must be '/'";
15208 var indexes = path.split(
"/");
15209 if (indexes.length
> maxDepth) {
15210 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
15212 for (var depth =
1; depth
<indexes.length; depth++) {
15213 var index = indexes[depth];
15214 var invalidChars = index.replace(/^[
0-
9]+'?$/g,
"")
15215 if (invalidChars.length
> 0) {
15216 return
"Invalid characters " + invalidChars +
" found at depth " + depth;
15218 var indexValue = parseInt(index.replace(
"'",
""));
15219 if (isNaN(depth)) {
15220 return
"Invalid number at depth " + depth;
15222 if (indexValue
> maxIndexValue) {
15223 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
15230 function displayBip32Info() {
15232 DOM.seed.val(seed);
15233 var rootKey = bip32RootKey.toBase58();
15234 DOM.rootKey.val(rootKey);
15235 var extendedPrivKey = bip32ExtendedKey.toBase58();
15236 DOM.extendedPrivKey.val(extendedPrivKey);
15237 var extendedPubKey = bip32ExtendedKey.toBase58(false);
15238 DOM.extendedPubKey.val(extendedPubKey);
15239 // Display the addresses and privkeys
15240 clearAddressesList();
15241 displayAddresses(
0,
20);
15244 function displayAddresses(start, total) {
15245 for (var i=
0; i
<total; i++) {
15246 var index = i + start;
15247 new TableRow(index);
15251 function TableRow(index) {
15253 var useHardenedAddresses = DOM.hardenedAddresses.prop(
"checked");
15259 function calculateValues() {
15260 setTimeout(function() {
15262 if (useHardenedAddresses) {
15263 key = bip32ExtendedKey.deriveHardened(index);
15266 key = bip32ExtendedKey.derive(index);
15268 var address = key.getAddress().toString();
15269 var privkey = key.privKey.toWIF(network);
15270 var indexText = getDerivationPath() +
"/" + index;
15271 if (useHardenedAddresses) {
15272 indexText = indexText +
"'";
15274 addAddressToList(indexText, address, privkey);
15282 function showMore() {
15283 var start = DOM.addresses.children().length;
15284 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
15285 if (isNaN(rowsToAdd)) {
15287 DOM.rowsToAdd.val(
"20");
15289 if (rowsToAdd
> 200) {
15290 var msg =
"Generating " + rowsToAdd +
" rows could take a while. ";
15291 msg +=
"Do you want to continue?";
15292 if (!confirm(msg)) {
15296 displayAddresses(start, rowsToAdd);
15299 function clearDisplay() {
15300 clearAddressesList();
15302 hideValidationError();
15305 function clearAddressesList() {
15306 DOM.addresses.empty();
15309 function clearKey() {
15310 DOM.rootKey.val(
"");
15311 DOM.extendedPrivKey.val(
"");
15312 DOM.extendedPubKey.val(
"");
15315 function addAddressToList(indexText, address, privkey) {
15316 var row = $(addressRowTemplate.html());
15318 var indexCell = row.find(
".index span");
15319 var addressCell = row.find(
".address span");
15320 var privkeyCell = row.find(
".privkey span");
15322 indexCell.text(indexText);
15323 addressCell.text(address);
15324 privkeyCell.text(privkey);
15327 indexCell.addClass(
"invisible");
15329 if (!showAddress) {
15330 addressCell.addClass(
"invisible");
15332 if (!showPrivKey) {
15333 privkeyCell.addClass(
"invisible");
15335 DOM.addresses.append(row);
15338 function hasStrongRandom() {
15339 return 'crypto' in window && window['crypto'] !== null;
15342 function disableForms() {
15343 $(
"form").on(
"submit", function(e) {
15344 e.preventDefault();
15348 function parseIntNoNaN(val, defaultVal) {
15349 var v = parseInt(val);
15356 function showPending() {
15358 .text(
"Calculating...")
15362 function findNearestWord(word) {
15363 var words = WORDLISTS[
"english"];
15364 var minDistance =
99;
15365 var closestWord = words[
0];
15366 for (var i=
0; i
<words.length; i++) {
15367 var comparedTo = words[i];
15368 var distance = Levenshtein.get(word, comparedTo);
15369 if (distance < minDistance) {
15370 closestWord = comparedTo;
15371 minDistance = distance;
15374 return closestWord;
15377 function hidePending() {
15383 function populateNetworkSelect() {
15384 for (var i=
0; i
<networks.length; i++) {
15385 var network = networks[i];
15386 var option = $(
"<option>");
15387 option.attr(
"value", i);
15388 option.text(network.name);
15389 DOM.phraseNetwork.append(option);
15396 onSelect: function() {
15397 network = bitcoin.networks.bitcoin;
15398 DOM.bip44coin.val(
0);
15402 name:
"Bitcoin Testnet",
15403 onSelect: function() {
15404 network = bitcoin.networks.testnet;
15405 DOM.bip44coin.val(
1);
15410 onSelect: function() {
15411 network = bitcoin.networks.litecoin;
15412 DOM.bip44coin.val(
2);
15417 onSelect: function() {
15418 network = bitcoin.networks.dogecoin;
15419 DOM.bip44coin.val(
3);
15423 name:
"ShadowCash",
15424 onSelect: function() {
15425 network = bitcoin.networks.shadow;
15426 DOM.bip44coin.val(
35);
15430 name:
"ShadowCash Testnet",
15431 onSelect: function() {
15432 network = bitcoin.networks.shadowtn;
15433 DOM.bip44coin.val(
1);
15438 onSelect: function() {
15439 network = bitcoin.networks.viacoin;
15440 DOM.bip44coin.val(
14);
15444 name:
"Viacoin Testnet",
15445 onSelect: function() {
15446 network = bitcoin.networks.viacointestnet;
15447 DOM.bip44coin.val(
1);
15452 onSelect: function() {
15453 network = bitcoin.networks.jumbucks;
15454 DOM.bip44coin.val(
26);
15459 onSelect: function() {
15460 network = bitcoin.networks.clam;
15461 DOM.bip44coin.val(
23);
15466 onSelect: function() {
15467 network = bitcoin.networks.dash;
15468 DOM.bip44coin.val(
5);
15473 onSelect: function() {
15474 network = bitcoin.networks.namecoin;
15475 DOM.bip44coin.val(
7);
15480 onSelect: function() {
15481 network = bitcoin.networks.peercoin;
15482 DOM.bip44coin.val(
6);