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=
"DC POS" 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);
50 <div class=
"container">
52 <h1 class=
"text-center">Mnemonic Code Converter
</h1>
55 <div class=
"col-md-12">
57 <form class=
"form-horizontal" role=
"form">
58 <div class=
"col-sm-2"></div>
59 <div class=
"col-sm-10">
60 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum)
</p>
61 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target=
"_blank">BIP39 spec
</a></p>
63 <div class=
"form-group">
64 <label for=
"phrase" class=
"col-sm-2 control-label">BIP39 Mnemonic
</label>
65 <div class=
"col-sm-10">
66 <textarea id=
"phrase" class=
"phrase form-control"></textarea>
69 <div class=
"form-group">
70 <label for=
"strength" class=
"col-sm-2 control-label">Number of words
</label>
71 <div class=
"col-sm-10">
72 <div class=
"input-group">
73 <select id=
"strength" class=
"strength form-control">
74 <option val=
"3">3</option>
75 <option val=
"6">6</option>
76 <option val=
"9">9</option>
77 <option val=
"12">12</option>
78 <option val=
"15" selected
>15</option>
79 <option val=
"18">18</option>
80 <option val=
"21">21</option>
81 <option val=
"24">24</option>
83 <span class=
"input-group-btn">
84 <button class=
"btn generate">Generate Random Mnemonic
</button>
89 <div class=
"form-group">
90 <label for=
"passphrase" class=
"col-sm-2 control-label">BIP39 Passphrase (optional)
</label>
91 <div class=
"col-sm-10">
92 <textarea id=
"passphrase" class=
"passphrase form-control"></textarea>
95 <div class=
"form-group">
96 <label for=
"seed" class=
"col-sm-2 control-label">BIP39 Seed
</label>
97 <div class=
"col-sm-10">
98 <textarea id=
"seed" class=
"seed form-control" readonly=
"readonly"></textarea>
101 <div class=
"form-group">
102 <label for=
"network-phrase" class=
"col-sm-2 control-label">Coin
</label>
103 <div class=
"col-sm-10">
104 <select id=
"network-phrase" class=
"network form-control">
105 <!-- populated by javascript -->
109 <div class=
"form-group">
110 <label for=
"root-key" class=
"col-sm-2 control-label">BIP32 Root Key
</label>
111 <div class=
"col-sm-10">
112 <textarea id=
"root-key" class=
"root-key form-control"></textarea>
122 <div class=
"col-md-12">
123 <h2>Derivation Path
</h2>
124 <ul class=
"derivation-type nav nav-tabs" role=
"tablist">
125 <li id=
"bip44-tab" class=
"active">
126 <a href=
"#bip44" role=
"tab" data-toggle=
"tab">BIP44
</a>
129 <a href=
"#bip32" role=
"tab" data-toggle=
"tab">BIP32
</a>
132 <div class=
"derivation-type tab-content">
133 <div id=
"bip44" class=
"tab-pane active">
134 <form class=
"form-horizontal" role=
"form">
136 <div class=
"col-sm-2"></div>
137 <div class=
"col-sm-10">
138 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">BIP44 spec
</a></p>
140 <div class=
"form-group">
141 <label for=
"purpose" class=
"col-sm-2 control-label">
142 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target=
"_blank">Purpose
</a>
144 <div class=
"col-sm-10">
145 <input id=
"purpose" type=
"text" class=
"purpose form-control" value=
"44">
148 <div class=
"form-group">
149 <label for=
"coin" class=
"col-sm-2 control-label">
150 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target=
"_blank">Coin
</a>
152 <div class=
"col-sm-10">
153 <input id=
"coin" type=
"text" class=
"coin form-control" value=
"0">
156 <div class=
"form-group">
157 <label for=
"account" class=
"col-sm-2 control-label">
158 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target=
"_blank">Account
</a>
160 <div class=
"col-sm-10">
161 <input id=
"account" type=
"text" class=
"account form-control" value=
"0">
164 <div class=
"form-group">
165 <label for=
"change" class=
"col-sm-2 control-label">
166 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target=
"_blank">External / Internal
</a>
168 <div class=
"col-sm-10">
169 <input id=
"change" type=
"text" class=
"change form-control" value=
"0">
172 <div class=
"form-group">
173 <label for=
"bip44-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
174 <div class=
"col-sm-10">
175 <input id=
"bip44-path" type=
"text" class=
"path form-control" value=
"m/44'/0'/0'/0" readonly=
"readonly">
180 <div id=
"bip32" class=
"tab-pane">
181 <form class=
"form-horizontal" role=
"form">
183 <div class=
"col-sm-2"></div>
184 <div class=
"col-sm-10">
185 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">BIP32 spec
</a></p>
187 <div class=
"form-group">
188 <label for=
"bip32-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
189 <div class=
"col-sm-10">
190 <input id=
"bip32-path" type=
"text" class=
"path form-control" value=
"m/0">
193 <div class=
"form-group">
194 <label class=
"col-sm-2 control-label">Hive Wallet
</label>
195 <div class=
"col-sm-10">
196 <p class=
"form-control no-border">
197 Use path
<code>m/
0'/
0</code>.
198 For more info see the
<a href=
"https://www.hivewallet.com/" target=
"_blank">Hive Wallet homepage
</a>
202 <div class=
"form-group">
203 <label for=
"mycelium-path" class=
"col-sm-2 control-label">Mycelium Wallet
</label>
204 <div class=
"col-sm-10">
205 <p class=
"form-control no-border">
206 Use path
<code>m/
44'/
0'/
0'/
0</code>.
207 For more info see the
<a href=
"http://www.mycelium.com/" target=
"_blank">Mycelium Wallet homepage
</a>
214 <form class=
"form-horizontal" role=
"form">
215 <div class=
"form-group">
216 <label for=
"extended-priv-key" class=
"col-sm-2 control-label">BIP32 Extended Key
</label>
217 <div class=
"col-sm-10">
218 <textarea id=
"extended-priv-key" class=
"extended-priv-key form-control" readonly=
"readonly"></textarea>
221 <div class=
"form-group">
222 <label for=
"extended-pub-key" class=
"col-sm-2 control-label">BIP32 Extended Key (addresses only)
</label>
223 <div class=
"col-sm-10">
224 <textarea id=
"extended-pub-key" class=
"extended-pub-key form-control" readonly=
"readonly"></textarea>
234 <div class=
"col-md-12">
235 <h2>Derived Addresses
</h2>
236 <p>Note these addreses are derived from the
<strong>BIP32 Extended Key
</strong></p>
237 <table class=
"table table-striped">
240 <div class=
"input-group">
242 <button class=
"index-toggle">Toggle
</button>
246 <div class=
"input-group">
248 <button class=
"address-toggle">Toggle
</button>
252 <div class=
"input-group">
253 Private Key
254 <button class=
"private-key-toggle">Toggle
</button>
258 <tbody class=
"addresses">
259 <tr><td> </td><td> </td><td> </td></tr>
260 <tr><td> </td><td> </td><td> </td></tr>
261 <tr><td> </td><td> </td><td> </td></tr>
262 <tr><td> </td><td> </td><td> </td></tr>
263 <tr><td> </td><td> </td><td> </td></tr>
268 <span>Show next
</button>
269 <input type=
"number" class=
"rows-to-add" value=
"20">
270 <button class=
"more">Show
</button>
275 <div class=
"col-md-12">
277 <h3>BIP39
<span class=
"small">Mnemonic code for generating deterministic keys
</span></h3>
280 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec
</a>
282 <h3>BIP32
<span class=
"small">Hierarchical Deterministic Wallets
</span></h3>
285 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">official BIP32 spec
</a>
287 <a href=
"http://bip32.org/" target=
"_blank">bip32.org
</a>
289 <h3>BIP44
<span class=
"small">Multi-Account Hierarchy for Deterministic Wallets
</span></h3>
292 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">official BIP44 spec
</a>
294 <h3>Private Keys
</h3>
297 <a href=
"https://web.archive.org/web/20150707020924/https://brainwallet.org/" target=
"_blank">brainwallet.org
</a>,
298 but be careful - it can be easy to make mistakes if you
299 don't know what you're doing
307 <div class=
"col-md-12">
309 <h2>Offline Usage
</h2>
312 You can use this tool without having to be online.
315 In your browser, select file save-as, and save this page
319 Double-click that file to open it in a browser
320 on any offline computer.
323 Alternatively, download it from
324 <a href=
"https://github.com/dcpos/bip39">
325 https://github.com/dcpos/bip39
334 <div class=
"col-md-12">
336 <h2>This project is
100% open-source code
</h2>
339 <span>Get the source code at -
</span>
340 <a href=
"https://github.com/dcpos/bip39" target=
"_blank">
341 https://github.com/dcpos/bip39
348 <span>BitcoinJS -
</span>
349 <a href=
"https://github.com/bitcoinjs/bitcoinjs-lib" target=
"_blank">
350 https://github.com/bitcoinjs/bitcoinjs-lib
355 <span>jsBIP39 -
</span>
356 <a href=
"https://github.com/iancoleman/jsbip39" target=
"_blank">
357 https://github.com/iancoleman/jsbip39
363 <a href=
"https://github.com/bitwiseshiftleft/sjcl" target=
"_blank">
364 https://github.com/bitwiseshiftleft/sjcl
369 <span>jQuery -
</span>
370 <a href=
"https://jquery.com/" target=
"_blank">
376 <span>Twitter Bootstrap -
</span>
377 <a href=
"http://getbootstrap.com/" target=
"_blank">
378 http://getbootstrap.com/
387 <div class=
"feedback-container">
388 <div class=
"feedback">Loading...
</div>
391 <script type=
"text/template" id=
"address-row-template">
393 <td class=
"index"><span></span></td>
394 <td class=
"address"><span></span></td>
395 <td class=
"privkey"><span></span></td>
398 <script>/*! jQuery v2.1
.1 | (c)
2005,
2014 jQuery Foundation, Inc. | jquery.org/license */
399 !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)
400 },_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))
401 },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});
404 * Bootstrap v3.2.0 (http://getbootstrap.com)
405 * Copyright 2011-2014 Twitter, Inc.
406 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
408 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>
409 <script>(function() {
413 * Extend an Object with another Object's properties.
415 * The source objects are specified as additional arguments.
417 * @param dst Object the object to extend.
419 * @return Object the final object.
421 var _extend = function(dst) {
422 var sources = Array.prototype.slice.call(arguments,
1);
423 for (var i=
0; i
<sources.length; ++i) {
424 var src = sources[i];
426 if (src.hasOwnProperty(p)) dst[p] = src[p];
434 * Defer execution of given function.
435 * @param {Function} func
437 var _defer = function(func) {
438 if (typeof setImmediate === 'function') {
439 return setImmediate(func);
441 return setTimeout(func,
0);
446 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
450 * Calculate levenshtein distance of the two strings.
452 * @param str1 String the first string.
453 * @param str2 String the second string.
454 * @return Integer the levenshtein distance (
0 and above).
456 get: function(str1, str2) {
458 if (str1 === str2) return
0;
459 if (str1.length ===
0) return str2.length;
460 if (str2.length ===
0) return str1.length;
463 var prevRow = new Array(str2.length +
1),
464 curCol, nextCol, i, j, tmp;
466 // initialise previous row
467 for (i=
0; i
<prevRow.length; ++i) {
471 // calculate current row distance from previous row
472 for (i=
0; i
<str1.length; ++i) {
475 for (j=
0; j
<str2.length; ++j) {
479 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
486 tmp = prevRow[j +
1] +
1;
491 // copy current col value into previous (in preparation for next iteration)
495 // copy last col value into previous (in preparation for next iteration)
496 prevRow[j] = nextCol;
503 * Asynchronously calculate levenshtein distance of the two strings.
505 * @param str1 String the first string.
506 * @param str2 String the second string.
507 * @param cb Function callback function with signature: function(Error err, int distance)
508 * @param [options] Object additional options.
509 * @param [options.progress] Function progress callback with signature: function(percentComplete)
511 getAsync: function(str1, str2, cb, options) {
512 options = _extend({}, {
517 if (str1 === str2) return cb(null,
0);
518 if (str1.length ===
0) return cb(null, str2.length);
519 if (str2.length ===
0) return cb(null, str1.length);
522 var prevRow = new Array(str2.length +
1),
525 startTime, currentTime;
527 // initialise previous row
528 for (i=
0; i
<prevRow.length; ++i) {
536 var __calculate = function() {
538 startTime = new Date().valueOf();
539 currentTime = startTime;
541 // keep going until one second has elapsed
542 while (currentTime - startTime <
1000) {
543 // reached end of current row?
544 if (str2.length <= (++j)) {
545 // copy current into previous (in preparation for next iteration)
546 prevRow[j] = nextCol;
548 // if already done all chars
549 if (str1.length <= (++i)) {
550 return cb(null, nextCol);
552 // else if we have more left to do
563 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
570 tmp = prevRow[j +
1] +
1;
575 // copy current into previous (in preparation for next iteration)
579 currentTime = new Date().valueOf();
582 // send a progress update?
583 if (null !== options.progress) {
585 options.progress.call(null, (i *
100.0/ str1.length));
587 return cb('Progress callback: ' + err.toString());
601 if (typeof define !== "undefined" && define !== null && define.amd) {
607 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
608 module.exports = Levenshtein;
611 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
612 self.Levenshtein = Levenshtein;
614 // browser main thread
615 else if (typeof window !== "undefined" && window !== null) {
616 window.Levenshtein = Levenshtein;
621 <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){
622 // (public) Constructor
623 function BigInteger(a, b, c) {
624 if (!(this instanceof BigInteger))
625 return new BigInteger(a, b, c)
628 if (
"number" == typeof a) this.fromNumber(a, b, c)
629 else if (b == null &&
"string" != typeof a) this.fromString(a,
256)
630 else this.fromString(a, b)
634 var proto = BigInteger.prototype
636 // duck-typed isBigInteger
637 proto.__bigi = require('../package.json').version
638 BigInteger.isBigInteger = function (obj, check_ver) {
639 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
645 // am: Compute w_j += (x*this_i), propagate carries,
646 // c is initial carry, returns final carry.
647 // c <
3*dvalue, x <
2*dvalue, this_i < dvalue
648 // We need to select the fastest one that works in this environment.
650 // am1: use a single mult and divide to get the high bits,
651 // max digit bits should be
26 because
652 // max internal value =
2*dvalue^
2-
2*dvalue (<
2^
53)
653 function am1(i, x, w, j, c, n) {
655 var v = x * this[i++] + w[j] + c
656 c = Math.floor(v /
0x4000000)
657 w[j++] = v &
0x3ffffff
661 // am2 avoids a big mult-and-extract completely.
662 // Max digit bits should be <=
30 because we do bitwise ops
663 // on values up to
2*hdvalue^
2-hdvalue-
1 (<
2^
31)
664 function am2(i, x, w, j, c, n) {
668 var l = this[i] &
0x7fff
669 var h = this[i++]
>> 15
670 var m = xh * l + h * xl
671 l = xl * l + ((m &
0x7fff) <<
15) + w[j] + (c &
0x3fffffff)
672 c = (l
>>> 30) + (m
>>> 15) + xh * h + (c
>>> 30)
673 w[j++] = l &
0x3fffffff
677 // Alternately, set max digit bits to
28 since some
678 // browsers slow down when dealing with
32-bit numbers.
679 function am3(i, x, w, j, c, n) {
683 var l = this[i] &
0x3fff
684 var h = this[i++]
>> 14
685 var m = xh * l + h * xl
686 l = xl * l + ((m &
0x3fff) <<
14) + w[j] + c
687 c = (l
>> 28) + (m
>> 14) + xh * h
688 w[j++] = l &
0xfffffff
694 BigInteger.prototype.am = am1
697 BigInteger.prototype.DB = dbits
698 BigInteger.prototype.DM = ((
1 << dbits) -
1)
699 var DV = BigInteger.prototype.DV = (
1 << dbits)
702 BigInteger.prototype.FV = Math.pow(
2, BI_FP)
703 BigInteger.prototype.F1 = BI_FP - dbits
704 BigInteger.prototype.F2 =
2 * dbits - BI_FP
707 var BI_RM =
"0123456789abcdefghijklmnopqrstuvwxyz"
708 var BI_RC = new Array()
710 rr =
"0".charCodeAt(
0)
711 for (vv =
0; vv <=
9; ++vv) BI_RC[rr++] = vv
712 rr =
"a".charCodeAt(
0)
713 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
714 rr =
"A".charCodeAt(
0)
715 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
717 function int2char(n) {
718 return BI_RM.charAt(n)
721 function intAt(s, i) {
722 var c = BI_RC[s.charCodeAt(i)]
723 return (c == null) ? -
1 : c
726 // (protected) copy this to r
727 function bnpCopyTo(r) {
728 for (var i = this.t -
1; i
>=
0; --i) r[i] = this[i]
733 // (protected) set from integer value x, -DV <= x < DV
734 function bnpFromInt(x) {
736 this.s = (x <
0) ? -
1 :
0
737 if (x
> 0) this[
0] = x
738 else if (x < -
1) this[
0] = x + DV
742 // return bigint initialized to value
744 var r = new BigInteger()
749 // (protected) set from string and radix
750 function bnpFromString(s, b) {
755 else if (b ==
8) k =
3
756 else if (b ==
256) k =
8; // byte array
757 else if (b ==
2) k =
1
758 else if (b ==
32) k =
5
759 else if (b ==
4) k =
2
770 var x = (k ==
8) ? s[i] &
0xff : intAt(s, i)
772 if (s.charAt(i) == "-") mi = true
778 else if (sh + k
> self.DB) {
779 self[self.t -
1] |= (x & ((
1 << (self.DB - sh)) -
1)) << sh
780 self[self.t++] = (x
>> (self.DB - sh))
782 self[self.t -
1] |= x << sh
784 if (sh
>= self.DB) sh -= self.DB
786 if (k ==
8 && (s[
0] &
0x80) !=
0) {
788 if (sh
> 0) self[self.t -
1] |= ((
1 << (self.DB - sh)) -
1) << sh
791 if (mi) BigInteger.ZERO.subTo(self, self)
794 // (protected) clamp off excess high words
795 function bnpClamp() {
796 var c = this.s & this.DM
797 while (this.t
> 0 && this[this.t -
1] == c)--this.t
800 // (public) return string representation in given radix
801 function bnToString(b) {
803 if (self.s <
0) return
"-" + self.negate()
807 else if (b ==
8) k =
3
808 else if (b ==
2) k =
1
809 else if (b ==
32) k =
5
810 else if (b ==
4) k =
2
811 else return self.toRadix(b)
812 var km = (
1 << k) -
1,
816 var p = self.DB - (i * self.DB) % k
818 if (p < self.DB && (d = self[i]
>> p)
> 0) {
824 d = (self[i] & ((
1 << p) -
1)) << (k - p)
825 d |= self[--i]
>> (p += self.DB - k)
827 d = (self[i]
>> (p -= k)) & km
834 if (m) r += int2char(d)
841 function bnNegate() {
842 var r = new BigInteger()
843 BigInteger.ZERO.subTo(this, r)
849 return (this.s <
0) ? this.negate() : this
852 // (public) return + if this
> a, - if this < a,
0 if equal
853 function bnCompareTo(a) {
858 if (r !=
0) return (this.s <
0) ? -r : r
860 if ((r = this[i] - a[i]) !=
0) return r
864 // returns bit length of the integer x
868 if ((t = x
>>> 16) !=
0) {
872 if ((t = x
>> 8) !=
0) {
876 if ((t = x
>> 4) !=
0) {
880 if ((t = x
>> 2) !=
0) {
884 if ((t = x
>> 1) !=
0) {
891 // (public) return the number of bits in
"this"
892 function bnBitLength() {
893 if (this.t <=
0) return
0
894 return this.DB * (this.t -
1) + nbits(this[this.t -
1] ^ (this.s & this.DM))
897 // (public) return the number of bytes in
"this"
898 function bnByteLength() {
899 return this.bitLength()
>> 3
902 // (protected) r = this << n*DB
903 function bnpDLShiftTo(n, r) {
905 for (i = this.t -
1; i
>=
0; --i) r[i + n] = this[i]
906 for (i = n -
1; i
>=
0; --i) r[i] =
0
911 // (protected) r = this
>> n*DB
912 function bnpDRShiftTo(n, r) {
913 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
914 r.t = Math.max(this.t - n,
0)
918 // (protected) r = this << n
919 function bnpLShiftTo(n, r) {
922 var cbs = self.DB - bs
923 var bm = (
1 << cbs) -
1
924 var ds = Math.floor(n / self.DB),
925 c = (self.s << bs) & self.DM,
927 for (i = self.t -
1; i
>=
0; --i) {
928 r[i + ds +
1] = (self[i]
>> cbs) | c
929 c = (self[i] & bm) << bs
931 for (i = ds -
1; i
>=
0; --i) r[i] =
0
933 r.t = self.t + ds +
1
938 // (protected) r = this
>> n
939 function bnpRShiftTo(n, r) {
942 var ds = Math.floor(n / self.DB)
948 var cbs = self.DB - bs
949 var bm = (
1 << bs) -
1
950 r[
0] = self[ds]
>> bs
951 for (var i = ds +
1; i < self.t; ++i) {
952 r[i - ds -
1] |= (self[i] & bm) << cbs
953 r[i - ds] = self[i]
>> bs
955 if (bs
> 0) r[self.t - ds -
1] |= (self.s & bm) << cbs
960 // (protected) r = this - a
961 function bnpSubTo(a, r) {
965 m = Math.min(a.t, self.t)
988 r.s = (c <
0) ? -
1 :
0
989 if (c < -
1) r[i++] = self.DV + c
990 else if (c
> 0) r[i++] = c
995 // (protected) r = this * a, r != this,a (HAC
14.12)
996 //
"this" should be the larger one if appropriate.
997 function bnpMultiplyTo(a, r) {
1002 while (--i
>=
0) r[i] =
0
1003 for (i =
0; i < y.t; ++i) r[i + x.t] = x.am(
0, y[i], r, i,
0, x.t)
1006 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1009 // (protected) r = this^
2, r != this (HAC
14.16)
1010 function bnpSquareTo(r) {
1012 var i = r.t =
2 * x.t
1013 while (--i
>=
0) r[i] =
0
1014 for (i =
0; i < x.t -
1; ++i) {
1015 var c = x.am(i, x[i], r,
2 * i,
0,
1)
1016 if ((r[i + x.t] += x.am(i +
1,
2 * x[i], r,
2 * i +
1, c, x.t - i -
1))
>= x.DV) {
1021 if (r.t
> 0) r[r.t -
1] += x.am(i, x[i], r,
2 * i,
0,
1)
1026 // (protected) divide this by m, quotient and remainder to q, r (HAC
14.20)
1027 // r != q, this != m. q or r may be null.
1028 function bnpDivRemTo(m, q, r) {
1031 if (pm.t <=
0) return
1034 if (q != null) q.fromInt(
0)
1035 if (r != null) self.copyTo(r)
1038 if (r == null) r = new BigInteger()
1039 var y = new BigInteger(),
1042 var nsh = self.DB - nbits(pm[pm.t -
1]); // normalize modulus
1053 var yt = y0 * (
1 << self.F1) + ((ys
> 1) ? y[ys -
2]
>> self.F2 :
0)
1054 var d1 = self.FV / yt,
1055 d2 = (
1 << self.F1) / yt,
1059 t = (q == null) ? new BigInteger() : q
1061 if (r.compareTo(t)
>=
0) {
1065 BigInteger.ONE.dlShiftTo(ys, t)
1066 t.subTo(y, y); // "negative" y so we can replace sub with am later
1067 while (y.t < ys) y[y.t++] =
0
1069 // Estimate quotient digit
1070 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i -
1] + e) * d2)
1071 if ((r[i] += y.am(
0, qd, r, j,
0, ys)) < qd) { // Try it out
1074 while (r[i] < --qd) r.subTo(t, r)
1079 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1083 if (nsh
> 0) r.rShiftTo(nsh, r); // Denormalize remainder
1084 if (ts <
0) BigInteger.ZERO.subTo(r, r)
1087 // (public) this mod a
1089 var r = new BigInteger()
1091 .divRemTo(a, null, r)
1092 if (this.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) a.subTo(r, r)
1096 // Modular reduction using
"classic" algorithm
1097 function Classic(m) {
1101 function cConvert(x) {
1102 if (x.s <
0 || x.compareTo(this.m)
>=
0) return x.mod(this.m)
1106 function cRevert(x) {
1110 function cReduce(x) {
1111 x.divRemTo(this.m, null, x)
1114 function cMulTo(x, y, r) {
1119 function cSqrTo(x, r) {
1124 Classic.prototype.convert = cConvert
1125 Classic.prototype.revert = cRevert
1126 Classic.prototype.reduce = cReduce
1127 Classic.prototype.mulTo = cMulTo
1128 Classic.prototype.sqrTo = cSqrTo
1130 // (protected) return "-
1/this %
2^DB"; useful for Mont. reduction
1134 // xy(
2-xy) = (
1+km)(
1-km)
1135 // x[y(
2-xy)] =
1-k^
2m^
2
1136 // x[y(
2-xy)] ==
1 (mod m^
2)
1137 // if y is
1/x mod m, then y(
2-xy) is
1/x mod m^
2
1138 // should reduce x and y(
2-xy) by m^
2 at each step to keep size bounded.
1139 // JS multiply "overflows" differently from C/C++, so care is needed here.
1140 function bnpInvDigit() {
1141 if (this.t <
1) return
0
1143 if ((x &
1) ==
0) return
0
1144 var y = x &
3; // y ==
1/x mod
2^
2
1145 y = (y * (
2 - (x &
0xf) * y)) &
0xf; // y ==
1/x mod
2^
4
1146 y = (y * (
2 - (x &
0xff) * y)) &
0xff; // y ==
1/x mod
2^
8
1147 y = (y * (
2 - (((x &
0xffff) * y) &
0xffff))) &
0xffff; // y ==
1/x mod
2^
16
1148 // last step - calculate inverse mod DV directly
1149 // assumes
16 < DB <=
32 and assumes ability to handle
48-bit ints
1150 y = (y * (
2 - x * y % this.DV)) % this.DV; // y ==
1/x mod
2^dbits
1151 // we really want the negative inverse, and -DV < y < DV
1152 return (y
> 0) ? this.DV - y : -y
1155 // Montgomery reduction
1156 function Montgomery(m) {
1158 this.mp = m.invDigit()
1159 this.mpl = this.mp &
0x7fff
1160 this.mph = this.mp
>> 15
1161 this.um = (
1 << (m.DB -
15)) -
1
1166 function montConvert(x) {
1167 var r = new BigInteger()
1169 .dlShiftTo(this.m.t, r)
1170 r.divRemTo(this.m, null, r)
1171 if (x.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) this.m.subTo(r, r)
1176 function montRevert(x) {
1177 var r = new BigInteger()
1183 // x = x/R mod m (HAC
14.32)
1184 function montReduce(x) {
1185 while (x.t <= this.mt2) // pad x so am has enough room later
1187 for (var i =
0; i < this.m.t; ++i) {
1188 // faster way of calculating u0 = x[i]*mp mod DV
1189 var j = x[i] &
0x7fff
1190 var u0 = (j * this.mpl + (((j * this.mph + (x[i]
>> 15) * this.mpl) & this.um) <<
15)) & x.DM
1191 // use am to combine the multiply-shift-add into one call
1193 x[j] += this.m.am(
0, u0, x, i,
0, this.m.t)
1195 while (x[j]
>= x.DV) {
1201 x.drShiftTo(this.m.t, x)
1202 if (x.compareTo(this.m)
>=
0) x.subTo(this.m, x)
1205 // r = "x^
2/R mod m"; x != r
1206 function montSqrTo(x, r) {
1211 // r = "xy/R mod m"; x,y != r
1212 function montMulTo(x, y, r) {
1217 Montgomery.prototype.convert = montConvert
1218 Montgomery.prototype.revert = montRevert
1219 Montgomery.prototype.reduce = montReduce
1220 Montgomery.prototype.mulTo = montMulTo
1221 Montgomery.prototype.sqrTo = montSqrTo
1223 // (protected) true iff this is even
1224 function bnpIsEven() {
1225 return ((this.t
> 0) ? (this[
0] &
1) : this.s) ==
0
1228 // (protected) this^e, e <
2^
32, doing sqr and mul with
"r" (HAC
14.79)
1229 function bnpExp(e, z) {
1230 if (e
> 0xffffffff || e <
1) return BigInteger.ONE
1231 var r = new BigInteger(),
1232 r2 = new BigInteger(),
1233 g = z.convert(this),
1238 if ((e & (
1 << i))
> 0) z.mulTo(r2, g, r)
1248 // (public) this^e % m,
0 <= e <
2^
32
1249 function bnModPowInt(e, m) {
1251 if (e <
256 || m.isEven()) z = new Classic(m)
1252 else z = new Montgomery(m)
1253 return this.exp(e, z)
1257 proto.copyTo = bnpCopyTo
1258 proto.fromInt = bnpFromInt
1259 proto.fromString = bnpFromString
1260 proto.clamp = bnpClamp
1261 proto.dlShiftTo = bnpDLShiftTo
1262 proto.drShiftTo = bnpDRShiftTo
1263 proto.lShiftTo = bnpLShiftTo
1264 proto.rShiftTo = bnpRShiftTo
1265 proto.subTo = bnpSubTo
1266 proto.multiplyTo = bnpMultiplyTo
1267 proto.squareTo = bnpSquareTo
1268 proto.divRemTo = bnpDivRemTo
1269 proto.invDigit = bnpInvDigit
1270 proto.isEven = bnpIsEven
1274 proto.toString = bnToString
1275 proto.negate = bnNegate
1277 proto.compareTo = bnCompareTo
1278 proto.bitLength = bnBitLength
1279 proto.byteLength = bnByteLength
1281 proto.modPowInt = bnModPowInt
1284 function bnClone() {
1285 var r = new BigInteger()
1290 // (public) return value as integer
1291 function bnIntValue() {
1293 if (this.t ==
1) return this[
0] - this.DV
1294 else if (this.t ==
0) return -
1
1295 } else if (this.t ==
1) return this[
0]
1296 else if (this.t ==
0) return
0
1297 // assumes
16 < DB <
32
1298 return ((this[
1] & ((
1 << (
32 - this.DB)) -
1)) << this.DB) | this[
0]
1301 // (public) return value as byte
1302 function bnByteValue() {
1303 return (this.t ==
0) ? this.s : (this[
0] <<
24)
>> 24
1306 // (public) return value as short (assumes DB
>=
16)
1307 function bnShortValue() {
1308 return (this.t ==
0) ? this.s : (this[
0] <<
16)
>> 16
1311 // (protected) return x s.t. r^x < DV
1312 function bnpChunkSize(r) {
1313 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1316 // (public)
0 if this ==
0,
1 if this
> 0
1317 function bnSigNum() {
1318 if (this.s <
0) return -
1
1319 else if (this.t <=
0 || (this.t ==
1 && this[
0] <=
0)) return
0
1323 // (protected) convert to radix string
1324 function bnpToRadix(b) {
1325 if (b == null) b =
10
1326 if (this.signum() ==
0 || b <
2 || b
> 36) return
"0"
1327 var cs = this.chunkSize(b)
1328 var a = Math.pow(b, cs)
1330 y = new BigInteger(),
1331 z = new BigInteger(),
1333 this.divRemTo(d, y, z)
1334 while (y.signum()
> 0) {
1335 r = (a + z.intValue())
1344 // (protected) convert from radix string
1345 function bnpFromRadix(s, b) {
1348 if (b == null) b =
10
1349 var cs = self.chunkSize(b)
1350 var d = Math.pow(b, cs),
1354 for (var i =
0; i < s.length; ++i) {
1357 if (s.charAt(i) ==
"-" && self.signum() ==
0) mi = true
1363 self.dAddOffset(w,
0)
1369 self.dMultiply(Math.pow(b, j))
1370 self.dAddOffset(w,
0)
1372 if (mi) BigInteger.ZERO.subTo(self, self)
1375 // (protected) alternate constructor
1376 function bnpFromNumber(a, b, c) {
1378 if (
"number" == typeof b) {
1379 // new BigInteger(int,int,RNG)
1380 if (a <
2) self.fromInt(
1)
1382 self.fromNumber(a, c)
1383 if (!self.testBit(a -
1)) // force MSB set
1384 self.bitwiseTo(BigInteger.ONE.shiftLeft(a -
1), op_or, self)
1385 if (self.isEven()) self.dAddOffset(
1,
0); // force odd
1386 while (!self.isProbablePrime(b)) {
1387 self.dAddOffset(
2,
0)
1388 if (self.bitLength()
> a) self.subTo(BigInteger.ONE.shiftLeft(a -
1), self)
1392 // new BigInteger(int,RNG)
1393 var x = new Array(),
1395 x.length = (a
>> 3) +
1
1397 if (t
> 0) x[
0] &= ((
1 << t) -
1)
1399 self.fromString(x,
256)
1403 // (public) convert to bigendian byte array
1404 function bnToByteArray() {
1409 var p = self.DB - (i * self.DB) %
8,
1412 if (p < self.DB && (d = self[i]
>> p) != (self.s & self.DM)
>> p)
1413 r[k++] = d | (self.s << (self.DB - p))
1416 d = (self[i] & ((
1 << p) -
1)) << (
8 - p)
1417 d |= self[--i]
>> (p += self.DB -
8)
1419 d = (self[i]
>> (p -=
8)) &
0xff
1425 if ((d &
0x80) !=
0) d |= -
256
1426 if (k ===
0 && (self.s &
0x80) != (d &
0x80))++k
1427 if (k
> 0 || d != self.s) r[k++] = d
1433 function bnEquals(a) {
1434 return (this.compareTo(a) ==
0)
1438 return (this.compareTo(a) <
0) ? this : a
1442 return (this.compareTo(a)
> 0) ? this : a
1445 // (protected) r = this op a (bitwise)
1446 function bnpBitwiseTo(a, op, r) {
1448 var i, f, m = Math.min(a.t, self.t)
1449 for (i =
0; i < m; ++i) r[i] = op(self[i], a[i])
1452 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1455 f = self.s & self.DM
1456 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1459 r.s = op(self.s, a.s)
1463 // (public) this & a
1464 function op_and(x, y) {
1469 var r = new BigInteger()
1470 this.bitwiseTo(a, op_and, r)
1474 // (public) this | a
1475 function op_or(x, y) {
1480 var r = new BigInteger()
1481 this.bitwiseTo(a, op_or, r)
1485 // (public) this ^ a
1486 function op_xor(x, y) {
1491 var r = new BigInteger()
1492 this.bitwiseTo(a, op_xor, r)
1496 // (public) this & ~a
1497 function op_andnot(x, y) {
1501 function bnAndNot(a) {
1502 var r = new BigInteger()
1503 this.bitwiseTo(a, op_andnot, r)
1509 var r = new BigInteger()
1510 for (var i =
0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1516 // (public) this << n
1517 function bnShiftLeft(n) {
1518 var r = new BigInteger()
1519 if (n <
0) this.rShiftTo(-n, r)
1520 else this.lShiftTo(n, r)
1524 // (public) this
>> n
1525 function bnShiftRight(n) {
1526 var r = new BigInteger()
1527 if (n <
0) this.lShiftTo(-n, r)
1528 else this.rShiftTo(n, r)
1532 // return index of lowest
1-bit in x, x <
2^
31
1534 if (x ==
0) return -
1
1536 if ((x &
0xffff) ==
0) {
1540 if ((x &
0xff) ==
0) {
1544 if ((x &
0xf) ==
0) {
1552 if ((x &
1) ==
0)++r
1556 // (public) returns index of lowest
1-bit (or -
1 if none)
1557 function bnGetLowestSetBit() {
1558 for (var i =
0; i < this.t; ++i)
1559 if (this[i] !=
0) return i * this.DB + lbit(this[i])
1560 if (this.s <
0) return this.t * this.DB
1564 // return number of
1 bits in x
1574 // (public) return number of set bits
1575 function bnBitCount() {
1577 x = this.s & this.DM
1578 for (var i =
0; i < this.t; ++i) r += cbit(this[i] ^ x)
1582 // (public) true iff nth bit is set
1583 function bnTestBit(n) {
1584 var j = Math.floor(n / this.DB)
1585 if (j
>= this.t) return (this.s !=
0)
1586 return ((this[j] & (
1 << (n % this.DB))) !=
0)
1589 // (protected) this op (
1<
<n)
1590 function bnpChangeBit(n, op) {
1591 var r = BigInteger.ONE.shiftLeft(n)
1592 this.bitwiseTo(r, op, r)
1596 // (public) this | (
1<
<n)
1597 function bnSetBit(n) {
1598 return this.changeBit(n, op_or)
1601 // (public) this & ~(
1<
<n)
1602 function bnClearBit(n) {
1603 return this.changeBit(n, op_andnot)
1606 // (public) this ^ (
1<
<n)
1607 function bnFlipBit(n) {
1608 return this.changeBit(n, op_xor)
1611 // (protected) r = this + a
1612 function bnpAddTo(a, r) {
1617 m = Math.min(a.t, self.t)
1620 r[i++] = c & self.DM
1625 while (i < self.t) {
1627 r[i++] = c & self.DM
1635 r[i++] = c & self.DM
1640 r.s = (c <
0) ? -
1 :
0
1641 if (c
> 0) r[i++] = c
1642 else if (c < -
1) r[i++] = self.DV + c
1647 // (public) this + a
1649 var r = new BigInteger()
1654 // (public) this - a
1655 function bnSubtract(a) {
1656 var r = new BigInteger()
1661 // (public) this * a
1662 function bnMultiply(a) {
1663 var r = new BigInteger()
1664 this.multiplyTo(a, r)
1669 function bnSquare() {
1670 var r = new BigInteger()
1675 // (public) this / a
1676 function bnDivide(a) {
1677 var r = new BigInteger()
1678 this.divRemTo(a, r, null)
1682 // (public) this % a
1683 function bnRemainder(a) {
1684 var r = new BigInteger()
1685 this.divRemTo(a, null, r)
1689 // (public) [this/a,this%a]
1690 function bnDivideAndRemainder(a) {
1691 var q = new BigInteger(),
1692 r = new BigInteger()
1693 this.divRemTo(a, q, r)
1694 return new Array(q, r)
1697 // (protected) this *= n, this
>=
0,
1 < n < DV
1698 function bnpDMultiply(n) {
1699 this[this.t] = this.am(
0, n -
1, this,
0,
0, this.t)
1704 // (protected) this += n << w words, this
>=
0
1705 function bnpDAddOffset(n, w) {
1707 while (this.t <= w) this[this.t++] =
0
1709 while (this[w]
>= this.DV) {
1711 if (++w
>= this.t) this[this.t++] =
0
1717 function NullExp() {}
1723 function nMulTo(x, y, r) {
1727 function nSqrTo(x, r) {
1731 NullExp.prototype.convert = nNop
1732 NullExp.prototype.revert = nNop
1733 NullExp.prototype.mulTo = nMulTo
1734 NullExp.prototype.sqrTo = nSqrTo
1738 return this.exp(e, new NullExp())
1741 // (protected) r = lower n words of "this * a", a.t <= n
1742 // "this" should be the larger one if appropriate.
1743 function bnpMultiplyLowerTo(a, n, r) {
1744 var i = Math.min(this.t + a.t, n)
1745 r.s =
0; // assumes a,this
>=
0
1747 while (i
> 0) r[--i] =
0
1749 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(
0, a[i], r, i,
0, this.t)
1750 for (j = Math.min(a.t, n); i < j; ++i) this.am(
0, a[i], r, i,
0, n - i)
1754 // (protected) r =
"this * a" without lower n words, n
> 0
1755 //
"this" should be the larger one if appropriate.
1756 function bnpMultiplyUpperTo(a, n, r) {
1758 var i = r.t = this.t + a.t - n
1759 r.s =
0; // assumes a,this
>=
0
1760 while (--i
>=
0) r[i] =
0
1761 for (i = Math.max(n - this.t,
0); i < a.t; ++i)
1762 r[this.t + i - n] = this.am(n - i, a[i], r,
0,
0, this.t + i - n)
1767 // Barrett modular reduction
1768 function Barrett(m) {
1770 this.r2 = new BigInteger()
1771 this.q3 = new BigInteger()
1772 BigInteger.ONE.dlShiftTo(
2 * m.t, this.r2)
1773 this.mu = this.r2.divide(m)
1777 function barrettConvert(x) {
1778 if (x.s <
0 || x.t
> 2 * this.m.t) return x.mod(this.m)
1779 else if (x.compareTo(this.m) <
0) return x
1781 var r = new BigInteger()
1788 function barrettRevert(x) {
1792 // x = x mod m (HAC
14.42)
1793 function barrettReduce(x) {
1795 x.drShiftTo(self.m.t -
1, self.r2)
1796 if (x.t
> self.m.t +
1) {
1800 self.mu.multiplyUpperTo(self.r2, self.m.t +
1, self.q3)
1801 self.m.multiplyLowerTo(self.q3, self.m.t +
1, self.r2)
1802 while (x.compareTo(self.r2) <
0) x.dAddOffset(
1, self.m.t +
1)
1804 while (x.compareTo(self.m)
>=
0) x.subTo(self.m, x)
1807 // r = x^
2 mod m; x != r
1808 function barrettSqrTo(x, r) {
1813 // r = x*y mod m; x,y != r
1814 function barrettMulTo(x, y, r) {
1819 Barrett.prototype.convert = barrettConvert
1820 Barrett.prototype.revert = barrettRevert
1821 Barrett.prototype.reduce = barrettReduce
1822 Barrett.prototype.mulTo = barrettMulTo
1823 Barrett.prototype.sqrTo = barrettSqrTo
1825 // (public) this^e % m (HAC
14.85)
1826 function bnModPow(e, m) {
1827 var i = e.bitLength(),
1830 if (i <=
0) return r
1831 else if (i <
18) k =
1
1832 else if (i <
48) k =
3
1833 else if (i <
144) k =
4
1834 else if (i <
768) k =
5
1838 else if (m.isEven())
1841 z = new Montgomery(m)
1844 var g = new Array(),
1848 g[
1] = z.convert(this)
1850 var g2 = new BigInteger()
1853 g[n] = new BigInteger()
1854 z.mulTo(g2, g[n -
2], g[n])
1861 r2 = new BigInteger(),
1865 if (i
>= k1) w = (e[j]
>> (i - k1)) & km
1867 w = (e[j] & ((
1 << (i +
1)) -
1)) << (k1 - i)
1868 if (j
> 0) w |= e[j -
1]
>> (this.DB + i - k1)
1872 while ((w &
1) ==
0) {
1880 if (is1) { // ret ==
1, don't bother squaring or multiplying it
1889 if (n
> 0) z.sqrTo(r, r2)
1895 z.mulTo(r2, g[w], r)
1898 while (j
>=
0 && (e[j] & (
1 << i)) ==
0) {
1912 // (public) gcd(this,a) (HAC
14.54)
1914 var x = (this.s <
0) ? this.negate() : this.clone()
1915 var y = (a.s <
0) ? a.negate() : a.clone()
1916 if (x.compareTo(y) <
0) {
1921 var i = x.getLowestSetBit(),
1922 g = y.getLowestSetBit()
1929 while (x.signum()
> 0) {
1930 if ((i = x.getLowestSetBit())
> 0) x.rShiftTo(i, x)
1931 if ((i = y.getLowestSetBit())
> 0) y.rShiftTo(i, y)
1932 if (x.compareTo(y)
>=
0) {
1940 if (g
> 0) y.lShiftTo(g, y)
1944 // (protected) this % n, n <
2^
26
1945 function bnpModInt(n) {
1946 if (n <=
0) return
0
1947 var d = this.DV % n,
1948 r = (this.s <
0) ? n -
1 :
0
1950 if (d ==
0) r = this[
0] % n
1952 for (var i = this.t -
1; i
>=
0; --i) r = (d * r + this[i]) % n
1956 // (public)
1/this % m (HAC
14.61)
1957 function bnModInverse(m) {
1959 if ((this.isEven() && ac) || m.signum() ==
0) return BigInteger.ZERO
1966 while (u.signum() !=
0) {
1967 while (u.isEven()) {
1970 if (!a.isEven() || !b.isEven()) {
1975 } else if (!b.isEven()) b.subTo(m, b)
1978 while (v.isEven()) {
1981 if (!c.isEven() || !d.isEven()) {
1986 } else if (!d.isEven()) d.subTo(m, d)
1989 if (u.compareTo(v)
>=
0) {
1991 if (ac) a.subTo(c, a)
1995 if (ac) c.subTo(a, c)
1999 if (v.compareTo(BigInteger.ONE) !=
0) return BigInteger.ZERO
2000 if (d.compareTo(m)
>=
0) return d.subtract(m)
2001 if (d.signum() <
0) d.addTo(m, d)
2003 if (d.signum() <
0) return d.add(m)
2008 2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
47,
53,
59,
61,
67,
71,
2009 73,
79,
83,
89,
97,
101,
103,
107,
109,
113,
127,
131,
137,
139,
149,
151,
2010 157,
163,
167,
173,
179,
181,
191,
193,
197,
199,
211,
223,
227,
229,
233,
2011 239,
241,
251,
257,
263,
269,
271,
277,
281,
283,
293,
307,
311,
313,
317,
2012 331,
337,
347,
349,
353,
359,
367,
373,
379,
383,
389,
397,
401,
409,
419,
2013 421,
431,
433,
439,
443,
449,
457,
461,
463,
467,
479,
487,
491,
499,
503,
2014 509,
521,
523,
541,
547,
557,
563,
569,
571,
577,
587,
593,
599,
601,
607,
2015 613,
617,
619,
631,
641,
643,
647,
653,
659,
661,
673,
677,
683,
691,
701,
2016 709,
719,
727,
733,
739,
743,
751,
757,
761,
769,
773,
787,
797,
809,
811,
2017 821,
823,
827,
829,
839,
853,
857,
859,
863,
877,
881,
883,
887,
907,
911,
2018 919,
929,
937,
941,
947,
953,
967,
971,
977,
983,
991,
997
2021 var lplim = (
1 <<
26) / lowprimes[lowprimes.length -
1]
2023 // (public) test primality with certainty
>=
1-
.5^t
2024 function bnIsProbablePrime(t) {
2025 var i, x = this.abs()
2026 if (x.t ==
1 && x[
0] <= lowprimes[lowprimes.length -
1]) {
2027 for (i =
0; i < lowprimes.length; ++i)
2028 if (x[
0] == lowprimes[i]) return true
2031 if (x.isEven()) return false
2033 while (i < lowprimes.length) {
2034 var m = lowprimes[i],
2036 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2038 while (i < j) if (m % lowprimes[i++] ==
0) return false
2040 return x.millerRabin(t)
2043 // (protected) true if probably prime (HAC
4.24, Miller-Rabin)
2044 function bnpMillerRabin(t) {
2045 var n1 = this.subtract(BigInteger.ONE)
2046 var k = n1.getLowestSetBit()
2047 if (k <=
0) return false
2048 var r = n1.shiftRight(k)
2050 if (t
> lowprimes.length) t = lowprimes.length
2051 var a = new BigInteger(null)
2053 for (var i =
0; i < t; ++i) {
2055 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2056 if (bases.indexOf(j) == -
1) break
2060 var y = a.modPow(r, this)
2061 if (y.compareTo(BigInteger.ONE) !=
0 && y.compareTo(n1) !=
0) {
2063 while (j++ < k && y.compareTo(n1) !=
0) {
2064 y = y.modPowInt(
2, this)
2065 if (y.compareTo(BigInteger.ONE) ==
0) return false
2067 if (y.compareTo(n1) !=
0) return false
2074 proto.chunkSize = bnpChunkSize
2075 proto.toRadix = bnpToRadix
2076 proto.fromRadix = bnpFromRadix
2077 proto.fromNumber = bnpFromNumber
2078 proto.bitwiseTo = bnpBitwiseTo
2079 proto.changeBit = bnpChangeBit
2080 proto.addTo = bnpAddTo
2081 proto.dMultiply = bnpDMultiply
2082 proto.dAddOffset = bnpDAddOffset
2083 proto.multiplyLowerTo = bnpMultiplyLowerTo
2084 proto.multiplyUpperTo = bnpMultiplyUpperTo
2085 proto.modInt = bnpModInt
2086 proto.millerRabin = bnpMillerRabin
2089 proto.clone = bnClone
2090 proto.intValue = bnIntValue
2091 proto.byteValue = bnByteValue
2092 proto.shortValue = bnShortValue
2093 proto.signum = bnSigNum
2094 proto.toByteArray = bnToByteArray
2095 proto.equals = bnEquals
2101 proto.andNot = bnAndNot
2103 proto.shiftLeft = bnShiftLeft
2104 proto.shiftRight = bnShiftRight
2105 proto.getLowestSetBit = bnGetLowestSetBit
2106 proto.bitCount = bnBitCount
2107 proto.testBit = bnTestBit
2108 proto.setBit = bnSetBit
2109 proto.clearBit = bnClearBit
2110 proto.flipBit = bnFlipBit
2112 proto.subtract = bnSubtract
2113 proto.multiply = bnMultiply
2114 proto.divide = bnDivide
2115 proto.remainder = bnRemainder
2116 proto.divideAndRemainder = bnDivideAndRemainder
2117 proto.modPow = bnModPow
2118 proto.modInverse = bnModInverse
2121 proto.isProbablePrime = bnIsProbablePrime
2123 // JSBN-specific extension
2124 proto.square = bnSquare
2127 BigInteger.ZERO = nbv(
0)
2128 BigInteger.ONE = nbv(
1)
2129 BigInteger.valueOf = nbv
2131 module.exports = BigInteger
2133 },{"../package.json":
4}],
2:[function(require,module,exports){
2135 // FIXME: Kind of a weird way to throw exceptions, consider removing
2136 var assert = require('assert')
2137 var BigInteger = require('./bigi')
2140 * Turns a byte array into a big integer.
2142 * This function will interpret a byte array as a big integer in big
2145 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2146 // BigInteger expects a DER integer conformant byte array
2147 if (byteArray[
0] &
0x80) {
2148 return new BigInteger([
0].concat(byteArray))
2151 return new BigInteger(byteArray)
2155 * Returns a byte array representation of the big integer.
2157 * This returns the absolute of the contained value in big endian
2158 * form. A value of zero results in an empty array.
2160 BigInteger.prototype.toByteArrayUnsigned = function() {
2161 var byteArray = this.toByteArray()
2162 return byteArray[
0] ===
0 ? byteArray.slice(
1) : byteArray
2165 BigInteger.fromDERInteger = function(byteArray) {
2166 return new BigInteger(byteArray)
2170 * Converts BigInteger to a DER integer representation.
2172 * The format for this value uses the most significant bit as a sign
2173 * bit. If the most significant bit is already set and the integer is
2174 * positive, a
0x00 is prepended.
2190 * -
62300 =
> 0xff0ca4
2192 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2194 BigInteger.fromBuffer = function(buffer) {
2195 // BigInteger expects a DER integer conformant byte array
2196 if (buffer[
0] &
0x80) {
2197 var byteArray = Array.prototype.slice.call(buffer)
2199 return new BigInteger([
0].concat(byteArray))
2202 return new BigInteger(buffer)
2205 BigInteger.fromHex = function(hex) {
2206 if (hex === '') return BigInteger.ZERO
2208 assert.equal(hex, hex.match(/^[A-Fa-f0-
9]+/), 'Invalid hex string')
2209 assert.equal(hex.length %
2,
0, 'Incomplete hex')
2210 return new BigInteger(hex,
16)
2213 BigInteger.prototype.toBuffer = function(size) {
2214 var byteArray = this.toByteArrayUnsigned()
2217 var padding = size - byteArray.length
2218 while (zeros.length < padding) zeros.push(
0)
2220 return new Buffer(zeros.concat(byteArray))
2223 BigInteger.prototype.toHex = function(size) {
2224 return this.toBuffer(size).toString('hex')
2227 }).call(this,require(
"buffer").Buffer)
2228 },{
"./bigi":
1,
"assert":
5,
"buffer":
7}],
3:[function(require,module,exports){
2229 var BigInteger = require('./bigi')
2232 require('./convert')
2234 module.exports = BigInteger
2235 },{
"./bigi":
1,
"./convert":
2}],
4:[function(require,module,exports){
2239 "description":
"Big integers.",
2257 "devDependencies": {
2260 "coveralls":
"^2.10.0",
2261 "istanbul":
"^0.2.11"
2264 "url":
"https://github.com/cryptocoinjs/bigi",
2267 "main":
"./lib/index.js",
2269 "test":
"_mocha -- test/*.js",
2270 "jshint":
"jshint --config jshint.json lib/*.js ; true",
2272 "coverage":
"istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2273 "coveralls":
"npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2277 "files":
"test/*.js",
2283 "safari/6.0..latest",
2284 "iphone/6.0..latest",
2285 "android-browser/4.2..latest"
2289 "url":
"https://github.com/cryptocoinjs/bigi/issues"
2291 "homepage":
"https://github.com/cryptocoinjs/bigi",
2292 "_id":
"bigi@1.4.0",
2294 "shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2295 "tarball":
"http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2297 "_from":
"bigi@^1.4.0",
2298 "_npmVersion":
"1.4.3",
2301 "email":
"jprichardson@gmail.com"
2306 "email":
"jprichardson@gmail.com"
2309 "name":
"midnightlightning",
2310 "email":
"boydb@midnightdesign.ws"
2313 "name":
"sidazhang",
2314 "email":
"sidazhang89@gmail.com"
2318 "email":
"npm@shesek.info"
2322 "_shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2323 "_resolved":
"https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2326 },{}],
5:[function(require,module,exports){
2327 // http://wiki.commonjs.org/wiki/Unit_Testing/
1.0
2329 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2331 // Originally from narwhal.js (http://narwhaljs.org)
2332 // Copyright (c)
2009 Thomas Robinson
<280north.com
>
2334 // Permission is hereby granted, free of charge, to any person obtaining a copy
2335 // of this software and associated documentation files (the 'Software'), to
2336 // deal in the Software without restriction, including without limitation the
2337 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2338 // sell copies of the Software, and to permit persons to whom the Software is
2339 // furnished to do so, subject to the following conditions:
2341 // The above copyright notice and this permission notice shall be included in
2342 // all copies or substantial portions of the Software.
2344 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2345 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2346 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2347 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2348 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2349 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2351 // when used in node, this will actually load the util module we depend on
2352 // versus loading the builtin util module as happens otherwise
2353 // this is a bug in node module loading as far as I am concerned
2354 var util = require('util/');
2356 var pSlice = Array.prototype.slice;
2357 var hasOwn = Object.prototype.hasOwnProperty;
2359 //
1. The assert module provides functions that throw
2360 // AssertionError's when particular conditions are not met. The
2361 // assert module must conform to the following interface.
2363 var assert = module.exports = ok;
2365 //
2. The AssertionError is defined in assert.
2366 // new assert.AssertionError({ message: message,
2368 // expected: expected })
2370 assert.AssertionError = function AssertionError(options) {
2371 this.name = 'AssertionError';
2372 this.actual = options.actual;
2373 this.expected = options.expected;
2374 this.operator = options.operator;
2375 if (options.message) {
2376 this.message = options.message;
2377 this.generatedMessage = false;
2379 this.message = getMessage(this);
2380 this.generatedMessage = true;
2382 var stackStartFunction = options.stackStartFunction || fail;
2384 if (Error.captureStackTrace) {
2385 Error.captureStackTrace(this, stackStartFunction);
2388 // non v8 browsers so we can have a stacktrace
2389 var err = new Error();
2391 var out = err.stack;
2393 // try to strip useless frames
2394 var fn_name = stackStartFunction.name;
2395 var idx = out.indexOf('\n' + fn_name);
2397 // once we have located the function frame
2398 // we need to strip out everything before it (and its line)
2399 var next_line = out.indexOf('\n', idx +
1);
2400 out = out.substring(next_line +
1);
2408 // assert.AssertionError instanceof Error
2409 util.inherits(assert.AssertionError, Error);
2411 function replacer(key, value) {
2412 if (util.isUndefined(value)) {
2415 if (util.isNumber(value) && !isFinite(value)) {
2416 return value.toString();
2418 if (util.isFunction(value) || util.isRegExp(value)) {
2419 return value.toString();
2424 function truncate(s, n) {
2425 if (util.isString(s)) {
2426 return s.length < n ? s : s.slice(
0, n);
2432 function getMessage(self) {
2433 return truncate(JSON.stringify(self.actual, replacer),
128) + ' ' +
2434 self.operator + ' ' +
2435 truncate(JSON.stringify(self.expected, replacer),
128);
2438 // At present only the three keys mentioned above are used and
2439 // understood by the spec. Implementations or sub modules can pass
2440 // other keys to the AssertionError's constructor - they will be
2443 //
3. All of the following functions must throw an AssertionError
2444 // when a corresponding condition is not met, with a message that
2445 // may be undefined if not provided. All assertion methods provide
2446 // both the actual and expected values to the assertion error for
2447 // display purposes.
2449 function fail(actual, expected, message, operator, stackStartFunction) {
2450 throw new assert.AssertionError({
2455 stackStartFunction: stackStartFunction
2459 // EXTENSION! allows for well behaved errors defined elsewhere.
2462 //
4. Pure assertion tests whether a value is truthy, as determined
2464 // assert.ok(guard, message_opt);
2465 // This statement is equivalent to assert.equal(true, !!guard,
2466 // message_opt);. To test strictly for the value true, use
2467 // assert.strictEqual(true, guard, message_opt);.
2469 function ok(value, message) {
2470 if (!value) fail(value, true, message, '==', assert.ok);
2474 //
5. The equality assertion tests shallow, coercive equality with
2476 // assert.equal(actual, expected, message_opt);
2478 assert.equal = function equal(actual, expected, message) {
2479 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2482 //
6. The non-equality assertion tests for whether two objects are not equal
2483 // with != assert.notEqual(actual, expected, message_opt);
2485 assert.notEqual = function notEqual(actual, expected, message) {
2486 if (actual == expected) {
2487 fail(actual, expected, message, '!=', assert.notEqual);
2491 //
7. The equivalence assertion tests a deep equality relation.
2492 // assert.deepEqual(actual, expected, message_opt);
2494 assert.deepEqual = function deepEqual(actual, expected, message) {
2495 if (!_deepEqual(actual, expected)) {
2496 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2500 function _deepEqual(actual, expected) {
2501 //
7.1. All identical values are equivalent, as determined by ===.
2502 if (actual === expected) {
2505 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2506 if (actual.length != expected.length) return false;
2508 for (var i =
0; i < actual.length; i++) {
2509 if (actual[i] !== expected[i]) return false;
2514 //
7.2. If the expected value is a Date object, the actual value is
2515 // equivalent if it is also a Date object that refers to the same time.
2516 } else if (util.isDate(actual) && util.isDate(expected)) {
2517 return actual.getTime() === expected.getTime();
2519 //
7.3 If the expected value is a RegExp object, the actual value is
2520 // equivalent if it is also a RegExp object with the same source and
2521 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2522 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2523 return actual.source === expected.source &&
2524 actual.global === expected.global &&
2525 actual.multiline === expected.multiline &&
2526 actual.lastIndex === expected.lastIndex &&
2527 actual.ignoreCase === expected.ignoreCase;
2529 //
7.4. Other pairs that do not both pass typeof value == 'object',
2530 // equivalence is determined by ==.
2531 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2532 return actual == expected;
2534 //
7.5 For all other Object pairs, including Array objects, equivalence is
2535 // determined by having the same number of owned properties (as verified
2536 // with Object.prototype.hasOwnProperty.call), the same set of keys
2537 // (although not necessarily the same order), equivalent values for every
2538 // corresponding key, and an identical 'prototype' property. Note: this
2539 // accounts for both named and indexed properties on Arrays.
2541 return objEquiv(actual, expected);
2545 function isArguments(object) {
2546 return Object.prototype.toString.call(object) == '[object Arguments]';
2549 function objEquiv(a, b) {
2550 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2552 // an identical 'prototype' property.
2553 if (a.prototype !== b.prototype) return false;
2554 // if one is a primitive, the other must be same
2555 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2558 var aIsArgs = isArguments(a),
2559 bIsArgs = isArguments(b);
2560 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2565 return _deepEqual(a, b);
2567 var ka = objectKeys(a),
2570 // having the same number of owned properties (keys incorporates
2572 if (ka.length != kb.length)
2574 //the same set of keys (although not necessarily the same order),
2578 for (i = ka.length -
1; i
>=
0; i--) {
2582 //equivalent values for every corresponding key, and
2583 //~~~possibly expensive deep test
2584 for (i = ka.length -
1; i
>=
0; i--) {
2586 if (!_deepEqual(a[key], b[key])) return false;
2591 //
8. The non-equivalence assertion tests for any deep inequality.
2592 // assert.notDeepEqual(actual, expected, message_opt);
2594 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2595 if (_deepEqual(actual, expected)) {
2596 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2600 //
9. The strict equality assertion tests strict equality, as determined by ===.
2601 // assert.strictEqual(actual, expected, message_opt);
2603 assert.strictEqual = function strictEqual(actual, expected, message) {
2604 if (actual !== expected) {
2605 fail(actual, expected, message, '===', assert.strictEqual);
2609 //
10. The strict non-equality assertion tests for strict inequality, as
2610 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2612 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2613 if (actual === expected) {
2614 fail(actual, expected, message, '!==', assert.notStrictEqual);
2618 function expectedException(actual, expected) {
2619 if (!actual || !expected) {
2623 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2624 return expected.test(actual);
2625 } else if (actual instanceof expected) {
2627 } else if (expected.call({}, actual) === true) {
2634 function _throws(shouldThrow, block, expected, message) {
2637 if (util.isString(expected)) {
2648 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2649 (message ? ' ' + message : '.');
2651 if (shouldThrow && !actual) {
2652 fail(actual, expected, 'Missing expected exception' + message);
2655 if (!shouldThrow && expectedException(actual, expected)) {
2656 fail(actual, expected, 'Got unwanted exception' + message);
2659 if ((shouldThrow && actual && expected &&
2660 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2665 //
11. Expected to throw an error:
2666 // assert.throws(block, Error_opt, message_opt);
2668 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2669 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2672 // EXTENSION! This is annoying to write outside this module.
2673 assert.doesNotThrow = function(block, /*optional*/message) {
2674 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2677 assert.ifError = function(err) { if (err) {throw err;}};
2679 var objectKeys = Object.keys || function (obj) {
2681 for (var key in obj) {
2682 if (hasOwn.call(obj, key)) keys.push(key);
2687 },{"util/":
29}],
6:[function(require,module,exports){
2689 },{}],
7:[function(require,module,exports){
2691 * The buffer module from node.js, for the browser.
2693 * @author Feross Aboukhadijeh
<feross@feross.org
> <http://feross.org
>
2697 var base64 = require('base64-js')
2698 var ieee754 = require('ieee754')
2699 var isArray = require('is-array')
2701 exports.Buffer = Buffer
2702 exports.SlowBuffer = SlowBuffer
2703 exports.INSPECT_MAX_BYTES =
50
2704 Buffer.poolSize =
8192 // not used by this implementation
2709 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2710 * === true Use Uint8Array implementation (fastest)
2711 * === false Use Object implementation (most compatible, even IE6)
2713 * Browsers that support typed arrays are IE
10+, Firefox
4+, Chrome
7+, Safari
5.1+,
2714 * Opera
11.6+, iOS
4.2+.
2716 * Due to various browser bugs, sometimes the Object implementation will be used even
2717 * when the browser supports typed arrays.
2721 * - Firefox
4-
29 lacks support for adding new properties to `Uint8Array` instances,
2722 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=
695438.
2724 * - Safari
5-
7 lacks support for changing the `Object.prototype.constructor` property
2727 * - Chrome
9-
10 is missing the `TypedArray.prototype.subarray` function.
2729 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2730 * incorrect length in some situations.
2732 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2733 * get the Object implementation, which is slower but behaves correctly.
2735 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2738 var arr = new Uint8Array(
1)
2739 arr.foo = function () { return
42 }
2740 arr.constructor = Bar
2741 return arr.foo() ===
42 && // typed array instances can be augmented
2742 arr.constructor === Bar && // constructor can be set
2743 typeof arr.subarray === 'function' && // chrome
9-
10 lack `subarray`
2744 arr.subarray(
1,
1).byteLength ===
0 // ie10 has broken `subarray`
2750 function kMaxLength () {
2751 return Buffer.TYPED_ARRAY_SUPPORT
2760 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2761 * with function properties for all the node `Buffer` API functions. We use
2762 * `Uint8Array` so that square bracket notation works as expected -- it returns
2765 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2768 function Buffer (arg) {
2769 if (!(this instanceof Buffer)) {
2770 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2771 if (arguments.length
> 1) return new Buffer(arg, arguments[
1])
2772 return new Buffer(arg)
2776 this.parent = undefined
2779 if (typeof arg === 'number') {
2780 return fromNumber(this, arg)
2783 // Slightly less common case.
2784 if (typeof arg === 'string') {
2785 return fromString(this, arg, arguments.length
> 1 ? arguments[
1] : 'utf8')
2789 return fromObject(this, arg)
2792 function fromNumber (that, length) {
2793 that = allocate(that, length <
0 ?
0 : checked(length) |
0)
2794 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2795 for (var i =
0; i < length; i++) {
2802 function fromString (that, string, encoding) {
2803 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2805 // Assumption: byteLength() return value is always < kMaxLength.
2806 var length = byteLength(string, encoding) |
0
2807 that = allocate(that, length)
2809 that.write(string, encoding)
2813 function fromObject (that, object) {
2814 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2816 if (isArray(object)) return fromArray(that, object)
2818 if (object == null) {
2819 throw new TypeError('must start with number, buffer, array or string')
2822 if (typeof ArrayBuffer !== 'undefined') {
2823 if (object.buffer instanceof ArrayBuffer) {
2824 return fromTypedArray(that, object)
2826 if (object instanceof ArrayBuffer) {
2827 return fromArrayBuffer(that, object)
2831 if (object.length) return fromArrayLike(that, object)
2833 return fromJsonObject(that, object)
2836 function fromBuffer (that, buffer) {
2837 var length = checked(buffer.length) |
0
2838 that = allocate(that, length)
2839 buffer.copy(that,
0,
0, length)
2843 function fromArray (that, array) {
2844 var length = checked(array.length) |
0
2845 that = allocate(that, length)
2846 for (var i =
0; i < length; i +=
1) {
2847 that[i] = array[i] &
255
2852 // Duplicate of fromArray() to keep fromArray() monomorphic.
2853 function fromTypedArray (that, array) {
2854 var length = checked(array.length) |
0
2855 that = allocate(that, length)
2856 // Truncating the elements is probably not what people expect from typed
2857 // arrays with BYTES_PER_ELEMENT
> 1 but it's compatible with the behavior
2858 // of the old Buffer constructor.
2859 for (var i =
0; i < length; i +=
1) {
2860 that[i] = array[i] &
255
2865 function fromArrayBuffer (that, array) {
2866 if (Buffer.TYPED_ARRAY_SUPPORT) {
2867 // Return an augmented `Uint8Array` instance, for best performance
2869 that = Buffer._augment(new Uint8Array(array))
2871 // Fallback: Return an object instance of the Buffer class
2872 that = fromTypedArray(that, new Uint8Array(array))
2877 function fromArrayLike (that, array) {
2878 var length = checked(array.length) |
0
2879 that = allocate(that, length)
2880 for (var i =
0; i < length; i +=
1) {
2881 that[i] = array[i] &
255
2886 // Deserialize { type: 'Buffer', data: [
1,
2,
3,...] } into a Buffer object.
2887 // Returns a zero-length buffer for inputs that don't conform to the spec.
2888 function fromJsonObject (that, object) {
2892 if (object.type === 'Buffer' && isArray(object.data)) {
2894 length = checked(array.length) |
0
2896 that = allocate(that, length)
2898 for (var i =
0; i < length; i +=
1) {
2899 that[i] = array[i] &
255
2904 function allocate (that, length) {
2905 if (Buffer.TYPED_ARRAY_SUPPORT) {
2906 // Return an augmented `Uint8Array` instance, for best performance
2907 that = Buffer._augment(new Uint8Array(length))
2909 // Fallback: Return an object instance of the Buffer class
2910 that.length = length
2911 that._isBuffer = true
2914 var fromPool = length !==
0 && length <= Buffer.poolSize
>>> 1
2915 if (fromPool) that.parent = rootParent
2920 function checked (length) {
2921 // Note: cannot use `length < kMaxLength` here because that fails when
2922 // length is NaN (which is otherwise coerced to zero.)
2923 if (length
>= kMaxLength()) {
2924 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2925 'size:
0x' + kMaxLength().toString(
16) + ' bytes')
2930 function SlowBuffer (subject, encoding) {
2931 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2933 var buf = new Buffer(subject, encoding)
2938 Buffer.isBuffer = function isBuffer (b) {
2939 return !!(b != null && b._isBuffer)
2942 Buffer.compare = function compare (a, b) {
2943 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2944 throw new TypeError('Arguments must be Buffers')
2947 if (a === b) return
0
2953 var len = Math.min(x, y)
2955 if (a[i] !== b[i]) break
2965 if (x < y) return -
1
2970 Buffer.isEncoding = function isEncoding (encoding) {
2971 switch (String(encoding).toLowerCase()) {
2989 Buffer.concat = function concat (list, length) {
2990 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
2992 if (list.length ===
0) {
2993 return new Buffer(
0)
2997 if (length === undefined) {
2999 for (i =
0; i < list.length; i++) {
3000 length += list[i].length
3004 var buf = new Buffer(length)
3006 for (i =
0; i < list.length; i++) {
3014 function byteLength (string, encoding) {
3015 if (typeof string !== 'string') string = '' + string
3017 var len = string.length
3018 if (len ===
0) return
0
3020 // Use a for loop to avoid recursion
3021 var loweredCase = false
3032 return utf8ToBytes(string).length
3041 return base64ToBytes(string).length
3043 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3044 encoding = ('' + encoding).toLowerCase()
3049 Buffer.byteLength = byteLength
3051 // pre-set for values that may exist in the future
3052 Buffer.prototype.length = undefined
3053 Buffer.prototype.parent = undefined
3055 function slowToString (encoding, start, end) {
3056 var loweredCase = false
3059 end = end === undefined || end === Infinity ? this.length : end |
0
3061 if (!encoding) encoding = 'utf8'
3062 if (start <
0) start =
0
3063 if (end
> this.length) end = this.length
3064 if (end <= start) return ''
3069 return hexSlice(this, start, end)
3073 return utf8Slice(this, start, end)
3076 return asciiSlice(this, start, end)
3079 return binarySlice(this, start, end)
3082 return base64Slice(this, start, end)
3088 return utf16leSlice(this, start, end)
3091 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3092 encoding = (encoding + '').toLowerCase()
3098 Buffer.prototype.toString = function toString () {
3099 var length = this.length |
0
3100 if (length ===
0) return ''
3101 if (arguments.length ===
0) return utf8Slice(this,
0, length)
3102 return slowToString.apply(this, arguments)
3105 Buffer.prototype.equals = function equals (b) {
3106 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3107 if (this === b) return true
3108 return Buffer.compare(this, b) ===
0
3111 Buffer.prototype.inspect = function inspect () {
3113 var max = exports.INSPECT_MAX_BYTES
3114 if (this.length
> 0) {
3115 str = this.toString('hex',
0, max).match(/.{
2}/g).join(' ')
3116 if (this.length
> max) str += ' ... '
3118 return '
<Buffer ' + str + '
>'
3121 Buffer.prototype.compare = function compare (b) {
3122 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3123 if (this === b) return
0
3124 return Buffer.compare(this, b)
3127 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3128 if (byteOffset
> 0x7fffffff) byteOffset =
0x7fffffff
3129 else if (byteOffset < -
0x80000000) byteOffset = -
0x80000000
3132 if (this.length ===
0) return -
1
3133 if (byteOffset
>= this.length) return -
1
3135 // Negative offsets start from the end of the buffer
3136 if (byteOffset <
0) byteOffset = Math.max(this.length + byteOffset,
0)
3138 if (typeof val === 'string') {
3139 if (val.length ===
0) return -
1 // special case: looking for empty string always fails
3140 return String.prototype.indexOf.call(this, val, byteOffset)
3142 if (Buffer.isBuffer(val)) {
3143 return arrayIndexOf(this, val, byteOffset)
3145 if (typeof val === 'number') {
3146 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3147 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3149 return arrayIndexOf(this, [ val ], byteOffset)
3152 function arrayIndexOf (arr, val, byteOffset) {
3154 for (var i =
0; byteOffset + i < arr.length; i++) {
3155 if (arr[byteOffset + i] === val[foundIndex === -
1 ?
0 : i - foundIndex]) {
3156 if (foundIndex === -
1) foundIndex = i
3157 if (i - foundIndex +
1 === val.length) return byteOffset + foundIndex
3165 throw new TypeError('val must be string, number or Buffer')
3168 // `get` is deprecated
3169 Buffer.prototype.get = function get (offset) {
3170 console.log('.get() is deprecated. Access using array indexes instead.')
3171 return this.readUInt8(offset)
3174 // `set` is deprecated
3175 Buffer.prototype.set = function set (v, offset) {
3176 console.log('.set() is deprecated. Access using array indexes instead.')
3177 return this.writeUInt8(v, offset)
3180 function hexWrite (buf, string, offset, length) {
3181 offset = Number(offset) ||
0
3182 var remaining = buf.length - offset
3186 length = Number(length)
3187 if (length
> remaining) {
3192 // must be an even number of digits
3193 var strLen = string.length
3194 if (strLen %
2 !==
0) throw new Error('Invalid hex string')
3196 if (length
> strLen /
2) {
3199 for (var i =
0; i < length; i++) {
3200 var parsed = parseInt(string.substr(i *
2,
2),
16)
3201 if (isNaN(parsed)) throw new Error('Invalid hex string')
3202 buf[offset + i] = parsed
3207 function utf8Write (buf, string, offset, length) {
3208 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3211 function asciiWrite (buf, string, offset, length) {
3212 return blitBuffer(asciiToBytes(string), buf, offset, length)
3215 function binaryWrite (buf, string, offset, length) {
3216 return asciiWrite(buf, string, offset, length)
3219 function base64Write (buf, string, offset, length) {
3220 return blitBuffer(base64ToBytes(string), buf, offset, length)
3223 function ucs2Write (buf, string, offset, length) {
3224 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3227 Buffer.prototype.write = function write (string, offset, length, encoding) {
3228 // Buffer#write(string)
3229 if (offset === undefined) {
3231 length = this.length
3233 // Buffer#write(string, encoding)
3234 } else if (length === undefined && typeof offset === 'string') {
3236 length = this.length
3238 // Buffer#write(string, offset[, length][, encoding])
3239 } else if (isFinite(offset)) {
3241 if (isFinite(length)) {
3243 if (encoding === undefined) encoding = 'utf8'
3248 // legacy write(string, encoding, offset, length) - remove in v0.13
3256 var remaining = this.length - offset
3257 if (length === undefined || length
> remaining) length = remaining
3259 if ((string.length
> 0 && (length <
0 || offset <
0)) || offset
> this.length) {
3260 throw new RangeError('attempt to write outside buffer bounds')
3263 if (!encoding) encoding = 'utf8'
3265 var loweredCase = false
3269 return hexWrite(this, string, offset, length)
3273 return utf8Write(this, string, offset, length)
3276 return asciiWrite(this, string, offset, length)
3279 return binaryWrite(this, string, offset, length)
3282 // Warning: maxLength not taken into account in base64Write
3283 return base64Write(this, string, offset, length)
3289 return ucs2Write(this, string, offset, length)
3292 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3293 encoding = ('' + encoding).toLowerCase()
3299 Buffer.prototype.toJSON = function toJSON () {
3302 data: Array.prototype.slice.call(this._arr || this,
0)
3306 function base64Slice (buf, start, end) {
3307 if (start ===
0 && end === buf.length) {
3308 return base64.fromByteArray(buf)
3310 return base64.fromByteArray(buf.slice(start, end))
3314 function utf8Slice (buf, start, end) {
3315 end = Math.min(buf.length, end)
3320 var bytesPerSequence
3326 for (; i < end; i += bytesPerSequence) {
3330 if (firstByte
> 0xEF) {
3331 bytesPerSequence =
4
3332 } else if (firstByte
> 0xDF) {
3333 bytesPerSequence =
3
3334 } else if (firstByte
> 0xBF) {
3335 bytesPerSequence =
2
3337 bytesPerSequence =
1
3340 if (i + bytesPerSequence <= end) {
3341 switch (bytesPerSequence) {
3343 if (firstByte <
0x80) {
3344 codePoint = firstByte
3348 secondByte = buf[i +
1]
3349 if ((secondByte &
0xC0) ===
0x80) {
3350 tempCodePoint = (firstByte &
0x1F) <<
0x6 | (secondByte &
0x3F)
3351 if (tempCodePoint
> 0x7F) {
3352 codePoint = tempCodePoint
3357 secondByte = buf[i +
1]
3358 thirdByte = buf[i +
2]
3359 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80) {
3360 tempCodePoint = (firstByte &
0xF) <<
0xC | (secondByte &
0x3F) <<
0x6 | (thirdByte &
0x3F)
3361 if (tempCodePoint
> 0x7FF && (tempCodePoint <
0xD800 || tempCodePoint
> 0xDFFF)) {
3362 codePoint = tempCodePoint
3367 secondByte = buf[i +
1]
3368 thirdByte = buf[i +
2]
3369 fourthByte = buf[i +
3]
3370 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80 && (fourthByte &
0xC0) ===
0x80) {
3371 tempCodePoint = (firstByte &
0xF) <<
0x12 | (secondByte &
0x3F) <<
0xC | (thirdByte &
0x3F) <<
0x6 | (fourthByte &
0x3F)
3372 if (tempCodePoint
> 0xFFFF && tempCodePoint <
0x110000) {
3373 codePoint = tempCodePoint
3379 if (codePoint ===
0xFFFD) {
3380 // we generated an invalid codePoint so make sure to only advance by
1 byte
3381 bytesPerSequence =
1
3382 } else if (codePoint
> 0xFFFF) {
3383 // encode to utf16 (surrogate pair dance)
3384 codePoint -=
0x10000
3385 res.push(codePoint
>>> 10 &
0x3FF |
0xD800)
3386 codePoint =
0xDC00 | codePoint &
0x3FF
3392 return String.fromCharCode.apply(String, res)
3395 function asciiSlice (buf, start, end) {
3397 end = Math.min(buf.length, end)
3399 for (var i = start; i < end; i++) {
3400 ret += String.fromCharCode(buf[i] &
0x7F)
3405 function binarySlice (buf, start, end) {
3407 end = Math.min(buf.length, end)
3409 for (var i = start; i < end; i++) {
3410 ret += String.fromCharCode(buf[i])
3415 function hexSlice (buf, start, end) {
3416 var len = buf.length
3418 if (!start || start <
0) start =
0
3419 if (!end || end <
0 || end
> len) end = len
3422 for (var i = start; i < end; i++) {
3423 out += toHex(buf[i])
3428 function utf16leSlice (buf, start, end) {
3429 var bytes = buf.slice(start, end)
3431 for (var i =
0; i < bytes.length; i +=
2) {
3432 res += String.fromCharCode(bytes[i] + bytes[i +
1] *
256)
3437 Buffer.prototype.slice = function slice (start, end) {
3438 var len = this.length
3440 end = end === undefined ? len : ~~end
3444 if (start <
0) start =
0
3445 } else if (start
> len) {
3451 if (end <
0) end =
0
3452 } else if (end
> len) {
3456 if (end < start) end = start
3459 if (Buffer.TYPED_ARRAY_SUPPORT) {
3460 newBuf = Buffer._augment(this.subarray(start, end))
3462 var sliceLen = end - start
3463 newBuf = new Buffer(sliceLen, undefined)
3464 for (var i =
0; i < sliceLen; i++) {
3465 newBuf[i] = this[i + start]
3469 if (newBuf.length) newBuf.parent = this.parent || this
3475 * Need to make sure that buffer isn't trying to write out of bounds.
3477 function checkOffset (offset, ext, length) {
3478 if ((offset %
1) !==
0 || offset <
0) throw new RangeError('offset is not uint')
3479 if (offset + ext
> length) throw new RangeError('Trying to access beyond buffer length')
3482 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3484 byteLength = byteLength |
0
3485 if (!noAssert) checkOffset(offset, byteLength, this.length)
3487 var val = this[offset]
3490 while (++i < byteLength && (mul *=
0x100)) {
3491 val += this[offset + i] * mul
3497 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3499 byteLength = byteLength |
0
3501 checkOffset(offset, byteLength, this.length)
3504 var val = this[offset + --byteLength]
3506 while (byteLength
> 0 && (mul *=
0x100)) {
3507 val += this[offset + --byteLength] * mul
3513 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3514 if (!noAssert) checkOffset(offset,
1, this.length)
3518 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3519 if (!noAssert) checkOffset(offset,
2, this.length)
3520 return this[offset] | (this[offset +
1] <<
8)
3523 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3524 if (!noAssert) checkOffset(offset,
2, this.length)
3525 return (this[offset] <<
8) | this[offset +
1]
3528 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3529 if (!noAssert) checkOffset(offset,
4, this.length)
3531 return ((this[offset]) |
3532 (this[offset +
1] <<
8) |
3533 (this[offset +
2] <<
16)) +
3534 (this[offset +
3] *
0x1000000)
3537 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3538 if (!noAssert) checkOffset(offset,
4, this.length)
3540 return (this[offset] *
0x1000000) +
3541 ((this[offset +
1] <<
16) |
3542 (this[offset +
2] <<
8) |
3546 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3548 byteLength = byteLength |
0
3549 if (!noAssert) checkOffset(offset, byteLength, this.length)
3551 var val = this[offset]
3554 while (++i < byteLength && (mul *=
0x100)) {
3555 val += this[offset + i] * mul
3559 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3564 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3566 byteLength = byteLength |
0
3567 if (!noAssert) checkOffset(offset, byteLength, this.length)
3571 var val = this[offset + --i]
3572 while (i
> 0 && (mul *=
0x100)) {
3573 val += this[offset + --i] * mul
3577 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3582 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3583 if (!noAssert) checkOffset(offset,
1, this.length)
3584 if (!(this[offset] &
0x80)) return (this[offset])
3585 return ((
0xff - this[offset] +
1) * -
1)
3588 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3589 if (!noAssert) checkOffset(offset,
2, this.length)
3590 var val = this[offset] | (this[offset +
1] <<
8)
3591 return (val &
0x8000) ? val |
0xFFFF0000 : val
3594 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3595 if (!noAssert) checkOffset(offset,
2, this.length)
3596 var val = this[offset +
1] | (this[offset] <<
8)
3597 return (val &
0x8000) ? val |
0xFFFF0000 : val
3600 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3601 if (!noAssert) checkOffset(offset,
4, this.length)
3603 return (this[offset]) |
3604 (this[offset +
1] <<
8) |
3605 (this[offset +
2] <<
16) |
3606 (this[offset +
3] <<
24)
3609 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3610 if (!noAssert) checkOffset(offset,
4, this.length)
3612 return (this[offset] <<
24) |
3613 (this[offset +
1] <<
16) |
3614 (this[offset +
2] <<
8) |
3618 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3619 if (!noAssert) checkOffset(offset,
4, this.length)
3620 return ieee754.read(this, offset, true,
23,
4)
3623 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3624 if (!noAssert) checkOffset(offset,
4, this.length)
3625 return ieee754.read(this, offset, false,
23,
4)
3628 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3629 if (!noAssert) checkOffset(offset,
8, this.length)
3630 return ieee754.read(this, offset, true,
52,
8)
3633 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3634 if (!noAssert) checkOffset(offset,
8, this.length)
3635 return ieee754.read(this, offset, false,
52,
8)
3638 function checkInt (buf, value, offset, ext, max, min) {
3639 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3640 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3641 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3644 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3647 byteLength = byteLength |
0
3648 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3652 this[offset] = value &
0xFF
3653 while (++i < byteLength && (mul *=
0x100)) {
3654 this[offset + i] = (value / mul) &
0xFF
3657 return offset + byteLength
3660 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3663 byteLength = byteLength |
0
3664 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3666 var i = byteLength -
1
3668 this[offset + i] = value &
0xFF
3669 while (--i
>=
0 && (mul *=
0x100)) {
3670 this[offset + i] = (value / mul) &
0xFF
3673 return offset + byteLength
3676 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3679 if (!noAssert) checkInt(this, value, offset,
1,
0xff,
0)
3680 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3681 this[offset] = value
3685 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3686 if (value <
0) value =
0xffff + value +
1
3687 for (var i =
0, j = Math.min(buf.length - offset,
2); i < j; i++) {
3688 buf[offset + i] = (value & (
0xff << (
8 * (littleEndian ? i :
1 - i))))
>>>
3689 (littleEndian ? i :
1 - i) *
8
3693 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3696 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3697 if (Buffer.TYPED_ARRAY_SUPPORT) {
3698 this[offset] = value
3699 this[offset +
1] = (value
>>> 8)
3701 objectWriteUInt16(this, value, offset, true)
3706 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3709 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3710 if (Buffer.TYPED_ARRAY_SUPPORT) {
3711 this[offset] = (value
>>> 8)
3712 this[offset +
1] = value
3714 objectWriteUInt16(this, value, offset, false)
3719 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3720 if (value <
0) value =
0xffffffff + value +
1
3721 for (var i =
0, j = Math.min(buf.length - offset,
4); i < j; i++) {
3722 buf[offset + i] = (value
>>> (littleEndian ? i :
3 - i) *
8) &
0xff
3726 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3729 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3730 if (Buffer.TYPED_ARRAY_SUPPORT) {
3731 this[offset +
3] = (value
>>> 24)
3732 this[offset +
2] = (value
>>> 16)
3733 this[offset +
1] = (value
>>> 8)
3734 this[offset] = value
3736 objectWriteUInt32(this, value, offset, true)
3741 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3744 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3745 if (Buffer.TYPED_ARRAY_SUPPORT) {
3746 this[offset] = (value
>>> 24)
3747 this[offset +
1] = (value
>>> 16)
3748 this[offset +
2] = (value
>>> 8)
3749 this[offset +
3] = value
3751 objectWriteUInt32(this, value, offset, false)
3756 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3760 var limit = Math.pow(
2,
8 * byteLength -
1)
3762 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3767 var sub = value <
0 ?
1 :
0
3768 this[offset] = value &
0xFF
3769 while (++i < byteLength && (mul *=
0x100)) {
3770 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3773 return offset + byteLength
3776 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3780 var limit = Math.pow(
2,
8 * byteLength -
1)
3782 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3785 var i = byteLength -
1
3787 var sub = value <
0 ?
1 :
0
3788 this[offset + i] = value &
0xFF
3789 while (--i
>=
0 && (mul *=
0x100)) {
3790 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3793 return offset + byteLength
3796 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3799 if (!noAssert) checkInt(this, value, offset,
1,
0x7f, -
0x80)
3800 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3801 if (value <
0) value =
0xff + value +
1
3802 this[offset] = value
3806 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3809 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3810 if (Buffer.TYPED_ARRAY_SUPPORT) {
3811 this[offset] = value
3812 this[offset +
1] = (value
>>> 8)
3814 objectWriteUInt16(this, value, offset, true)
3819 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3822 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3823 if (Buffer.TYPED_ARRAY_SUPPORT) {
3824 this[offset] = (value
>>> 8)
3825 this[offset +
1] = value
3827 objectWriteUInt16(this, value, offset, false)
3832 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3835 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3836 if (Buffer.TYPED_ARRAY_SUPPORT) {
3837 this[offset] = value
3838 this[offset +
1] = (value
>>> 8)
3839 this[offset +
2] = (value
>>> 16)
3840 this[offset +
3] = (value
>>> 24)
3842 objectWriteUInt32(this, value, offset, true)
3847 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3850 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3851 if (value <
0) value =
0xffffffff + value +
1
3852 if (Buffer.TYPED_ARRAY_SUPPORT) {
3853 this[offset] = (value
>>> 24)
3854 this[offset +
1] = (value
>>> 16)
3855 this[offset +
2] = (value
>>> 8)
3856 this[offset +
3] = value
3858 objectWriteUInt32(this, value, offset, false)
3863 function checkIEEE754 (buf, value, offset, ext, max, min) {
3864 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3865 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3866 if (offset <
0) throw new RangeError('index out of range')
3869 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3871 checkIEEE754(buf, value, offset,
4,
3.4028234663852886e+38, -
3.4028234663852886e+38)
3873 ieee754.write(buf, value, offset, littleEndian,
23,
4)
3877 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3878 return writeFloat(this, value, offset, true, noAssert)
3881 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3882 return writeFloat(this, value, offset, false, noAssert)
3885 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3887 checkIEEE754(buf, value, offset,
8,
1.7976931348623157E+308, -
1.7976931348623157E+308)
3889 ieee754.write(buf, value, offset, littleEndian,
52,
8)
3893 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3894 return writeDouble(this, value, offset, true, noAssert)
3897 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3898 return writeDouble(this, value, offset, false, noAssert)
3901 // copy(targetBuffer, targetStart=
0, sourceStart=
0, sourceEnd=buffer.length)
3902 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3903 if (!start) start =
0
3904 if (!end && end !==
0) end = this.length
3905 if (targetStart
>= target.length) targetStart = target.length
3906 if (!targetStart) targetStart =
0
3907 if (end
> 0 && end < start) end = start
3909 // Copy
0 bytes; we're done
3910 if (end === start) return
0
3911 if (target.length ===
0 || this.length ===
0) return
0
3913 // Fatal error conditions
3914 if (targetStart <
0) {
3915 throw new RangeError('targetStart out of bounds')
3917 if (start <
0 || start
>= this.length) throw new RangeError('sourceStart out of bounds')
3918 if (end <
0) throw new RangeError('sourceEnd out of bounds')
3921 if (end
> this.length) end = this.length
3922 if (target.length - targetStart < end - start) {
3923 end = target.length - targetStart + start
3926 var len = end - start
3929 if (this === target && start < targetStart && targetStart < end) {
3930 // descending copy from end
3931 for (i = len -
1; i
>=
0; i--) {
3932 target[i + targetStart] = this[i + start]
3934 } else if (len <
1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3935 // ascending copy from start
3936 for (i =
0; i < len; i++) {
3937 target[i + targetStart] = this[i + start]
3940 target._set(this.subarray(start, start + len), targetStart)
3946 // fill(value, start=
0, end=buffer.length)
3947 Buffer.prototype.fill = function fill (value, start, end) {
3948 if (!value) value =
0
3949 if (!start) start =
0
3950 if (!end) end = this.length
3952 if (end < start) throw new RangeError('end < start')
3954 // Fill
0 bytes; we're done
3955 if (end === start) return
3956 if (this.length ===
0) return
3958 if (start <
0 || start
>= this.length) throw new RangeError('start out of bounds')
3959 if (end <
0 || end
> this.length) throw new RangeError('end out of bounds')
3962 if (typeof value === 'number') {
3963 for (i = start; i < end; i++) {
3967 var bytes = utf8ToBytes(value.toString())
3968 var len = bytes.length
3969 for (i = start; i < end; i++) {
3970 this[i] = bytes[i % len]
3978 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3979 * Added in Node
0.12. Only available in browsers that support ArrayBuffer.
3981 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3982 if (typeof Uint8Array !== 'undefined') {
3983 if (Buffer.TYPED_ARRAY_SUPPORT) {
3984 return (new Buffer(this)).buffer
3986 var buf = new Uint8Array(this.length)
3987 for (var i =
0, len = buf.length; i < len; i +=
1) {
3993 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4000 var BP = Buffer.prototype
4003 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4005 Buffer._augment = function _augment (arr) {
4006 arr.constructor = Buffer
4007 arr._isBuffer = true
4009 // save reference to original Uint8Array set method before overwriting
4016 arr.write = BP.write
4017 arr.toString = BP.toString
4018 arr.toLocaleString = BP.toString
4019 arr.toJSON = BP.toJSON
4020 arr.equals = BP.equals
4021 arr.compare = BP.compare
4022 arr.indexOf = BP.indexOf
4024 arr.slice = BP.slice
4025 arr.readUIntLE = BP.readUIntLE
4026 arr.readUIntBE = BP.readUIntBE
4027 arr.readUInt8 = BP.readUInt8
4028 arr.readUInt16LE = BP.readUInt16LE
4029 arr.readUInt16BE = BP.readUInt16BE
4030 arr.readUInt32LE = BP.readUInt32LE
4031 arr.readUInt32BE = BP.readUInt32BE
4032 arr.readIntLE = BP.readIntLE
4033 arr.readIntBE = BP.readIntBE
4034 arr.readInt8 = BP.readInt8
4035 arr.readInt16LE = BP.readInt16LE
4036 arr.readInt16BE = BP.readInt16BE
4037 arr.readInt32LE = BP.readInt32LE
4038 arr.readInt32BE = BP.readInt32BE
4039 arr.readFloatLE = BP.readFloatLE
4040 arr.readFloatBE = BP.readFloatBE
4041 arr.readDoubleLE = BP.readDoubleLE
4042 arr.readDoubleBE = BP.readDoubleBE
4043 arr.writeUInt8 = BP.writeUInt8
4044 arr.writeUIntLE = BP.writeUIntLE
4045 arr.writeUIntBE = BP.writeUIntBE
4046 arr.writeUInt16LE = BP.writeUInt16LE
4047 arr.writeUInt16BE = BP.writeUInt16BE
4048 arr.writeUInt32LE = BP.writeUInt32LE
4049 arr.writeUInt32BE = BP.writeUInt32BE
4050 arr.writeIntLE = BP.writeIntLE
4051 arr.writeIntBE = BP.writeIntBE
4052 arr.writeInt8 = BP.writeInt8
4053 arr.writeInt16LE = BP.writeInt16LE
4054 arr.writeInt16BE = BP.writeInt16BE
4055 arr.writeInt32LE = BP.writeInt32LE
4056 arr.writeInt32BE = BP.writeInt32BE
4057 arr.writeFloatLE = BP.writeFloatLE
4058 arr.writeFloatBE = BP.writeFloatBE
4059 arr.writeDoubleLE = BP.writeDoubleLE
4060 arr.writeDoubleBE = BP.writeDoubleBE
4062 arr.inspect = BP.inspect
4063 arr.toArrayBuffer = BP.toArrayBuffer
4068 var INVALID_BASE64_RE = /[^+\/
0-
9A-Za-z-_]/g
4070 function base64clean (str) {
4071 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4072 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4073 // Node converts strings with length <
2 to ''
4074 if (str.length <
2) return ''
4075 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4076 while (str.length %
4 !==
0) {
4082 function stringtrim (str) {
4083 if (str.trim) return str.trim()
4084 return str.replace(/^\s+|\s+$/g, '')
4087 function toHex (n) {
4088 if (n <
16) return '
0' + n.toString(
16)
4089 return n.toString(
16)
4092 function utf8ToBytes (string, units) {
4093 units = units || Infinity
4095 var length = string.length
4096 var leadSurrogate = null
4099 for (var i =
0; i < length; i++) {
4100 codePoint = string.charCodeAt(i)
4102 // is surrogate component
4103 if (codePoint
> 0xD7FF && codePoint <
0xE000) {
4104 // last char was a lead
4105 if (!leadSurrogate) {
4107 if (codePoint
> 0xDBFF) {
4109 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4112 } else if (i +
1 === length) {
4114 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4119 leadSurrogate = codePoint
4125 if (codePoint <
0xDC00) {
4126 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4127 leadSurrogate = codePoint
4131 // valid surrogate pair
4132 codePoint = leadSurrogate -
0xD800 <<
10 | codePoint -
0xDC00 |
0x10000
4134 } else if (leadSurrogate) {
4135 // valid bmp char, but last char was a lead
4136 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4139 leadSurrogate = null
4142 if (codePoint <
0x80) {
4143 if ((units -=
1) <
0) break
4144 bytes.push(codePoint)
4145 } else if (codePoint <
0x800) {
4146 if ((units -=
2) <
0) break
4148 codePoint
>> 0x6 |
0xC0,
4149 codePoint &
0x3F |
0x80
4151 } else if (codePoint <
0x10000) {
4152 if ((units -=
3) <
0) break
4154 codePoint
>> 0xC |
0xE0,
4155 codePoint
>> 0x6 &
0x3F |
0x80,
4156 codePoint &
0x3F |
0x80
4158 } else if (codePoint <
0x110000) {
4159 if ((units -=
4) <
0) break
4161 codePoint
>> 0x12 |
0xF0,
4162 codePoint
>> 0xC &
0x3F |
0x80,
4163 codePoint
>> 0x6 &
0x3F |
0x80,
4164 codePoint &
0x3F |
0x80
4167 throw new Error('Invalid code point')
4174 function asciiToBytes (str) {
4176 for (var i =
0; i < str.length; i++) {
4177 // Node's code seems to be doing this and not &
0x7F..
4178 byteArray.push(str.charCodeAt(i) &
0xFF)
4183 function utf16leToBytes (str, units) {
4186 for (var i =
0; i < str.length; i++) {
4187 if ((units -=
2) <
0) break
4189 c = str.charCodeAt(i)
4199 function base64ToBytes (str) {
4200 return base64.toByteArray(base64clean(str))
4203 function blitBuffer (src, dst, offset, length) {
4204 for (var i =
0; i < length; i++) {
4205 if ((i + offset
>= dst.length) || (i
>= src.length)) break
4206 dst[i + offset] = src[i]
4211 },{"base64-js":
8,"ieee754":
9,"is-array":
10}],
8:[function(require,module,exports){
4212 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4214 ;(function (exports) {
4217 var Arr = (typeof Uint8Array !== 'undefined')
4221 var PLUS = '+'.charCodeAt(
0)
4222 var SLASH = '/'.charCodeAt(
0)
4223 var NUMBER = '
0'.charCodeAt(
0)
4224 var LOWER = 'a'.charCodeAt(
0)
4225 var UPPER = 'A'.charCodeAt(
0)
4226 var PLUS_URL_SAFE = '-'.charCodeAt(
0)
4227 var SLASH_URL_SAFE = '_'.charCodeAt(
0)
4229 function decode (elt) {
4230 var code = elt.charCodeAt(
0)
4231 if (code === PLUS ||
4232 code === PLUS_URL_SAFE)
4234 if (code === SLASH ||
4235 code === SLASH_URL_SAFE)
4238 return -
1 //no match
4239 if (code < NUMBER +
10)
4240 return code - NUMBER +
26 +
26
4241 if (code < UPPER +
26)
4243 if (code < LOWER +
26)
4244 return code - LOWER +
26
4247 function b64ToByteArray (b64) {
4248 var i, j, l, tmp, placeHolders, arr
4250 if (b64.length %
4 > 0) {
4251 throw new Error('Invalid string. Length must be a multiple of
4')
4254 // the number of equal signs (place holders)
4255 // if there are two placeholders, than the two characters before it
4256 // represent one byte
4257 // if there is only one, then the three characters before it represent
2 bytes
4258 // this is just a cheap hack to not do indexOf twice
4259 var len = b64.length
4260 placeHolders = '=' === b64.charAt(len -
2) ?
2 : '=' === b64.charAt(len -
1) ?
1 :
0
4262 // base64 is
4/
3 + up to two characters of the original data
4263 arr = new Arr(b64.length *
3 /
4 - placeHolders)
4265 // if there are placeholders, only get up to the last complete
4 chars
4266 l = placeHolders
> 0 ? b64.length -
4 : b64.length
4274 for (i =
0, j =
0; i < l; i +=
4, j +=
3) {
4275 tmp = (decode(b64.charAt(i)) <<
18) | (decode(b64.charAt(i +
1)) <<
12) | (decode(b64.charAt(i +
2)) <<
6) | decode(b64.charAt(i +
3))
4276 push((tmp &
0xFF0000)
>> 16)
4277 push((tmp &
0xFF00)
>> 8)
4281 if (placeHolders ===
2) {
4282 tmp = (decode(b64.charAt(i)) <<
2) | (decode(b64.charAt(i +
1))
>> 4)
4284 } else if (placeHolders ===
1) {
4285 tmp = (decode(b64.charAt(i)) <<
10) | (decode(b64.charAt(i +
1)) <<
4) | (decode(b64.charAt(i +
2))
>> 2)
4286 push((tmp
>> 8) &
0xFF)
4293 function uint8ToBase64 (uint8) {
4295 extraBytes = uint8.length %
3, // if we have
1 byte left, pad
2 bytes
4299 function encode (num) {
4300 return lookup.charAt(num)
4303 function tripletToBase64 (num) {
4304 return encode(num
>> 18 &
0x3F) + encode(num
>> 12 &
0x3F) + encode(num
>> 6 &
0x3F) + encode(num &
0x3F)
4307 // go through the array every three bytes, we'll deal with trailing stuff later
4308 for (i =
0, length = uint8.length - extraBytes; i < length; i +=
3) {
4309 temp = (uint8[i] <<
16) + (uint8[i +
1] <<
8) + (uint8[i +
2])
4310 output += tripletToBase64(temp)
4313 // pad the end with zeros, but make sure to not forget the extra bytes
4314 switch (extraBytes) {
4316 temp = uint8[uint8.length -
1]
4317 output += encode(temp
>> 2)
4318 output += encode((temp <<
4) &
0x3F)
4322 temp = (uint8[uint8.length -
2] <<
8) + (uint8[uint8.length -
1])
4323 output += encode(temp
>> 10)
4324 output += encode((temp
>> 4) &
0x3F)
4325 output += encode((temp <<
2) &
0x3F)
4333 exports.toByteArray = b64ToByteArray
4334 exports.fromByteArray = uint8ToBase64
4335 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4337 },{}],
9:[function(require,module,exports){
4338 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4340 var eLen = nBytes *
8 - mLen -
1
4341 var eMax = (
1 << eLen) -
1
4342 var eBias = eMax
>> 1
4344 var i = isLE ? (nBytes -
1) :
0
4345 var d = isLE ? -
1 :
1
4346 var s = buffer[offset + i]
4350 e = s & ((
1 << (-nBits)) -
1)
4353 for (; nBits
> 0; e = e *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4355 m = e & ((
1 << (-nBits)) -
1)
4358 for (; nBits
> 0; m = m *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4362 } else if (e === eMax) {
4363 return m ? NaN : ((s ? -
1 :
1) * Infinity)
4365 m = m + Math.pow(
2, mLen)
4368 return (s ? -
1 :
1) * m * Math.pow(
2, e - mLen)
4371 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4373 var eLen = nBytes *
8 - mLen -
1
4374 var eMax = (
1 << eLen) -
1
4375 var eBias = eMax
>> 1
4376 var rt = (mLen ===
23 ? Math.pow(
2, -
24) - Math.pow(
2, -
77) :
0)
4377 var i = isLE ?
0 : (nBytes -
1)
4378 var d = isLE ?
1 : -
1
4379 var s = value <
0 || (value ===
0 &&
1 / value <
0) ?
1 :
0
4381 value = Math.abs(value)
4383 if (isNaN(value) || value === Infinity) {
4384 m = isNaN(value) ?
1 :
0
4387 e = Math.floor(Math.log(value) / Math.LN2)
4388 if (value * (c = Math.pow(
2, -e)) <
1) {
4392 if (e + eBias
>=
1) {
4395 value += rt * Math.pow(
2,
1 - eBias)
4397 if (value * c
>=
2) {
4402 if (e + eBias
>= eMax) {
4405 } else if (e + eBias
>=
1) {
4406 m = (value * c -
1) * Math.pow(
2, mLen)
4409 m = value * Math.pow(
2, eBias -
1) * Math.pow(
2, mLen)
4414 for (; mLen
>=
8; buffer[offset + i] = m &
0xff, i += d, m /=
256, mLen -=
8) {}
4418 for (; eLen
> 0; buffer[offset + i] = e &
0xff, i += d, e /=
256, eLen -=
8) {}
4420 buffer[offset + i - d] |= s *
128
4423 },{}],
10:[function(require,module,exports){
4429 var isArray = Array.isArray;
4435 var str = Object.prototype.toString;
4438 * Whether or not the given `val`
4445 * isArray(arguments);
4450 * @param {mixed} val
4454 module.exports = isArray || function (val) {
4455 return !! val && '[object Array]' == str.call(val);
4458 },{}],
11:[function(require,module,exports){
4459 // Copyright Joyent, Inc. and other Node contributors.
4461 // Permission is hereby granted, free of charge, to any person obtaining a
4462 // copy of this software and associated documentation files (the
4463 // "Software"), to deal in the Software without restriction, including
4464 // without limitation the rights to use, copy, modify, merge, publish,
4465 // distribute, sublicense, and/or sell copies of the Software, and to permit
4466 // persons to whom the Software is furnished to do so, subject to the
4467 // following conditions:
4469 // The above copyright notice and this permission notice shall be included
4470 // in all copies or substantial portions of the Software.
4472 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4473 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4474 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4475 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4476 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4477 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4478 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4480 function EventEmitter() {
4481 this._events = this._events || {};
4482 this._maxListeners = this._maxListeners || undefined;
4484 module.exports = EventEmitter;
4486 // Backwards-compat with node
0.10.x
4487 EventEmitter.EventEmitter = EventEmitter;
4489 EventEmitter.prototype._events = undefined;
4490 EventEmitter.prototype._maxListeners = undefined;
4492 // By default EventEmitters will print a warning if more than
10 listeners are
4493 // added to it. This is a useful default which helps finding memory leaks.
4494 EventEmitter.defaultMaxListeners =
10;
4496 // Obviously not all Emitters should be limited to
10. This function allows
4497 // that to be increased. Set to zero for unlimited.
4498 EventEmitter.prototype.setMaxListeners = function(n) {
4499 if (!isNumber(n) || n <
0 || isNaN(n))
4500 throw TypeError('n must be a positive number');
4501 this._maxListeners = n;
4505 EventEmitter.prototype.emit = function(type) {
4506 var er, handler, len, args, i, listeners;
4511 // If there is no 'error' event listener then throw.
4512 if (type === 'error') {
4513 if (!this._events.error ||
4514 (isObject(this._events.error) && !this._events.error.length)) {
4516 if (er instanceof Error) {
4517 throw er; // Unhandled 'error' event
4519 throw TypeError('Uncaught, unspecified "error" event.');
4523 handler = this._events[type];
4525 if (isUndefined(handler))
4528 if (isFunction(handler)) {
4529 switch (arguments.length) {
4535 handler.call(this, arguments[
1]);
4538 handler.call(this, arguments[
1], arguments[
2]);
4542 len = arguments.length;
4543 args = new Array(len -
1);
4544 for (i =
1; i < len; i++)
4545 args[i -
1] = arguments[i];
4546 handler.apply(this, args);
4548 } else if (isObject(handler)) {
4549 len = arguments.length;
4550 args = new Array(len -
1);
4551 for (i =
1; i < len; i++)
4552 args[i -
1] = arguments[i];
4554 listeners = handler.slice();
4555 len = listeners.length;
4556 for (i =
0; i < len; i++)
4557 listeners[i].apply(this, args);
4563 EventEmitter.prototype.addListener = function(type, listener) {
4566 if (!isFunction(listener))
4567 throw TypeError('listener must be a function');
4572 // To avoid recursion in the case that type === "newListener"! Before
4573 // adding it to the listeners, first emit "newListener".
4574 if (this._events.newListener)
4575 this.emit('newListener', type,
4576 isFunction(listener.listener) ?
4577 listener.listener : listener);
4579 if (!this._events[type])
4580 // Optimize the case of one listener. Don't need the extra array object.
4581 this._events[type] = listener;
4582 else if (isObject(this._events[type]))
4583 // If we've already got an array, just append.
4584 this._events[type].push(listener);
4586 // Adding the second element, need to change to array.
4587 this._events[type] = [this._events[type], listener];
4589 // Check for listener leak
4590 if (isObject(this._events[type]) && !this._events[type].warned) {
4592 if (!isUndefined(this._maxListeners)) {
4593 m = this._maxListeners;
4595 m = EventEmitter.defaultMaxListeners;
4598 if (m && m
> 0 && this._events[type].length
> m) {
4599 this._events[type].warned = true;
4600 console.error('(node) warning: possible EventEmitter memory ' +
4601 'leak detected. %d listeners added. ' +
4602 'Use emitter.setMaxListeners() to increase limit.',
4603 this._events[type].length);
4604 if (typeof console.trace === 'function') {
4605 // not supported in IE
10
4614 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4616 EventEmitter.prototype.once = function(type, listener) {
4617 if (!isFunction(listener))
4618 throw TypeError('listener must be a function');
4623 this.removeListener(type, g);
4627 listener.apply(this, arguments);
4631 g.listener = listener;
4637 // emits a 'removeListener' event iff the listener was removed
4638 EventEmitter.prototype.removeListener = function(type, listener) {
4639 var list, position, length, i;
4641 if (!isFunction(listener))
4642 throw TypeError('listener must be a function');
4644 if (!this._events || !this._events[type])
4647 list = this._events[type];
4648 length = list.length;
4651 if (list === listener ||
4652 (isFunction(list.listener) && list.listener === listener)) {
4653 delete this._events[type];
4654 if (this._events.removeListener)
4655 this.emit('removeListener', type, listener);
4657 } else if (isObject(list)) {
4658 for (i = length; i--
> 0;) {
4659 if (list[i] === listener ||
4660 (list[i].listener && list[i].listener === listener)) {
4669 if (list.length ===
1) {
4671 delete this._events[type];
4673 list.splice(position,
1);
4676 if (this._events.removeListener)
4677 this.emit('removeListener', type, listener);
4683 EventEmitter.prototype.removeAllListeners = function(type) {
4689 // not listening for removeListener, no need to emit
4690 if (!this._events.removeListener) {
4691 if (arguments.length ===
0)
4693 else if (this._events[type])
4694 delete this._events[type];
4698 // emit removeListener for all listeners on all events
4699 if (arguments.length ===
0) {
4700 for (key in this._events) {
4701 if (key === 'removeListener') continue;
4702 this.removeAllListeners(key);
4704 this.removeAllListeners('removeListener');
4709 listeners = this._events[type];
4711 if (isFunction(listeners)) {
4712 this.removeListener(type, listeners);
4715 while (listeners.length)
4716 this.removeListener(type, listeners[listeners.length -
1]);
4718 delete this._events[type];
4723 EventEmitter.prototype.listeners = function(type) {
4725 if (!this._events || !this._events[type])
4727 else if (isFunction(this._events[type]))
4728 ret = [this._events[type]];
4730 ret = this._events[type].slice();
4734 EventEmitter.listenerCount = function(emitter, type) {
4736 if (!emitter._events || !emitter._events[type])
4738 else if (isFunction(emitter._events[type]))
4741 ret = emitter._events[type].length;
4745 function isFunction(arg) {
4746 return typeof arg === 'function';
4749 function isNumber(arg) {
4750 return typeof arg === 'number';
4753 function isObject(arg) {
4754 return typeof arg === 'object' && arg !== null;
4757 function isUndefined(arg) {
4758 return arg === void
0;
4761 },{}],
12:[function(require,module,exports){
4762 if (typeof Object.create === 'function') {
4763 // implementation from standard node.js 'util' module
4764 module.exports = function inherits(ctor, superCtor) {
4765 ctor.super_ = superCtor
4766 ctor.prototype = Object.create(superCtor.prototype, {
4776 // old school shim for old browsers
4777 module.exports = function inherits(ctor, superCtor) {
4778 ctor.super_ = superCtor
4779 var TempCtor = function () {}
4780 TempCtor.prototype = superCtor.prototype
4781 ctor.prototype = new TempCtor()
4782 ctor.prototype.constructor = ctor
4786 },{}],
13:[function(require,module,exports){
4787 module.exports = Array.isArray || function (arr) {
4788 return Object.prototype.toString.call(arr) == '[object Array]';
4791 },{}],
14:[function(require,module,exports){
4792 // shim for using process in browser
4794 var process = module.exports = {};
4796 var draining = false;
4798 var queueIndex = -
1;
4800 function cleanUpNextTick() {
4802 if (currentQueue.length) {
4803 queue = currentQueue.concat(queue);
4812 function drainQueue() {
4816 var timeout = setTimeout(cleanUpNextTick);
4819 var len = queue.length;
4821 currentQueue = queue;
4823 while (++queueIndex < len) {
4824 currentQueue[queueIndex].run();
4829 currentQueue = null;
4831 clearTimeout(timeout);
4834 process.nextTick = function (fun) {
4835 var args = new Array(arguments.length -
1);
4836 if (arguments.length
> 1) {
4837 for (var i =
1; i < arguments.length; i++) {
4838 args[i -
1] = arguments[i];
4841 queue.push(new Item(fun, args));
4842 if (queue.length ===
1 && !draining) {
4843 setTimeout(drainQueue,
0);
4847 // v8 likes predictible objects
4848 function Item(fun, array) {
4852 Item.prototype.run = function () {
4853 this.fun.apply(null, this.array);
4855 process.title = 'browser';
4856 process.browser = true;
4859 process.version = ''; // empty string to avoid regexp issues
4860 process.versions = {};
4865 process.addListener = noop;
4866 process.once = noop;
4868 process.removeListener = noop;
4869 process.removeAllListeners = noop;
4870 process.emit = noop;
4872 process.binding = function (name) {
4873 throw new Error('process.binding is not supported');
4877 process.cwd = function () { return '/' };
4878 process.chdir = function (dir) {
4879 throw new Error('process.chdir is not supported');
4881 process.umask = function() { return
0; };
4883 },{}],
15:[function(require,module,exports){
4884 module.exports = require(
"./lib/_stream_duplex.js")
4886 },{
"./lib/_stream_duplex.js":
16}],
16:[function(require,module,exports){
4887 (function (process){
4888 // Copyright Joyent, Inc. and other Node contributors.
4890 // Permission is hereby granted, free of charge, to any person obtaining a
4891 // copy of this software and associated documentation files (the
4892 //
"Software"), to deal in the Software without restriction, including
4893 // without limitation the rights to use, copy, modify, merge, publish,
4894 // distribute, sublicense, and/or sell copies of the Software, and to permit
4895 // persons to whom the Software is furnished to do so, subject to the
4896 // following conditions:
4898 // The above copyright notice and this permission notice shall be included
4899 // in all copies or substantial portions of the Software.
4901 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4902 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4903 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4904 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4905 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4906 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4907 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4909 // a duplex stream is just a stream that is both readable and writable.
4910 // Since JS doesn't have multiple prototypal inheritance, this class
4911 // prototypally inherits from Readable, and then parasitically from
4914 module.exports = Duplex;
4917 var objectKeys = Object.keys || function (obj) {
4919 for (var key in obj) keys.push(key);
4926 var util = require('core-util-is');
4927 util.inherits = require('inherits');
4930 var Readable = require('./_stream_readable');
4931 var Writable = require('./_stream_writable');
4933 util.inherits(Duplex, Readable);
4935 forEach(objectKeys(Writable.prototype), function(method) {
4936 if (!Duplex.prototype[method])
4937 Duplex.prototype[method] = Writable.prototype[method];
4940 function Duplex(options) {
4941 if (!(this instanceof Duplex))
4942 return new Duplex(options);
4944 Readable.call(this, options);
4945 Writable.call(this, options);
4947 if (options && options.readable === false)
4948 this.readable = false;
4950 if (options && options.writable === false)
4951 this.writable = false;
4953 this.allowHalfOpen = true;
4954 if (options && options.allowHalfOpen === false)
4955 this.allowHalfOpen = false;
4957 this.once('end', onend);
4960 // the no-half-open enforcer
4962 // if we allow half-open state, or if the writable side ended,
4964 if (this.allowHalfOpen || this._writableState.ended)
4967 // no more data can be written.
4968 // But allow more writes to happen in this tick.
4969 process.nextTick(this.end.bind(this));
4972 function forEach (xs, f) {
4973 for (var i =
0, l = xs.length; i < l; i++) {
4978 }).call(this,require('_process'))
4979 },{"./_stream_readable":
18,"./_stream_writable":
20,"_process":
14,"core-util-is":
21,"inherits":
12}],
17:[function(require,module,exports){
4980 // Copyright Joyent, Inc. and other Node contributors.
4982 // Permission is hereby granted, free of charge, to any person obtaining a
4983 // copy of this software and associated documentation files (the
4984 // "Software"), to deal in the Software without restriction, including
4985 // without limitation the rights to use, copy, modify, merge, publish,
4986 // distribute, sublicense, and/or sell copies of the Software, and to permit
4987 // persons to whom the Software is furnished to do so, subject to the
4988 // following conditions:
4990 // The above copyright notice and this permission notice shall be included
4991 // in all copies or substantial portions of the Software.
4993 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4994 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4995 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4996 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4997 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4998 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4999 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5001 // a passthrough stream.
5002 // basically just the most minimal sort of Transform stream.
5003 // Every written chunk gets output as-is.
5005 module.exports = PassThrough;
5007 var Transform = require('./_stream_transform');
5010 var util = require('core-util-is');
5011 util.inherits = require('inherits');
5014 util.inherits(PassThrough, Transform);
5016 function PassThrough(options) {
5017 if (!(this instanceof PassThrough))
5018 return new PassThrough(options);
5020 Transform.call(this, options);
5023 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5027 },{"./_stream_transform":
19,"core-util-is":
21,"inherits":
12}],
18:[function(require,module,exports){
5028 (function (process){
5029 // Copyright Joyent, Inc. and other Node contributors.
5031 // Permission is hereby granted, free of charge, to any person obtaining a
5032 // copy of this software and associated documentation files (the
5033 // "Software"), to deal in the Software without restriction, including
5034 // without limitation the rights to use, copy, modify, merge, publish,
5035 // distribute, sublicense, and/or sell copies of the Software, and to permit
5036 // persons to whom the Software is furnished to do so, subject to the
5037 // following conditions:
5039 // The above copyright notice and this permission notice shall be included
5040 // in all copies or substantial portions of the Software.
5042 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5043 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5044 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5045 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5046 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5047 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5048 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5050 module.exports = Readable;
5053 var isArray = require('isarray');
5058 var Buffer = require('buffer').Buffer;
5061 Readable.ReadableState = ReadableState;
5063 var EE = require('events').EventEmitter;
5066 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5067 return emitter.listeners(type).length;
5071 var Stream = require('stream');
5074 var util = require('core-util-is');
5075 util.inherits = require('inherits');
5082 var debug = require('util');
5083 if (debug && debug.debuglog) {
5084 debug = debug.debuglog('stream');
5086 debug = function () {};
5091 util.inherits(Readable, Stream);
5093 function ReadableState(options, stream) {
5094 var Duplex = require('./_stream_duplex');
5096 options = options || {};
5098 // the point at which it stops calling _read() to fill the buffer
5099 // Note:
0 is a valid value, means "don't call _read preemptively ever"
5100 var hwm = options.highWaterMark;
5101 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
5102 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
5105 this.highWaterMark = ~~this.highWaterMark;
5110 this.pipesCount =
0;
5111 this.flowing = null;
5113 this.endEmitted = false;
5114 this.reading = false;
5116 // a flag to be able to tell if the onwrite cb is called immediately,
5117 // or on a later tick. We set this to true at first, because any
5118 // actions that shouldn't happen until "later" should generally also
5119 // not happen before the first write call.
5122 // whenever we return null, then we set a flag to say
5123 // that we're awaiting a 'readable' event emission.
5124 this.needReadable = false;
5125 this.emittedReadable = false;
5126 this.readableListening = false;
5129 // object stream flag. Used to make read(n) ignore n and to
5130 // make all the buffer merging and length checks go away
5131 this.objectMode = !!options.objectMode;
5133 if (stream instanceof Duplex)
5134 this.objectMode = this.objectMode || !!options.readableObjectMode;
5136 // Crypto is kind of old and crusty. Historically, its default string
5137 // encoding is 'binary' so we have to make this configurable.
5138 // Everything else in the universe uses 'utf8', though.
5139 this.defaultEncoding = options.defaultEncoding || 'utf8';
5141 // when piping, we only care about 'readable' events that happen
5142 // after read()ing all the bytes and not getting any pushback.
5143 this.ranOut = false;
5145 // the number of writers that are awaiting a drain event in .pipe()s
5146 this.awaitDrain =
0;
5148 // if true, a maybeReadMore has been scheduled
5149 this.readingMore = false;
5151 this.decoder = null;
5152 this.encoding = null;
5153 if (options.encoding) {
5155 StringDecoder = require('string_decoder/').StringDecoder;
5156 this.decoder = new StringDecoder(options.encoding);
5157 this.encoding = options.encoding;
5161 function Readable(options) {
5162 var Duplex = require('./_stream_duplex');
5164 if (!(this instanceof Readable))
5165 return new Readable(options);
5167 this._readableState = new ReadableState(options, this);
5170 this.readable = true;
5175 // Manually shove something into the read() buffer.
5176 // This returns true if the highWaterMark has not been hit yet,
5177 // similar to how Writable.write() returns true if you should
5178 // write() some more.
5179 Readable.prototype.push = function(chunk, encoding) {
5180 var state = this._readableState;
5182 if (util.isString(chunk) && !state.objectMode) {
5183 encoding = encoding || state.defaultEncoding;
5184 if (encoding !== state.encoding) {
5185 chunk = new Buffer(chunk, encoding);
5190 return readableAddChunk(this, state, chunk, encoding, false);
5193 // Unshift should *always* be something directly out of read()
5194 Readable.prototype.unshift = function(chunk) {
5195 var state = this._readableState;
5196 return readableAddChunk(this, state, chunk, '', true);
5199 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5200 var er = chunkInvalid(state, chunk);
5202 stream.emit('error', er);
5203 } else if (util.isNullOrUndefined(chunk)) {
5204 state.reading = false;
5206 onEofChunk(stream, state);
5207 } else if (state.objectMode || chunk && chunk.length
> 0) {
5208 if (state.ended && !addToFront) {
5209 var e = new Error('stream.push() after EOF');
5210 stream.emit('error', e);
5211 } else if (state.endEmitted && addToFront) {
5212 var e = new Error('stream.unshift() after end event');
5213 stream.emit('error', e);
5215 if (state.decoder && !addToFront && !encoding)
5216 chunk = state.decoder.write(chunk);
5219 state.reading = false;
5221 // if we want the data now, just emit it.
5222 if (state.flowing && state.length ===
0 && !state.sync) {
5223 stream.emit('data', chunk);
5226 // update the buffer info.
5227 state.length += state.objectMode ?
1 : chunk.length;
5229 state.buffer.unshift(chunk);
5231 state.buffer.push(chunk);
5233 if (state.needReadable)
5234 emitReadable(stream);
5237 maybeReadMore(stream, state);
5239 } else if (!addToFront) {
5240 state.reading = false;
5243 return needMoreData(state);
5248 // if it's past the high water mark, we can push in some more.
5249 // Also, if we have no data yet, we can stand some
5250 // more bytes. This is to work around cases where hwm=
0,
5251 // such as the repl. Also, if the push() triggered a
5252 // readable event, and the user called read(largeNumber) such that
5253 // needReadable was set, then we ought to push more, so that another
5254 // 'readable' event will be triggered.
5255 function needMoreData(state) {
5256 return !state.ended &&
5257 (state.needReadable ||
5258 state.length < state.highWaterMark ||
5259 state.length ===
0);
5262 // backwards compatibility.
5263 Readable.prototype.setEncoding = function(enc) {
5265 StringDecoder = require('string_decoder/').StringDecoder;
5266 this._readableState.decoder = new StringDecoder(enc);
5267 this._readableState.encoding = enc;
5271 // Don't raise the hwm
> 128MB
5272 var MAX_HWM =
0x800000;
5273 function roundUpToNextPowerOf2(n) {
5277 // Get the next highest power of
2
5279 for (var p =
1; p <
32; p <<=
1) n |= n
>> p;
5285 function howMuchToRead(n, state) {
5286 if (state.length ===
0 && state.ended)
5289 if (state.objectMode)
5290 return n ===
0 ?
0 :
1;
5292 if (isNaN(n) || util.isNull(n)) {
5293 // only flow one buffer at a time
5294 if (state.flowing && state.buffer.length)
5295 return state.buffer[
0].length;
5297 return state.length;
5303 // If we're asking for more than the target buffer level,
5304 // then raise the water mark. Bump up to the next highest
5305 // power of
2, to prevent increasing it excessively in tiny
5307 if (n
> state.highWaterMark)
5308 state.highWaterMark = roundUpToNextPowerOf2(n);
5310 // don't have that much. return null, unless we've ended.
5311 if (n
> state.length) {
5313 state.needReadable = true;
5316 return state.length;
5322 // you can override either this method, or the async _read(n) below.
5323 Readable.prototype.read = function(n) {
5325 var state = this._readableState;
5328 if (!util.isNumber(n) || n
> 0)
5329 state.emittedReadable = false;
5331 // if we're doing read(
0) to trigger a readable event, but we
5332 // already have a bunch of data in the buffer, then just trigger
5333 // the 'readable' event and move on.
5335 state.needReadable &&
5336 (state.length
>= state.highWaterMark || state.ended)) {
5337 debug('read: emitReadable', state.length, state.ended);
5338 if (state.length ===
0 && state.ended)
5345 n = howMuchToRead(n, state);
5347 // if we've ended, and we're now clear, then finish it up.
5348 if (n ===
0 && state.ended) {
5349 if (state.length ===
0)
5354 // All the actual chunk generation logic needs to be
5355 // *below* the call to _read. The reason is that in certain
5356 // synthetic stream cases, such as passthrough streams, _read
5357 // may be a completely synchronous operation which may change
5358 // the state of the read buffer, providing enough data when
5359 // before there was *not* enough.
5361 // So, the steps are:
5362 //
1. Figure out what the state of things will be after we do
5363 // a read from the buffer.
5365 //
2. If that resulting state will trigger a _read, then call _read.
5366 // Note that this may be asynchronous, or synchronous. Yes, it is
5367 // deeply ugly to write APIs this way, but that still doesn't mean
5368 // that the Readable class should behave improperly, as streams are
5369 // designed to be sync/async agnostic.
5370 // Take note if the _read call is sync or async (ie, if the read call
5371 // has returned yet), so that we know whether or not it's safe to emit
5374 //
3. Actually pull the requested chunks out of the buffer and return.
5376 // if we need a readable event, then we need to do some reading.
5377 var doRead = state.needReadable;
5378 debug('need readable', doRead);
5380 // if we currently have less than the highWaterMark, then also read some
5381 if (state.length ===
0 || state.length - n < state.highWaterMark) {
5383 debug('length less than watermark', doRead);
5386 // however, if we've ended, then there's no point, and if we're already
5387 // reading, then it's unnecessary.
5388 if (state.ended || state.reading) {
5390 debug('reading or ended', doRead);
5395 state.reading = true;
5397 // if the length is currently zero, then we *need* a readable event.
5398 if (state.length ===
0)
5399 state.needReadable = true;
5400 // call internal read method
5401 this._read(state.highWaterMark);
5405 // If _read pushed data synchronously, then `reading` will be false,
5406 // and we need to re-evaluate how much data we can return to the user.
5407 if (doRead && !state.reading)
5408 n = howMuchToRead(nOrig, state);
5412 ret = fromList(n, state);
5416 if (util.isNull(ret)) {
5417 state.needReadable = true;
5423 // If we have nothing in the buffer, then we want to know
5424 // as soon as we *do* get something into the buffer.
5425 if (state.length ===
0 && !state.ended)
5426 state.needReadable = true;
5428 // If we tried to read() past the EOF, then emit end on the next tick.
5429 if (nOrig !== n && state.ended && state.length ===
0)
5432 if (!util.isNull(ret))
5433 this.emit('data', ret);
5438 function chunkInvalid(state, chunk) {
5440 if (!util.isBuffer(chunk) &&
5441 !util.isString(chunk) &&
5442 !util.isNullOrUndefined(chunk) &&
5443 !state.objectMode) {
5444 er = new TypeError('Invalid non-string/buffer chunk');
5450 function onEofChunk(stream, state) {
5451 if (state.decoder && !state.ended) {
5452 var chunk = state.decoder.end();
5453 if (chunk && chunk.length) {
5454 state.buffer.push(chunk);
5455 state.length += state.objectMode ?
1 : chunk.length;
5460 // emit 'readable' now to make sure it gets picked up.
5461 emitReadable(stream);
5464 // Don't emit readable right away in sync mode, because this can trigger
5465 // another read() call =
> stack overflow. This way, it might trigger
5466 // a nextTick recursion warning, but that's not so bad.
5467 function emitReadable(stream) {
5468 var state = stream._readableState;
5469 state.needReadable = false;
5470 if (!state.emittedReadable) {
5471 debug('emitReadable', state.flowing);
5472 state.emittedReadable = true;
5474 process.nextTick(function() {
5475 emitReadable_(stream);
5478 emitReadable_(stream);
5482 function emitReadable_(stream) {
5483 debug('emit readable');
5484 stream.emit('readable');
5489 // at this point, the user has presumably seen the 'readable' event,
5490 // and called read() to consume some data. that may have triggered
5491 // in turn another _read(n) call, in which case reading = true if
5492 // it's in progress.
5493 // However, if we're not ended, or reading, and the length < hwm,
5494 // then go ahead and try to read some more preemptively.
5495 function maybeReadMore(stream, state) {
5496 if (!state.readingMore) {
5497 state.readingMore = true;
5498 process.nextTick(function() {
5499 maybeReadMore_(stream, state);
5504 function maybeReadMore_(stream, state) {
5505 var len = state.length;
5506 while (!state.reading && !state.flowing && !state.ended &&
5507 state.length < state.highWaterMark) {
5508 debug('maybeReadMore read
0');
5510 if (len === state.length)
5511 // didn't get any data, stop spinning.
5516 state.readingMore = false;
5519 // abstract method. to be overridden in specific implementation classes.
5520 // call cb(er, data) where data is <= n in length.
5521 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5522 // arbitrary, and perhaps not very meaningful.
5523 Readable.prototype._read = function(n) {
5524 this.emit('error', new Error('not implemented'));
5527 Readable.prototype.pipe = function(dest, pipeOpts) {
5529 var state = this._readableState;
5531 switch (state.pipesCount) {
5536 state.pipes = [state.pipes, dest];
5539 state.pipes.push(dest);
5542 state.pipesCount +=
1;
5543 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5545 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5546 dest !== process.stdout &&
5547 dest !== process.stderr;
5549 var endFn = doEnd ? onend : cleanup;
5550 if (state.endEmitted)
5551 process.nextTick(endFn);
5553 src.once('end', endFn);
5555 dest.on('unpipe', onunpipe);
5556 function onunpipe(readable) {
5558 if (readable === src) {
5568 // when the dest drains, it reduces the awaitDrain counter
5569 // on the source. This would be more elegant with a .once()
5570 // handler in flow(), but adding and removing repeatedly is
5572 var ondrain = pipeOnDrain(src);
5573 dest.on('drain', ondrain);
5575 function cleanup() {
5577 // cleanup event handlers once the pipe is broken
5578 dest.removeListener('close', onclose);
5579 dest.removeListener('finish', onfinish);
5580 dest.removeListener('drain', ondrain);
5581 dest.removeListener('error', onerror);
5582 dest.removeListener('unpipe', onunpipe);
5583 src.removeListener('end', onend);
5584 src.removeListener('end', cleanup);
5585 src.removeListener('data', ondata);
5587 // if the reader is waiting for a drain event from this
5588 // specific writer, then it would cause it to never start
5590 // So, if this is awaiting a drain, then we just call it now.
5591 // If we don't know, then assume that we are waiting for one.
5592 if (state.awaitDrain &&
5593 (!dest._writableState || dest._writableState.needDrain))
5597 src.on('data', ondata);
5598 function ondata(chunk) {
5600 var ret = dest.write(chunk);
5601 if (false === ret) {
5602 debug('false write response, pause',
5603 src._readableState.awaitDrain);
5604 src._readableState.awaitDrain++;
5609 // if the dest has an error, then stop piping into it.
5610 // however, don't suppress the throwing behavior for this.
5611 function onerror(er) {
5612 debug('onerror', er);
5614 dest.removeListener('error', onerror);
5615 if (EE.listenerCount(dest, 'error') ===
0)
5616 dest.emit('error', er);
5618 // This is a brutally ugly hack to make sure that our error handler
5619 // is attached before any userland ones. NEVER DO THIS.
5620 if (!dest._events || !dest._events.error)
5621 dest.on('error', onerror);
5622 else if (isArray(dest._events.error))
5623 dest._events.error.unshift(onerror);
5625 dest._events.error = [onerror, dest._events.error];
5629 // Both close and finish should trigger unpipe, but only once.
5630 function onclose() {
5631 dest.removeListener('finish', onfinish);
5634 dest.once('close', onclose);
5635 function onfinish() {
5637 dest.removeListener('close', onclose);
5640 dest.once('finish', onfinish);
5647 // tell the dest that it's being piped to
5648 dest.emit('pipe', src);
5650 // start the flow if it hasn't been started already.
5651 if (!state.flowing) {
5652 debug('pipe resume');
5659 function pipeOnDrain(src) {
5661 var state = src._readableState;
5662 debug('pipeOnDrain', state.awaitDrain);
5663 if (state.awaitDrain)
5665 if (state.awaitDrain ===
0 && EE.listenerCount(src, 'data')) {
5666 state.flowing = true;
5673 Readable.prototype.unpipe = function(dest) {
5674 var state = this._readableState;
5676 // if we're not piping anywhere, then do nothing.
5677 if (state.pipesCount ===
0)
5680 // just one destination. most common case.
5681 if (state.pipesCount ===
1) {
5682 // passed in one, but it's not the right one.
5683 if (dest && dest !== state.pipes)
5691 state.pipesCount =
0;
5692 state.flowing = false;
5694 dest.emit('unpipe', this);
5698 // slow case. multiple pipe destinations.
5702 var dests = state.pipes;
5703 var len = state.pipesCount;
5705 state.pipesCount =
0;
5706 state.flowing = false;
5708 for (var i =
0; i < len; i++)
5709 dests[i].emit('unpipe', this);
5713 // try to find the right one.
5714 var i = indexOf(state.pipes, dest);
5718 state.pipes.splice(i,
1);
5719 state.pipesCount -=
1;
5720 if (state.pipesCount ===
1)
5721 state.pipes = state.pipes[
0];
5723 dest.emit('unpipe', this);
5728 // set up data events if they are asked for
5729 // Ensure readable listeners eventually get something
5730 Readable.prototype.on = function(ev, fn) {
5731 var res = Stream.prototype.on.call(this, ev, fn);
5733 // If listening to data, and it has not explicitly been paused,
5734 // then call resume to start the flow of data on the next tick.
5735 if (ev === 'data' && false !== this._readableState.flowing) {
5739 if (ev === 'readable' && this.readable) {
5740 var state = this._readableState;
5741 if (!state.readableListening) {
5742 state.readableListening = true;
5743 state.emittedReadable = false;
5744 state.needReadable = true;
5745 if (!state.reading) {
5747 process.nextTick(function() {
5748 debug('readable nexttick read
0');
5751 } else if (state.length) {
5752 emitReadable(this, state);
5759 Readable.prototype.addListener = Readable.prototype.on;
5761 // pause() and resume() are remnants of the legacy readable stream API
5762 // If the user uses them, then switch into old mode.
5763 Readable.prototype.resume = function() {
5764 var state = this._readableState;
5765 if (!state.flowing) {
5767 state.flowing = true;
5768 if (!state.reading) {
5769 debug('resume read
0');
5772 resume(this, state);
5777 function resume(stream, state) {
5778 if (!state.resumeScheduled) {
5779 state.resumeScheduled = true;
5780 process.nextTick(function() {
5781 resume_(stream, state);
5786 function resume_(stream, state) {
5787 state.resumeScheduled = false;
5788 stream.emit('resume');
5790 if (state.flowing && !state.reading)
5794 Readable.prototype.pause = function() {
5795 debug('call pause flowing=%j', this._readableState.flowing);
5796 if (false !== this._readableState.flowing) {
5798 this._readableState.flowing = false;
5804 function flow(stream) {
5805 var state = stream._readableState;
5806 debug('flow', state.flowing);
5807 if (state.flowing) {
5809 var chunk = stream.read();
5810 } while (null !== chunk && state.flowing);
5814 // wrap an old-style stream as the async data source.
5815 // This is *not* part of the readable stream interface.
5816 // It is an ugly unfortunate mess of history.
5817 Readable.prototype.wrap = function(stream) {
5818 var state = this._readableState;
5822 stream.on('end', function() {
5823 debug('wrapped end');
5824 if (state.decoder && !state.ended) {
5825 var chunk = state.decoder.end();
5826 if (chunk && chunk.length)
5833 stream.on('data', function(chunk) {
5834 debug('wrapped data');
5836 chunk = state.decoder.write(chunk);
5837 if (!chunk || !state.objectMode && !chunk.length)
5840 var ret = self.push(chunk);
5847 // proxy all the other methods.
5848 // important when wrapping filters and duplexes.
5849 for (var i in stream) {
5850 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5851 this[i] = function(method) { return function() {
5852 return stream[method].apply(stream, arguments);
5857 // proxy certain important events.
5858 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5859 forEach(events, function(ev) {
5860 stream.on(ev, self.emit.bind(self, ev));
5863 // when we try to consume some more bytes, simply unpause the
5864 // underlying stream.
5865 self._read = function(n) {
5866 debug('wrapped _read', n);
5878 // exposed for testing purposes only.
5879 Readable._fromList = fromList;
5881 // Pluck off n bytes from an array of buffers.
5882 // Length is the combined lengths of all the buffers in the list.
5883 function fromList(n, state) {
5884 var list = state.buffer;
5885 var length = state.length;
5886 var stringMode = !!state.decoder;
5887 var objectMode = !!state.objectMode;
5890 // nothing in the list, definitely empty.
5891 if (list.length ===
0)
5896 else if (objectMode)
5898 else if (!n || n
>= length) {
5899 // read it all, truncate the array.
5901 ret = list.join('');
5903 ret = Buffer.concat(list, length);
5906 // read just some of it.
5907 if (n < list[
0].length) {
5908 // just take a part of the first list item.
5909 // slice is the same for buffers and strings.
5911 ret = buf.slice(
0, n);
5912 list[
0] = buf.slice(n);
5913 } else if (n === list[
0].length) {
5914 // first list is a perfect match
5918 // we have enough to cover it, but it spans past the first buffer.
5922 ret = new Buffer(n);
5925 for (var i =
0, l = list.length; i < l && c < n; i++) {
5927 var cpy = Math.min(n - c, buf.length);
5930 ret += buf.slice(
0, cpy);
5932 buf.copy(ret, c,
0, cpy);
5934 if (cpy < buf.length)
5935 list[
0] = buf.slice(cpy);
5947 function endReadable(stream) {
5948 var state = stream._readableState;
5950 // If we get here before consuming all the bytes, then that is a
5951 // bug in node. Should never happen.
5952 if (state.length
> 0)
5953 throw new Error('endReadable called on non-empty stream');
5955 if (!state.endEmitted) {
5957 process.nextTick(function() {
5958 // Check that we didn't get one last unshift.
5959 if (!state.endEmitted && state.length ===
0) {
5960 state.endEmitted = true;
5961 stream.readable = false;
5968 function forEach (xs, f) {
5969 for (var i =
0, l = xs.length; i < l; i++) {
5974 function indexOf (xs, x) {
5975 for (var i =
0, l = xs.length; i < l; i++) {
5976 if (xs[i] === x) return i;
5981 }).call(this,require('_process'))
5982 },{
"./_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){
5983 // Copyright Joyent, Inc. and other Node contributors.
5985 // Permission is hereby granted, free of charge, to any person obtaining a
5986 // copy of this software and associated documentation files (the
5987 //
"Software"), to deal in the Software without restriction, including
5988 // without limitation the rights to use, copy, modify, merge, publish,
5989 // distribute, sublicense, and/or sell copies of the Software, and to permit
5990 // persons to whom the Software is furnished to do so, subject to the
5991 // following conditions:
5993 // The above copyright notice and this permission notice shall be included
5994 // in all copies or substantial portions of the Software.
5996 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5997 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5998 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5999 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6000 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6001 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6002 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6005 // a transform stream is a readable/writable stream where you do
6006 // something with the data. Sometimes it's called a
"filter",
6007 // but that's not a great name for it, since that implies a thing where
6008 // some bits pass through, and others are simply ignored. (That would
6009 // be a valid example of a transform, of course.)
6011 // While the output is causally related to the input, it's not a
6012 // necessarily symmetric or synchronous transformation. For example,
6013 // a zlib stream might take multiple plain-text writes(), and then
6014 // emit a single compressed chunk some time in the future.
6016 // Here's how this works:
6018 // The Transform stream has all the aspects of the readable and writable
6019 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6020 // internally, and returns false if there's a lot of pending writes
6021 // buffered up. When you call read(), that calls _read(n) until
6022 // there's enough pending readable data buffered up.
6024 // In a transform stream, the written data is placed in a buffer. When
6025 // _read(n) is called, it transforms the queued up data, calling the
6026 // buffered _write cb's as it consumes chunks. If consuming a single
6027 // written chunk would result in multiple output chunks, then the first
6028 // outputted bit calls the readcb, and subsequent chunks just go into
6029 // the read buffer, and will cause it to emit 'readable' if necessary.
6031 // This way, back-pressure is actually determined by the reading side,
6032 // since _read has to be called to start processing a new chunk. However,
6033 // a pathological inflate type of transform can cause excessive buffering
6034 // here. For example, imagine a stream where every byte of input is
6035 // interpreted as an integer from
0-
255, and then results in that many
6036 // bytes of output. Writing the
4 bytes {ff,ff,ff,ff} would result in
6037 //
1kb of data being output. In this case, you could write a very small
6038 // amount of input, and end up with a very large amount of output. In
6039 // such a pathological inflating mechanism, there'd be no way to tell
6040 // the system to stop doing the transform. A single
4MB write could
6041 // cause the system to run out of memory.
6043 // However, even in such a pathological case, only a single written chunk
6044 // would be consumed, and then the rest would wait (un-transformed) until
6045 // the results of the previous transformed chunk were consumed.
6047 module.exports = Transform;
6049 var Duplex = require('./_stream_duplex');
6052 var util = require('core-util-is');
6053 util.inherits = require('inherits');
6056 util.inherits(Transform, Duplex);
6059 function TransformState(options, stream) {
6060 this.afterTransform = function(er, data) {
6061 return afterTransform(stream, er, data);
6064 this.needTransform = false;
6065 this.transforming = false;
6066 this.writecb = null;
6067 this.writechunk = null;
6070 function afterTransform(stream, er, data) {
6071 var ts = stream._transformState;
6072 ts.transforming = false;
6074 var cb = ts.writecb;
6077 return stream.emit('error', new Error('no writecb in Transform class'));
6079 ts.writechunk = null;
6082 if (!util.isNullOrUndefined(data))
6088 var rs = stream._readableState;
6090 if (rs.needReadable || rs.length < rs.highWaterMark) {
6091 stream._read(rs.highWaterMark);
6096 function Transform(options) {
6097 if (!(this instanceof Transform))
6098 return new Transform(options);
6100 Duplex.call(this, options);
6102 this._transformState = new TransformState(options, this);
6104 // when the writable side finishes, then flush out anything remaining.
6107 // start out asking for a readable event once data is transformed.
6108 this._readableState.needReadable = true;
6110 // we have implemented the _read method, and done the other things
6111 // that Readable wants before the first _read call, so unset the
6113 this._readableState.sync = false;
6115 this.once('prefinish', function() {
6116 if (util.isFunction(this._flush))
6117 this._flush(function(er) {
6125 Transform.prototype.push = function(chunk, encoding) {
6126 this._transformState.needTransform = false;
6127 return Duplex.prototype.push.call(this, chunk, encoding);
6130 // This is the part where you do stuff!
6131 // override this function in implementation classes.
6132 // 'chunk' is an input chunk.
6134 // Call `push(newChunk)` to pass along transformed output
6135 // to the readable side. You may call 'push' zero or more times.
6137 // Call `cb(err)` when you are done with this chunk. If you pass
6138 // an error, then that'll put the hurt on the whole operation. If you
6139 // never call cb(), then you'll never get another chunk.
6140 Transform.prototype._transform = function(chunk, encoding, cb) {
6141 throw new Error('not implemented');
6144 Transform.prototype._write = function(chunk, encoding, cb) {
6145 var ts = this._transformState;
6147 ts.writechunk = chunk;
6148 ts.writeencoding = encoding;
6149 if (!ts.transforming) {
6150 var rs = this._readableState;
6151 if (ts.needTransform ||
6153 rs.length < rs.highWaterMark)
6154 this._read(rs.highWaterMark);
6158 // Doesn't matter what the args are here.
6159 // _transform does all the work.
6160 // That we got here means that the readable side wants more data.
6161 Transform.prototype._read = function(n) {
6162 var ts = this._transformState;
6164 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6165 ts.transforming = true;
6166 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6168 // mark that we need a transform, so that any data that comes in
6169 // will get processed, now that we've asked for it.
6170 ts.needTransform = true;
6175 function done(stream, er) {
6177 return stream.emit('error', er);
6179 // if there's nothing in the write buffer, then that means
6180 // that nothing more will ever be provided
6181 var ws = stream._writableState;
6182 var ts = stream._transformState;
6185 throw new Error('calling transform done when ws.length !=
0');
6187 if (ts.transforming)
6188 throw new Error('calling transform done when still transforming');
6190 return stream.push(null);
6193 },{"./_stream_duplex":
16,"core-util-is":
21,"inherits":
12}],
20:[function(require,module,exports){
6194 (function (process){
6195 // Copyright Joyent, Inc. and other Node contributors.
6197 // Permission is hereby granted, free of charge, to any person obtaining a
6198 // copy of this software and associated documentation files (the
6199 // "Software"), to deal in the Software without restriction, including
6200 // without limitation the rights to use, copy, modify, merge, publish,
6201 // distribute, sublicense, and/or sell copies of the Software, and to permit
6202 // persons to whom the Software is furnished to do so, subject to the
6203 // following conditions:
6205 // The above copyright notice and this permission notice shall be included
6206 // in all copies or substantial portions of the Software.
6208 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6209 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6210 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6211 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6212 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6213 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6214 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6216 // A bit simpler than readable streams.
6217 // Implement an async ._write(chunk, cb), and it'll handle all
6218 // the drain event emission and buffering.
6220 module.exports = Writable;
6223 var Buffer = require('buffer').Buffer;
6226 Writable.WritableState = WritableState;
6230 var util = require('core-util-is');
6231 util.inherits = require('inherits');
6234 var Stream = require('stream');
6236 util.inherits(Writable, Stream);
6238 function WriteReq(chunk, encoding, cb) {
6240 this.encoding = encoding;
6244 function WritableState(options, stream) {
6245 var Duplex = require('./_stream_duplex');
6247 options = options || {};
6249 // the point at which write() starts returning false
6250 // Note:
0 is a valid value, means that we always return false if
6251 // the entire buffer is not flushed immediately on write()
6252 var hwm = options.highWaterMark;
6253 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
6254 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
6256 // object stream flag to indicate whether or not this stream
6257 // contains buffers or objects.
6258 this.objectMode = !!options.objectMode;
6260 if (stream instanceof Duplex)
6261 this.objectMode = this.objectMode || !!options.writableObjectMode;
6264 this.highWaterMark = ~~this.highWaterMark;
6266 this.needDrain = false;
6267 // at the start of calling end()
6268 this.ending = false;
6269 // when end() has been called, and returned
6271 // when 'finish' is emitted
6272 this.finished = false;
6274 // should we decode strings into buffers before passing to _write?
6275 // this is here so that some node-core streams can optimize string
6276 // handling at a lower level.
6277 var noDecode = options.decodeStrings === false;
6278 this.decodeStrings = !noDecode;
6280 // Crypto is kind of old and crusty. Historically, its default string
6281 // encoding is 'binary' so we have to make this configurable.
6282 // Everything else in the universe uses 'utf8', though.
6283 this.defaultEncoding = options.defaultEncoding || 'utf8';
6285 // not an actual buffer we keep track of, but a measurement
6286 // of how much we're waiting to get pushed to some underlying
6290 // a flag to see when we're in the middle of a write.
6291 this.writing = false;
6293 // when true all writes will be buffered until .uncork() call
6296 // a flag to be able to tell if the onwrite cb is called immediately,
6297 // or on a later tick. We set this to true at first, because any
6298 // actions that shouldn't happen until "later" should generally also
6299 // not happen before the first write call.
6302 // a flag to know if we're processing previously buffered items, which
6303 // may call the _write() callback in the same tick, so that we don't
6304 // end up in an overlapped onwrite situation.
6305 this.bufferProcessing = false;
6307 // the callback that's passed to _write(chunk,cb)
6308 this.onwrite = function(er) {
6309 onwrite(stream, er);
6312 // the callback that the user supplies to write(chunk,encoding,cb)
6313 this.writecb = null;
6315 // the amount that is being written when _write is called.
6320 // number of pending user-supplied write callbacks
6321 // this must be
0 before 'finish' can be emitted
6324 // emit prefinish if the only thing we're waiting for is _write cbs
6325 // This is relevant for synchronous Transform streams
6326 this.prefinished = false;
6328 // True if the error was already emitted and should not be thrown again
6329 this.errorEmitted = false;
6332 function Writable(options) {
6333 var Duplex = require('./_stream_duplex');
6335 // Writable ctor is applied to Duplexes, though they're not
6336 // instanceof Writable, they're instanceof Readable.
6337 if (!(this instanceof Writable) && !(this instanceof Duplex))
6338 return new Writable(options);
6340 this._writableState = new WritableState(options, this);
6343 this.writable = true;
6348 // Otherwise people can pipe Writable streams, which is just wrong.
6349 Writable.prototype.pipe = function() {
6350 this.emit('error', new Error('Cannot pipe. Not readable.'));
6354 function writeAfterEnd(stream, state, cb) {
6355 var er = new Error('write after end');
6356 // TODO: defer error events consistently everywhere, not just the cb
6357 stream.emit('error', er);
6358 process.nextTick(function() {
6363 // If we get something that is not a buffer, string, null, or undefined,
6364 // and we're not in objectMode, then that's an error.
6365 // Otherwise stream chunks are all considered to be of length=
1, and the
6366 // watermarks determine how many objects to keep in the buffer, rather than
6367 // how many bytes or characters.
6368 function validChunk(stream, state, chunk, cb) {
6370 if (!util.isBuffer(chunk) &&
6371 !util.isString(chunk) &&
6372 !util.isNullOrUndefined(chunk) &&
6373 !state.objectMode) {
6374 var er = new TypeError('Invalid non-string/buffer chunk');
6375 stream.emit('error', er);
6376 process.nextTick(function() {
6384 Writable.prototype.write = function(chunk, encoding, cb) {
6385 var state = this._writableState;
6388 if (util.isFunction(encoding)) {
6393 if (util.isBuffer(chunk))
6394 encoding = 'buffer';
6396 encoding = state.defaultEncoding;
6398 if (!util.isFunction(cb))
6402 writeAfterEnd(this, state, cb);
6403 else if (validChunk(this, state, chunk, cb)) {
6405 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6411 Writable.prototype.cork = function() {
6412 var state = this._writableState;
6417 Writable.prototype.uncork = function() {
6418 var state = this._writableState;
6423 if (!state.writing &&
6426 !state.bufferProcessing &&
6427 state.buffer.length)
6428 clearBuffer(this, state);
6432 function decodeChunk(state, chunk, encoding) {
6433 if (!state.objectMode &&
6434 state.decodeStrings !== false &&
6435 util.isString(chunk)) {
6436 chunk = new Buffer(chunk, encoding);
6441 // if we're already writing something, then just put this
6442 // in the queue, and wait our turn. Otherwise, call _write
6443 // If we return false, then we need a drain event, so set that flag.
6444 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6445 chunk = decodeChunk(state, chunk, encoding);
6446 if (util.isBuffer(chunk))
6447 encoding = 'buffer';
6448 var len = state.objectMode ?
1 : chunk.length;
6450 state.length += len;
6452 var ret = state.length < state.highWaterMark;
6453 // we must ensure that previous needDrain will not be reset to false.
6455 state.needDrain = true;
6457 if (state.writing || state.corked)
6458 state.buffer.push(new WriteReq(chunk, encoding, cb));
6460 doWrite(stream, state, false, len, chunk, encoding, cb);
6465 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6466 state.writelen = len;
6468 state.writing = true;
6471 stream._writev(chunk, state.onwrite);
6473 stream._write(chunk, encoding, state.onwrite);
6477 function onwriteError(stream, state, sync, er, cb) {
6479 process.nextTick(function() {
6488 stream._writableState.errorEmitted = true;
6489 stream.emit('error', er);
6492 function onwriteStateUpdate(state) {
6493 state.writing = false;
6494 state.writecb = null;
6495 state.length -= state.writelen;
6499 function onwrite(stream, er) {
6500 var state = stream._writableState;
6501 var sync = state.sync;
6502 var cb = state.writecb;
6504 onwriteStateUpdate(state);
6507 onwriteError(stream, state, sync, er, cb);
6509 // Check if we're actually ready to finish, but don't emit yet
6510 var finished = needFinish(stream, state);
6514 !state.bufferProcessing &&
6515 state.buffer.length) {
6516 clearBuffer(stream, state);
6520 process.nextTick(function() {
6521 afterWrite(stream, state, finished, cb);
6524 afterWrite(stream, state, finished, cb);
6529 function afterWrite(stream, state, finished, cb) {
6531 onwriteDrain(stream, state);
6534 finishMaybe(stream, state);
6537 // Must force callback to be called on nextTick, so that we don't
6538 // emit 'drain' before the write() consumer gets the 'false' return
6539 // value, and has a chance to attach a 'drain' listener.
6540 function onwriteDrain(stream, state) {
6541 if (state.length ===
0 && state.needDrain) {
6542 state.needDrain = false;
6543 stream.emit('drain');
6548 // if there's something in the buffer waiting, then process it
6549 function clearBuffer(stream, state) {
6550 state.bufferProcessing = true;
6552 if (stream._writev && state.buffer.length
> 1) {
6553 // Fast case, write everything using _writev()
6555 for (var c =
0; c < state.buffer.length; c++)
6556 cbs.push(state.buffer[c].callback);
6558 // count the one we are adding, as well.
6559 // TODO(isaacs) clean this up
6561 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6562 for (var i =
0; i < cbs.length; i++) {
6571 // Slow case, write chunks one-by-one
6572 for (var c =
0; c < state.buffer.length; c++) {
6573 var entry = state.buffer[c];
6574 var chunk = entry.chunk;
6575 var encoding = entry.encoding;
6576 var cb = entry.callback;
6577 var len = state.objectMode ?
1 : chunk.length;
6579 doWrite(stream, state, false, len, chunk, encoding, cb);
6581 // if we didn't call the onwrite immediately, then
6582 // it means that we need to wait until it does.
6583 // also, that means that the chunk and cb are currently
6584 // being processed, so move the buffer counter past them.
6585 if (state.writing) {
6591 if (c < state.buffer.length)
6592 state.buffer = state.buffer.slice(c);
6594 state.buffer.length =
0;
6597 state.bufferProcessing = false;
6600 Writable.prototype._write = function(chunk, encoding, cb) {
6601 cb(new Error('not implemented'));
6605 Writable.prototype._writev = null;
6607 Writable.prototype.end = function(chunk, encoding, cb) {
6608 var state = this._writableState;
6610 if (util.isFunction(chunk)) {
6614 } else if (util.isFunction(encoding)) {
6619 if (!util.isNullOrUndefined(chunk))
6620 this.write(chunk, encoding);
6622 // .end() fully uncorks
6628 // ignore unnecessary end() calls.
6629 if (!state.ending && !state.finished)
6630 endWritable(this, state, cb);
6634 function needFinish(stream, state) {
6635 return (state.ending &&
6636 state.length ===
0 &&
6641 function prefinish(stream, state) {
6642 if (!state.prefinished) {
6643 state.prefinished = true;
6644 stream.emit('prefinish');
6648 function finishMaybe(stream, state) {
6649 var need = needFinish(stream, state);
6651 if (state.pendingcb ===
0) {
6652 prefinish(stream, state);
6653 state.finished = true;
6654 stream.emit('finish');
6656 prefinish(stream, state);
6661 function endWritable(stream, state, cb) {
6662 state.ending = true;
6663 finishMaybe(stream, state);
6666 process.nextTick(cb);
6668 stream.once('finish', cb);
6673 }).call(this,require('_process'))
6674 },{
"./_stream_duplex":
16,
"_process":
14,
"buffer":
7,
"core-util-is":
21,
"inherits":
12,
"stream":
26}],
21:[function(require,module,exports){
6676 // Copyright Joyent, Inc. and other Node contributors.
6678 // Permission is hereby granted, free of charge, to any person obtaining a
6679 // copy of this software and associated documentation files (the
6680 //
"Software"), to deal in the Software without restriction, including
6681 // without limitation the rights to use, copy, modify, merge, publish,
6682 // distribute, sublicense, and/or sell copies of the Software, and to permit
6683 // persons to whom the Software is furnished to do so, subject to the
6684 // following conditions:
6686 // The above copyright notice and this permission notice shall be included
6687 // in all copies or substantial portions of the Software.
6689 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6690 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6691 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6692 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6693 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6694 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6695 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6697 // NOTE: These type checking functions intentionally don't use `instanceof`
6698 // because it is fragile and can be easily faked with `Object.create()`.
6699 function isArray(ar) {
6700 return Array.isArray(ar);
6702 exports.isArray = isArray;
6704 function isBoolean(arg) {
6705 return typeof arg === 'boolean';
6707 exports.isBoolean = isBoolean;
6709 function isNull(arg) {
6710 return arg === null;
6712 exports.isNull = isNull;
6714 function isNullOrUndefined(arg) {
6717 exports.isNullOrUndefined = isNullOrUndefined;
6719 function isNumber(arg) {
6720 return typeof arg === 'number';
6722 exports.isNumber = isNumber;
6724 function isString(arg) {
6725 return typeof arg === 'string';
6727 exports.isString = isString;
6729 function isSymbol(arg) {
6730 return typeof arg === 'symbol';
6732 exports.isSymbol = isSymbol;
6734 function isUndefined(arg) {
6735 return arg === void
0;
6737 exports.isUndefined = isUndefined;
6739 function isRegExp(re) {
6740 return isObject(re) && objectToString(re) === '[object RegExp]';
6742 exports.isRegExp = isRegExp;
6744 function isObject(arg) {
6745 return typeof arg === 'object' && arg !== null;
6747 exports.isObject = isObject;
6749 function isDate(d) {
6750 return isObject(d) && objectToString(d) === '[object Date]';
6752 exports.isDate = isDate;
6754 function isError(e) {
6755 return isObject(e) &&
6756 (objectToString(e) === '[object Error]' || e instanceof Error);
6758 exports.isError = isError;
6760 function isFunction(arg) {
6761 return typeof arg === 'function';
6763 exports.isFunction = isFunction;
6765 function isPrimitive(arg) {
6766 return arg === null ||
6767 typeof arg === 'boolean' ||
6768 typeof arg === 'number' ||
6769 typeof arg === 'string' ||
6770 typeof arg === 'symbol' || // ES6 symbol
6771 typeof arg === 'undefined';
6773 exports.isPrimitive = isPrimitive;
6775 function isBuffer(arg) {
6776 return Buffer.isBuffer(arg);
6778 exports.isBuffer = isBuffer;
6780 function objectToString(o) {
6781 return Object.prototype.toString.call(o);
6783 }).call(this,require(
"buffer").Buffer)
6784 },{
"buffer":
7}],
22:[function(require,module,exports){
6785 module.exports = require(
"./lib/_stream_passthrough.js")
6787 },{
"./lib/_stream_passthrough.js":
17}],
23:[function(require,module,exports){
6788 exports = module.exports = require('./lib/_stream_readable.js');
6789 exports.Stream = require('stream');
6790 exports.Readable = exports;
6791 exports.Writable = require('./lib/_stream_writable.js');
6792 exports.Duplex = require('./lib/_stream_duplex.js');
6793 exports.Transform = require('./lib/_stream_transform.js');
6794 exports.PassThrough = require('./lib/_stream_passthrough.js');
6796 },{
"./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){
6797 module.exports = require(
"./lib/_stream_transform.js")
6799 },{
"./lib/_stream_transform.js":
19}],
25:[function(require,module,exports){
6800 module.exports = require(
"./lib/_stream_writable.js")
6802 },{
"./lib/_stream_writable.js":
20}],
26:[function(require,module,exports){
6803 // Copyright Joyent, Inc. and other Node contributors.
6805 // Permission is hereby granted, free of charge, to any person obtaining a
6806 // copy of this software and associated documentation files (the
6807 //
"Software"), to deal in the Software without restriction, including
6808 // without limitation the rights to use, copy, modify, merge, publish,
6809 // distribute, sublicense, and/or sell copies of the Software, and to permit
6810 // persons to whom the Software is furnished to do so, subject to the
6811 // following conditions:
6813 // The above copyright notice and this permission notice shall be included
6814 // in all copies or substantial portions of the Software.
6816 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6817 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6818 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6819 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6820 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6821 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6822 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6824 module.exports = Stream;
6826 var EE = require('events').EventEmitter;
6827 var inherits = require('inherits');
6829 inherits(Stream, EE);
6830 Stream.Readable = require('readable-stream/readable.js');
6831 Stream.Writable = require('readable-stream/writable.js');
6832 Stream.Duplex = require('readable-stream/duplex.js');
6833 Stream.Transform = require('readable-stream/transform.js');
6834 Stream.PassThrough = require('readable-stream/passthrough.js');
6836 // Backwards-compat with node
0.4.x
6837 Stream.Stream = Stream;
6841 // old-style streams. Note that the pipe method (the only relevant
6842 // part of this class) is overridden in the Readable class.
6848 Stream.prototype.pipe = function(dest, options) {
6851 function ondata(chunk) {
6852 if (dest.writable) {
6853 if (false === dest.write(chunk) && source.pause) {
6859 source.on('data', ondata);
6861 function ondrain() {
6862 if (source.readable && source.resume) {
6867 dest.on('drain', ondrain);
6869 // If the 'end' option is not supplied, dest.end() will be called when
6870 // source gets the 'end' or 'close' events. Only dest.end() once.
6871 if (!dest._isStdio && (!options || options.end !== false)) {
6872 source.on('end', onend);
6873 source.on('close', onclose);
6876 var didOnEnd = false;
6878 if (didOnEnd) return;
6885 function onclose() {
6886 if (didOnEnd) return;
6889 if (typeof dest.destroy === 'function') dest.destroy();
6892 // don't leave dangling pipes when there are errors.
6893 function onerror(er) {
6895 if (EE.listenerCount(this, 'error') ===
0) {
6896 throw er; // Unhandled stream error in pipe.
6900 source.on('error', onerror);
6901 dest.on('error', onerror);
6903 // remove all the event listeners that were added.
6904 function cleanup() {
6905 source.removeListener('data', ondata);
6906 dest.removeListener('drain', ondrain);
6908 source.removeListener('end', onend);
6909 source.removeListener('close', onclose);
6911 source.removeListener('error', onerror);
6912 dest.removeListener('error', onerror);
6914 source.removeListener('end', cleanup);
6915 source.removeListener('close', cleanup);
6917 dest.removeListener('close', cleanup);
6920 source.on('end', cleanup);
6921 source.on('close', cleanup);
6923 dest.on('close', cleanup);
6925 dest.emit('pipe', source);
6927 // Allow for unix-like usage: A.pipe(B).pipe(C)
6931 },{
"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){
6932 // Copyright Joyent, Inc. and other Node contributors.
6934 // Permission is hereby granted, free of charge, to any person obtaining a
6935 // copy of this software and associated documentation files (the
6936 //
"Software"), to deal in the Software without restriction, including
6937 // without limitation the rights to use, copy, modify, merge, publish,
6938 // distribute, sublicense, and/or sell copies of the Software, and to permit
6939 // persons to whom the Software is furnished to do so, subject to the
6940 // following conditions:
6942 // The above copyright notice and this permission notice shall be included
6943 // in all copies or substantial portions of the Software.
6945 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6946 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6947 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6948 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6949 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6950 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6951 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6953 var Buffer = require('buffer').Buffer;
6955 var isBufferEncoding = Buffer.isEncoding
6956 || function(encoding) {
6957 switch (encoding && encoding.toLowerCase()) {
6958 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;
6959 default: return false;
6964 function assertEncoding(encoding) {
6965 if (encoding && !isBufferEncoding(encoding)) {
6966 throw new Error('Unknown encoding: ' + encoding);
6970 // StringDecoder provides an interface for efficiently splitting a series of
6971 // buffers into a series of JS strings without breaking apart multi-byte
6972 // characters. CESU-
8 is handled as part of the UTF-
8 encoding.
6974 // @TODO Handling all encodings inside a single object makes it very difficult
6975 // to reason about this code, so it should be split up in the future.
6976 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-
8 code
6977 // points as used by CESU-
8.
6978 var StringDecoder = exports.StringDecoder = function(encoding) {
6979 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6980 assertEncoding(encoding);
6981 switch (this.encoding) {
6983 // CESU-
8 represents each of Surrogate Pair by
3-bytes
6984 this.surrogateSize =
3;
6988 // UTF-
16 represents each of Surrogate Pair by
2-bytes
6989 this.surrogateSize =
2;
6990 this.detectIncompleteChar = utf16DetectIncompleteChar;
6993 // Base-
64 stores
3 bytes in
4 chars, and pads the remainder.
6994 this.surrogateSize =
3;
6995 this.detectIncompleteChar = base64DetectIncompleteChar;
6998 this.write = passThroughWrite;
7002 // Enough space to store all bytes of a single character. UTF-
8 needs
4
7003 // bytes, but CESU-
8 may require up to
6 (
3 bytes per surrogate).
7004 this.charBuffer = new Buffer(
6);
7005 // Number of bytes received for the current incomplete multi-byte character.
7006 this.charReceived =
0;
7007 // Number of bytes expected for the current incomplete multi-byte character.
7008 this.charLength =
0;
7012 // write decodes the given buffer and returns it as JS string that is
7013 // guaranteed to not contain any partial multi-byte characters. Any partial
7014 // character found at the end of the buffer is buffered up, and will be
7015 // returned when calling write again with the remaining bytes.
7017 // Note: Converting a Buffer containing an orphan surrogate to a String
7018 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7019 // Buffer#write) will replace incomplete surrogates with the unicode
7020 // replacement character. See https://codereview.chromium.org/
121173009/ .
7021 StringDecoder.prototype.write = function(buffer) {
7023 // if our last write ended with an incomplete multibyte character
7024 while (this.charLength) {
7025 // determine how many remaining bytes this buffer has to offer for this char
7026 var available = (buffer.length
>= this.charLength - this.charReceived) ?
7027 this.charLength - this.charReceived :
7030 // add the new bytes to the char buffer
7031 buffer.copy(this.charBuffer, this.charReceived,
0, available);
7032 this.charReceived += available;
7034 if (this.charReceived < this.charLength) {
7035 // still not enough chars in this buffer? wait for more ...
7039 // remove bytes belonging to the current character from the buffer
7040 buffer = buffer.slice(available, buffer.length);
7042 // get the character that was split
7043 charStr = this.charBuffer.slice(
0, this.charLength).toString(this.encoding);
7045 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7046 var charCode = charStr.charCodeAt(charStr.length -
1);
7047 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7048 this.charLength += this.surrogateSize;
7052 this.charReceived = this.charLength =
0;
7054 // if there are no more bytes in this buffer, just emit our char
7055 if (buffer.length ===
0) {
7061 // determine and set charLength / charReceived
7062 this.detectIncompleteChar(buffer);
7064 var end = buffer.length;
7065 if (this.charLength) {
7066 // buffer the incomplete character bytes we got
7067 buffer.copy(this.charBuffer,
0, buffer.length - this.charReceived, end);
7068 end -= this.charReceived;
7071 charStr += buffer.toString(this.encoding,
0, end);
7073 var end = charStr.length -
1;
7074 var charCode = charStr.charCodeAt(end);
7075 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7076 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7077 var size = this.surrogateSize;
7078 this.charLength += size;
7079 this.charReceived += size;
7080 this.charBuffer.copy(this.charBuffer, size,
0, size);
7081 buffer.copy(this.charBuffer,
0,
0, size);
7082 return charStr.substring(
0, end);
7085 // or just emit the charStr
7089 // detectIncompleteChar determines if there is an incomplete UTF-
8 character at
7090 // the end of the given buffer. If so, it sets this.charLength to the byte
7091 // length that character, and sets this.charReceived to the number of bytes
7092 // that are available for this character.
7093 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7094 // determine how many bytes we have to check at the end of this buffer
7095 var i = (buffer.length
>=
3) ?
3 : buffer.length;
7097 // Figure out if one of the last i bytes of our buffer announces an
7099 for (; i
> 0; i--) {
7100 var c = buffer[buffer.length - i];
7102 // See http://en.wikipedia.org/wiki/UTF-
8#Description
7105 if (i ==
1 && c
>> 5 ==
0x06) {
7106 this.charLength =
2;
7111 if (i <=
2 && c
>> 4 ==
0x0E) {
7112 this.charLength =
3;
7117 if (i <=
3 && c
>> 3 ==
0x1E) {
7118 this.charLength =
4;
7122 this.charReceived = i;
7125 StringDecoder.prototype.end = function(buffer) {
7127 if (buffer && buffer.length)
7128 res = this.write(buffer);
7130 if (this.charReceived) {
7131 var cr = this.charReceived;
7132 var buf = this.charBuffer;
7133 var enc = this.encoding;
7134 res += buf.slice(
0, cr).toString(enc);
7140 function passThroughWrite(buffer) {
7141 return buffer.toString(this.encoding);
7144 function utf16DetectIncompleteChar(buffer) {
7145 this.charReceived = buffer.length %
2;
7146 this.charLength = this.charReceived ?
2 :
0;
7149 function base64DetectIncompleteChar(buffer) {
7150 this.charReceived = buffer.length %
3;
7151 this.charLength = this.charReceived ?
3 :
0;
7154 },{
"buffer":
7}],
28:[function(require,module,exports){
7155 module.exports = function isBuffer(arg) {
7156 return arg && typeof arg === 'object'
7157 && typeof arg.copy === 'function'
7158 && typeof arg.fill === 'function'
7159 && typeof arg.readUInt8 === 'function';
7161 },{}],
29:[function(require,module,exports){
7162 (function (process,global){
7163 // Copyright Joyent, Inc. and other Node contributors.
7165 // Permission is hereby granted, free of charge, to any person obtaining a
7166 // copy of this software and associated documentation files (the
7167 //
"Software"), to deal in the Software without restriction, including
7168 // without limitation the rights to use, copy, modify, merge, publish,
7169 // distribute, sublicense, and/or sell copies of the Software, and to permit
7170 // persons to whom the Software is furnished to do so, subject to the
7171 // following conditions:
7173 // The above copyright notice and this permission notice shall be included
7174 // in all copies or substantial portions of the Software.
7176 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7177 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7178 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7179 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7180 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7181 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7182 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7184 var formatRegExp = /%[sdj%]/g;
7185 exports.format = function(f) {
7188 for (var i =
0; i < arguments.length; i++) {
7189 objects.push(inspect(arguments[i]));
7191 return objects.join(' ');
7195 var args = arguments;
7196 var len = args.length;
7197 var str = String(f).replace(formatRegExp, function(x) {
7198 if (x === '%%') return '%';
7199 if (i
>= len) return x;
7201 case '%s': return String(args[i++]);
7202 case '%d': return Number(args[i++]);
7205 return JSON.stringify(args[i++]);
7207 return '[Circular]';
7213 for (var x = args[i]; i < len; x = args[++i]) {
7214 if (isNull(x) || !isObject(x)) {
7217 str += ' ' + inspect(x);
7224 // Mark that a method should not be used.
7225 // Returns a modified function which warns once by default.
7226 // If --no-deprecation is set, then it is a no-op.
7227 exports.deprecate = function(fn, msg) {
7228 // Allow for deprecating things in the process of starting up.
7229 if (isUndefined(global.process)) {
7231 return exports.deprecate(fn, msg).apply(this, arguments);
7235 if (process.noDeprecation === true) {
7240 function deprecated() {
7242 if (process.throwDeprecation) {
7243 throw new Error(msg);
7244 } else if (process.traceDeprecation) {
7251 return fn.apply(this, arguments);
7260 exports.debuglog = function(set) {
7261 if (isUndefined(debugEnviron))
7262 debugEnviron = process.env.NODE_DEBUG || '';
7263 set = set.toUpperCase();
7265 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7266 var pid = process.pid;
7267 debugs[set] = function() {
7268 var msg = exports.format.apply(exports, arguments);
7269 console.error('%s %d: %s', set, pid, msg);
7272 debugs[set] = function() {};
7280 * Echos the value of a value. Trys to print the value out
7281 * in the best way possible given the different types.
7283 * @param {Object} obj The object to print out.
7284 * @param {Object} opts Optional options object that alters the output.
7286 /* legacy: obj, showHidden, depth, colors*/
7287 function inspect(obj, opts) {
7291 stylize: stylizeNoColor
7294 if (arguments.length
>=
3) ctx.depth = arguments[
2];
7295 if (arguments.length
>=
4) ctx.colors = arguments[
3];
7296 if (isBoolean(opts)) {
7298 ctx.showHidden = opts;
7300 // got an "options" object
7301 exports._extend(ctx, opts);
7303 // set default options
7304 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7305 if (isUndefined(ctx.depth)) ctx.depth =
2;
7306 if (isUndefined(ctx.colors)) ctx.colors = false;
7307 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7308 if (ctx.colors) ctx.stylize = stylizeWithColor;
7309 return formatValue(ctx, obj, ctx.depth);
7311 exports.inspect = inspect;
7314 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7318 'underline' : [
4,
24],
7319 'inverse' : [
7,
27],
7326 'magenta' : [
35,
39],
7331 // Don't use 'blue' not visible on cmd.exe
7335 'boolean': 'yellow',
7336 'undefined': 'grey',
7340 // "name": intentionally not styling
7345 function stylizeWithColor(str, styleType) {
7346 var style = inspect.styles[styleType];
7349 return '\u001b[' + inspect.colors[style][
0] + 'm' + str +
7350 '\u001b[' + inspect.colors[style][
1] + 'm';
7357 function stylizeNoColor(str, styleType) {
7362 function arrayToHash(array) {
7365 array.forEach(function(val, idx) {
7373 function formatValue(ctx, value, recurseTimes) {
7374 // Provide a hook for user-specified inspect functions.
7375 // Check that value is an object with an inspect function on it
7376 if (ctx.customInspect &&
7378 isFunction(value.inspect) &&
7379 // Filter out the util module, it's inspect function is special
7380 value.inspect !== exports.inspect &&
7381 // Also filter out any prototype objects using the circular check.
7382 !(value.constructor && value.constructor.prototype === value)) {
7383 var ret = value.inspect(recurseTimes, ctx);
7384 if (!isString(ret)) {
7385 ret = formatValue(ctx, ret, recurseTimes);
7390 // Primitive types cannot have properties
7391 var primitive = formatPrimitive(ctx, value);
7396 // Look up the keys of the object.
7397 var keys = Object.keys(value);
7398 var visibleKeys = arrayToHash(keys);
7400 if (ctx.showHidden) {
7401 keys = Object.getOwnPropertyNames(value);
7404 // IE doesn't make error fields non-enumerable
7405 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs
.94).aspx
7407 && (keys.indexOf('message')
>=
0 || keys.indexOf('description')
>=
0)) {
7408 return formatError(value);
7411 // Some type of object without properties can be shortcutted.
7412 if (keys.length ===
0) {
7413 if (isFunction(value)) {
7414 var name = value.name ? ': ' + value.name : '';
7415 return ctx.stylize('[Function' + name + ']', 'special');
7417 if (isRegExp(value)) {
7418 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7420 if (isDate(value)) {
7421 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7423 if (isError(value)) {
7424 return formatError(value);
7428 var base = '', array = false, braces = ['{', '}'];
7430 // Make Array say that they are Array
7431 if (isArray(value)) {
7433 braces = ['[', ']'];
7436 // Make functions say that they are functions
7437 if (isFunction(value)) {
7438 var n = value.name ? ': ' + value.name : '';
7439 base = ' [Function' + n + ']';
7442 // Make RegExps say that they are RegExps
7443 if (isRegExp(value)) {
7444 base = ' ' + RegExp.prototype.toString.call(value);
7447 // Make dates with properties first say the date
7448 if (isDate(value)) {
7449 base = ' ' + Date.prototype.toUTCString.call(value);
7452 // Make error with message first say the error
7453 if (isError(value)) {
7454 base = ' ' + formatError(value);
7457 if (keys.length ===
0 && (!array || value.length ==
0)) {
7458 return braces[
0] + base + braces[
1];
7461 if (recurseTimes <
0) {
7462 if (isRegExp(value)) {
7463 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7465 return ctx.stylize('[Object]', 'special');
7469 ctx.seen.push(value);
7473 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7475 output = keys.map(function(key) {
7476 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7482 return reduceToSingleString(output, base, braces);
7486 function formatPrimitive(ctx, value) {
7487 if (isUndefined(value))
7488 return ctx.stylize('undefined', 'undefined');
7489 if (isString(value)) {
7490 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7491 .replace(/'/g, "\\'")
7492 .replace(/\\"/g, '"') + '\'';
7493 return ctx.stylize(simple, 'string');
7495 if (isNumber(value))
7496 return ctx.stylize('' + value, 'number');
7497 if (isBoolean(value))
7498 return ctx.stylize('' + value, 'boolean');
7499 // For some reason typeof null is "object", so special case here.
7501 return ctx.stylize('null', 'null');
7505 function formatError(value) {
7506 return '[' + Error.prototype.toString.call(value) + ']';
7510 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7512 for (var i =
0, l = value.length; i < l; ++i) {
7513 if (hasOwnProperty(value, String(i))) {
7514 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7520 keys.forEach(function(key) {
7521 if (!key.match(/^\d+$/)) {
7522 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7530 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7531 var name, str, desc;
7532 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7535 str = ctx.stylize('[Getter/Setter]', 'special');
7537 str = ctx.stylize('[Getter]', 'special');
7541 str = ctx.stylize('[Setter]', 'special');
7544 if (!hasOwnProperty(visibleKeys, key)) {
7545 name = '[' + key + ']';
7548 if (ctx.seen.indexOf(desc.value) <
0) {
7549 if (isNull(recurseTimes)) {
7550 str = formatValue(ctx, desc.value, null);
7552 str = formatValue(ctx, desc.value, recurseTimes -
1);
7554 if (str.indexOf('\n')
> -
1) {
7556 str = str.split('\n').map(function(line) {
7558 }).join('\n').substr(
2);
7560 str = '\n' + str.split('\n').map(function(line) {
7566 str = ctx.stylize('[Circular]', 'special');
7569 if (isUndefined(name)) {
7570 if (array && key.match(/^\d+$/)) {
7573 name = JSON.stringify('' + key);
7574 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-
9]*)"$/)) {
7575 name = name.substr(
1, name.length -
2);
7576 name = ctx.stylize(name, 'name');
7578 name = name.replace(/'/g, "\\'")
7579 .replace(/\\"/g, '"')
7580 .replace(/(^"|"$)/g, "'");
7581 name = ctx.stylize(name, 'string');
7585 return name + ': ' + str;
7589 function reduceToSingleString(output, base, braces) {
7590 var numLinesEst =
0;
7591 var length = output.reduce(function(prev, cur) {
7593 if (cur.indexOf('\n')
>=
0) numLinesEst++;
7594 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length +
1;
7599 (base === '' ? '' : base + '\n ') +
7601 output.join(',\n ') +
7606 return braces[
0] + base + ' ' + output.join(', ') + ' ' + braces[
1];
7610 // NOTE: These type checking functions intentionally don't use `instanceof`
7611 // because it is fragile and can be easily faked with `Object.create()`.
7612 function isArray(ar) {
7613 return Array.isArray(ar);
7615 exports.isArray = isArray;
7617 function isBoolean(arg) {
7618 return typeof arg === 'boolean';
7620 exports.isBoolean = isBoolean;
7622 function isNull(arg) {
7623 return arg === null;
7625 exports.isNull = isNull;
7627 function isNullOrUndefined(arg) {
7630 exports.isNullOrUndefined = isNullOrUndefined;
7632 function isNumber(arg) {
7633 return typeof arg === 'number';
7635 exports.isNumber = isNumber;
7637 function isString(arg) {
7638 return typeof arg === 'string';
7640 exports.isString = isString;
7642 function isSymbol(arg) {
7643 return typeof arg === 'symbol';
7645 exports.isSymbol = isSymbol;
7647 function isUndefined(arg) {
7648 return arg === void
0;
7650 exports.isUndefined = isUndefined;
7652 function isRegExp(re) {
7653 return isObject(re) && objectToString(re) === '[object RegExp]';
7655 exports.isRegExp = isRegExp;
7657 function isObject(arg) {
7658 return typeof arg === 'object' && arg !== null;
7660 exports.isObject = isObject;
7662 function isDate(d) {
7663 return isObject(d) && objectToString(d) === '[object Date]';
7665 exports.isDate = isDate;
7667 function isError(e) {
7668 return isObject(e) &&
7669 (objectToString(e) === '[object Error]' || e instanceof Error);
7671 exports.isError = isError;
7673 function isFunction(arg) {
7674 return typeof arg === 'function';
7676 exports.isFunction = isFunction;
7678 function isPrimitive(arg) {
7679 return arg === null ||
7680 typeof arg === 'boolean' ||
7681 typeof arg === 'number' ||
7682 typeof arg === 'string' ||
7683 typeof arg === 'symbol' || // ES6 symbol
7684 typeof arg === 'undefined';
7686 exports.isPrimitive = isPrimitive;
7688 exports.isBuffer = require('./support/isBuffer');
7690 function objectToString(o) {
7691 return Object.prototype.toString.call(o);
7696 return n <
10 ? '
0' + n.toString(
10) : n.toString(
10);
7700 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7701 'Oct', 'Nov', 'Dec'];
7704 function timestamp() {
7706 var time = [pad(d.getHours()),
7707 pad(d.getMinutes()),
7708 pad(d.getSeconds())].join(':');
7709 return [d.getDate(), months[d.getMonth()], time].join(' ');
7713 // log is just a thin wrapper to console.log that prepends a timestamp
7714 exports.log = function() {
7715 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7720 * Inherit the prototype methods from one constructor into another.
7722 * The Function.prototype.inherits from lang.js rewritten as a standalone
7723 * function (not on Function.prototype). NOTE: If this file is to be loaded
7724 * during bootstrapping this function needs to be rewritten using some native
7725 * functions as prototype setup using normal JavaScript does not work as
7726 * expected during bootstrapping (see mirror.js in r114903).
7728 * @param {function} ctor Constructor function which needs to inherit the
7730 * @param {function} superCtor Constructor function to inherit prototype from.
7732 exports.inherits = require('inherits');
7734 exports._extend = function(origin, add) {
7735 // Don't do anything if add isn't an object
7736 if (!add || !isObject(add)) return origin;
7738 var keys = Object.keys(add);
7739 var i = keys.length;
7741 origin[keys[i]] = add[keys[i]];
7746 function hasOwnProperty(obj, prop) {
7747 return Object.prototype.hasOwnProperty.call(obj, prop);
7750 }).call(this,require('_process'),typeof global !==
"undefined" ? global : typeof self !==
"undefined" ? self : typeof window !==
"undefined" ? window : {})
7751 },{
"./support/isBuffer":
28,
"_process":
14,
"inherits":
12}],
30:[function(require,module,exports){
7752 // Base58 encoding/decoding
7753 // Originally written by Mike Hearn for BitcoinJ
7754 // Copyright (c)
2011 Google Inc
7755 // Ported to JavaScript by Stefan Thomas
7756 // Merged Buffer refactorings from base58-native by Stephen Pair
7757 // Copyright (c)
2013 BitPay Inc
7759 var ALPHABET = '
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7760 var ALPHABET_MAP = {}
7761 for(var i =
0; i < ALPHABET.length; i++) {
7762 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7766 function encode(buffer) {
7767 if (buffer.length ===
0) return ''
7769 var i, j, digits = [
0]
7770 for (i =
0; i < buffer.length; i++) {
7771 for (j =
0; j < digits.length; j++) digits[j] <<=
8
7773 digits[
0] += buffer[i]
7776 for (j =
0; j < digits.length; ++j) {
7779 carry = (digits[j] / BASE) |
0
7784 digits.push(carry % BASE)
7786 carry = (carry / BASE) |
0
7790 // deal with leading zeros
7791 for (i =
0; buffer[i] ===
0 && i < buffer.length -
1; i++) digits.push(
0)
7793 // convert digits to a string
7794 var stringOutput =
""
7795 for (var i = digits.length -
1; i
>=
0; i--) {
7796 stringOutput = stringOutput + ALPHABET[digits[i]]
7801 function decode(string) {
7802 if (string.length ===
0) return []
7804 var i, j, bytes = [
0]
7805 for (i =
0; i < string.length; i++) {
7807 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7809 for (j =
0; j < bytes.length; j++) bytes[j] *= BASE
7810 bytes[
0] += ALPHABET_MAP[c]
7813 for (j =
0; j < bytes.length; ++j) {
7816 carry = bytes[j]
>> 8
7821 bytes.push(carry &
0xff)
7827 // deal with leading zeros
7828 for (i =
0; string[i] === '
1' && i < string.length -
1; i++) bytes.push(
0)
7830 return bytes.reverse()
7838 },{}],
31:[function(require,module,exports){
7842 var base58 = require('bs58')
7843 var createHash = require('create-hash')
7845 // SHA256(SHA256(buffer))
7846 function sha256x2 (buffer) {
7847 buffer = createHash('sha256').update(buffer).digest()
7848 return createHash('sha256').update(buffer).digest()
7851 // Encode a buffer as a base58-check encoded string
7852 function encode (payload) {
7853 var checksum = sha256x2(payload).slice(
0,
4)
7855 return base58.encode(Buffer.concat([
7861 // Decode a base58-check encoded string to a buffer
7862 function decode (string) {
7863 var buffer = new Buffer(base58.decode(string))
7865 var payload = buffer.slice(
0, -
4)
7866 var checksum = buffer.slice(-
4)
7867 var newChecksum = sha256x2(payload).slice(
0,
4)
7869 for (var i =
0; i < newChecksum.length; ++i) {
7870 if (newChecksum[i] === checksum[i]) continue
7872 throw new Error('Invalid checksum')
7883 }).call(this,require("buffer").Buffer)
7884 },{"bs58":
30,"buffer":
7,"create-hash":
32}],
32:[function(require,module,exports){
7887 var inherits = require('inherits')
7888 var md5 = require('./md5')
7889 var rmd160 = require('ripemd160')
7890 var sha = require('sha.js')
7892 var Transform = require('stream').Transform
7894 function HashNoConstructor(hash) {
7895 Transform.call(this)
7901 inherits(HashNoConstructor, Transform)
7903 HashNoConstructor.prototype._transform = function (data, _, next) {
7904 this.buffers.push(data)
7909 HashNoConstructor.prototype._flush = function (next) {
7910 this.push(this.digest())
7914 HashNoConstructor.prototype.update = function (data, enc) {
7915 if (typeof data === 'string') {
7916 data = new Buffer(data, enc)
7919 this.buffers.push(data)
7923 HashNoConstructor.prototype.digest = function (enc) {
7924 var buf = Buffer.concat(this.buffers)
7925 var r = this._hash(buf)
7928 return enc ? r.toString(enc) : r
7931 function Hash(hash) {
7932 Transform.call(this)
7937 inherits(Hash, Transform)
7939 Hash.prototype._transform = function (data, enc, next) {
7940 if (enc) data = new Buffer(data, enc)
7942 this._hash.update(data)
7947 Hash.prototype._flush = function (next) {
7948 this.push(this._hash.digest())
7954 Hash.prototype.update = function (data, enc) {
7955 if (typeof data === 'string') {
7956 data = new Buffer(data, enc)
7959 this._hash.update(data)
7963 Hash.prototype.digest = function (enc) {
7964 var outData = this._hash.digest()
7966 return enc ? outData.toString(enc) : outData
7969 module.exports = function createHash (alg) {
7970 if ('md5' === alg) return new HashNoConstructor(md5)
7971 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7973 return new Hash(sha(alg))
7976 }).call(this,require("buffer").Buffer)
7977 },{"./md5":
34,"buffer":
7,"inherits":
35,"ripemd160":
36,"sha.js":
38,"stream":
26}],
33:[function(require,module,exports){
7981 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(
0);
7984 function toArray(buf, bigEndian) {
7985 if ((buf.length % intSize) !==
0) {
7986 var len = buf.length + (intSize - (buf.length % intSize));
7987 buf = Buffer.concat([buf, zeroBuffer], len);
7991 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
7992 for (var i =
0; i < buf.length; i += intSize) {
7993 arr.push(fn.call(buf, i));
7998 function toBuffer(arr, size, bigEndian) {
7999 var buf = new Buffer(size);
8000 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8001 for (var i =
0; i < arr.length; i++) {
8002 fn.call(buf, arr[i], i *
4, true);
8007 function hash(buf, fn, hashSize, bigEndian) {
8008 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8009 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8010 return toBuffer(arr, hashSize, bigEndian);
8012 exports.hash = hash;
8013 }).call(this,require("buffer").Buffer)
8014 },{"buffer":
7}],
34:[function(require,module,exports){
8017 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8018 * Digest Algorithm, as defined in RFC
1321.
8019 * Version
2.1 Copyright (C) Paul Johnston
1999 -
2002.
8020 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8021 * Distributed under the BSD License
8022 * See http://pajhome.org.uk/crypt/md5 for more info.
8025 var helpers = require('./helpers');
8028 * Calculate the MD5 of an array of little-endian words, and a bit length
8030 function core_md5(x, len)
8032 /* append padding */
8033 x[len
>> 5] |=
0x80 << ((len) %
32);
8034 x[(((len +
64)
>>> 9) <<
4) +
14] = len;
8038 var c = -
1732584194;
8041 for(var i =
0; i < x.length; i +=
16)
8048 a = md5_ff(a, b, c, d, x[i+
0],
7 , -
680876936);
8049 d = md5_ff(d, a, b, c, x[i+
1],
12, -
389564586);
8050 c = md5_ff(c, d, a, b, x[i+
2],
17,
606105819);
8051 b = md5_ff(b, c, d, a, x[i+
3],
22, -
1044525330);
8052 a = md5_ff(a, b, c, d, x[i+
4],
7 , -
176418897);
8053 d = md5_ff(d, a, b, c, x[i+
5],
12,
1200080426);
8054 c = md5_ff(c, d, a, b, x[i+
6],
17, -
1473231341);
8055 b = md5_ff(b, c, d, a, x[i+
7],
22, -
45705983);
8056 a = md5_ff(a, b, c, d, x[i+
8],
7 ,
1770035416);
8057 d = md5_ff(d, a, b, c, x[i+
9],
12, -
1958414417);
8058 c = md5_ff(c, d, a, b, x[i+
10],
17, -
42063);
8059 b = md5_ff(b, c, d, a, x[i+
11],
22, -
1990404162);
8060 a = md5_ff(a, b, c, d, x[i+
12],
7 ,
1804603682);
8061 d = md5_ff(d, a, b, c, x[i+
13],
12, -
40341101);
8062 c = md5_ff(c, d, a, b, x[i+
14],
17, -
1502002290);
8063 b = md5_ff(b, c, d, a, x[i+
15],
22,
1236535329);
8065 a = md5_gg(a, b, c, d, x[i+
1],
5 , -
165796510);
8066 d = md5_gg(d, a, b, c, x[i+
6],
9 , -
1069501632);
8067 c = md5_gg(c, d, a, b, x[i+
11],
14,
643717713);
8068 b = md5_gg(b, c, d, a, x[i+
0],
20, -
373897302);
8069 a = md5_gg(a, b, c, d, x[i+
5],
5 , -
701558691);
8070 d = md5_gg(d, a, b, c, x[i+
10],
9 ,
38016083);
8071 c = md5_gg(c, d, a, b, x[i+
15],
14, -
660478335);
8072 b = md5_gg(b, c, d, a, x[i+
4],
20, -
405537848);
8073 a = md5_gg(a, b, c, d, x[i+
9],
5 ,
568446438);
8074 d = md5_gg(d, a, b, c, x[i+
14],
9 , -
1019803690);
8075 c = md5_gg(c, d, a, b, x[i+
3],
14, -
187363961);
8076 b = md5_gg(b, c, d, a, x[i+
8],
20,
1163531501);
8077 a = md5_gg(a, b, c, d, x[i+
13],
5 , -
1444681467);
8078 d = md5_gg(d, a, b, c, x[i+
2],
9 , -
51403784);
8079 c = md5_gg(c, d, a, b, x[i+
7],
14,
1735328473);
8080 b = md5_gg(b, c, d, a, x[i+
12],
20, -
1926607734);
8082 a = md5_hh(a, b, c, d, x[i+
5],
4 , -
378558);
8083 d = md5_hh(d, a, b, c, x[i+
8],
11, -
2022574463);
8084 c = md5_hh(c, d, a, b, x[i+
11],
16,
1839030562);
8085 b = md5_hh(b, c, d, a, x[i+
14],
23, -
35309556);
8086 a = md5_hh(a, b, c, d, x[i+
1],
4 , -
1530992060);
8087 d = md5_hh(d, a, b, c, x[i+
4],
11,
1272893353);
8088 c = md5_hh(c, d, a, b, x[i+
7],
16, -
155497632);
8089 b = md5_hh(b, c, d, a, x[i+
10],
23, -
1094730640);
8090 a = md5_hh(a, b, c, d, x[i+
13],
4 ,
681279174);
8091 d = md5_hh(d, a, b, c, x[i+
0],
11, -
358537222);
8092 c = md5_hh(c, d, a, b, x[i+
3],
16, -
722521979);
8093 b = md5_hh(b, c, d, a, x[i+
6],
23,
76029189);
8094 a = md5_hh(a, b, c, d, x[i+
9],
4 , -
640364487);
8095 d = md5_hh(d, a, b, c, x[i+
12],
11, -
421815835);
8096 c = md5_hh(c, d, a, b, x[i+
15],
16,
530742520);
8097 b = md5_hh(b, c, d, a, x[i+
2],
23, -
995338651);
8099 a = md5_ii(a, b, c, d, x[i+
0],
6 , -
198630844);
8100 d = md5_ii(d, a, b, c, x[i+
7],
10,
1126891415);
8101 c = md5_ii(c, d, a, b, x[i+
14],
15, -
1416354905);
8102 b = md5_ii(b, c, d, a, x[i+
5],
21, -
57434055);
8103 a = md5_ii(a, b, c, d, x[i+
12],
6 ,
1700485571);
8104 d = md5_ii(d, a, b, c, x[i+
3],
10, -
1894986606);
8105 c = md5_ii(c, d, a, b, x[i+
10],
15, -
1051523);
8106 b = md5_ii(b, c, d, a, x[i+
1],
21, -
2054922799);
8107 a = md5_ii(a, b, c, d, x[i+
8],
6 ,
1873313359);
8108 d = md5_ii(d, a, b, c, x[i+
15],
10, -
30611744);
8109 c = md5_ii(c, d, a, b, x[i+
6],
15, -
1560198380);
8110 b = md5_ii(b, c, d, a, x[i+
13],
21,
1309151649);
8111 a = md5_ii(a, b, c, d, x[i+
4],
6 , -
145523070);
8112 d = md5_ii(d, a, b, c, x[i+
11],
10, -
1120210379);
8113 c = md5_ii(c, d, a, b, x[i+
2],
15,
718787259);
8114 b = md5_ii(b, c, d, a, x[i+
9],
21, -
343485551);
8116 a = safe_add(a, olda);
8117 b = safe_add(b, oldb);
8118 c = safe_add(c, oldc);
8119 d = safe_add(d, oldd);
8121 return Array(a, b, c, d);
8126 * These functions implement the four basic operations the algorithm uses.
8128 function md5_cmn(q, a, b, x, s, t)
8130 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8132 function md5_ff(a, b, c, d, x, s, t)
8134 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8136 function md5_gg(a, b, c, d, x, s, t)
8138 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8140 function md5_hh(a, b, c, d, x, s, t)
8142 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8144 function md5_ii(a, b, c, d, x, s, t)
8146 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8150 * Add integers, wrapping at
2^
32. This uses
16-bit operations internally
8151 * to work around bugs in some JS interpreters.
8153 function safe_add(x, y)
8155 var lsw = (x &
0xFFFF) + (y &
0xFFFF);
8156 var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
8157 return (msw <<
16) | (lsw &
0xFFFF);
8161 * Bitwise rotate a
32-bit number to the left.
8163 function bit_rol(num, cnt)
8165 return (num << cnt) | (num
>>> (
32 - cnt));
8168 module.exports = function md5(buf) {
8169 return helpers.hash(buf, core_md5,
16);
8171 },{"./helpers":
33}],
35:[function(require,module,exports){
8172 arguments[
4][
12][
0].apply(exports,arguments)
8173 },{"dup":
12}],
36:[function(require,module,exports){
8177 code.google.com/p/crypto-js
8178 (c)
2009-
2013 by Jeff Mott. All rights reserved.
8179 code.google.com/p/crypto-js/wiki/License
8182 (c)
2012 by Cédric Mesnil. All rights reserved.
8184 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8186 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8187 - 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.
8189 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.
8194 0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
8195 7,
4,
13,
1,
10,
6,
15,
3,
12,
0,
9,
5,
2,
14,
11,
8,
8196 3,
10,
14,
4,
9,
15,
8,
1,
2,
7,
0,
6,
13,
11,
5,
12,
8197 1,
9,
11,
10,
0,
8,
12,
4,
13,
3,
7,
15,
14,
5,
6,
2,
8198 4,
0,
5,
9,
7,
12,
2,
10,
14,
1,
3,
8,
11,
6,
15,
13
8202 5,
14,
7,
0,
9,
2,
11,
4,
13,
6,
15,
8,
1,
10,
3,
12,
8203 6,
11,
3,
7,
0,
13,
5,
10,
14,
15,
8,
12,
4,
9,
1,
2,
8204 15,
5,
1,
3,
7,
14,
6,
9,
11,
8,
12,
2,
10,
0,
4,
13,
8205 8,
6,
4,
1,
3,
11,
15,
0,
5,
12,
2,
13,
9,
7,
10,
14,
8206 12,
15,
10,
4,
1,
5,
8,
7,
6,
2,
13,
14,
0,
3,
9,
11
8210 11,
14,
15,
12,
5,
8,
7,
9,
11,
13,
14,
15,
6,
7,
9,
8,
8211 7,
6,
8,
13,
11,
9,
7,
15,
7,
12,
15,
9,
11,
7,
13,
12,
8212 11,
13,
6,
7,
14,
9,
13,
15,
14,
8,
13,
6,
5,
12,
7,
5,
8213 11,
12,
14,
15,
14,
15,
9,
8,
9,
14,
5,
6,
8,
6,
5,
12,
8214 9,
15,
5,
11,
6,
8,
13,
12,
5,
12,
13,
14,
11,
8,
5,
6
8218 8,
9,
9,
11,
13,
15,
15,
5,
7,
7,
8,
11,
14,
14,
12,
6,
8219 9,
13,
15,
7,
12,
8,
9,
11,
7,
7,
12,
7,
6,
15,
13,
11,
8220 9,
7,
15,
11,
8,
6,
6,
14,
12,
13,
5,
14,
13,
13,
7,
5,
8221 15,
5,
8,
11,
14,
14,
6,
14,
6,
9,
12,
9,
12,
5,
15,
8,
8222 8,
5,
12,
9,
12,
5,
14,
6,
8,
13,
6,
5,
15,
13,
11,
11
8225 var hl = [
0x00000000,
0x5A827999,
0x6ED9EBA1,
0x8F1BBCDC,
0xA953FD4E]
8226 var hr = [
0x50A28BE6,
0x5C4DD124,
0x6D703EF3,
0x7A6D76E9,
0x00000000]
8228 function bytesToWords (bytes) {
8230 for (var i =
0, b =
0; i < bytes.length; i++, b +=
8) {
8231 words[b
>>> 5] |= bytes[i] << (
24 - b %
32)
8236 function wordsToBytes (words) {
8238 for (var b =
0; b < words.length *
32; b +=
8) {
8239 bytes.push((words[b
>>> 5]
>>> (
24 - b %
32)) &
0xFF)
8244 function processBlock (H, M, offset) {
8246 for (var i =
0; i <
16; i++) {
8247 var offset_i = offset + i
8248 var M_offset_i = M[offset_i]
8252 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
8253 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
8257 // Working variables
8258 var al, bl, cl, dl, el
8259 var ar, br, cr, dr, er
8269 for (i =
0; i <
80; i +=
1) {
8270 t = (al + M[offset + zl[i]]) |
0
8272 t += f1(bl, cl, dl) + hl[
0]
8273 } else if (i <
32) {
8274 t += f2(bl, cl, dl) + hl[
1]
8275 } else if (i <
48) {
8276 t += f3(bl, cl, dl) + hl[
2]
8277 } else if (i <
64) {
8278 t += f4(bl, cl, dl) + hl[
3]
8279 } else {// if (i
<80) {
8280 t += f5(bl, cl, dl) + hl[
4]
8291 t = (ar + M[offset + zr[i]]) |
0
8293 t += f5(br, cr, dr) + hr[
0]
8294 } else if (i <
32) {
8295 t += f4(br, cr, dr) + hr[
1]
8296 } else if (i <
48) {
8297 t += f3(br, cr, dr) + hr[
2]
8298 } else if (i <
64) {
8299 t += f2(br, cr, dr) + hr[
3]
8300 } else {// if (i
<80) {
8301 t += f1(br, cr, dr) + hr[
4]
8314 // intermediate hash value
8315 t = (H[
1] + cl + dr) |
0
8316 H[
1] = (H[
2] + dl + er) |
0
8317 H[
2] = (H[
3] + el + ar) |
0
8318 H[
3] = (H[
4] + al + br) |
0
8319 H[
4] = (H[
0] + bl + cr) |
0
8323 function f1 (x, y, z) {
8324 return ((x) ^ (y) ^ (z))
8327 function f2 (x, y, z) {
8328 return (((x) & (y)) | ((~x) & (z)))
8331 function f3 (x, y, z) {
8332 return (((x) | (~(y))) ^ (z))
8335 function f4 (x, y, z) {
8336 return (((x) & (z)) | ((y) & (~(z))))
8339 function f5 (x, y, z) {
8340 return ((x) ^ ((y) | (~(z))))
8343 function rotl (x, n) {
8344 return (x << n) | (x
>>> (
32 - n))
8347 function ripemd160 (message) {
8348 var H = [
0x67452301,
0xEFCDAB89,
0x98BADCFE,
0x10325476,
0xC3D2E1F0]
8350 if (typeof message === 'string') {
8351 message = new Buffer(message, 'utf8')
8354 var m = bytesToWords(message)
8356 var nBitsLeft = message.length *
8
8357 var nBitsTotal = message.length *
8
8360 m[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32)
8361 m[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
8362 (((nBitsTotal <<
8) | (nBitsTotal
>>> 24)) &
0x00ff00ff) |
8363 (((nBitsTotal <<
24) | (nBitsTotal
>>> 8)) &
0xff00ff00)
8366 for (var i =
0; i < m.length; i +=
16) {
8367 processBlock(H, m, i)
8371 for (i =
0; i <
5; i++) {
8376 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
8377 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00)
8380 var digestbytes = wordsToBytes(H)
8381 return new Buffer(digestbytes)
8384 module.exports = ripemd160
8386 }).call(this,require(
"buffer").Buffer)
8387 },{
"buffer":
7}],
37:[function(require,module,exports){
8389 // prototype class for hash functions
8390 function Hash (blockSize, finalSize) {
8391 this._block = new Buffer(blockSize)
8392 this._finalSize = finalSize
8393 this._blockSize = blockSize
8398 Hash.prototype.update = function (data, enc) {
8399 if (typeof data === 'string') {
8401 data = new Buffer(data, enc)
8404 var l = this._len += data.length
8405 var s = this._s ||
0
8407 var buffer = this._block
8410 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8413 for (var i =
0; i < ch; i++) {
8414 buffer[(s % this._blockSize) + i] = data[i + f]
8420 if ((s % this._blockSize) ===
0) {
8421 this._update(buffer)
8429 Hash.prototype.digest = function (enc) {
8430 // Suppose the length of the message M, in bits, is l
8431 var l = this._len *
8
8433 // Append the bit
1 to the end of the message
8434 this._block[this._len % this._blockSize] =
0x80
8436 // and then k zero bits, where k is the smallest non-negative solution to the equation (l +
1 + k) === finalSize mod blockSize
8437 this._block.fill(
0, this._len % this._blockSize +
1)
8439 if (l % (this._blockSize *
8)
>= this._finalSize *
8) {
8440 this._update(this._block)
8444 // to this append the block which is equal to the number l written in binary
8445 // TODO: handle case where l is
> Math.pow(
2,
29)
8446 this._block.writeInt32BE(l, this._blockSize -
4)
8448 var hash = this._update(this._block) || this._hash()
8450 return enc ? hash.toString(enc) : hash
8453 Hash.prototype._update = function () {
8454 throw new Error('_update must be implemented by subclass')
8457 module.exports = Hash
8459 }).call(this,require("buffer").Buffer)
8460 },{"buffer":
7}],
38:[function(require,module,exports){
8461 var exports = module.exports = function SHA (algorithm) {
8462 algorithm = algorithm.toLowerCase()
8464 var Algorithm = exports[algorithm]
8465 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8467 return new Algorithm()
8470 exports.sha = require('./sha')
8471 exports.sha1 = require('./sha1')
8472 exports.sha224 = require('./sha224')
8473 exports.sha256 = require('./sha256')
8474 exports.sha384 = require('./sha384')
8475 exports.sha512 = require('./sha512')
8477 },{"./sha":
39,"./sha1":
40,"./sha224":
41,"./sha256":
42,"./sha384":
43,"./sha512":
44}],
39:[function(require,module,exports){
8480 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
0, as defined
8482 * This source code is derived from sha1.js of the same repository.
8483 * The difference between SHA-
0 and SHA-
1 is just a bitwise rotate left
8484 * operation was added.
8487 var inherits = require('inherits')
8488 var Hash = require('./hash')
8490 var W = new Array(
80)
8496 Hash.call(this,
64,
56)
8501 Sha.prototype.init = function () {
8502 this._a =
0x67452301 |
0
8503 this._b =
0xefcdab89 |
0
8504 this._c =
0x98badcfe |
0
8505 this._d =
0x10325476 |
0
8506 this._e =
0xc3d2e1f0 |
0
8512 * Bitwise rotate a
32-bit number to the left.
8514 function rol (num, cnt) {
8515 return (num << cnt) | (num
>>> (
32 - cnt))
8518 Sha.prototype._update = function (M) {
8530 * SHA-
1 has a bitwise rotate left operation. But, SHA is not
8531 * function calcW() { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8533 function calcW () { return W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16] }
8534 function loop (w, f) {
8537 var t = rol(a,
5) + f + e + w + k
8548 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8549 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8551 while (j <
40) loop(calcW(), b ^ c ^ d)
8553 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8555 while (j <
80) loop(calcW(), b ^ c ^ d)
8557 this._a = (a + this._a) |
0
8558 this._b = (b + this._b) |
0
8559 this._c = (c + this._c) |
0
8560 this._d = (d + this._d) |
0
8561 this._e = (e + this._e) |
0
8564 Sha.prototype._hash = function () {
8565 var H = new Buffer(
20)
8567 H.writeInt32BE(this._a |
0,
0)
8568 H.writeInt32BE(this._b |
0,
4)
8569 H.writeInt32BE(this._c |
0,
8)
8570 H.writeInt32BE(this._d |
0,
12)
8571 H.writeInt32BE(this._e |
0,
16)
8576 module.exports = Sha
8579 }).call(this,require("buffer").Buffer)
8580 },{"./hash":
37,"buffer":
7,"inherits":
35}],
40:[function(require,module,exports){
8583 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
1, as defined
8585 * Version
2.1a Copyright Paul Johnston
2000 -
2002.
8586 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8587 * Distributed under the BSD License
8588 * See http://pajhome.org.uk/crypt/md5 for details.
8591 var inherits = require('inherits')
8592 var Hash = require('./hash')
8594 var W = new Array(
80)
8600 Hash.call(this,
64,
56)
8603 inherits(Sha1, Hash)
8605 Sha1.prototype.init = function () {
8606 this._a =
0x67452301 |
0
8607 this._b =
0xefcdab89 |
0
8608 this._c =
0x98badcfe |
0
8609 this._d =
0x10325476 |
0
8610 this._e =
0xc3d2e1f0 |
0
8616 * Bitwise rotate a
32-bit number to the left.
8618 function rol (num, cnt) {
8619 return (num << cnt) | (num
>>> (
32 - cnt))
8622 Sha1.prototype._update = function (M) {
8633 function calcW () { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8634 function loop (w, f) {
8637 var t = rol(a,
5) + f + e + w + k
8648 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8649 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8651 while (j <
40) loop(calcW(), b ^ c ^ d)
8653 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8655 while (j <
80) loop(calcW(), b ^ c ^ d)
8657 this._a = (a + this._a) |
0
8658 this._b = (b + this._b) |
0
8659 this._c = (c + this._c) |
0
8660 this._d = (d + this._d) |
0
8661 this._e = (e + this._e) |
0
8664 Sha1.prototype._hash = function () {
8665 var H = new Buffer(
20)
8667 H.writeInt32BE(this._a |
0,
0)
8668 H.writeInt32BE(this._b |
0,
4)
8669 H.writeInt32BE(this._c |
0,
8)
8670 H.writeInt32BE(this._d |
0,
12)
8671 H.writeInt32BE(this._e |
0,
16)
8676 module.exports = Sha1
8678 }).call(this,require("buffer").Buffer)
8679 },{"./hash":
37,"buffer":
7,"inherits":
35}],
41:[function(require,module,exports){
8682 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8684 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8685 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8689 var inherits = require('inherits')
8690 var Sha256 = require('./sha256')
8691 var Hash = require('./hash')
8693 var W = new Array(
64)
8695 function Sha224 () {
8698 this._w = W // new Array(
64)
8700 Hash.call(this,
64,
56)
8703 inherits(Sha224, Sha256)
8705 Sha224.prototype.init = function () {
8706 this._a =
0xc1059ed8 |
0
8707 this._b =
0x367cd507 |
0
8708 this._c =
0x3070dd17 |
0
8709 this._d =
0xf70e5939 |
0
8710 this._e =
0xffc00b31 |
0
8711 this._f =
0x68581511 |
0
8712 this._g =
0x64f98fa7 |
0
8713 this._h =
0xbefa4fa4 |
0
8718 Sha224.prototype._hash = function () {
8719 var H = new Buffer(
28)
8721 H.writeInt32BE(this._a,
0)
8722 H.writeInt32BE(this._b,
4)
8723 H.writeInt32BE(this._c,
8)
8724 H.writeInt32BE(this._d,
12)
8725 H.writeInt32BE(this._e,
16)
8726 H.writeInt32BE(this._f,
20)
8727 H.writeInt32BE(this._g,
24)
8732 module.exports = Sha224
8734 }).call(this,require("buffer").Buffer)
8735 },{"./hash":
37,"./sha256":
42,"buffer":
7,"inherits":
35}],
42:[function(require,module,exports){
8738 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8740 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8741 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8745 var inherits = require('inherits')
8746 var Hash = require('./hash')
8749 0x428A2F98,
0x71374491,
0xB5C0FBCF,
0xE9B5DBA5,
8750 0x3956C25B,
0x59F111F1,
0x923F82A4,
0xAB1C5ED5,
8751 0xD807AA98,
0x12835B01,
0x243185BE,
0x550C7DC3,
8752 0x72BE5D74,
0x80DEB1FE,
0x9BDC06A7,
0xC19BF174,
8753 0xE49B69C1,
0xEFBE4786,
0x0FC19DC6,
0x240CA1CC,
8754 0x2DE92C6F,
0x4A7484AA,
0x5CB0A9DC,
0x76F988DA,
8755 0x983E5152,
0xA831C66D,
0xB00327C8,
0xBF597FC7,
8756 0xC6E00BF3,
0xD5A79147,
0x06CA6351,
0x14292967,
8757 0x27B70A85,
0x2E1B2138,
0x4D2C6DFC,
0x53380D13,
8758 0x650A7354,
0x766A0ABB,
0x81C2C92E,
0x92722C85,
8759 0xA2BFE8A1,
0xA81A664B,
0xC24B8B70,
0xC76C51A3,
8760 0xD192E819,
0xD6990624,
0xF40E3585,
0x106AA070,
8761 0x19A4C116,
0x1E376C08,
0x2748774C,
0x34B0BCB5,
8762 0x391C0CB3,
0x4ED8AA4A,
0x5B9CCA4F,
0x682E6FF3,
8763 0x748F82EE,
0x78A5636F,
0x84C87814,
0x8CC70208,
8764 0x90BEFFFA,
0xA4506CEB,
0xBEF9A3F7,
0xC67178F2
8767 var W = new Array(
64)
8769 function Sha256 () {
8772 this._w = W // new Array(
64)
8774 Hash.call(this,
64,
56)
8777 inherits(Sha256, Hash)
8779 Sha256.prototype.init = function () {
8780 this._a =
0x6a09e667 |
0
8781 this._b =
0xbb67ae85 |
0
8782 this._c =
0x3c6ef372 |
0
8783 this._d =
0xa54ff53a |
0
8784 this._e =
0x510e527f |
0
8785 this._f =
0x9b05688c |
0
8786 this._g =
0x1f83d9ab |
0
8787 this._h =
0x5be0cd19 |
0
8793 return (X
>>> n) | (X << (
32 - n))
8800 function Ch (x, y, z) {
8801 return ((x & y) ^ ((~x) & z))
8804 function Maj (x, y, z) {
8805 return ((x & y) ^ (x & z) ^ (y & z))
8808 function Sigma0256 (x) {
8809 return (S(x,
2) ^ S(x,
13) ^ S(x,
22))
8812 function Sigma1256 (x) {
8813 return (S(x,
6) ^ S(x,
11) ^ S(x,
25))
8816 function Gamma0256 (x) {
8817 return (S(x,
7) ^ S(x,
18) ^ R(x,
3))
8820 function Gamma1256 (x) {
8821 return (S(x,
17) ^ S(x,
19) ^ R(x,
10))
8824 Sha256.prototype._update = function (M) {
8838 function calcW () { return Gamma1256(W[j -
2]) + W[j -
7] + Gamma0256(W[j -
15]) + W[j -
16] }
8842 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8843 var T2 = Sigma0256(a) + Maj(a, b, c)
8857 while (j <
16) loop(M.readInt32BE(j *
4))
8858 while (j <
64) loop(calcW())
8860 this._a = (a + this._a) |
0
8861 this._b = (b + this._b) |
0
8862 this._c = (c + this._c) |
0
8863 this._d = (d + this._d) |
0
8864 this._e = (e + this._e) |
0
8865 this._f = (f + this._f) |
0
8866 this._g = (g + this._g) |
0
8867 this._h = (h + this._h) |
0
8870 Sha256.prototype._hash = function () {
8871 var H = new Buffer(
32)
8873 H.writeInt32BE(this._a,
0)
8874 H.writeInt32BE(this._b,
4)
8875 H.writeInt32BE(this._c,
8)
8876 H.writeInt32BE(this._d,
12)
8877 H.writeInt32BE(this._e,
16)
8878 H.writeInt32BE(this._f,
20)
8879 H.writeInt32BE(this._g,
24)
8880 H.writeInt32BE(this._h,
28)
8885 module.exports = Sha256
8887 }).call(this,require("buffer").Buffer)
8888 },{"./hash":
37,"buffer":
7,"inherits":
35}],
43:[function(require,module,exports){
8890 var inherits = require('inherits')
8891 var SHA512 = require('./sha512')
8892 var Hash = require('./hash')
8894 var W = new Array(
160)
8896 function Sha384 () {
8900 Hash.call(this,
128,
112)
8903 inherits(Sha384, SHA512)
8905 Sha384.prototype.init = function () {
8906 this._a =
0xcbbb9d5d |
0
8907 this._b =
0x629a292a |
0
8908 this._c =
0x9159015a |
0
8909 this._d =
0x152fecd8 |
0
8910 this._e =
0x67332667 |
0
8911 this._f =
0x8eb44a87 |
0
8912 this._g =
0xdb0c2e0d |
0
8913 this._h =
0x47b5481d |
0
8915 this._al =
0xc1059ed8 |
0
8916 this._bl =
0x367cd507 |
0
8917 this._cl =
0x3070dd17 |
0
8918 this._dl =
0xf70e5939 |
0
8919 this._el =
0xffc00b31 |
0
8920 this._fl =
0x68581511 |
0
8921 this._gl =
0x64f98fa7 |
0
8922 this._hl =
0xbefa4fa4 |
0
8927 Sha384.prototype._hash = function () {
8928 var H = new Buffer(
48)
8930 function writeInt64BE (h, l, offset) {
8931 H.writeInt32BE(h, offset)
8932 H.writeInt32BE(l, offset +
4)
8935 writeInt64BE(this._a, this._al,
0)
8936 writeInt64BE(this._b, this._bl,
8)
8937 writeInt64BE(this._c, this._cl,
16)
8938 writeInt64BE(this._d, this._dl,
24)
8939 writeInt64BE(this._e, this._el,
32)
8940 writeInt64BE(this._f, this._fl,
40)
8945 module.exports = Sha384
8947 }).call(this,require("buffer").Buffer)
8948 },{"./hash":
37,"./sha512":
44,"buffer":
7,"inherits":
35}],
44:[function(require,module,exports){
8950 var inherits = require('inherits')
8951 var Hash = require('./hash')
8954 0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
8955 0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
8956 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
8957 0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
8958 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
8959 0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
8960 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
8961 0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
8962 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
8963 0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
8964 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
8965 0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
8966 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
8967 0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
8968 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
8969 0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
8970 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
8971 0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
8972 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
8973 0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
8974 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
8975 0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
8976 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
8977 0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
8978 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
8979 0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
8980 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
8981 0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
8982 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
8983 0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
8984 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
8985 0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
8986 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
8987 0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
8988 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
8989 0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
8990 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
8991 0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
8992 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
8993 0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817
8996 var W = new Array(
160)
8998 function Sha512 () {
9002 Hash.call(this,
128,
112)
9005 inherits(Sha512, Hash)
9007 Sha512.prototype.init = function () {
9008 this._a =
0x6a09e667 |
0
9009 this._b =
0xbb67ae85 |
0
9010 this._c =
0x3c6ef372 |
0
9011 this._d =
0xa54ff53a |
0
9012 this._e =
0x510e527f |
0
9013 this._f =
0x9b05688c |
0
9014 this._g =
0x1f83d9ab |
0
9015 this._h =
0x5be0cd19 |
0
9017 this._al =
0xf3bcc908 |
0
9018 this._bl =
0x84caa73b |
0
9019 this._cl =
0xfe94f82b |
0
9020 this._dl =
0x5f1d36f1 |
0
9021 this._el =
0xade682d1 |
0
9022 this._fl =
0x2b3e6c1f |
0
9023 this._gl =
0xfb41bd6b |
0
9024 this._hl =
0x137e2179 |
0
9029 function S (X, Xl, n) {
9030 return (X
>>> n) | (Xl << (
32 - n))
9033 function Ch (x, y, z) {
9034 return ((x & y) ^ ((~x) & z))
9037 function Maj (x, y, z) {
9038 return ((x & y) ^ (x & z) ^ (y & z))
9041 Sha512.prototype._update = function (M) {
9053 var al = this._al |
0
9054 var bl = this._bl |
0
9055 var cl = this._cl |
0
9056 var dl = this._dl |
0
9057 var el = this._el |
0
9058 var fl = this._fl |
0
9059 var gl = this._gl |
0
9060 var hl = this._hl |
0
9065 var x = W[j -
15 *
2]
9066 var xl = W[j -
15 *
2 +
1]
9067 var gamma0 = S(x, xl,
1) ^ S(x, xl,
8) ^ (x
>>> 7)
9068 var gamma0l = S(xl, x,
1) ^ S(xl, x,
8) ^ S(xl, x,
7)
9071 xl = W[j -
2 *
2 +
1]
9072 var gamma1 = S(x, xl,
19) ^ S(xl, x,
29) ^ (x
>>> 6)
9073 var gamma1l = S(xl, x,
19) ^ S(x, xl,
29) ^ S(xl, x,
6)
9075 // W[i] = gamma0 + W[i -
7] + gamma1 + W[i -
16]
9076 var Wi7 = W[j -
7 *
2]
9077 var Wi7l = W[j -
7 *
2 +
1]
9079 var Wi16 = W[j -
16 *
2]
9080 var Wi16l = W[j -
16 *
2 +
1]
9082 Wil = gamma0l + Wi7l
9083 Wi = gamma0 + Wi7 + ((Wil
>>> 0) < (gamma0l
>>> 0) ?
1 :
0)
9085 Wi = Wi + gamma1 + ((Wil
>>> 0) < (gamma1l
>>> 0) ?
1 :
0)
9087 Wi = Wi + Wi16 + ((Wil
>>> 0) < (Wi16l
>>> 0) ?
1 :
0)
9094 var maj = Maj(a, b, c)
9095 var majl = Maj(al, bl, cl)
9097 var sigma0h = S(a, al,
28) ^ S(al, a,
2) ^ S(al, a,
7)
9098 var sigma0l = S(al, a,
28) ^ S(a, al,
2) ^ S(a, al,
7)
9099 var sigma1h = S(e, el,
14) ^ S(e, el,
18) ^ S(el, e,
9)
9100 var sigma1l = S(el, e,
14) ^ S(el, e,
18) ^ S(e, el,
9)
9102 // t1 = h + sigma1 + ch + K[i] + W[i]
9106 var ch = Ch(e, f, g)
9107 var chl = Ch(el, fl, gl)
9109 var t1l = hl + sigma1l
9110 var t1 = h + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0)
9112 t1 = t1 + ch + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0)
9114 t1 = t1 + Ki + ((t1l
>>> 0) < (Kil
>>> 0) ?
1 :
0)
9116 t1 = t1 + Wi + ((t1l
>>> 0) < (Wil
>>> 0) ?
1 :
0)
9118 // t2 = sigma0 + maj
9119 var t2l = sigma0l + majl
9120 var t2 = sigma0h + maj + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0)
9129 e = (d + t1 + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9136 al = (t1l + t2l) |
0
9137 a = (t1 + t2 + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0
9144 Wi = M.readInt32BE(j *
4)
9145 Wil = M.readInt32BE(j *
4 +
4)
9155 this._al = (this._al + al) |
0
9156 this._bl = (this._bl + bl) |
0
9157 this._cl = (this._cl + cl) |
0
9158 this._dl = (this._dl + dl) |
0
9159 this._el = (this._el + el) |
0
9160 this._fl = (this._fl + fl) |
0
9161 this._gl = (this._gl + gl) |
0
9162 this._hl = (this._hl + hl) |
0
9164 this._a = (this._a + a + ((this._al
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0
9165 this._b = (this._b + b + ((this._bl
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0
9166 this._c = (this._c + c + ((this._cl
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0
9167 this._d = (this._d + d + ((this._dl
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9168 this._e = (this._e + e + ((this._el
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0
9169 this._f = (this._f + f + ((this._fl
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0
9170 this._g = (this._g + g + ((this._gl
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0
9171 this._h = (this._h + h + ((this._hl
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0
9174 Sha512.prototype._hash = function () {
9175 var H = new Buffer(
64)
9177 function writeInt64BE (h, l, offset) {
9178 H.writeInt32BE(h, offset)
9179 H.writeInt32BE(l, offset +
4)
9182 writeInt64BE(this._a, this._al,
0)
9183 writeInt64BE(this._b, this._bl,
8)
9184 writeInt64BE(this._c, this._cl,
16)
9185 writeInt64BE(this._d, this._dl,
24)
9186 writeInt64BE(this._e, this._el,
32)
9187 writeInt64BE(this._f, this._fl,
40)
9188 writeInt64BE(this._g, this._gl,
48)
9189 writeInt64BE(this._h, this._hl,
56)
9194 module.exports = Sha512
9196 }).call(this,require(
"buffer").Buffer)
9197 },{
"./hash":
37,
"buffer":
7,
"inherits":
35}],
45:[function(require,module,exports){
9200 var createHash = require('create-hash/browser');
9201 var inherits = require('inherits')
9203 var Transform = require('stream').Transform
9205 var ZEROS = new Buffer(
128)
9208 function Hmac(alg, key) {
9209 Transform.call(this)
9211 if (typeof key === 'string') {
9212 key = new Buffer(key)
9215 var blocksize = (alg === 'sha512' || alg === 'sha384') ?
128 :
64
9220 if (key.length
> blocksize) {
9221 key = createHash(alg).update(key).digest()
9223 } else if (key.length < blocksize) {
9224 key = Buffer.concat([key, ZEROS], blocksize)
9227 var ipad = this._ipad = new Buffer(blocksize)
9228 var opad = this._opad = new Buffer(blocksize)
9230 for (var i =
0; i < blocksize; i++) {
9231 ipad[i] = key[i] ^
0x36
9232 opad[i] = key[i] ^
0x5C
9235 this._hash = createHash(alg).update(ipad)
9238 inherits(Hmac, Transform)
9240 Hmac.prototype.update = function (data, enc) {
9241 this._hash.update(data, enc)
9246 Hmac.prototype._transform = function (data, _, next) {
9247 this._hash.update(data)
9252 Hmac.prototype._flush = function (next) {
9253 this.push(this.digest())
9258 Hmac.prototype.digest = function (enc) {
9259 var h = this._hash.digest()
9261 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9264 module.exports = function createHmac(alg, key) {
9265 return new Hmac(alg, key)
9268 }).call(this,require("buffer").Buffer)
9269 },{"buffer":
7,"create-hash/browser":
32,"inherits":
46,"stream":
26}],
46:[function(require,module,exports){
9270 arguments[
4][
12][
0].apply(exports,arguments)
9271 },{"dup":
12}],
47:[function(require,module,exports){
9272 var assert = require('assert')
9273 var BigInteger = require('bigi')
9275 var Point = require('./point')
9277 function Curve(p, a, b, Gx, Gy, n, h) {
9281 this.G = Point.fromAffine(this, Gx, Gy)
9285 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9288 this.pOverFour = p.add(BigInteger.ONE).shiftRight(
2)
9291 Curve.prototype.pointFromX = function(isOdd, x) {
9292 var alpha = x.pow(
3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9293 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9296 if (beta.isEven() ^ !isOdd) {
9297 y = this.p.subtract(y) // -y % p
9300 return Point.fromAffine(this, x, y)
9303 Curve.prototype.isInfinity = function(Q) {
9304 if (Q === this.infinity) return true
9306 return Q.z.signum() ===
0 && Q.y.signum() !==
0
9309 Curve.prototype.isOnCurve = function(Q) {
9310 if (this.isInfinity(Q)) return true
9318 // Check that xQ and yQ are integers in the interval [
0, p -
1]
9319 if (x.signum() <
0 || x.compareTo(p)
>=
0) return false
9320 if (y.signum() <
0 || y.compareTo(p)
>=
0) return false
9322 // and check that y^
2 = x^
3 + ax + b (mod p)
9323 var lhs = y.square().mod(p)
9324 var rhs = x.pow(
3).add(a.multiply(x)).add(b).mod(p)
9325 return lhs.equals(rhs)
9329 * Validate an elliptic curve point.
9331 * See SEC
1, section
3.2.2.1: Elliptic Curve Public Key Validation Primitive
9333 Curve.prototype.validate = function(Q) {
9335 assert(!this.isInfinity(Q), 'Point is at infinity')
9336 assert(this.isOnCurve(Q), 'Point is not on the curve')
9338 // Check nQ = O (where Q is a scalar multiple of G)
9339 var nQ = Q.multiply(this.n)
9340 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9345 module.exports = Curve
9347 },{"./point":
51,"assert":
5,"bigi":
3}],
48:[function(require,module,exports){
9350 "p": "fffffffdffffffffffffffffffffffff",
9351 "a": "fffffffdfffffffffffffffffffffffc",
9352 "b": "e87579c11079f43dd824993c2cee5ed3",
9353 "n": "fffffffe0000000075a30d1b9038a115",
9355 "Gx": "
161ff7528b899b2d0c28607ca52c5b86",
9356 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9359 "p": "fffffffffffffffffffffffffffffffeffffac73",
9362 "n": "
0100000000000000000001b8fa16dfab9aca16b6b3",
9364 "Gx": "
3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9365 "Gy": "
938cf935318fdced6bc28286531733c3f03c4fee"
9368 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9369 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9370 "b": "
1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9371 "n": "
0100000000000000000001f4c8f927aed3ca752257",
9373 "Gx": "
4a96b5688ef573284664698968c38bb913cbfc82",
9374 "Gy": "
23a628553168947d59dcc912042351377ac5fb32"
9377 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9380 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9382 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9383 "Gy": "
9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9386 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9387 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9388 "b": "
64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9389 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9391 "Gx": "
188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9392 "Gy": "
07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9395 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9398 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9400 "Gx": "
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9401 "Gy": "
483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9404 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9405 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9406 "b": "
5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9407 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9409 "Gx": "
6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9410 "Gy": "
4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9414 },{}],
49:[function(require,module,exports){
9415 var Point = require('./point')
9416 var Curve = require('./curve')
9418 var getCurveByName = require('./names')
9423 getCurveByName: getCurveByName
9426 },{"./curve":
47,"./names":
50,"./point":
51}],
50:[function(require,module,exports){
9427 var BigInteger = require('bigi')
9429 var curves = require('./curves')
9430 var Curve = require('./curve')
9432 function getCurveByName(name) {
9433 var curve = curves[name]
9434 if (!curve) return null
9436 var p = new BigInteger(curve.p,
16)
9437 var a = new BigInteger(curve.a,
16)
9438 var b = new BigInteger(curve.b,
16)
9439 var n = new BigInteger(curve.n,
16)
9440 var h = new BigInteger(curve.h,
16)
9441 var Gx = new BigInteger(curve.Gx,
16)
9442 var Gy = new BigInteger(curve.Gy,
16)
9444 return new Curve(p, a, b, Gx, Gy, n, h)
9447 module.exports = getCurveByName
9449 },{"./curve":
47,"./curves":
48,"bigi":
3}],
51:[function(require,module,exports){
9451 var assert = require('assert')
9452 var BigInteger = require('bigi')
9454 var THREE = BigInteger.valueOf(
3)
9456 function Point(curve, x, y, z) {
9457 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9465 this.compressed = true
9468 Object.defineProperty(Point.prototype, 'zInv', {
9470 if (this._zInv === null) {
9471 this._zInv = this.z.modInverse(this.curve.p)
9478 Object.defineProperty(Point.prototype, 'affineX', {
9480 return this.x.multiply(this.zInv).mod(this.curve.p)
9484 Object.defineProperty(Point.prototype, 'affineY', {
9486 return this.y.multiply(this.zInv).mod(this.curve.p)
9490 Point.fromAffine = function(curve, x, y) {
9491 return new Point(curve, x, y, BigInteger.ONE)
9494 Point.prototype.equals = function(other) {
9495 if (other === this) return true
9496 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9497 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9499 // u = Y2 * Z1 - Y1 * Z2
9500 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9502 if (u.signum() !==
0) return false
9504 // v = X2 * Z1 - X1 * Z2
9505 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9507 return v.signum() ===
0
9510 Point.prototype.negate = function() {
9511 var y = this.curve.p.subtract(this.y)
9513 return new Point(this.curve, this.x, y, this.z)
9516 Point.prototype.add = function(b) {
9517 if (this.curve.isInfinity(this)) return b
9518 if (this.curve.isInfinity(b)) return this
9525 // u = Y2 * Z1 - Y1 * Z2
9526 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9527 // v = X2 * Z1 - X1 * Z2
9528 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9530 if (v.signum() ===
0) {
9531 if (u.signum() ===
0) {
9532 return this.twice() // this == b, so double
9535 return this.curve.infinity // this = -b, so infinity
9539 var v3 = v2.multiply(v)
9540 var x1v2 = x1.multiply(v2)
9541 var zu2 = u.square().multiply(this.z)
9543 // x3 = v * (z2 * (z1 * u^
2 -
2 * x1 * v^
2) - v^
3)
9544 var x3 = zu2.subtract(x1v2.shiftLeft(
1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9545 // y3 = z2 * (
3 * x1 * u * v^
2 - y1 * v^
3 - z1 * u^
3) + u * v^
3
9546 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)
9547 // z3 = v^
3 * z1 * z2
9548 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9550 return new Point(this.curve, x3, y3, z3)
9553 Point.prototype.twice = function() {
9554 if (this.curve.isInfinity(this)) return this
9555 if (this.y.signum() ===
0) return this.curve.infinity
9560 var y1z1 = y1.multiply(this.z)
9561 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9562 var a = this.curve.a
9564 // w =
3 * x1^
2 + a * z1^
2
9565 var w = x1.square().multiply(THREE)
9567 if (a.signum() !==
0) {
9568 w = w.add(this.z.square().multiply(a))
9571 w = w.mod(this.curve.p)
9572 // x3 =
2 * y1 * z1 * (w^
2 -
8 * x1 * y1^
2 * z1)
9573 var x3 = w.square().subtract(x1.shiftLeft(
3).multiply(y1sqz1)).shiftLeft(
1).multiply(y1z1).mod(this.curve.p)
9574 // y3 =
4 * y1^
2 * z1 * (
3 * w * x1 -
2 * y1^
2 * z1) - w^
3
9575 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(
1)).shiftLeft(
2).multiply(y1sqz1).subtract(w.pow(
3)).mod(this.curve.p)
9576 // z3 =
8 * (y1 * z1)^
3
9577 var z3 = y1z1.pow(
3).shiftLeft(
3).mod(this.curve.p)
9579 return new Point(this.curve, x3, y3, z3)
9582 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9583 // TODO: modularize the multiplication algorithm
9584 Point.prototype.multiply = function(k) {
9585 if (this.curve.isInfinity(this)) return this
9586 if (k.signum() ===
0) return this.curve.infinity
9589 var h = e.multiply(THREE)
9591 var neg = this.negate()
9594 for (var i = h.bitLength() -
2; i
> 0; --i) {
9597 var hBit = h.testBit(i)
9598 var eBit = e.testBit(i)
9601 R = R.add(hBit ? this : neg)
9608 // Compute this*j + x*k (simultaneous multiplication)
9609 Point.prototype.multiplyTwo = function(j, x, k) {
9612 if (j.bitLength()
> k.bitLength())
9613 i = j.bitLength() -
1
9615 i = k.bitLength() -
1
9617 var R = this.curve.infinity
9618 var both = this.add(x)
9623 var jBit = j.testBit(i)
9624 var kBit = k.testBit(i)
9645 Point.prototype.getEncoded = function(compressed) {
9646 if (compressed == undefined) compressed = this.compressed
9647 if (this.curve.isInfinity(this)) return new Buffer('
00', 'hex') // Infinity point encoded is simply '
00'
9649 var x = this.affineX
9650 var y = this.affineY
9654 // Determine size of q in bytes
9655 var byteLength = Math.floor((this.curve.p.bitLength() +
7) /
8)
9659 buffer = new Buffer(
1 + byteLength)
9660 buffer.writeUInt8(y.isEven() ?
0x02 :
0x03,
0)
9664 buffer = new Buffer(
1 + byteLength + byteLength)
9665 buffer.writeUInt8(
0x04,
0)
9667 y.toBuffer(byteLength).copy(buffer,
1 + byteLength)
9670 x.toBuffer(byteLength).copy(buffer,
1)
9675 Point.decodeFrom = function(curve, buffer) {
9676 var type = buffer.readUInt8(
0)
9677 var compressed = (type !==
4)
9679 var byteLength = Math.floor((curve.p.bitLength() +
7) /
8)
9680 var x = BigInteger.fromBuffer(buffer.slice(
1,
1 + byteLength))
9684 assert.equal(buffer.length, byteLength +
1, 'Invalid sequence length')
9685 assert(type ===
0x02 || type ===
0x03, 'Invalid sequence tag')
9687 var isOdd = (type ===
0x03)
9688 Q = curve.pointFromX(isOdd, x)
9691 assert.equal(buffer.length,
1 + byteLength + byteLength, 'Invalid sequence length')
9693 var y = BigInteger.fromBuffer(buffer.slice(
1 + byteLength))
9694 Q = Point.fromAffine(curve, x, y)
9697 Q.compressed = compressed
9701 Point.prototype.toString = function () {
9702 if (this.curve.isInfinity(this)) return '(INFINITY)'
9704 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9707 module.exports = Point
9709 }).call(this,require("buffer").Buffer)
9710 },{"assert":
5,"bigi":
3,"buffer":
7}],
52:[function(require,module,exports){
9711 (function (process,global,Buffer){
9714 var crypto = global.crypto || global.msCrypto
9715 if(crypto && crypto.getRandomValues) {
9716 module.exports = randomBytes;
9718 module.exports = oldBrowser;
9720 function randomBytes(size, cb) {
9721 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9722 /* This will not work in older browsers.
9723 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9726 crypto.getRandomValues(bytes);
9727 if (typeof cb === 'function') {
9728 return process.nextTick(function () {
9734 function oldBrowser() {
9736 'secure random number generation not supported by this browser\n'+
9737 'use chrome, FireFox or Internet Explorer
11'
9741 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9742 },{"_process":
14,"buffer":
7}],
53:[function(require,module,exports){
9746 function getFunctionName(fn) {
9747 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[
1];
9750 function getTypeTypeName(type) {
9751 if (nativeTypes.Function(type)) {
9752 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9754 if (nativeTypes.Object(type)) return JSON.stringify(type);
9759 function getValueTypeName(value) {
9760 if (nativeTypes.Null(value)) return '';
9762 return getFunctionName(value.constructor);
9765 function tfErrorString(type, value) {
9766 var typeTypeName = getTypeTypeName(type);
9767 var valueTypeName = getValueTypeName(value);
9769 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9772 function tfPropertyErrorString(type, name, value) {
9773 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9777 Array: (function (_Array) {
9778 function Array(_x) {
9779 return _Array.apply(this, arguments);
9782 Array.toString = function () {
9783 return _Array.toString();
9787 })(function (value) {
9788 return value !== null && value !== undefined && value.constructor === Array;
9790 Boolean: function Boolean(value) {
9791 return typeof value === 'boolean';
9793 Buffer: (function (_Buffer) {
9794 function Buffer(_x2) {
9795 return _Buffer.apply(this, arguments);
9798 Buffer.toString = function () {
9799 return _Buffer.toString();
9803 })(function (value) {
9804 return Buffer.isBuffer(value);
9806 Function: function Function(value) {
9807 return typeof value === 'function';
9809 Null: function Null(value) {
9810 return value === undefined || value === null;
9812 Number: function Number(value) {
9813 return typeof value === 'number';
9815 Object: function Object(value) {
9816 return typeof value === 'object';
9818 String: function String(value) {
9819 return typeof value === 'string';
9826 function tJSON(type) {
9827 return type && type.toJSON ? type.toJSON() : type;
9830 function sJSON(type) {
9831 var json = tJSON(type);
9832 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9836 arrayOf: function arrayOf(type) {
9837 function arrayOf(value, strict) {
9839 return nativeTypes.Array(value) && value.every(function (x) {
9840 return typeforce(type, x, strict);
9846 arrayOf.toJSON = function () {
9847 return [tJSON(type)];
9853 maybe: function maybe(type) {
9854 function maybe(value, strict) {
9855 return nativeTypes.Null(value) || typeforce(type, value, strict);
9857 maybe.toJSON = function () {
9858 return '?' + sJSON(type);
9864 object: function object(type) {
9865 function object(value, strict) {
9866 typeforce(nativeTypes.Object, value, strict);
9868 var propertyName, propertyType, propertyValue;
9871 for (propertyName in type) {
9872 propertyType = type[propertyName];
9873 propertyValue = value[propertyName];
9875 typeforce(propertyType, propertyValue, strict);
9878 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9882 for (propertyName in value) {
9883 if (type[propertyName]) continue;
9885 throw new TypeError('Unexpected property "' + propertyName + '"');
9891 object.toJSON = function () {
9898 oneOf: function oneOf() {
9899 for (var _len = arguments.length, types = Array(_len), _key =
0; _key < _len; _key++) {
9900 types[_key] = arguments[_key];
9903 function oneOf(value, strict) {
9904 return types.some(function (type) {
9906 return typeforce(type, value, strict);
9912 oneOf.toJSON = function () {
9913 return types.map(sJSON).join('|');
9919 quacksLike: function quacksLike(type) {
9920 function quacksLike(value, strict) {
9921 return type === getValueTypeName(value);
9923 quacksLike.toJSON = function () {
9930 tuple: function tuple() {
9931 for (var _len2 = arguments.length, types = Array(_len2), _key2 =
0; _key2 < _len2; _key2++) {
9932 types[_key2] = arguments[_key2];
9935 function tuple(value, strict) {
9936 return types.every(function (type, i) {
9937 return typeforce(type, value[i], strict);
9940 tuple.toJSON = function () {
9941 return '(' + types.map(sJSON).join(', ') + ')';
9947 value: function value(expected) {
9948 function value(actual) {
9949 return actual === expected;
9951 value.toJSON = function () {
9959 function compile(type) {
9960 if (nativeTypes.String(type)) {
9961 if (type[
0] === '?') return otherTypes.maybe(compile(type.slice(
1)));
9963 return nativeTypes[type] || otherTypes.quacksLike(type);
9964 } else if (type && nativeTypes.Object(type)) {
9965 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[
0]));
9969 for (var propertyName in type) {
9970 compiled[propertyName] = compile(type[propertyName]);
9973 return otherTypes.object(compiled);
9974 } else if (nativeTypes.Function(type)) {
9978 return otherTypes.value(type);
9981 function typeforce(_x3, _x4, _x5) {
9984 _function: while (_again) {
9990 if (nativeTypes.Function(type)) {
9991 if (type(value, strict)) return true;
9993 throw new TypeError(tfErrorString(type, value));
9997 _x3 = compile(type);
10001 continue _function;
10005 // assign all types to typeforce function
10007 Object.keys(nativeTypes).forEach(function (typeName) {
10008 var nativeType = nativeTypes[typeName];
10009 nativeType.toJSON = function () {
10013 typeforce[typeName] = nativeType;
10016 for (typeName in otherTypes) {
10017 typeforce[typeName] = otherTypes[typeName];
10020 module.exports = typeforce;
10021 module.exports.compile = compile;
10022 }).call(this,require("buffer").Buffer)
10023 },{"buffer":
7}],
54:[function(require,module,exports){
10024 (function (Buffer){
10025 var assert = require('assert')
10026 var base58check = require('bs58check')
10027 var typeForce = require('typeforce')
10028 var networks = require('./networks')
10029 var scripts = require('./scripts')
10031 function findScriptTypeByVersion (version) {
10032 for (var networkName in networks) {
10033 var network = networks[networkName]
10035 if (version === network.pubKeyHash) return 'pubkeyhash'
10036 if (version === network.scriptHash) return 'scripthash'
10040 function Address (hash, version) {
10041 typeForce('Buffer', hash)
10043 assert.strictEqual(hash.length,
20, 'Invalid hash length')
10044 assert.strictEqual(version &
0xff, version, 'Invalid version byte')
10047 this.version = version
10050 Address.fromBase58Check = function (string) {
10051 var payload = base58check.decode(string)
10052 var version = payload.readUInt8(
0)
10053 var hash = payload.slice(
1)
10055 return new Address(hash, version)
10058 Address.fromOutputScript = function (script, network) {
10059 network = network || networks.bitcoin
10061 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[
2], network.pubKeyHash)
10062 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[
1], network.scriptHash)
10064 assert(false, script.toASM() + ' has no matching Address')
10067 Address.prototype.toBase58Check = function () {
10068 var payload = new Buffer(
21)
10069 payload.writeUInt8(this.version,
0)
10070 this.hash.copy(payload,
1)
10072 return base58check.encode(payload)
10075 Address.prototype.toOutputScript = function () {
10076 var scriptType = findScriptTypeByVersion(this.version)
10078 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10079 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10081 assert(false, this.toString() + ' has no matching Script')
10084 Address.prototype.toString = Address.prototype.toBase58Check
10086 module.exports = Address
10088 }).call(this,require("buffer").Buffer)
10089 },{"./networks":
66,"./scripts":
69,"assert":
5,"bs58check":
31,"buffer":
7,"typeforce":
53}],
55:[function(require,module,exports){
10090 var bs58check = require('bs58check')
10092 function decode () {
10093 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10095 return bs58check.decode.apply(undefined, arguments)
10098 function encode () {
10099 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10101 return bs58check.encode.apply(undefined, arguments)
10109 },{"bs58check":
31}],
56:[function(require,module,exports){
10110 (function (Buffer){
10111 var assert = require('assert')
10112 var bufferutils = require('./bufferutils')
10113 var crypto = require('./crypto')
10115 var Transaction = require('./transaction')
10117 function Block () {
10119 this.prevHash = null
10120 this.merkleRoot = null
10126 Block.fromBuffer = function (buffer) {
10127 assert(buffer.length
>=
80, 'Buffer too small (<
80 bytes)')
10130 function readSlice (n) {
10132 return buffer.slice(offset - n, offset)
10135 function readUInt32 () {
10136 var i = buffer.readUInt32LE(offset)
10141 var block = new Block()
10142 block.version = readUInt32()
10143 block.prevHash = readSlice(
32)
10144 block.merkleRoot = readSlice(
32)
10145 block.timestamp = readUInt32()
10146 block.bits = readUInt32()
10147 block.nonce = readUInt32()
10149 if (buffer.length ===
80) return block
10151 function readVarInt () {
10152 var vi = bufferutils.readVarInt(buffer, offset)
10157 // FIXME: poor performance
10158 function readTransaction () {
10159 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10161 offset += tx.toBuffer().length
10165 var nTransactions = readVarInt()
10166 block.transactions = []
10168 for (var i =
0; i < nTransactions; ++i) {
10169 var tx = readTransaction()
10170 block.transactions.push(tx)
10176 Block.fromHex = function (hex) {
10177 return Block.fromBuffer(new Buffer(hex, 'hex'))
10180 Block.prototype.getHash = function () {
10181 return crypto.hash256(this.toBuffer(true))
10184 Block.prototype.getId = function () {
10185 return bufferutils.reverse(this.getHash()).toString('hex')
10188 Block.prototype.getUTCDate = function () {
10189 var date = new Date(
0) // epoch
10190 date.setUTCSeconds(this.timestamp)
10195 Block.prototype.toBuffer = function (headersOnly) {
10196 var buffer = new Buffer(
80)
10199 function writeSlice (slice) {
10200 slice.copy(buffer, offset)
10201 offset += slice.length
10204 function writeUInt32 (i) {
10205 buffer.writeUInt32LE(i, offset)
10209 writeUInt32(this.version)
10210 writeSlice(this.prevHash)
10211 writeSlice(this.merkleRoot)
10212 writeUInt32(this.timestamp)
10213 writeUInt32(this.bits)
10214 writeUInt32(this.nonce)
10216 if (headersOnly || !this.transactions) return buffer
10218 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10219 var txBuffers = this.transactions.map(function (tx) {
10220 return tx.toBuffer()
10223 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10226 Block.prototype.toHex = function (headersOnly) {
10227 return this.toBuffer(headersOnly).toString('hex')
10230 module.exports = Block
10232 }).call(this,require("buffer").Buffer)
10233 },{"./bufferutils":
57,"./crypto":
58,"./transaction":
70,"assert":
5,"buffer":
7}],
57:[function(require,module,exports){
10234 (function (Buffer){
10235 var assert = require('assert')
10236 var opcodes = require('./opcodes')
10238 // https://github.com/feross/buffer/blob/master/index.js#L1127
10239 function verifuint (value, max) {
10240 assert(typeof value === 'number', 'cannot write a non-number as a number')
10241 assert(value
>=
0, 'specified a negative value for writing an unsigned value')
10242 assert(value <= max, 'value is larger than maximum value for type')
10243 assert(Math.floor(value) === value, 'value has a fractional component')
10246 function pushDataSize (i) {
10247 return i < opcodes.OP_PUSHDATA1 ?
1
10253 function readPushDataInt (buffer, offset) {
10254 var opcode = buffer.readUInt8(offset)
10258 if (opcode < opcodes.OP_PUSHDATA1) {
10263 } else if (opcode === opcodes.OP_PUSHDATA1) {
10264 if (offset +
2 > buffer.length) return null
10265 number = buffer.readUInt8(offset +
1)
10269 } else if (opcode === opcodes.OP_PUSHDATA2) {
10270 if (offset +
3 > buffer.length) return null
10271 number = buffer.readUInt16LE(offset +
1)
10276 if (offset +
5 > buffer.length) return null
10277 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10279 number = buffer.readUInt32LE(offset +
1)
10290 function readUInt64LE (buffer, offset) {
10291 var a = buffer.readUInt32LE(offset)
10292 var b = buffer.readUInt32LE(offset +
4)
10295 verifuint(b + a,
0x001fffffffffffff)
10300 function readVarInt (buffer, offset) {
10301 var t = buffer.readUInt8(offset)
10310 } else if (t <
254) {
10311 number = buffer.readUInt16LE(offset +
1)
10315 } else if (t <
255) {
10316 number = buffer.readUInt32LE(offset +
1)
10321 number = readUInt64LE(buffer, offset +
1)
10331 function writePushDataInt (buffer, number, offset) {
10332 var size = pushDataSize(number)
10336 buffer.writeUInt8(number, offset)
10339 } else if (size ===
2) {
10340 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10341 buffer.writeUInt8(number, offset +
1)
10344 } else if (size ===
3) {
10345 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10346 buffer.writeUInt16LE(number, offset +
1)
10350 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10351 buffer.writeUInt32LE(number, offset +
1)
10357 function writeUInt64LE (buffer, value, offset) {
10358 verifuint(value,
0x001fffffffffffff)
10360 buffer.writeInt32LE(value & -
1, offset)
10361 buffer.writeUInt32LE(Math.floor(value /
0x100000000), offset +
4)
10364 function varIntSize (i) {
10367 : i <
0x100000000 ?
5
10371 function writeVarInt (buffer, number, offset) {
10372 var size = varIntSize(number)
10376 buffer.writeUInt8(number, offset)
10379 } else if (size ===
3) {
10380 buffer.writeUInt8(
253, offset)
10381 buffer.writeUInt16LE(number, offset +
1)
10384 } else if (size ===
5) {
10385 buffer.writeUInt8(
254, offset)
10386 buffer.writeUInt32LE(number, offset +
1)
10390 buffer.writeUInt8(
255, offset)
10391 writeUInt64LE(buffer, number, offset +
1)
10397 function varIntBuffer (i) {
10398 var size = varIntSize(i)
10399 var buffer = new Buffer(size)
10400 writeVarInt(buffer, i,
0)
10405 function reverse (buffer) {
10406 var buffer2 = new Buffer(buffer)
10407 Array.prototype.reverse.call(buffer2)
10412 pushDataSize: pushDataSize,
10413 readPushDataInt: readPushDataInt,
10414 readUInt64LE: readUInt64LE,
10415 readVarInt: readVarInt,
10417 varIntBuffer: varIntBuffer,
10418 varIntSize: varIntSize,
10419 writePushDataInt: writePushDataInt,
10420 writeUInt64LE: writeUInt64LE,
10421 writeVarInt: writeVarInt
10424 }).call(this,require("buffer").Buffer)
10425 },{"./opcodes":
67,"assert":
5,"buffer":
7}],
58:[function(require,module,exports){
10426 var createHash = require('create-hash')
10428 function hash160 (buffer) {
10429 return ripemd160(sha256(buffer))
10432 function hash256 (buffer) {
10433 return sha256(sha256(buffer))
10436 function ripemd160 (buffer) {
10437 return createHash('rmd160').update(buffer).digest()
10440 function sha1 (buffer) {
10441 return createHash('sha1').update(buffer).digest()
10444 function sha256 (buffer) {
10445 return createHash('sha256').update(buffer).digest()
10448 // FIXME: Name not consistent with others
10449 var createHmac = require('create-hmac')
10451 function HmacSHA256 (buffer, secret) {
10452 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10453 return createHmac('sha256', secret).update(buffer).digest()
10456 function HmacSHA512 (buffer, secret) {
10457 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10458 return createHmac('sha512', secret).update(buffer).digest()
10462 ripemd160: ripemd160,
10467 HmacSHA256: HmacSHA256,
10468 HmacSHA512: HmacSHA512
10471 },{"create-hash":
32,"create-hmac":
45}],
59:[function(require,module,exports){
10472 (function (Buffer){
10473 var assert = require('assert')
10474 var createHmac = require('create-hmac')
10475 var typeForce = require('typeforce')
10477 var BigInteger = require('bigi')
10478 var ECSignature = require('./ecsignature')
10480 var ZERO = new Buffer([
0])
10481 var ONE = new Buffer([
1])
10483 // https://tools.ietf.org/html/rfc6979#section-
3.2
10484 function deterministicGenerateK (curve, hash, d, checkSig) {
10485 typeForce('Buffer', hash)
10486 typeForce('BigInteger', d)
10488 // FIXME: remove/uncomment for
2.0.0
10489 // typeForce('Function', checkSig)
10491 if (typeof checkSig !== 'function') {
10492 console.warn('deterministicGenerateK requires a checkSig callback in
2.0.0, see #
337 for more information')
10494 checkSig = function (k) {
10497 var e = BigInteger.fromBuffer(hash)
10499 var Q = G.multiply(k)
10501 if (curve.isInfinity(Q))
10504 var r = Q.affineX.mod(n)
10505 if (r.signum() ===
0)
10508 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10509 if (s.signum() ===
0)
10517 assert.equal(hash.length,
32, 'Hash must be
256 bit')
10519 var x = d.toBuffer(
32)
10520 var k = new Buffer(
32)
10521 var v = new Buffer(
32)
10523 // Step A, ignored as hash already provided
10531 k = createHmac('sha256', k)
10539 v = createHmac('sha256', k).update(v).digest()
10542 k = createHmac('sha256', k)
10550 v = createHmac('sha256', k).update(v).digest()
10552 // Step H1/H2a, ignored as tlen === qlen (
256 bit)
10554 v = createHmac('sha256', k).update(v).digest()
10556 var T = BigInteger.fromBuffer(v)
10558 // Step H3, repeat until T is within the interval [
1, n -
1] and is suitable for ECDSA
10559 while ((T.signum() <=
0) || (T.compareTo(curve.n)
>=
0) || !checkSig(T)) {
10560 k = createHmac('sha256', k)
10565 v = createHmac('sha256', k).update(v).digest()
10567 // Step H1/H2a, again, ignored as tlen === qlen (
256 bit)
10569 v = createHmac('sha256', k).update(v).digest()
10570 T = BigInteger.fromBuffer(v)
10576 function sign (curve, hash, d) {
10579 var e = BigInteger.fromBuffer(hash)
10583 deterministicGenerateK(curve, hash, d, function (k) {
10584 var Q = G.multiply(k)
10586 if (curve.isInfinity(Q))
10589 r = Q.affineX.mod(n)
10590 if (r.signum() ===
0)
10593 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10594 if (s.signum() ===
0)
10600 var N_OVER_TWO = n.shiftRight(
1)
10602 // enforce low S values, see bip62: 'low s values in signatures'
10603 if (s.compareTo(N_OVER_TWO)
> 0) {
10607 return new ECSignature(r, s)
10610 function verifyRaw (curve, e, signature, Q) {
10614 var r = signature.r
10615 var s = signature.s
10617 //
1.4.1 Enforce r and s are both integers in the interval [
1, n −
1]
10618 if (r.signum() <=
0 || r.compareTo(n)
>=
0) return false
10619 if (s.signum() <=
0 || s.compareTo(n)
>=
0) return false
10622 var c = s.modInverse(n)
10624 //
1.4.4 Compute u1 = es^−
1 mod n
10625 // u2 = rs^−
1 mod n
10626 var u1 = e.multiply(c).mod(n)
10627 var u2 = r.multiply(c).mod(n)
10629 //
1.4.5 Compute R = (xR, yR) = u1G + u2Q
10630 var R = G.multiplyTwo(u1, Q, u2)
10631 var v = R.affineX.mod(n)
10633 //
1.4.5 (cont.) Enforce R is not at infinity
10634 if (curve.isInfinity(R)) return false
10636 //
1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10640 function verify (curve, hash, signature, Q) {
10641 //
1.4.2 H = Hash(M), already done by the user
10643 var e = BigInteger.fromBuffer(hash)
10645 return verifyRaw(curve, e, signature, Q)
10649 * Recover a public key from a signature.
10651 * See SEC
1: Elliptic Curve Cryptography, section
4.1.6, "Public
10652 * Key Recovery Operation".
10654 * http://www.secg.org/download/aid-
780/sec1-v2.pdf
10656 function recoverPubKey (curve, e, signature, i) {
10657 assert.strictEqual(i &
3, i, 'Recovery param is more than two bits')
10662 var r = signature.r
10663 var s = signature.s
10665 assert(r.signum()
> 0 && r.compareTo(n) <
0, 'Invalid r value')
10666 assert(s.signum()
> 0 && s.compareTo(n) <
0, 'Invalid s value')
10668 // A set LSB signifies that the y-coordinate is odd
10671 // The more significant bit specifies whether we should use the
10672 // first or second candidate key.
10673 var isSecondKey = i
>> 1
10675 //
1.1 Let x = r + jn
10676 var x = isSecondKey ? r.add(n) : r
10677 var R = curve.pointFromX(isYOdd, x)
10679 //
1.4 Check that nR is at infinity
10680 var nR = R.multiply(n)
10681 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10683 // Compute -e from e
10684 var eNeg = e.negate().mod(n)
10686 //
1.6.1 Compute Q = r^-
1 (sR - eG)
10687 // Q = r^-
1 (sR + -eG)
10688 var rInv = r.modInverse(n)
10690 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10697 * Calculate pubkey extraction parameter.
10699 * When extracting a pubkey from a signature, we have to
10700 * distinguish four different cases. Rather than putting this
10701 * burden on the verifier, Bitcoin includes a
2-bit value with the
10704 * This function simply tries all four cases and returns the value
10705 * that resulted in a successful pubkey recovery.
10707 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10708 for (var i =
0; i <
4; i++) {
10709 var Qprime = recoverPubKey(curve, e, signature, i)
10712 if (Qprime.equals(Q)) {
10717 throw new Error('Unable to find valid recovery factor')
10721 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10722 deterministicGenerateK: deterministicGenerateK,
10723 recoverPubKey: recoverPubKey,
10726 verifyRaw: verifyRaw
10729 }).call(this,require(
"buffer").Buffer)
10730 },{
"./ecsignature":
62,
"assert":
5,
"bigi":
3,
"buffer":
7,
"create-hmac":
45,
"typeforce":
53}],
60:[function(require,module,exports){
10731 (function (Buffer){
10732 var assert = require('assert')
10733 var base58check = require('bs58check')
10734 var ecdsa = require('./ecdsa')
10735 var networks = require('./networks')
10736 var randomBytes = require('randombytes')
10737 var typeForce = require('typeforce')
10739 var BigInteger = require('bigi')
10740 var ECPubKey = require('./ecpubkey')
10742 var ecurve = require('ecurve')
10743 var secp256k1 = ecurve.getCurveByName('secp256k1')
10745 function ECKey (d, compressed) {
10746 assert(d.signum()
> 0, 'Private key must be greater than
0')
10747 assert(d.compareTo(ECKey.curve.n) <
0, 'Private key must be less than the curve order')
10749 var Q = ECKey.curve.G.multiply(d)
10752 this.pub = new ECPubKey(Q, compressed)
10756 ECKey.curve = secp256k1
10758 // Static constructors
10759 ECKey.fromWIF = function (string) {
10760 var payload = base58check.decode(string)
10761 var compressed = false
10763 // Ignore the version byte
10764 payload = payload.slice(
1)
10766 if (payload.length ===
33) {
10767 assert.strictEqual(payload[
32],
0x01, 'Invalid compression flag')
10769 // Truncate the compression flag
10770 payload = payload.slice(
0, -
1)
10774 assert.equal(payload.length,
32, 'Invalid WIF payload length')
10776 var d = BigInteger.fromBuffer(payload)
10777 return new ECKey(d, compressed)
10780 ECKey.makeRandom = function (compressed, rng) {
10781 rng = rng || randomBytes
10783 var buffer = rng(
32)
10784 typeForce('Buffer', buffer)
10785 assert.equal(buffer.length,
32, 'Expected
256-bit Buffer from RNG')
10787 var d = BigInteger.fromBuffer(buffer)
10788 d = d.mod(ECKey.curve.n)
10790 return new ECKey(d, compressed)
10793 // Export functions
10794 ECKey.prototype.toWIF = function (network) {
10795 network = network || networks.bitcoin
10797 var bufferLen = this.pub.compressed ?
34 :
33
10798 var buffer = new Buffer(bufferLen)
10800 buffer.writeUInt8(network.wif,
0)
10801 this.d.toBuffer(
32).copy(buffer,
1)
10803 if (this.pub.compressed) {
10804 buffer.writeUInt8(
0x01,
33)
10807 return base58check.encode(buffer)
10811 ECKey.prototype.sign = function (hash) {
10812 return ecdsa.sign(ECKey.curve, hash, this.d)
10815 module.exports = ECKey
10817 }).call(this,require(
"buffer").Buffer)
10818 },{
"./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){
10819 (function (Buffer){
10820 var crypto = require('./crypto')
10821 var ecdsa = require('./ecdsa')
10822 var typeForce = require('typeforce')
10823 var networks = require('./networks')
10825 var Address = require('./address')
10827 var ecurve = require('ecurve')
10828 var secp256k1 = ecurve.getCurveByName('secp256k1')
10830 function ECPubKey (Q, compressed) {
10831 if (compressed === undefined) {
10835 typeForce('Point', Q)
10836 typeForce('Boolean', compressed)
10838 this.compressed = compressed
10843 ECPubKey.curve = secp256k1
10845 // Static constructors
10846 ECPubKey.fromBuffer = function (buffer) {
10847 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10848 return new ECPubKey(Q, Q.compressed)
10851 ECPubKey.fromHex = function (hex) {
10852 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10856 ECPubKey.prototype.getAddress = function (network) {
10857 network = network || networks.bitcoin
10859 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10862 ECPubKey.prototype.verify = function (hash, signature) {
10863 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10866 // Export functions
10867 ECPubKey.prototype.toBuffer = function () {
10868 return this.Q.getEncoded(this.compressed)
10871 ECPubKey.prototype.toHex = function () {
10872 return this.toBuffer().toString('hex')
10875 module.exports = ECPubKey
10877 }).call(this,require(
"buffer").Buffer)
10878 },{
"./address":
54,
"./crypto":
58,
"./ecdsa":
59,
"./networks":
66,
"buffer":
7,
"ecurve":
49,
"typeforce":
53}],
62:[function(require,module,exports){
10879 (function (Buffer){
10880 var assert = require('assert')
10881 var typeForce = require('typeforce')
10883 var BigInteger = require('bigi')
10885 function ECSignature (r, s) {
10886 typeForce('BigInteger', r)
10887 typeForce('BigInteger', s)
10893 ECSignature.parseCompact = function (buffer) {
10894 assert.equal(buffer.length,
65, 'Invalid signature length')
10895 var i = buffer.readUInt8(
0) -
27
10898 assert.equal(i, i &
7, 'Invalid signature parameter')
10899 var compressed = !!(i &
4)
10901 // Recovery param only
10904 var r = BigInteger.fromBuffer(buffer.slice(
1,
33))
10905 var s = BigInteger.fromBuffer(buffer.slice(
33))
10908 compressed: compressed,
10910 signature: new ECSignature(r, s)
10914 ECSignature.fromDER = function (buffer) {
10915 assert.equal(buffer.readUInt8(
0),
0x30, 'Not a DER sequence')
10916 assert.equal(buffer.readUInt8(
1), buffer.length -
2, 'Invalid sequence length')
10917 assert.equal(buffer.readUInt8(
2),
0x02, 'Expected a DER integer')
10919 var rLen = buffer.readUInt8(
3)
10920 assert(rLen
> 0, 'R length is zero')
10922 var offset =
4 + rLen
10923 assert.equal(buffer.readUInt8(offset),
0x02, 'Expected a DER integer (
2)')
10925 var sLen = buffer.readUInt8(offset +
1)
10926 assert(sLen
> 0, 'S length is zero')
10928 var rB = buffer.slice(
4, offset)
10929 var sB = buffer.slice(offset +
2)
10932 if (rLen
> 1 && rB.readUInt8(
0) ===
0x00) {
10933 assert(rB.readUInt8(
1) &
0x80, 'R value excessively padded')
10936 if (sLen
> 1 && sB.readUInt8(
0) ===
0x00) {
10937 assert(sB.readUInt8(
1) &
0x80, 'S value excessively padded')
10940 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10941 var r = BigInteger.fromDERInteger(rB)
10942 var s = BigInteger.fromDERInteger(sB)
10944 assert(r.signum()
>=
0, 'R value is negative')
10945 assert(s.signum()
>=
0, 'S value is negative')
10947 return new ECSignature(r, s)
10950 // BIP62:
1 byte hashType flag (only
0x01,
0x02,
0x03,
0x81,
0x82 and
0x83 are allowed)
10951 ECSignature.parseScriptSignature = function (buffer) {
10952 var hashType = buffer.readUInt8(buffer.length -
1)
10953 var hashTypeMod = hashType & ~
0x80
10955 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
10958 signature: ECSignature.fromDER(buffer.slice(
0, -
1)),
10963 ECSignature.prototype.toCompact = function (i, compressed) {
10970 var buffer = new Buffer(
65)
10971 buffer.writeUInt8(i,
0)
10973 this.r.toBuffer(
32).copy(buffer,
1)
10974 this.s.toBuffer(
32).copy(buffer,
33)
10979 ECSignature.prototype.toDER = function () {
10980 var rBa = this.r.toDERInteger()
10981 var sBa = this.s.toDERInteger()
10986 sequence.push(
0x02, rBa.length)
10987 sequence = sequence.concat(rBa)
10990 sequence.push(
0x02, sBa.length)
10991 sequence = sequence.concat(sBa)
10994 sequence.unshift(
0x30, sequence.length)
10996 return new Buffer(sequence)
10999 ECSignature.prototype.toScriptSignature = function (hashType) {
11000 var hashTypeMod = hashType & ~
0x80
11001 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
11003 var hashTypeBuffer = new Buffer(
1)
11004 hashTypeBuffer.writeUInt8(hashType,
0)
11006 return Buffer.concat([this.toDER(), hashTypeBuffer])
11009 module.exports = ECSignature
11011 }).call(this,require(
"buffer").Buffer)
11012 },{
"assert":
5,
"bigi":
3,
"buffer":
7,
"typeforce":
53}],
63:[function(require,module,exports){
11013 (function (Buffer){
11014 var assert = require('assert')
11015 var base58check = require('bs58check')
11016 var bcrypto = require('./crypto')
11017 var createHmac = require('create-hmac')
11018 var typeForce = require('typeforce')
11019 var networks = require('./networks')
11021 var BigInteger = require('bigi')
11022 var ECKey = require('./eckey')
11023 var ECPubKey = require('./ecpubkey')
11025 var ecurve = require('ecurve')
11026 var curve = ecurve.getCurveByName('secp256k1')
11028 function findBIP32NetworkByVersion (version) {
11029 for (var name in networks) {
11030 var network = networks[name]
11032 if (version === network.bip32.private || version === network.bip32.public) {
11037 assert(false, 'Could not find network for ' + version.toString(
16))
11040 function HDNode (K, chainCode, network) {
11041 network = network || networks.bitcoin
11043 typeForce('Buffer', chainCode)
11045 assert.equal(chainCode.length,
32, 'Expected chainCode length of
32, got ' + chainCode.length)
11046 assert(network.bip32, 'Unknown BIP32 constants for network')
11048 this.chainCode = chainCode
11051 this.parentFingerprint =
0x00000000
11052 this.network = network
11054 if (K instanceof BigInteger) {
11055 this.privKey = new ECKey(K, true)
11056 this.pubKey = this.privKey.pub
11057 } else if (K instanceof ECKey) {
11058 assert(K.pub.compressed, 'ECKey must be compressed')
11060 this.pubKey = K.pub
11061 } else if (K instanceof ECPubKey) {
11062 assert(K.compressed, 'ECPubKey must be compressed')
11065 this.pubKey = new ECPubKey(K, true)
11069 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11070 HDNode.HIGHEST_BIT =
0x80000000
11073 HDNode.fromSeedBuffer = function (seed, network) {
11074 typeForce('Buffer', seed)
11076 assert(seed.length
>=
16, 'Seed should be at least
128 bits')
11077 assert(seed.length <=
64, 'Seed should be at most
512 bits')
11079 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11080 var IL = I.slice(
0,
32)
11081 var IR = I.slice(
32)
11083 // In case IL is
0 or
>= n, the master key is invalid
11084 // This is handled by `new ECKey` in the HDNode constructor
11085 var pIL = BigInteger.fromBuffer(IL)
11087 return new HDNode(pIL, IR, network)
11090 HDNode.fromSeedHex = function (hex, network) {
11091 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11094 HDNode.fromBase58 = function (string, network) {
11095 return HDNode.fromBuffer(base58check.decode(string), network, true)
11098 // FIXME: remove in
2.x.y
11099 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11100 if (!__ignoreDeprecation) {
11101 console.warn('HDNode.fromBuffer() is deprecated for removal in
2.x.y, use fromBase58 instead')
11104 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11106 //
4 byte: version bytes
11107 var version = buffer.readUInt32BE(
0)
11110 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11114 network = findBIP32NetworkByVersion(version)
11117 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ...
11118 var depth = buffer.readUInt8(
4)
11120 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11121 var parentFingerprint = buffer.readUInt32BE(
5)
11123 assert.strictEqual(parentFingerprint,
0x00000000, 'Invalid parent fingerprint')
11126 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11127 // This is encoded in MSB order. (
0x00000000 if master key)
11128 var index = buffer.readUInt32BE(
9)
11129 assert(depth
> 0 || index ===
0, 'Invalid index')
11131 //
32 bytes: the chain code
11132 var chainCode = buffer.slice(
13,
45)
11135 //
33 bytes: private key data (
0x00 + k)
11136 if (version === network.bip32.private) {
11137 assert.strictEqual(buffer.readUInt8(
45),
0x00, 'Invalid private key')
11138 data = buffer.slice(
46,
78)
11139 var d = BigInteger.fromBuffer(data)
11140 hd = new HDNode(d, chainCode, network)
11142 //
33 bytes: public key data (
0x02 + X or
0x03 + X)
11144 data = buffer.slice(
45,
78)
11145 var Q = ecurve.Point.decodeFrom(curve, data)
11146 assert.equal(Q.compressed, true, 'Invalid public key')
11148 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11149 // If not, the extended public key is invalid.
11152 hd = new HDNode(Q, chainCode, network)
11157 hd.parentFingerprint = parentFingerprint
11162 // FIXME: remove in
2.x.y
11163 HDNode.fromHex = function (hex, network) {
11164 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11167 HDNode.prototype.getIdentifier = function () {
11168 return bcrypto.hash160(this.pubKey.toBuffer())
11171 HDNode.prototype.getFingerprint = function () {
11172 return this.getIdentifier().slice(
0,
4)
11175 HDNode.prototype.getAddress = function () {
11176 return this.pubKey.getAddress(this.network)
11179 HDNode.prototype.neutered = function () {
11180 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11181 neutered.depth = this.depth
11182 neutered.index = this.index
11183 neutered.parentFingerprint = this.parentFingerprint
11188 HDNode.prototype.toBase58 = function (isPrivate) {
11189 return base58check.encode(this.toBuffer(isPrivate, true))
11192 // FIXME: remove in
2.x.y
11193 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11194 if (isPrivate === undefined) {
11195 isPrivate = !!this.privKey
11197 // FIXME: remove in
2.x.y
11199 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11202 if (!__ignoreDeprecation) {
11203 console.warn('HDNode.toBuffer() is deprecated for removal in
2.x.y, use toBase58 instead')
11207 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11208 var buffer = new Buffer(HDNode.LENGTH)
11210 //
4 bytes: version bytes
11211 buffer.writeUInt32BE(version,
0)
11214 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ....
11215 buffer.writeUInt8(this.depth,
4)
11217 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11218 buffer.writeUInt32BE(this.parentFingerprint,
5)
11220 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11221 // This is encoded in Big endian. (
0x00000000 if master key)
11222 buffer.writeUInt32BE(this.index,
9)
11224 //
32 bytes: the chain code
11225 this.chainCode.copy(buffer,
13)
11227 //
33 bytes: the public key or private key data
11229 // FIXME: remove in
2.x.y
11230 assert(this.privKey, 'Missing private key')
11232 //
0x00 + k for private keys
11233 buffer.writeUInt8(
0,
45)
11234 this.privKey.d.toBuffer(
32).copy(buffer,
46)
11236 // X9.62 encoding for public keys
11237 this.pubKey.toBuffer().copy(buffer,
45)
11243 // FIXME: remove in
2.x.y
11244 HDNode.prototype.toHex = function (isPrivate) {
11245 return this.toBuffer(isPrivate).toString('hex')
11248 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#child-key-derivation-ckd-functions
11249 HDNode.prototype.derive = function (index) {
11250 var isHardened = index
>= HDNode.HIGHEST_BIT
11251 var indexBuffer = new Buffer(
4)
11252 indexBuffer.writeUInt32BE(index,
0)
11258 assert(this.privKey, 'Could not derive hardened child key')
11260 // data =
0x00 || ser256(kpar) || ser32(index)
11261 data = Buffer.concat([
11262 this.privKey.d.toBuffer(
33),
11268 // data = serP(point(kpar)) || ser32(index)
11269 // = serP(Kpar) || ser32(index)
11270 data = Buffer.concat([
11271 this.pubKey.toBuffer(),
11276 var I = createHmac('sha512', this.chainCode).update(data).digest()
11277 var IL = I.slice(
0,
32)
11278 var IR = I.slice(
32)
11280 var pIL = BigInteger.fromBuffer(IL)
11282 // In case parse256(IL)
>= n, proceed with the next value for i
11283 if (pIL.compareTo(curve.n)
>=
0) {
11284 return this.derive(index +
1)
11287 // Private parent key -
> private child key
11289 if (this.privKey) {
11290 // ki = parse256(IL) + kpar (mod n)
11291 var ki = pIL.add(this.privKey.d).mod(curve.n)
11293 // In case ki ==
0, proceed with the next value for i
11294 if (ki.signum() ===
0) {
11295 return this.derive(index +
1)
11298 hd = new HDNode(ki, IR, this.network)
11300 // Public parent key -
> public child key
11302 // Ki = point(parse256(IL)) + Kpar
11304 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11306 // In case Ki is the point at infinity, proceed with the next value for i
11307 if (curve.isInfinity(Ki)) {
11308 return this.derive(index +
1)
11311 hd = new HDNode(Ki, IR, this.network)
11314 hd.depth = this.depth +
1
11316 hd.parentFingerprint = this.getFingerprint().readUInt32BE(
0)
11321 HDNode.prototype.deriveHardened = function (index) {
11322 // Only derives hardened private keys by default
11323 return this.derive(index + HDNode.HIGHEST_BIT)
11326 HDNode.prototype.toString = HDNode.prototype.toBase58
11328 module.exports = HDNode
11330 }).call(this,require("buffer").Buffer)
11331 },{"./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){
11333 Address: require('./address'),
11334 base58check: require('./base58check'),
11335 Block: require('./block'),
11336 bufferutils: require('./bufferutils'),
11337 crypto: require('./crypto'),
11338 ecdsa: require('./ecdsa'),
11339 ECKey: require('./eckey'),
11340 ECPubKey: require('./ecpubkey'),
11341 ECSignature: require('./ecsignature'),
11342 Message: require('./message'),
11343 opcodes: require('./opcodes'),
11344 HDNode: require('./hdnode'),
11345 Script: require('./script'),
11346 scripts: require('./scripts'),
11347 Transaction: require('./transaction'),
11348 TransactionBuilder: require('./transaction_builder'),
11349 networks: require('./networks'),
11350 Wallet: require('./wallet')
11353 },{"./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){
11354 (function (Buffer){
11355 var bufferutils = require('./bufferutils')
11356 var crypto = require('./crypto')
11357 var ecdsa = require('./ecdsa')
11358 var networks = require('./networks')
11360 var BigInteger = require('bigi')
11361 var ECPubKey = require('./ecpubkey')
11362 var ECSignature = require('./ecsignature')
11364 var ecurve = require('ecurve')
11365 var ecparams = ecurve.getCurveByName('secp256k1')
11367 function magicHash (message, network) {
11368 var magicPrefix = new Buffer(network.magicPrefix)
11369 var messageBuffer = new Buffer(message)
11370 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11372 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11373 return crypto.hash256(buffer)
11376 function sign (privKey, message, network) {
11377 network = network || networks.bitcoin
11379 var hash = magicHash(message, network)
11380 var signature = privKey.sign(hash)
11381 var e = BigInteger.fromBuffer(hash)
11382 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11384 return signature.toCompact(i, privKey.pub.compressed)
11387 // TODO: network could be implied from address
11388 function verify (address, signature, message, network) {
11389 if (!Buffer.isBuffer(signature)) {
11390 signature = new Buffer(signature, 'base64')
11393 network = network || networks.bitcoin
11395 var hash = magicHash(message, network)
11396 var parsed = ECSignature.parseCompact(signature)
11397 var e = BigInteger.fromBuffer(hash)
11398 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11400 var pubKey = new ECPubKey(Q, parsed.compressed)
11401 return pubKey.getAddress(network).toString() === address.toString()
11405 magicHash: magicHash,
11410 }).call(this,require("buffer").Buffer)
11411 },{"./bufferutils":
57,"./crypto":
58,"./ecdsa":
59,"./ecpubkey":
61,"./ecsignature":
62,"./networks":
66,"bigi":
3,"buffer":
7,"ecurve":
49}],
66:[function(require,module,exports){
11412 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11413 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=
409731
11417 magicPrefix: '\x18Bitcoin Signed Message:\n',
11419 public:
0x0488b21e,
11420 private:
0x0488ade4
11425 dustThreshold:
546, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/core.h#L151-L162
11426 feePerKb:
10000, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/main.cpp#L53
11427 estimateFee: estimateFee('bitcoin')
11430 magicPrefix: '\x18Bitcoin Signed Message:\n',
11432 public:
0x043587cf,
11433 private:
0x04358394
11438 dustThreshold:
546,
11440 estimateFee: estimateFee('testnet')
11443 magicPrefix: '\x19Litecoin Signed Message:\n',
11445 public:
0x019da462,
11446 private:
0x019d9cfe
11451 dustThreshold:
0, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L360-L365
11452 dustSoftThreshold:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.h#L53
11453 feePerKb:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L56
11454 estimateFee: estimateFee('litecoin')
11457 magicPrefix: '\x19Dogecoin Signed Message:\n',
11459 public:
0x02facafd,
11460 private:
0x02fac398
11465 dustThreshold:
0, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/core.h#L155-L160
11466 dustSoftThreshold:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.h#L62
11467 feePerKb:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.cpp#L58
11468 estimateFee: estimateFee('dogecoin')
11471 magicPrefix: '\x18Viacoin Signed Message:\n',
11473 public:
0x0488b21e,
11474 private:
0x0488ade4
11479 dustThreshold:
560,
11480 dustSoftThreshold:
100000,
11481 feePerKb:
100000, //
11482 estimateFee: estimateFee('viacoin')
11485 magicPrefix: '\x18Viacoin Signed Message:\n',
11487 public:
0x043587cf,
11488 private:
0x04358394
11493 dustThreshold:
560,
11494 dustSoftThreshold:
100000,
11496 estimateFee: estimateFee('viacointestnet')
11499 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11501 public:
0x019da462,
11502 private:
0x019d9cfe
11507 dustThreshold:
0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11508 dustSoftThreshold:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11509 feePerKb:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11510 estimateFee: estimateFee('gamerscoin')
11513 magicPrefix: '\x19Jumbucks Signed Message:\n',
11515 public:
0x037a689a,
11516 private:
0x037a6460
11522 dustSoftThreshold:
10000,
11524 estimateFee: estimateFee('jumbucks')
11527 magicPrefix: '\x18Zetacoin Signed Message:\n',
11529 public:
0x0488b21e,
11530 private:
0x0488ade4
11535 dustThreshold:
546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11536 feePerKb:
10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11537 estimateFee: estimateFee('zetacoin')
11541 function estimateFee (type) {
11542 return function (tx) {
11543 var network = networks[type]
11544 var baseFee = network.feePerKb
11545 var byteSize = tx.toBuffer().length
11547 var fee = baseFee * Math.ceil(byteSize /
1000)
11548 if (network.dustSoftThreshold === undefined) return fee
11550 tx.outs.forEach(function (e) {
11551 if (e.value < network.dustSoftThreshold) {
11560 module.exports = networks
11562 },{}],
67:[function(require,module,exports){
11603 OP_TOALTSTACK:
107,
11604 OP_FROMALTSTACK:
108,
11636 OP_EQUALVERIFY:
136,
11661 OP_NUMEQUALVERIFY:
157,
11662 OP_NUMNOTEQUAL:
158,
11664 OP_GREATERTHAN:
160,
11665 OP_LESSTHANOREQUAL:
161,
11666 OP_GREATERTHANOREQUAL:
162,
11678 OP_CODESEPARATOR:
171,
11680 OP_CHECKSIGVERIFY:
173,
11681 OP_CHECKMULTISIG:
174,
11682 OP_CHECKMULTISIGVERIFY:
175,
11696 // template matching params
11697 OP_PUBKEYHASH:
253,
11699 OP_INVALIDOPCODE:
255
11702 },{}],
68:[function(require,module,exports){
11703 (function (Buffer){
11704 var assert = require('assert')
11705 var bufferutils = require('./bufferutils')
11706 var crypto = require('./crypto')
11707 var typeForce = require('typeforce')
11708 var opcodes = require('./opcodes')
11710 function Script (buffer, chunks) {
11711 typeForce('Buffer', buffer)
11712 typeForce('Array', chunks)
11714 this.buffer = buffer
11715 this.chunks = chunks
11718 Script.fromASM = function (asm) {
11719 var strChunks = asm.split(' ')
11720 var chunks = strChunks.map(function (strChunk) {
11722 if (strChunk in opcodes) {
11723 return opcodes[strChunk]
11727 return new Buffer(strChunk, 'hex')
11731 return Script.fromChunks(chunks)
11734 Script.fromBuffer = function (buffer) {
11738 while (i < buffer.length) {
11739 var opcode = buffer.readUInt8(i)
11742 if ((opcode
> opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11743 var d = bufferutils.readPushDataInt(buffer, i)
11745 // did reading a pushDataInt fail? return non-chunked script
11746 if (d === null) return new Script(buffer, [])
11749 // attempt to read too much data?
11750 if (i + d.number
> buffer.length) return new Script(buffer, [])
11752 var data = buffer.slice(i, i + d.number)
11759 chunks.push(opcode)
11765 return new Script(buffer, chunks)
11768 Script.fromChunks = function (chunks) {
11769 typeForce('Array', chunks)
11771 var bufferSize = chunks.reduce(function (accum, chunk) {
11773 if (Buffer.isBuffer(chunk)) {
11774 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11781 var buffer = new Buffer(bufferSize)
11784 chunks.forEach(function (chunk) {
11786 if (Buffer.isBuffer(chunk)) {
11787 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11789 chunk.copy(buffer, offset)
11790 offset += chunk.length
11794 buffer.writeUInt8(chunk, offset)
11799 assert.equal(offset, buffer.length, 'Could not decode chunks')
11800 return new Script(buffer, chunks)
11803 Script.fromHex = function (hex) {
11804 return Script.fromBuffer(new Buffer(hex, 'hex'))
11807 Script.EMPTY = Script.fromChunks([])
11809 Script.prototype.getHash = function () {
11810 return crypto.hash160(this.buffer)
11813 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11814 Script.prototype.without = function (needle) {
11815 return Script.fromChunks(this.chunks.filter(function (op) {
11816 return op !== needle
11820 var reverseOps = []
11821 for (var op in opcodes) {
11822 var code = opcodes[op]
11823 reverseOps[code] = op
11826 Script.prototype.toASM = function () {
11827 return this.chunks.map(function (chunk) {
11829 if (Buffer.isBuffer(chunk)) {
11830 return chunk.toString('hex')
11834 return reverseOps[chunk]
11839 Script.prototype.toBuffer = function () {
11843 Script.prototype.toHex = function () {
11844 return this.toBuffer().toString('hex')
11847 module.exports = Script
11849 }).call(this,require("buffer").Buffer)
11850 },{"./bufferutils":
57,"./crypto":
58,"./opcodes":
67,"assert":
5,"buffer":
7,"typeforce":
53}],
69:[function(require,module,exports){
11851 (function (Buffer){
11852 var assert = require('assert')
11853 var ops = require('./opcodes')
11854 var typeForce = require('typeforce')
11856 var ecurve = require('ecurve')
11857 var curve = ecurve.getCurveByName('secp256k1')
11859 var ECSignature = require('./ecsignature')
11860 var Script = require('./script')
11862 function isCanonicalPubKey (buffer) {
11863 if (!Buffer.isBuffer(buffer)) return false
11866 ecurve.Point.decodeFrom(curve, buffer)
11868 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11877 function isCanonicalSignature (buffer) {
11878 if (!Buffer.isBuffer(buffer)) return false
11881 ECSignature.parseScriptSignature(buffer)
11883 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/))) {
11893 function isPubKeyHashInput (script) {
11894 return script.chunks.length ===
2 &&
11895 isCanonicalSignature(script.chunks[
0]) &&
11896 isCanonicalPubKey(script.chunks[
1])
11899 function isPubKeyHashOutput (script) {
11900 return script.chunks.length ===
5 &&
11901 script.chunks[
0] === ops.OP_DUP &&
11902 script.chunks[
1] === ops.OP_HASH160 &&
11903 Buffer.isBuffer(script.chunks[
2]) &&
11904 script.chunks[
2].length ===
20 &&
11905 script.chunks[
3] === ops.OP_EQUALVERIFY &&
11906 script.chunks[
4] === ops.OP_CHECKSIG
11909 function isPubKeyInput (script) {
11910 return script.chunks.length ===
1 &&
11911 isCanonicalSignature(script.chunks[
0])
11914 function isPubKeyOutput (script) {
11915 return script.chunks.length ===
2 &&
11916 isCanonicalPubKey(script.chunks[
0]) &&
11917 script.chunks[
1] === ops.OP_CHECKSIG
11920 function isScriptHashInput (script, allowIncomplete) {
11921 if (script.chunks.length <
2) return false
11923 var lastChunk = script.chunks[script.chunks.length -
1]
11924 if (!Buffer.isBuffer(lastChunk)) return false
11926 var scriptSig = Script.fromChunks(script.chunks.slice(
0, -
1))
11927 var redeemScript = Script.fromBuffer(lastChunk)
11929 // is redeemScript a valid script?
11930 if (redeemScript.chunks.length ===
0) return false
11932 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11935 function isScriptHashOutput (script) {
11936 return script.chunks.length ===
3 &&
11937 script.chunks[
0] === ops.OP_HASH160 &&
11938 Buffer.isBuffer(script.chunks[
1]) &&
11939 script.chunks[
1].length ===
20 &&
11940 script.chunks[
2] === ops.OP_EQUAL
11943 // allowIncomplete is to account for combining signatures
11944 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11945 function isMultisigInput (script, allowIncomplete) {
11946 if (script.chunks.length <
2) return false
11947 if (script.chunks[
0] !== ops.OP_0) return false
11949 if (allowIncomplete) {
11950 return script.chunks.slice(
1).every(function (chunk) {
11951 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11955 return script.chunks.slice(
1).every(isCanonicalSignature)
11958 function isMultisigOutput (script) {
11959 if (script.chunks.length <
4) return false
11960 if (script.chunks[script.chunks.length -
1] !== ops.OP_CHECKMULTISIG) return false
11962 var mOp = script.chunks[
0]
11963 if (mOp === ops.OP_0) return false
11964 if (mOp < ops.OP_1) return false
11965 if (mOp
> ops.OP_16) return false
11967 var nOp = script.chunks[script.chunks.length -
2]
11968 if (nOp === ops.OP_0) return false
11969 if (nOp < ops.OP_1) return false
11970 if (nOp
> ops.OP_16) return false
11972 var m = mOp - (ops.OP_1 -
1)
11973 var n = nOp - (ops.OP_1 -
1)
11974 if (n < m) return false
11976 var pubKeys = script.chunks.slice(
1, -
2)
11977 if (n < pubKeys.length) return false
11979 return pubKeys.every(isCanonicalPubKey)
11982 function isNullDataOutput (script) {
11983 return script.chunks[
0] === ops.OP_RETURN
11986 function classifyOutput (script) {
11987 typeForce('Script', script)
11989 if (isPubKeyHashOutput(script)) {
11990 return 'pubkeyhash'
11991 } else if (isScriptHashOutput(script)) {
11992 return 'scripthash'
11993 } else if (isMultisigOutput(script)) {
11995 } else if (isPubKeyOutput(script)) {
11997 } else if (isNullDataOutput(script)) {
12001 return 'nonstandard'
12004 function classifyInput (script, allowIncomplete) {
12005 typeForce('Script', script)
12007 if (isPubKeyHashInput(script)) {
12008 return 'pubkeyhash'
12009 } else if (isMultisigInput(script, allowIncomplete)) {
12011 } else if (isScriptHashInput(script, allowIncomplete)) {
12012 return 'scripthash'
12013 } else if (isPubKeyInput(script)) {
12017 return 'nonstandard'
12020 // Standard Script Templates
12021 // {pubKey} OP_CHECKSIG
12022 function pubKeyOutput (pubKey) {
12023 return Script.fromChunks([
12029 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12030 function pubKeyHashOutput (hash) {
12031 typeForce('Buffer', hash)
12033 return Script.fromChunks([
12037 ops.OP_EQUALVERIFY,
12042 // OP_HASH160 {scriptHash} OP_EQUAL
12043 function scriptHashOutput (hash) {
12044 typeForce('Buffer', hash)
12046 return Script.fromChunks([
12053 // m [pubKeys ...] n OP_CHECKMULTISIG
12054 function multisigOutput (m, pubKeys) {
12055 typeForce(['ECPubKey'], pubKeys)
12057 assert(pubKeys.length
>= m, 'Not enough pubKeys provided')
12059 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12060 return pubKey.toBuffer()
12062 var n = pubKeys.length
12064 return Script.fromChunks([].concat(
12065 (ops.OP_1 -
1) + m,
12067 (ops.OP_1 -
1) + n,
12068 ops.OP_CHECKMULTISIG
12073 function pubKeyInput (signature) {
12074 typeForce('Buffer', signature)
12076 return Script.fromChunks([signature])
12079 // {signature} {pubKey}
12080 function pubKeyHashInput (signature, pubKey) {
12081 typeForce('Buffer', signature)
12083 return Script.fromChunks([signature, pubKey.toBuffer()])
12086 //
<scriptSig> {serialized scriptPubKey script}
12087 function scriptHashInput (scriptSig, scriptPubKey) {
12088 return Script.fromChunks([].concat(
12090 scriptPubKey.toBuffer()
12094 // OP_0 [signatures ...]
12095 function multisigInput (signatures, scriptPubKey) {
12096 if (scriptPubKey) {
12097 assert(isMultisigOutput(scriptPubKey))
12099 var mOp = scriptPubKey.chunks[
0]
12100 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length -
2]
12101 var m = mOp - (ops.OP_1 -
1)
12102 var n = nOp - (ops.OP_1 -
1)
12104 assert(signatures.length
>= m, 'Not enough signatures provided')
12105 assert(signatures.length <= n, 'Too many signatures provided')
12108 return Script.fromChunks([].concat(ops.OP_0, signatures))
12111 function nullDataOutput (data) {
12112 return Script.fromChunks([ops.OP_RETURN, data])
12116 isCanonicalPubKey: isCanonicalPubKey,
12117 isCanonicalSignature: isCanonicalSignature,
12118 isPubKeyHashInput: isPubKeyHashInput,
12119 isPubKeyHashOutput: isPubKeyHashOutput,
12120 isPubKeyInput: isPubKeyInput,
12121 isPubKeyOutput: isPubKeyOutput,
12122 isScriptHashInput: isScriptHashInput,
12123 isScriptHashOutput: isScriptHashOutput,
12124 isMultisigInput: isMultisigInput,
12125 isMultisigOutput: isMultisigOutput,
12126 isNullDataOutput: isNullDataOutput,
12127 classifyOutput: classifyOutput,
12128 classifyInput: classifyInput,
12129 pubKeyOutput: pubKeyOutput,
12130 pubKeyHashOutput: pubKeyHashOutput,
12131 scriptHashOutput: scriptHashOutput,
12132 multisigOutput: multisigOutput,
12133 pubKeyInput: pubKeyInput,
12134 pubKeyHashInput: pubKeyHashInput,
12135 scriptHashInput: scriptHashInput,
12136 multisigInput: multisigInput,
12137 dataOutput: function (data) {
12138 console.warn('dataOutput is deprecated, use nullDataOutput by
2.0.0')
12139 return nullDataOutput(data)
12141 nullDataOutput: nullDataOutput
12144 }).call(this,require("buffer").Buffer)
12145 },{"./ecsignature":
62,"./opcodes":
67,"./script":
68,"assert":
5,"buffer":
7,"ecurve":
49,"typeforce":
53}],
70:[function(require,module,exports){
12146 (function (Buffer){
12147 var assert = require('assert')
12148 var bufferutils = require('./bufferutils')
12149 var crypto = require('./crypto')
12150 var typeForce = require('typeforce')
12151 var opcodes = require('./opcodes')
12152 var scripts = require('./scripts')
12154 var Address = require('./address')
12155 var ECSignature = require('./ecsignature')
12156 var Script = require('./script')
12158 function Transaction () {
12165 Transaction.DEFAULT_SEQUENCE =
0xffffffff
12166 Transaction.SIGHASH_ALL =
0x01
12167 Transaction.SIGHASH_NONE =
0x02
12168 Transaction.SIGHASH_SINGLE =
0x03
12169 Transaction.SIGHASH_ANYONECANPAY =
0x80
12171 Transaction.fromBuffer = function (buffer, __disableAssert) {
12173 function readSlice (n) {
12175 return buffer.slice(offset - n, offset)
12178 function readUInt32 () {
12179 var i = buffer.readUInt32LE(offset)
12184 function readUInt64 () {
12185 var i = bufferutils.readUInt64LE(buffer, offset)
12190 function readVarInt () {
12191 var vi = bufferutils.readVarInt(buffer, offset)
12196 function readScript () {
12197 return Script.fromBuffer(readSlice(readVarInt()))
12200 function readGenerationScript () {
12201 return new Script(readSlice(readVarInt()), [])
12204 var tx = new Transaction()
12205 tx.version = readUInt32()
12207 var vinLen = readVarInt()
12208 for (var i =
0; i < vinLen; ++i) {
12209 var hash = readSlice(
32)
12211 if (Transaction.isCoinbaseHash(hash)) {
12214 index: readUInt32(),
12215 script: readGenerationScript(),
12216 sequence: readUInt32()
12221 index: readUInt32(),
12222 script: readScript(),
12223 sequence: readUInt32()
12228 var voutLen = readVarInt()
12229 for (i =
0; i < voutLen; ++i) {
12231 value: readUInt64(),
12232 script: readScript()
12236 tx.locktime = readUInt32()
12238 if (!__disableAssert) {
12239 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12245 Transaction.fromHex = function (hex) {
12246 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12249 Transaction.isCoinbaseHash = function (buffer) {
12250 return Array.prototype.every.call(buffer, function (x) {
12256 * Create a new txIn.
12258 * Can be called with any of:
12260 * - A transaction and an index
12261 * - A transaction hash and an index
12263 * Note that this method does not sign the created input.
12265 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12266 if (sequence === undefined || sequence === null) {
12267 sequence = Transaction.DEFAULT_SEQUENCE
12270 script = script || Script.EMPTY
12272 if (typeof hash === 'string') {
12273 // TxId hex is big-endian, we need little-endian
12274 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12275 } else if (hash instanceof Transaction) {
12276 hash = hash.getHash()
12279 typeForce('Buffer', hash)
12280 typeForce('Number', index)
12281 typeForce('Number', sequence)
12282 typeForce('Script', script)
12284 assert.equal(hash.length,
32, 'Expected hash length of
32, got ' + hash.length)
12286 // Add the input and return the input's index
12287 return (this.ins.push({
12296 * Create a new txOut.
12298 * Can be called with:
12300 * - A base58 address string and a value
12301 * - An Address object and a value
12302 * - A scriptPubKey Script and a value
12304 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12305 // Attempt to get a valid address if it's a base58 address string
12306 if (typeof scriptPubKey === 'string') {
12307 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12310 // Attempt to get a valid script if it's an Address object
12311 if (scriptPubKey instanceof Address) {
12312 scriptPubKey = scriptPubKey.toOutputScript()
12315 typeForce('Script', scriptPubKey)
12316 typeForce('Number', value)
12318 // Add the output and return the output's index
12319 return (this.outs.push({
12320 script: scriptPubKey,
12325 Transaction.prototype.clone = function () {
12326 var newTx = new Transaction()
12327 newTx.version = this.version
12328 newTx.locktime = this.locktime
12330 newTx.ins = this.ins.map(function (txIn) {
12334 script: txIn.script,
12335 sequence: txIn.sequence
12339 newTx.outs = this.outs.map(function (txOut) {
12341 script: txOut.script,
12350 * Hash transaction for signing a specific input.
12352 * Bitcoin uses a different hash for each signed transaction input. This
12353 * method copies the transaction, makes the necessary changes based on the
12354 * hashType, serializes and finally hashes the result. This hash can then be
12355 * used to sign the transaction input in question.
12357 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12358 // FIXME: remove in
2.x.y
12359 if (arguments[
0] instanceof Script) {
12360 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12362 // swap the arguments (must be stored in tmp, arguments is special)
12363 var tmp = arguments[
0]
12364 inIndex = arguments[
1]
12365 prevOutScript = tmp
12368 typeForce('Number', inIndex)
12369 typeForce('Script', prevOutScript)
12370 typeForce('Number', hashType)
12372 assert(inIndex
>=
0, 'Invalid vin index')
12373 assert(inIndex < this.ins.length, 'Invalid vin index')
12375 var txTmp = this.clone()
12376 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12378 // Blank out other inputs' signatures
12379 txTmp.ins.forEach(function (txIn) {
12380 txIn.script = Script.EMPTY
12382 txTmp.ins[inIndex].script = hashScript
12384 var hashTypeModifier = hashType &
0x1f
12386 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12387 assert(false, 'SIGHASH_NONE not yet supported')
12388 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12389 assert(false, 'SIGHASH_SINGLE not yet supported')
12392 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12393 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12396 var hashTypeBuffer = new Buffer(
4)
12397 hashTypeBuffer.writeInt32LE(hashType,
0)
12399 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12400 return crypto.hash256(buffer)
12403 Transaction.prototype.getHash = function () {
12404 return crypto.hash256(this.toBuffer())
12407 Transaction.prototype.getId = function () {
12408 // TxHash is little-endian, we need big-endian
12409 return bufferutils.reverse(this.getHash()).toString('hex')
12412 Transaction.prototype.toBuffer = function () {
12413 function scriptSize (script) {
12414 var length = script.buffer.length
12416 return bufferutils.varIntSize(length) + length
12419 var buffer = new Buffer(
12421 bufferutils.varIntSize(this.ins.length) +
12422 bufferutils.varIntSize(this.outs.length) +
12423 this.ins.reduce(function (sum, input) { return sum +
40 + scriptSize(input.script) },
0) +
12424 this.outs.reduce(function (sum, output) { return sum +
8 + scriptSize(output.script) },
0)
12428 function writeSlice (slice) {
12429 slice.copy(buffer, offset)
12430 offset += slice.length
12433 function writeUInt32 (i) {
12434 buffer.writeUInt32LE(i, offset)
12438 function writeUInt64 (i) {
12439 bufferutils.writeUInt64LE(buffer, i, offset)
12443 function writeVarInt (i) {
12444 var n = bufferutils.writeVarInt(buffer, i, offset)
12448 writeUInt32(this.version)
12449 writeVarInt(this.ins.length)
12451 this.ins.forEach(function (txIn) {
12452 writeSlice(txIn.hash)
12453 writeUInt32(txIn.index)
12454 writeVarInt(txIn.script.buffer.length)
12455 writeSlice(txIn.script.buffer)
12456 writeUInt32(txIn.sequence)
12459 writeVarInt(this.outs.length)
12460 this.outs.forEach(function (txOut) {
12461 writeUInt64(txOut.value)
12462 writeVarInt(txOut.script.buffer.length)
12463 writeSlice(txOut.script.buffer)
12466 writeUInt32(this.locktime)
12471 Transaction.prototype.toHex = function () {
12472 return this.toBuffer().toString('hex')
12475 Transaction.prototype.setInputScript = function (index, script) {
12476 typeForce('Number', index)
12477 typeForce('Script', script)
12479 this.ins[index].script = script
12482 // FIXME: remove in
2.x.y
12483 Transaction.prototype.sign = function (index, privKey, hashType) {
12484 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12486 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12487 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12489 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12490 this.setInputScript(index, scriptSig)
12493 // FIXME: remove in
2.x.y
12494 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12495 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12497 hashType = hashType || Transaction.SIGHASH_ALL
12499 var hash = this.hashForSignature(index, prevOutScript, hashType)
12500 var signature = privKey.sign(hash)
12502 return signature.toScriptSignature(hashType)
12505 // FIXME: remove in
2.x.y
12506 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12507 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12509 var parsed = ECSignature.parseScriptSignature(buffer)
12510 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12512 return pubKey.verify(hash, parsed.signature)
12515 module.exports = Transaction
12517 }).call(this,require("buffer").Buffer)
12518 },{"./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){
12519 (function (Buffer){
12520 var assert = require('assert')
12521 var ops = require('./opcodes')
12522 var scripts = require('./scripts')
12524 var ECPubKey = require('./ecpubkey')
12525 var ECSignature = require('./ecsignature')
12526 var Script = require('./script')
12527 var Transaction = require('./transaction')
12529 function extractInput (txIn) {
12531 var scriptSig = txIn.script
12533 var prevOutType = scripts.classifyInput(scriptSig, true)
12536 // Re-classify if scriptHash
12537 if (prevOutType === 'scripthash') {
12538 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-
1)[
0])
12539 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12541 scriptSig = Script.fromChunks(scriptSig.chunks.slice(
0, -
1))
12542 scriptType = scripts.classifyInput(scriptSig, true)
12544 scriptType = prevOutType
12547 // Extract hashType, pubKeys and signatures
12548 var hashType, parsed, pubKeys, signatures
12550 switch (scriptType) {
12551 case 'pubkeyhash': {
12552 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12553 hashType = parsed.hashType
12554 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[
1])]
12555 signatures = [parsed.signature]
12556 prevOutScript = pubKeys[
0].getAddress().toOutputScript()
12562 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12563 hashType = parsed.hashType
12564 signatures = [parsed.signature]
12566 if (redeemScript) {
12567 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[
0])]
12574 signatures = scriptSig.chunks.slice(
1).map(function (chunk) {
12575 if (chunk === ops.OP_0) return chunk
12577 var parsed = ECSignature.parseScriptSignature(chunk)
12578 hashType = parsed.hashType
12580 return parsed.signature
12583 if (redeemScript) {
12584 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12592 hashType: hashType,
12593 prevOutScript: prevOutScript,
12594 prevOutType: prevOutType,
12596 redeemScript: redeemScript,
12597 scriptType: scriptType,
12598 signatures: signatures
12602 function TransactionBuilder () {
12603 this.prevTxMap = {}
12604 this.prevOutScripts = {}
12605 this.prevOutTypes = {}
12608 this.tx = new Transaction()
12611 TransactionBuilder.fromTransaction = function (transaction) {
12612 var txb = new TransactionBuilder()
12614 // Copy other transaction fields
12615 txb.tx.version = transaction.version
12616 txb.tx.locktime = transaction.locktime
12618 // Extract/add inputs
12619 transaction.ins.forEach(function (txIn) {
12620 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12623 // Extract/add outputs
12624 transaction.outs.forEach(function (txOut) {
12625 txb.addOutput(txOut.script, txOut.value)
12628 // Extract/add signatures
12629 txb.inputs = transaction.ins.map(function (txIn) {
12630 // TODO: remove me after testcase added
12631 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12633 // Ignore empty scripts
12634 if (txIn.script.buffer.length ===
0) return {}
12636 return extractInput(txIn)
12642 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12646 if (typeof prevTx === 'string') {
12647 prevOutHash = new Buffer(prevTx, 'hex')
12649 // TxId hex is big-endian, we want little-endian hash
12650 Array.prototype.reverse.call(prevOutHash)
12653 } else if (prevTx instanceof Transaction) {
12654 prevOutHash = prevTx.getHash()
12655 prevOutScript = prevTx.outs[index].script
12659 prevOutHash = prevTx
12663 if (prevOutScript) {
12664 var prevOutType = scripts.classifyOutput(prevOutScript)
12666 // if we can, extract pubKey information
12667 switch (prevOutType) {
12669 input.pubKeys = prevOutScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12674 input.pubKeys = prevOutScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12679 if (prevOutType !== 'scripthash') {
12680 input.scriptType = prevOutType
12683 input.prevOutScript = prevOutScript
12684 input.prevOutType = prevOutType
12687 assert(this.inputs.every(function (input2) {
12688 if (input2.hashType === undefined) return true
12690 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12691 }), 'No, this would invalidate signatures')
12693 var prevOut = prevOutHash.toString('hex') + ':' + index
12694 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12696 var vin = this.tx.addInput(prevOutHash, index, sequence)
12697 this.inputs[vin] = input
12698 this.prevTxMap[prevOut] = vin
12703 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12704 assert(this.inputs.every(function (input) {
12705 if (input.hashType === undefined) return true
12707 return (input.hashType &
0x1f) === Transaction.SIGHASH_SINGLE
12708 }), 'No, this would invalidate signatures')
12710 return this.tx.addOutput(scriptPubKey, value)
12713 TransactionBuilder.prototype.build = function () {
12714 return this.__build(false)
12716 TransactionBuilder.prototype.buildIncomplete = function () {
12717 return this.__build(true)
12720 var canSignTypes = {
12721 'pubkeyhash': true,
12726 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12727 if (!allowIncomplete) {
12728 assert(this.tx.ins.length
> 0, 'Transaction has no inputs')
12729 assert(this.tx.outs.length
> 0, 'Transaction has no outputs')
12732 var tx = this.tx.clone()
12734 // Create script signatures from signature meta-data
12735 this.inputs.forEach(function (input, index) {
12736 var scriptType = input.scriptType
12739 if (!allowIncomplete) {
12740 assert(!!scriptType, 'Transaction is not complete')
12741 assert(scriptType in canSignTypes, scriptType + ' not supported')
12742 assert(input.signatures, 'Transaction is missing signatures')
12745 if (input.signatures) {
12746 switch (scriptType) {
12747 case 'pubkeyhash': {
12748 var pkhSignature = input.signatures[
0].toScriptSignature(input.hashType)
12749 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[
0])
12754 // Array.prototype.map is sparse-compatible
12755 var msSignatures = input.signatures.map(function (signature) {
12756 return signature && signature.toScriptSignature(input.hashType)
12759 // fill in blanks with OP_0
12760 if (allowIncomplete) {
12761 for (var i =
0; i < msSignatures.length; ++i) {
12762 if (msSignatures[i]) continue
12764 msSignatures[i] = ops.OP_0
12767 // Array.prototype.filter returns non-sparse array
12768 msSignatures = msSignatures.filter(function (x) { return x })
12771 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12772 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12777 var pkSignature = input.signatures[
0].toScriptSignature(input.hashType)
12778 scriptSig = scripts.pubKeyInput(pkSignature)
12784 // did we build a scriptSig?
12786 // wrap as scriptHash if necessary
12787 if (input.prevOutType === 'scripthash') {
12788 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12791 tx.setInputScript(index, scriptSig)
12798 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12799 assert(index in this.inputs, 'No input at index: ' + index)
12800 hashType = hashType || Transaction.SIGHASH_ALL
12802 var input = this.inputs[index]
12803 var canSign = input.hashType &&
12804 input.prevOutScript &&
12805 input.prevOutType &&
12807 input.scriptType &&
12810 // are we almost ready to sign?
12812 // if redeemScript was provided, enforce consistency
12813 if (redeemScript) {
12814 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12817 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12821 // must be pay-to-scriptHash?
12822 if (redeemScript) {
12823 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12824 if (input.prevOutScript) {
12825 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12827 var scriptHash = input.prevOutScript.chunks[
1]
12828 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12831 var scriptType = scripts.classifyOutput(redeemScript)
12832 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12835 switch (scriptType) {
12837 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12841 case 'pubkeyhash': {
12842 var pkh1 = redeemScript.chunks[
2]
12843 var pkh2 = privKey.pub.getAddress().hash
12845 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12846 pubKeys = [privKey.pub]
12851 pubKeys = redeemScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12856 if (!input.prevOutScript) {
12857 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12858 input.prevOutType = 'scripthash'
12861 input.pubKeys = pubKeys
12862 input.redeemScript = redeemScript
12863 input.scriptType = scriptType
12865 // cannot be pay-to-scriptHash
12867 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12869 // can we otherwise sign this?
12870 if (input.scriptType) {
12871 assert(input.pubKeys, input.scriptType + ' not supported')
12873 // we know nothin' Jon Snow, assume pubKeyHash
12875 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12876 input.prevOutType = 'pubkeyhash'
12877 input.pubKeys = [privKey.pub]
12878 input.scriptType = input.prevOutType
12882 input.hashType = hashType
12883 input.signatures = input.signatures || []
12886 var signatureScript = input.redeemScript || input.prevOutScript
12887 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12889 // enforce signature order matches public keys
12890 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12891 // maintain a local copy of unmatched signatures
12892 var unmatched = input.signatures.slice()
12894 input.signatures = input.pubKeys.map(function (pubKey) {
12897 // check for any matching signatures
12898 unmatched.some(function (signature, i) {
12899 if (!pubKey.verify(signatureHash, signature)) return false
12902 // remove matched signature from unmatched
12903 unmatched.splice(i,
1)
12908 return match || undefined
12912 // enforce in order signing of public keys
12913 assert(input.pubKeys.some(function (pubKey, i) {
12914 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12916 assert(!input.signatures[i], 'Signature already exists')
12917 var signature = privKey.sign(signatureHash)
12918 input.signatures[i] = signature
12921 }, this), 'privateKey cannot sign for this input')
12924 module.exports = TransactionBuilder
12926 }).call(this,require(
"buffer").Buffer)
12927 },{
"./ecpubkey":
61,
"./ecsignature":
62,
"./opcodes":
67,
"./script":
68,
"./scripts":
69,
"./transaction":
70,
"assert":
5,
"buffer":
7}],
72:[function(require,module,exports){
12928 (function (Buffer){
12929 var assert = require('assert')
12930 var bufferutils = require('./bufferutils')
12931 var typeForce = require('typeforce')
12932 var networks = require('./networks')
12933 var randomBytes = require('randombytes')
12935 var Address = require('./address')
12936 var HDNode = require('./hdnode')
12937 var TransactionBuilder = require('./transaction_builder')
12938 var Script = require('./script')
12940 function Wallet (seed, network) {
12941 console.warn('Wallet is deprecated and will be removed in
2.0.0, see #
296')
12943 seed = seed || randomBytes(
32)
12944 network = network || networks.bitcoin
12946 // Stored in a closure to make accidental serialization less likely
12947 var masterKey = HDNode.fromSeedBuffer(seed, network)
12949 // HD first-level child derivation method should be hardened
12950 // See https://bitcointalk.org/index.php?topic=
405179.msg4415254#msg4415254
12951 var accountZero = masterKey.deriveHardened(
0)
12952 var externalAccount = accountZero.derive(
0)
12953 var internalAccount = accountZero.derive(
1)
12955 this.addresses = []
12956 this.changeAddresses = []
12957 this.network = network
12960 // FIXME: remove in
2.0.0
12961 this.unspentMap = {}
12963 // FIXME: remove in
2.0.0
12965 this.newMasterKey = function (seed) {
12966 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12968 seed = seed || randomBytes(
32)
12969 masterKey = HDNode.fromSeedBuffer(seed, network)
12971 accountZero = masterKey.deriveHardened(
0)
12972 externalAccount = accountZero.derive(
0)
12973 internalAccount = accountZero.derive(
1)
12976 me.changeAddresses = []
12982 this.getMasterKey = function () {
12985 this.getAccountZero = function () {
12988 this.getExternalAccount = function () {
12989 return externalAccount
12991 this.getInternalAccount = function () {
12992 return internalAccount
12996 Wallet.prototype.createTransaction = function (to, value, options) {
12997 // FIXME: remove in
2.0.0
12998 if (typeof options !== 'object') {
12999 if (options !== undefined) {
13000 console.warn('Non options object parameters are deprecated, use options object instead')
13003 fixedFee: arguments[
2],
13004 changeAddress: arguments[
3]
13009 options = options || {}
13011 assert(value
> this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13013 var changeAddress = options.changeAddress
13014 var fixedFee = options.fixedFee
13015 var minConf = options.minConf === undefined ?
0 : options.minConf // FIXME: change minConf:
1 by default in
2.0.0
13017 // filter by minConf, then pending and sort by descending value
13018 var unspents = this.unspents.filter(function (unspent) {
13019 return unspent.confirmations
>= minConf
13020 }).filter(function (unspent) {
13021 return !unspent.pending
13022 }).sort(function (o1, o2) {
13023 return o2.value - o1.value
13028 var subTotal = value
13030 var txb = new TransactionBuilder()
13031 txb.addOutput(to, value)
13033 for (var i =
0; i < unspents.length; ++i) {
13034 var unspent = unspents[i]
13035 addresses.push(unspent.address)
13037 txb.addInput(unspent.txHash, unspent.index)
13039 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13041 accum += unspent.value
13042 subTotal = value + fee
13044 if (accum
>= subTotal) {
13045 var change = accum - subTotal
13047 if (change
> this.network.dustThreshold) {
13048 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13055 assert(accum
>= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13057 return this.signWith(txb, addresses).build()
13060 // FIXME: remove in
2.0.0
13061 Wallet.prototype.processPendingTx = function (tx) {
13062 this.__processTx(tx, true)
13065 // FIXME: remove in
2.0.0
13066 Wallet.prototype.processConfirmedTx = function (tx) {
13067 this.__processTx(tx, false)
13070 // FIXME: remove in
2.0.0
13071 Wallet.prototype.__processTx = function (tx, isPending) {
13072 console.warn('processTransaction is considered harmful, see issue #
260 for more information')
13074 var txId = tx.getId()
13075 var txHash = tx.getHash()
13077 tx.outs.forEach(function (txOut, i) {
13081 address = Address.fromOutputScript(txOut.script, this.network).toString()
13083 if (!(e.message.match(/has no matching Address/)))
13087 var myAddresses = this.addresses.concat(this.changeAddresses)
13088 if (myAddresses.indexOf(address)
> -
1) {
13089 var lookup = txId + ':' + i
13090 if (lookup in this.unspentMap) return
13092 // its unique, add it
13095 confirmations:
0, // no way to determine this without more information
13099 value: txOut.value,
13103 this.unspentMap[lookup] = unspent
13104 this.unspents.push(unspent)
13108 tx.ins.forEach(function (txIn) {
13109 // copy and convert to big-endian hex
13110 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13112 var lookup = txInId + ':' + txIn.index
13113 if (!(lookup in this.unspentMap)) return
13115 var unspent = this.unspentMap[lookup]
13118 unspent.pending = true
13119 unspent.spent = true
13121 delete this.unspentMap[lookup]
13123 this.unspents = this.unspents.filter(function (unspent2) {
13124 return unspent !== unspent2
13130 Wallet.prototype.generateAddress = function () {
13131 var k = this.addresses.length
13132 var address = this.getExternalAccount().derive(k).getAddress()
13134 this.addresses.push(address.toString())
13136 return this.getReceiveAddress()
13139 Wallet.prototype.generateChangeAddress = function () {
13140 var k = this.changeAddresses.length
13141 var address = this.getInternalAccount().derive(k).getAddress()
13143 this.changeAddresses.push(address.toString())
13145 return this.getChangeAddress()
13148 Wallet.prototype.getAddress = function () {
13149 if (this.addresses.length ===
0) {
13150 this.generateAddress()
13153 return this.addresses[this.addresses.length -
1]
13156 Wallet.prototype.getBalance = function (minConf) {
13157 minConf = minConf ||
0
13159 return this.unspents.filter(function (unspent) {
13160 return unspent.confirmations
>= minConf
13162 // FIXME: remove spent filter in
2.0.0
13163 }).filter(function (unspent) {
13164 return !unspent.spent
13165 }).reduce(function (accum, unspent) {
13166 return accum + unspent.value
13170 Wallet.prototype.getChangeAddress = function () {
13171 if (this.changeAddresses.length ===
0) {
13172 this.generateChangeAddress()
13175 return this.changeAddresses[this.changeAddresses.length -
1]
13178 Wallet.prototype.getInternalPrivateKey = function (index) {
13179 return this.getInternalAccount().derive(index).privKey
13182 Wallet.prototype.getPrivateKey = function (index) {
13183 return this.getExternalAccount().derive(index).privKey
13186 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13189 if ((index = this.addresses.indexOf(address))
> -
1) {
13190 return this.getPrivateKey(index)
13193 if ((index = this.changeAddresses.indexOf(address))
> -
1) {
13194 return this.getInternalPrivateKey(index)
13197 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13200 Wallet.prototype.getUnspentOutputs = function (minConf) {
13201 minConf = minConf ||
0
13203 return this.unspents.filter(function (unspent) {
13204 return unspent.confirmations
>= minConf
13206 // FIXME: remove spent filter in
2.0.0
13207 }).filter(function (unspent) {
13208 return !unspent.spent
13209 }).map(function (unspent) {
13211 address: unspent.address,
13212 confirmations: unspent.confirmations,
13213 index: unspent.index,
13214 txId: unspent.txId,
13215 value: unspent.value,
13217 // FIXME: remove in
2.0.0
13218 hash: unspent.txId,
13219 pending: unspent.pending
13224 Wallet.prototype.setUnspentOutputs = function (unspents) {
13225 this.unspentMap = {}
13226 this.unspents = unspents.map(function (unspent) {
13227 // FIXME: remove unspent.hash in
2.0.0
13228 var txId = unspent.txId || unspent.hash
13229 var index = unspent.index
13231 // FIXME: remove in
2.0.0
13232 if (unspent.hash !== undefined) {
13233 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13236 // FIXME: remove in
2.0.0
13237 if (index === undefined) {
13238 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13239 index = unspent.outputIndex
13242 typeForce('String', txId)
13243 typeForce('Number', index)
13244 typeForce('Number', unspent.value)
13246 assert.equal(txId.length,
64, 'Expected valid txId, got ' + txId)
13247 assert.doesNotThrow(function () {
13248 Address.fromBase58Check(unspent.address)
13249 }, 'Expected Base58 Address, got ' + unspent.address)
13250 assert(isFinite(index), 'Expected finite index, got ' + index)
13252 // FIXME: remove branch in
2.0.0
13253 if (unspent.confirmations !== undefined) {
13254 typeForce('Number', unspent.confirmations)
13257 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13260 address: unspent.address,
13261 confirmations: unspent.confirmations ||
0,
13265 value: unspent.value,
13267 // FIXME: remove in
2.0.0
13268 pending: unspent.pending || false
13271 // FIXME: remove in
2.0.0
13272 this.unspentMap[txId + ':' + index] = unspent
13278 Wallet.prototype.signWith = function (tx, addresses) {
13279 addresses.forEach(function (address, i) {
13280 var privKey = this.getPrivateKeyForAddress(address)
13282 tx.sign(i, privKey)
13288 function estimatePaddedFee (tx, network) {
13289 var tmpTx = tx.clone()
13290 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold ||
0)
13292 return network.estimateFee(tmpTx)
13295 // FIXME:
1.0.0 shims, remove in
2.0.0
13296 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13297 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13299 module.exports = Wallet
13301 }).call(this,require("buffer").Buffer)
13302 },{"./address":
54,"./bufferutils":
57,"./hdnode":
63,"./networks":
66,"./script":
68,"./transaction_builder":
71,"assert":
5,"buffer":
7,"randombytes":
52,"typeforce":
53}]},{},[
64])(
64)
13304 <script>bitcoin.networks.shadow = {
13305 magicPrefix: '\x19ShadowCash Signed Message:\n',
13307 public:
0xEE80286A,
13308 private:
0xEE8031E8
13315 estimateFee: function() { return "unused in this app" },
13318 bitcoin.networks.shadowtn = {
13319 magicPrefix: '\x19ShadowCash Signed Message:\n',
13321 public:
0x76C0FDFB,
13322 private:
0x76C1077A
13329 estimateFee: function() { return "unused in this app" },
13332 bitcoin.networks.clam = {
13334 public:
0xa8c26d64,
13335 private:
0xa8c17826
13341 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13345 /** @fileOverview Javascript cryptography implementation.
13347 * Crush to remove comments, shorten variable names and
13348 * generally reduce transmission size.
13350 * @author Emily Stark
13351 * @author Mike Hamburg
13352 * @author Dan Boneh
13356 /*jslint indent:
2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13357 /*global document, window, escape, unescape, module, require, Uint32Array */
13359 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13361 /** @namespace Symmetric ciphers. */
13364 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13367 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13370 /** @namespace Block cipher modes of operation. */
13373 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13377 * @namespace Bit array encoders and decoders.
13380 * The members of this namespace are functions which translate between
13381 * SJCL's bitArrays and other objects (usually strings). Because it
13382 * isn't always clear which direction is encoding and which is decoding,
13383 * the method names are "fromBits" and "toBits".
13387 /** @namespace Exceptions. */
13389 /** @constructor Ciphertext is corrupt. */
13390 corrupt: function(message) {
13391 this.toString = function() { return "CORRUPT: "+this.message; };
13392 this.message = message;
13395 /** @constructor Invalid parameter. */
13396 invalid: function(message) {
13397 this.toString = function() { return "INVALID: "+this.message; };
13398 this.message = message;
13401 /** @constructor Bug or missing feature in SJCL. @constructor */
13402 bug: function(message) {
13403 this.toString = function() { return "BUG: "+this.message; };
13404 this.message = message;
13407 /** @constructor Something isn't ready. */
13408 notReady: function(message) {
13409 this.toString = function() { return "NOT READY: "+this.message; };
13410 this.message = message;
13415 if(typeof module !== 'undefined' && module.exports){
13416 module.exports = sjcl;
13418 if (typeof define === "function") {
13419 define([], function () {
13427 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13429 * @author Emily Stark
13430 * @author Mike Hamburg
13431 * @author Dan Boneh
13434 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13438 * These objects are the currency accepted by SJCL's crypto functions.
13442 * Most of our crypto primitives operate on arrays of
4-byte words internally,
13443 * but many of them can take arguments that are not a multiple of
4 bytes.
13444 * This library encodes arrays of bits (whose size need not be a multiple of
8
13445 * bits) as arrays of
32-bit words. The bits are packed, big-endian, into an
13446 * array of words,
32 bits at a time. Since the words are double-precision
13447 * floating point numbers, they fit some extra data. We use this (in a private,
13448 * possibly-changing manner) to encode the number of bits actually present
13449 * in the last word of the array.
13453 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13454 * to ciphers like AES which want arrays of words.
13459 * Array slices in units of bits.
13460 * @param {bitArray} a The array to slice.
13461 * @param {Number} bstart The offset to the start of the slice, in bits.
13462 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13463 * slice until the end of the array.
13464 * @return {bitArray} The requested slice.
13466 bitSlice: function (a, bstart, bend) {
13467 a = sjcl.bitArray._shiftRight(a.slice(bstart/
32),
32 - (bstart &
31)).slice(
1);
13468 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13472 * Extract a number packed into a bit array.
13473 * @param {bitArray} a The array to slice.
13474 * @param {Number} bstart The offset to the start of the slice, in bits.
13475 * @param {Number} length The length of the number to extract.
13476 * @return {Number} The requested slice.
13478 extract: function(a, bstart, blength) {
13479 // FIXME: this Math.floor is not necessary at all, but for some reason
13480 // seems to suppress a bug in the Chromium JIT.
13481 var x, sh = Math.floor((-bstart-blength) &
31);
13482 if ((bstart + blength -
1 ^ bstart) & -
32) {
13483 // it crosses a boundary
13484 x = (a[bstart/
32|
0] << (
32 - sh)) ^ (a[bstart/
32+
1|
0]
>>> sh);
13486 // within a single word
13487 x = a[bstart/
32|
0]
>>> sh;
13489 return x & ((
1<
<blength) -
1);
13493 * Concatenate two bit arrays.
13494 * @param {bitArray} a1 The first array.
13495 * @param {bitArray} a2 The second array.
13496 * @return {bitArray} The concatenation of a1 and a2.
13498 concat: function (a1, a2) {
13499 if (a1.length ===
0 || a2.length ===
0) {
13500 return a1.concat(a2);
13503 var last = a1[a1.length-
1], shift = sjcl.bitArray.getPartial(last);
13504 if (shift ===
32) {
13505 return a1.concat(a2);
13507 return sjcl.bitArray._shiftRight(a2, shift, last|
0, a1.slice(
0,a1.length-
1));
13512 * Find the length of an array of bits.
13513 * @param {bitArray} a The array.
13514 * @return {Number} The length of a, in bits.
13516 bitLength: function (a) {
13517 var l = a.length, x;
13518 if (l ===
0) { return
0; }
13520 return (l-
1) *
32 + sjcl.bitArray.getPartial(x);
13524 * Truncate an array.
13525 * @param {bitArray} a The array.
13526 * @param {Number} len The length to truncate to, in bits.
13527 * @return {bitArray} A new array, truncated to len bits.
13529 clamp: function (a, len) {
13530 if (a.length *
32 < len) { return a; }
13531 a = a.slice(
0, Math.ceil(len /
32));
13534 if (l
> 0 && len) {
13535 a[l-
1] = sjcl.bitArray.partial(len, a[l-
1] &
0x80000000 >> (len-
1),
1);
13541 * Make a partial word for a bit array.
13542 * @param {Number} len The number of bits in the word.
13543 * @param {Number} x The bits.
13544 * @param {Number} [
0] _end Pass
1 if x has already been shifted to the high side.
13545 * @return {Number} The partial word.
13547 partial: function (len, x, _end) {
13548 if (len ===
32) { return x; }
13549 return (_end ? x|
0 : x << (
32-len)) + len *
0x10000000000;
13553 * Get the number of bits used by a partial word.
13554 * @param {Number} x The partial word.
13555 * @return {Number} The number of bits used by the partial word.
13557 getPartial: function (x) {
13558 return Math.round(x/
0x10000000000) ||
32;
13562 * Compare two arrays for equality in a predictable amount of time.
13563 * @param {bitArray} a The first array.
13564 * @param {bitArray} b The second array.
13565 * @return {boolean} true if a == b; false otherwise.
13567 equal: function (a, b) {
13568 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13572 for (i=
0; i
<a.length; i++) {
13578 /** Shift an array right.
13579 * @param {bitArray} a The array to shift.
13580 * @param {Number} shift The number of bits to shift.
13581 * @param {Number} [carry=
0] A byte to carry in
13582 * @param {bitArray} [out=[]] An array to prepend to the output.
13585 _shiftRight: function (a, shift, carry, out) {
13586 var i, last2=
0, shift2;
13587 if (out === undefined) { out = []; }
13589 for (; shift
>=
32; shift -=
32) {
13594 return out.concat(a);
13597 for (i=
0; i
<a.length; i++) {
13598 out.push(carry | a[i]
>>>shift);
13599 carry = a[i] << (
32-shift);
13601 last2 = a.length ? a[a.length-
1] :
0;
13602 shift2 = sjcl.bitArray.getPartial(last2);
13603 out.push(sjcl.bitArray.partial(shift+shift2 &
31, (shift + shift2
> 32) ? carry : out.pop(),
1));
13607 /** xor a block of
4 words together.
13610 _xor4: function(x,y) {
13611 return [x[
0]^y[
0],x[
1]^y[
1],x[
2]^y[
2],x[
3]^y[
3]];
13614 /** byteswap a word array inplace.
13615 * (does not handle partial words)
13616 * @param {sjcl.bitArray} a word array
13617 * @return {sjcl.bitArray} byteswapped array
13619 byteswapM: function(a) {
13620 var i, v, m =
0xff00;
13621 for (i =
0; i < a.length; ++i) {
13623 a[i] = (v
>>> 24) | ((v
>>> 8) & m) | ((v & m) <<
8) | (v <<
24);
13630 //// codecString.js
13632 /** @fileOverview Bit array codec implementations.
13634 * @author Emily Stark
13635 * @author Mike Hamburg
13636 * @author Dan Boneh
13639 /** @namespace UTF-
8 strings */
13640 sjcl.codec.utf8String = {
13641 /** Convert from a bitArray to a UTF-
8 string. */
13642 fromBits: function (arr) {
13643 var out =
"", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13644 for (i=
0; i
<bl/
8; i++) {
13648 out += String.fromCharCode(tmp
>>> 24);
13651 return decodeURIComponent(escape(out));
13654 /** Convert from a UTF-
8 string to a bitArray. */
13655 toBits: function (str) {
13656 str = unescape(encodeURIComponent(str));
13657 var out = [], i, tmp=
0;
13658 for (i=
0; i
<str.length; i++) {
13659 tmp = tmp <<
8 | str.charCodeAt(i);
13666 out.push(sjcl.bitArray.partial(
8*(i&
3), tmp));
13675 /** @fileOverview Bit array codec implementations.
13677 * @author Emily Stark
13678 * @author Mike Hamburg
13679 * @author Dan Boneh
13682 /** @namespace Hexadecimal */
13684 /** Convert from a bitArray to a hex string. */
13685 fromBits: function (arr) {
13687 for (i=
0; i
<arr.length; i++) {
13688 out += ((arr[i]|
0)+
0xF00000000000).toString(
16).substr(
4);
13690 return out.substr(
0, sjcl.bitArray.bitLength(arr)/
4);//.replace(/(.{
8})/g,
"$1 ");
13692 /** Convert from a hex string to a bitArray. */
13693 toBits: function (str) {
13694 var i, out=[], len;
13695 str = str.replace(/\s|
0x/g,
"");
13697 str = str +
"00000000";
13698 for (i=
0; i
<str.length; i+=
8) {
13699 out.push(parseInt(str.substr(i,
8),
16)^
0);
13701 return sjcl.bitArray.clamp(out, len*
4);
13708 /** @fileOverview Javascript SHA-
512 implementation.
13710 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13711 * SJCL by Stefan Thomas.
13713 * CryptoJS (c)
2009–
2012 by Jeff Mott. All rights reserved.
13714 * Released with New BSD License
13716 * @author Emily Stark
13717 * @author Mike Hamburg
13718 * @author Dan Boneh
13719 * @author Jeff Mott
13720 * @author Stefan Thomas
13724 * Context for a SHA-
512 operation in progress.
13726 * @class Secure Hash Algorithm,
512 bits.
13728 sjcl.hash.sha512 = function (hash) {
13729 if (!this._key[
0]) { this._precompute(); }
13731 this._h = hash._h.slice(
0);
13732 this._buffer = hash._buffer.slice(
0);
13733 this._length = hash._length;
13740 * Hash a string or an array of words.
13742 * @param {bitArray|String} data the data to hash.
13743 * @return {bitArray} The hash value, an array of
16 big-endian words.
13745 sjcl.hash.sha512.hash = function (data) {
13746 return (new sjcl.hash.sha512()).update(data).finalize();
13749 sjcl.hash.sha512.prototype = {
13751 * The hash's block size, in bits.
13757 * Reset the hash state.
13760 reset:function () {
13761 this._h = this._init.slice(
0);
13768 * Input several words to the hash.
13769 * @param {bitArray|String} data the data to hash.
13772 update: function (data) {
13773 if (typeof data ===
"string") {
13774 data = sjcl.codec.utf8String.toBits(data);
13776 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13778 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13779 for (i =
1024+ol & -
1024; i <= nl; i+=
1024) {
13780 this._block(b.splice(
0,
32));
13786 * Complete hashing and output the hash value.
13787 * @return {bitArray} The hash value, an array of
16 big-endian words.
13789 finalize:function () {
13790 var i, b = this._buffer, h = this._h;
13792 // Round out and push the buffer
13793 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
13795 // Round out the buffer to a multiple of
32 words, less the
4 length words.
13796 for (i = b.length +
4; i &
31; i++) {
13800 // append the length
13803 b.push(Math.floor(this._length /
0x100000000));
13804 b.push(this._length |
0);
13807 this._block(b.splice(
0,
32));
13815 * The SHA-
512 initialization vector, to be precomputed.
13821 * Least significant
24 bits of SHA512 initialization values.
13823 * Javascript only has
53 bits of precision, so we compute the
40 most
13824 * significant bits and add the remaining
24 bits as constants.
13828 _initr: [
0xbcc908,
0xcaa73b,
0x94f82b,
0x1d36f1,
0xe682d1,
0x3e6c1f,
0x41bd6b,
0x7e2179 ],
13832 [
0x6a09e667,
0xf3bcc908,
0xbb67ae85,
0x84caa73b,
0x3c6ef372,
0xfe94f82b,
0xa54ff53a,
0x5f1d36f1,
13833 0x510e527f,
0xade682d1,
0x9b05688c,
0x2b3e6c1f,
0x1f83d9ab,
0xfb41bd6b,
0x5be0cd19,
0x137e2179],
13837 * The SHA-
512 hash key, to be precomputed.
13843 * Least significant
24 bits of SHA512 key values.
13847 [
0x28ae22,
0xef65cd,
0x4d3b2f,
0x89dbbc,
0x48b538,
0x05d019,
0x194f9b,
0x6d8118,
13848 0x030242,
0x706fbe,
0xe4b28c,
0xffb4e2,
0x7b896f,
0x1696b1,
0xc71235,
0x692694,
13849 0xf14ad2,
0x4f25e3,
0x8cd5b5,
0xac9c65,
0x2b0275,
0xa6e483,
0x41fbd4,
0x1153b5,
13850 0x66dfab,
0xb43210,
0xfb213f,
0xef0ee4,
0xa88fc2,
0x0aa725,
0x03826f,
0x0e6e70,
13851 0xd22ffc,
0x26c926,
0xc42aed,
0x95b3df,
0xaf63de,
0x77b2a8,
0xedaee6,
0x82353b,
13852 0xf10364,
0x423001,
0xf89791,
0x54be30,
0xef5218,
0x65a910,
0x71202a,
0xbbd1b8,
13853 0xd2d0c8,
0x41ab53,
0x8eeb99,
0x9b48a8,
0xc95a63,
0x418acb,
0x63e373,
0xb2b8a3,
13854 0xefb2fc,
0x172f60,
0xf0ab72,
0x6439ec,
0x631e28,
0x82bde9,
0xc67915,
0x72532b,
13855 0x26619c,
0xc0c207,
0xe0eb1e,
0x6ed178,
0x176fba,
0xc898a6,
0xf90dae,
0x1c471b,
13856 0x047d84,
0xc72493,
0xc9bebc,
0x100d4c,
0x3e42b6,
0x657e2a,
0xd6faec,
0x475817],
13860 [
0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
13861 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
13862 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
13863 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
13864 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
13865 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
13866 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
13867 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
13868 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
13869 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
13870 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
13871 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
13872 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
13873 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
13874 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
13875 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
13876 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
13877 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
13878 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
13879 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817],
13883 * Function to precompute _init and _key.
13886 _precompute: function () {
13887 // XXX: This code is for precomputing the SHA256 constants, change for
13888 // SHA512 and re-enable.
13889 var i =
0, prime =
2, factor;
13891 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
13892 function frac2(x) { return (x-Math.floor(x)) *
0x10000000000 &
0xff; }
13894 outer: for (; i
<80; prime++) {
13895 for (factor=
2; factor*factor <= prime; factor++) {
13896 if (prime % factor ===
0) {
13903 this._init[i*
2] = frac(Math.pow(prime,
1/
2));
13904 this._init[i*
2+
1] = (frac2(Math.pow(prime,
1/
2)) <<
24) | this._initr[i];
13906 this._key[i*
2] = frac(Math.pow(prime,
1/
3));
13907 this._key[i*
2+
1] = (frac2(Math.pow(prime,
1/
3)) <<
24) | this._keyr[i];
13913 * Perform one cycle of SHA-
512.
13914 * @param {bitArray} words one block of words.
13917 _block:function (words) {
13919 w = words.slice(
0),
13922 h0h = h[
0], h0l = h[
1], h1h = h[
2], h1l = h[
3],
13923 h2h = h[
4], h2l = h[
5], h3h = h[
6], h3l = h[
7],
13924 h4h = h[
8], h4l = h[
9], h5h = h[
10], h5l = h[
11],
13925 h6h = h[
12], h6l = h[
13], h7h = h[
14], h7l = h[
15];
13927 // Working variables
13928 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13929 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13930 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13931 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13933 for (i=
0; i
<80; i++) {
13934 // load up the input word for this round
13937 wrl = w[i *
2 +
1];
13940 var gamma0xh = w[(i-
15) *
2];
13941 var gamma0xl = w[(i-
15) *
2 +
1];
13943 ((gamma0xl <<
31) | (gamma0xh
>>> 1)) ^
13944 ((gamma0xl <<
24) | (gamma0xh
>>> 8)) ^
13947 ((gamma0xh <<
31) | (gamma0xl
>>> 1)) ^
13948 ((gamma0xh <<
24) | (gamma0xl
>>> 8)) ^
13949 ((gamma0xh <<
25) | (gamma0xl
>>> 7));
13952 var gamma1xh = w[(i-
2) *
2];
13953 var gamma1xl = w[(i-
2) *
2 +
1];
13955 ((gamma1xl <<
13) | (gamma1xh
>>> 19)) ^
13956 ((gamma1xh <<
3) | (gamma1xl
>>> 29)) ^
13959 ((gamma1xh <<
13) | (gamma1xl
>>> 19)) ^
13960 ((gamma1xl <<
3) | (gamma1xh
>>> 29)) ^
13961 ((gamma1xh <<
26) | (gamma1xl
>>> 6));
13964 var wr7h = w[(i-
7) *
2];
13965 var wr7l = w[(i-
7) *
2 +
1];
13967 var wr16h = w[(i-
16) *
2];
13968 var wr16l = w[(i-
16) *
2 +
1];
13970 // W(round) = gamma0 + W(round -
7) + gamma1 + W(round -
16)
13971 wrl = gamma0l + wr7l;
13972 wrh = gamma0h + wr7h + ((wrl
>>> 0) < (gamma0l
>>> 0) ?
1 :
0);
13974 wrh += gamma1h + ((wrl
>>> 0) < (gamma1l
>>> 0) ?
1 :
0);
13976 wrh += wr16h + ((wrl
>>> 0) < (wr16l
>>> 0) ?
1 :
0);
13980 w[i*
2 +
1] = wrl |=
0;
13983 var chh = (eh & fh) ^ (~eh & gh);
13984 var chl = (el & fl) ^ (~el & gl);
13987 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13988 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
13991 var sigma0h = ((al <<
4) | (ah
>>> 28)) ^ ((ah <<
30) | (al
>>> 2)) ^ ((ah <<
25) | (al
>>> 7));
13992 var sigma0l = ((ah <<
4) | (al
>>> 28)) ^ ((al <<
30) | (ah
>>> 2)) ^ ((al <<
25) | (ah
>>> 7));
13995 var sigma1h = ((el <<
18) | (eh
>>> 14)) ^ ((el <<
14) | (eh
>>> 18)) ^ ((eh <<
23) | (el
>>> 9));
13996 var sigma1l = ((eh <<
18) | (el
>>> 14)) ^ ((eh <<
14) | (el
>>> 18)) ^ ((el <<
23) | (eh
>>> 9));
14000 var krl = k[i*
2+
1];
14002 // t1 = h + sigma1 + ch + K(round) + W(round)
14003 var t1l = hl + sigma1l;
14004 var t1h = hh + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0);
14006 t1h += chh + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0);
14008 t1h += krh + ((t1l
>>> 0) < (krl
>>> 0) ?
1 :
0);
14009 t1l = t1l + wrl|
0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=
1054972
14010 t1h += wrh + ((t1l
>>> 0) < (wrl
>>> 0) ?
1 :
0);
14012 // t2 = sigma0 + maj
14013 var t2l = sigma0l + majl;
14014 var t2h = sigma0h + majh + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0);
14016 // Update working variables
14023 el = (dl + t1l) |
0;
14024 eh = (dh + t1h + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14031 al = (t1l + t2l) |
0;
14032 ah = (t1h + t2h + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0;
14035 // Intermediate hash
14036 h0l = h[
1] = (h0l + al) |
0;
14037 h[
0] = (h0h + ah + ((h0l
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0;
14038 h1l = h[
3] = (h1l + bl) |
0;
14039 h[
2] = (h1h + bh + ((h1l
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0;
14040 h2l = h[
5] = (h2l + cl) |
0;
14041 h[
4] = (h2h + ch + ((h2l
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0;
14042 h3l = h[
7] = (h3l + dl) |
0;
14043 h[
6] = (h3h + dh + ((h3l
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14044 h4l = h[
9] = (h4l + el) |
0;
14045 h[
8] = (h4h + eh + ((h4l
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0;
14046 h5l = h[
11] = (h5l + fl) |
0;
14047 h[
10] = (h5h + fh + ((h5l
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0;
14048 h6l = h[
13] = (h6l + gl) |
0;
14049 h[
12] = (h6h + gh + ((h6l
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0;
14050 h7l = h[
15] = (h7l + hl) |
0;
14051 h[
14] = (h7h + hh + ((h7l
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0;
14058 /** @fileOverview HMAC implementation.
14060 * @author Emily Stark
14061 * @author Mike Hamburg
14062 * @author Dan Boneh
14065 /** HMAC with the specified hash function.
14067 * @param {bitArray} key the key for HMAC.
14068 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14070 sjcl.misc.hmac = function (key, Hash) {
14071 this._hash = Hash = Hash || sjcl.hash.sha256;
14072 var exKey = [[],[]], i,
14073 bs = Hash.prototype.blockSize /
32;
14074 this._baseHash = [new Hash(), new Hash()];
14076 if (key.length
> bs) {
14077 key = Hash.hash(key);
14080 for (i=
0; i
<bs; i++) {
14081 exKey[
0][i] = key[i]^
0x36363636;
14082 exKey[
1][i] = key[i]^
0x5C5C5C5C;
14085 this._baseHash[
0].update(exKey[
0]);
14086 this._baseHash[
1].update(exKey[
1]);
14087 this._resultHash = new Hash(this._baseHash[
0]);
14090 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14091 * @param {bitArray|String} data The data to mac.
14093 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14094 if (!this._updated) {
14096 return this.digest(data);
14098 throw new sjcl.exception.invalid(
"encrypt on already updated hmac called!");
14102 sjcl.misc.hmac.prototype.reset = function () {
14103 this._resultHash = new this._hash(this._baseHash[
0]);
14104 this._updated = false;
14107 sjcl.misc.hmac.prototype.update = function (data) {
14108 this._updated = true;
14109 this._resultHash.update(data);
14112 sjcl.misc.hmac.prototype.digest = function () {
14113 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[
1]).update(w).finalize();
14124 /** @fileOverview Password-based key-derivation function, version
2.0.
14126 * @author Emily Stark
14127 * @author Mike Hamburg
14128 * @author Dan Boneh
14131 /** Password-Based Key-Derivation Function, version
2.0.
14133 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14135 * This is the method specified by RSA's PKCS #
5 standard.
14137 * @param {bitArray|String} password The password.
14138 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14139 * @param {Number} [count=
1000] The number of iterations. Higher numbers make the function slower but more secure.
14140 * @param {Number} [length] The length of the derived key. Defaults to the
14141 output size of the hash function.
14142 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14143 * @return {bitArray} the derived key.
14145 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14146 count = count ||
1000;
14148 if (length <
0 || count <
0) {
14149 throw sjcl.exception.invalid(
"invalid params to pbkdf2");
14152 if (typeof password ===
"string") {
14153 password = sjcl.codec.utf8String.toBits(password);
14156 if (typeof salt ===
"string") {
14157 salt = sjcl.codec.utf8String.toBits(salt);
14160 Prff = Prff || sjcl.misc.hmac;
14162 var prf = new Prff(password),
14163 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14165 for (k =
1;
32 * out.length < (length ||
1); k++) {
14166 u = ui = prf.encrypt(b.concat(salt,[k]));
14168 for (i=
1; i
<count; i++) {
14169 ui = prf.encrypt(ui);
14170 for (j=
0; j
<ui.length; j++) {
14175 out = out.concat(u);
14178 if (length) { out = b.clamp(out, length); }
14186 /** @fileOverview Javascript SHA-
256 implementation.
14188 * An older version of this implementation is available in the public
14189 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14190 * Stanford University
2008-
2010 and BSD-licensed for liability
14193 * Special thanks to Aldo Cortesi for pointing out several bugs in
14196 * @author Emily Stark
14197 * @author Mike Hamburg
14198 * @author Dan Boneh
14202 * Context for a SHA-
256 operation in progress.
14204 * @class Secure Hash Algorithm,
256 bits.
14206 sjcl.hash.sha256 = function (hash) {
14207 if (!this._key[
0]) { this._precompute(); }
14209 this._h = hash._h.slice(
0);
14210 this._buffer = hash._buffer.slice(
0);
14211 this._length = hash._length;
14218 * Hash a string or an array of words.
14220 * @param {bitArray|String} data the data to hash.
14221 * @return {bitArray} The hash value, an array of
16 big-endian words.
14223 sjcl.hash.sha256.hash = function (data) {
14224 return (new sjcl.hash.sha256()).update(data).finalize();
14227 sjcl.hash.sha256.prototype = {
14229 * The hash's block size, in bits.
14235 * Reset the hash state.
14238 reset:function () {
14239 this._h = this._init.slice(
0);
14246 * Input several words to the hash.
14247 * @param {bitArray|String} data the data to hash.
14250 update: function (data) {
14251 if (typeof data ===
"string") {
14252 data = sjcl.codec.utf8String.toBits(data);
14254 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14256 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14257 for (i =
512+ol & -
512; i <= nl; i+=
512) {
14258 this._block(b.splice(
0,
16));
14264 * Complete hashing and output the hash value.
14265 * @return {bitArray} The hash value, an array of
8 big-endian words.
14267 finalize:function () {
14268 var i, b = this._buffer, h = this._h;
14270 // Round out and push the buffer
14271 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
14273 // Round out the buffer to a multiple of
16 words, less the
2 length words.
14274 for (i = b.length +
2; i &
15; i++) {
14278 // append the length
14279 b.push(Math.floor(this._length /
0x100000000));
14280 b.push(this._length |
0);
14283 this._block(b.splice(
0,
16));
14291 * The SHA-
256 initialization vector, to be precomputed.
14296 _init:[
0x6a09e667,
0xbb67ae85,
0x3c6ef372,
0xa54ff53a,
0x510e527f,
0x9b05688c,
0x1f83d9ab,
0x5be0cd19],
14300 * The SHA-
256 hash key, to be precomputed.
14306 [
0x428a2f98,
0x71374491,
0xb5c0fbcf,
0xe9b5dba5,
0x3956c25b,
0x59f111f1,
0x923f82a4,
0xab1c5ed5,
14307 0xd807aa98,
0x12835b01,
0x243185be,
0x550c7dc3,
0x72be5d74,
0x80deb1fe,
0x9bdc06a7,
0xc19bf174,
14308 0xe49b69c1,
0xefbe4786,
0x0fc19dc6,
0x240ca1cc,
0x2de92c6f,
0x4a7484aa,
0x5cb0a9dc,
0x76f988da,
14309 0x983e5152,
0xa831c66d,
0xb00327c8,
0xbf597fc7,
0xc6e00bf3,
0xd5a79147,
0x06ca6351,
0x14292967,
14310 0x27b70a85,
0x2e1b2138,
0x4d2c6dfc,
0x53380d13,
0x650a7354,
0x766a0abb,
0x81c2c92e,
0x92722c85,
14311 0xa2bfe8a1,
0xa81a664b,
0xc24b8b70,
0xc76c51a3,
0xd192e819,
0xd6990624,
0xf40e3585,
0x106aa070,
14312 0x19a4c116,
0x1e376c08,
0x2748774c,
0x34b0bcb5,
0x391c0cb3,
0x4ed8aa4a,
0x5b9cca4f,
0x682e6ff3,
14313 0x748f82ee,
0x78a5636f,
0x84c87814,
0x8cc70208,
0x90befffa,
0xa4506ceb,
0xbef9a3f7,
0xc67178f2],
14318 * Function to precompute _init and _key.
14321 _precompute: function () {
14322 var i =
0, prime =
2, factor;
14324 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
14326 outer: for (; i
<64; prime++) {
14327 for (factor=
2; factor*factor <= prime; factor++) {
14328 if (prime % factor ===
0) {
14335 this._init[i] = frac(Math.pow(prime,
1/
2));
14337 this._key[i] = frac(Math.pow(prime,
1/
3));
14343 * Perform one cycle of SHA-
256.
14344 * @param {bitArray} words one block of words.
14347 _block:function (words) {
14349 w = words.slice(
0),
14352 h0 = h[
0], h1 = h[
1], h2 = h[
2], h3 = h[
3],
14353 h4 = h[
4], h5 = h[
5], h6 = h[
6], h7 = h[
7];
14355 /* Rationale for placement of |
0 :
14356 * If a value can overflow is original
32 bits by a factor of more than a few
14357 * million (
2^
23 ish), there is a possibility that it might overflow the
14358 *
53-bit mantissa and lose precision.
14360 * To avoid this, we clamp back to
32 bits by |'ing with
0 on any value that
14361 * propagates around the loop, and on the hash state h[]. I don't believe
14362 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14363 * (for h4 anyway), and better safe than sorry.
14365 * The clamps on h[] are necessary for the output to be correct even in the
14366 * common case and for short inputs.
14368 for (i=
0; i
<64; i++) {
14369 // load up the input word for this round
14373 a = w[(i+
1 ) &
15];
14374 b = w[(i+
14) &
15];
14375 tmp = w[i&
15] = ((a
>>>7 ^ a
>>>18 ^ a
>>>3 ^ a<
<25 ^ a<
<14) +
14376 (b
>>>17 ^ b
>>>19 ^ b
>>>10 ^ b<
<15 ^ b<
<13) +
14377 w[i&
15] + w[(i+
9) &
15]) |
0;
14380 tmp = (tmp + h7 + (h4
>>>6 ^ h4
>>>11 ^ h4
>>>25 ^ h4<
<26 ^ h4<
<21 ^ h4<
<7) + (h6 ^ h4&(h5^h6)) + k[i]); // |
0;
14383 h7 = h6; h6 = h5; h5 = h4;
14385 h3 = h2; h2 = h1; h1 = h0;
14387 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1
>>>2 ^ h1
>>>13 ^ h1
>>>22 ^ h1<
<30 ^ h1<
<19 ^ h1<
<10)) |
0;
14390 h[
0] = h[
0]+h0 |
0;
14391 h[
1] = h[
1]+h1 |
0;
14392 h[
2] = h[
2]+h2 |
0;
14393 h[
3] = h[
3]+h3 |
0;
14394 h[
4] = h[
4]+h4 |
0;
14395 h[
5] = h[
5]+h5 |
0;
14396 h[
6] = h[
6]+h6 |
0;
14397 h[
7] = h[
7]+h7 |
0;
14401 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14402 WORDLISTS["english"] = [
14403 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14404 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14405 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14406 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14407 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14408 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14409 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14410 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14411 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14412 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14413 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14414 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14415 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14416 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14417 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14418 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14419 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14420 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14421 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14422 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14423 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14424 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14425 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14426 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14427 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14428 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14429 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14430 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14431 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14432 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14433 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14434 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14435 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14436 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14437 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14438 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14439 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14440 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14441 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14442 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14443 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14444 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14445 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14446 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14447 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14448 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14449 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14450 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14451 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14452 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14453 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14454 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14455 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14456 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14457 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14458 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14459 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14460 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14461 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14462 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14463 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14464 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14465 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14466 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14467 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14468 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14469 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14470 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14471 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14472 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14473 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14474 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14475 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14476 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14477 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14478 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14479 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14480 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14481 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14482 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14483 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14484 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14485 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14486 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14487 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14488 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14489 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14490 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14491 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14492 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14493 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14494 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14495 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14496 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14497 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14498 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14499 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14500 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14501 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14502 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14503 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14504 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14505 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14506 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14507 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14508 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14509 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14510 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14511 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14512 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14513 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14514 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14515 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14516 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14517 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14518 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14519 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14520 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14521 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14522 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14523 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14524 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14525 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14526 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14527 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14528 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14529 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14530 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14531 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14532 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14533 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14534 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14535 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14536 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14537 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14538 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14539 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14540 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14541 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14542 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14543 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14544 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14545 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14546 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14547 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14548 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14549 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14550 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14551 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14552 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14553 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14554 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14555 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14556 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14557 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14558 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14559 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14560 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14561 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14562 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14563 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14564 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14565 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14566 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14567 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14568 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14569 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14570 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14571 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14572 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14573 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14574 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14575 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14576 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14577 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14578 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14579 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14580 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14581 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14582 "thank","that","theme","then","theory","there","they","thing","this","thought",
14583 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14584 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14585 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14586 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14587 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14588 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14589 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14590 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14591 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14592 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14593 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14594 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14595 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14596 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14597 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14598 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14599 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14600 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14601 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14602 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14603 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14604 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14605 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14606 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14607 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14610 * Copyright (c)
2013 Pavol Rusnak
14612 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14613 * this software and associated documentation files (the "Software"), to deal in
14614 * the Software without restriction, including without limitation the rights to
14615 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14616 * of the Software, and to permit persons to whom the Software is furnished to do
14617 * so, subject to the following conditions:
14619 * The above copyright notice and this permission notice shall be included in all
14620 * copies or substantial portions of the Software.
14622 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14623 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14624 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14625 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14626 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14627 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14631 * Javascript port from python by Ian Coleman
14633 * Requires code from sjcl
14634 * https://github.com/bitwiseshiftleft/sjcl
14637 var Mnemonic = function(language) {
14639 var PBKDF2_ROUNDS =
2048;
14645 var hmacSHA512 = function(key) {
14646 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14647 this.encrypt = function() {
14648 return hasher.encrypt.apply(hasher, arguments);
14653 wordlist = WORDLISTS[language];
14654 if (wordlist.length != RADIX) {
14655 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14660 self.generate = function(strength) {
14661 strength = strength ||
128;
14662 var r = strength %
32;
14664 throw 'Strength should be divisible by
32, but it is not (' + r + ').';
14666 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14667 if (!hasStrongCrypto) {
14668 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14670 var buffer = new Uint8Array(strength /
8);
14671 var data = crypto.getRandomValues(buffer);
14672 return self.toMnemonic(data);
14675 self.toMnemonic = function(byteArray) {
14676 if (byteArray.length %
4 > 0) {
14677 throw 'Data length in bits should be divisible by
32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*
8 + ' bits).'
14680 //h = hashlib.sha256(data).hexdigest()
14681 var data = byteArrayToWordArray(byteArray);
14682 var hash = sjcl.hash.sha256.hash(data);
14683 var h = sjcl.codec.hex.fromBits(hash);
14685 // b is a binary string, eg '
00111010101100...'
14686 //b = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8) + \
14687 // bin(int(h,
16))[
2:].zfill(
256)[:len(data) *
8 /
32]
14689 // a = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8)
14690 // c = bin(int(h,
16))[
2:].zfill(
256)
14691 // d = c[:len(data) *
8 /
32]
14692 var a = byteArrayToBinaryString(byteArray);
14693 var c = zfill(hexStringToBinaryString(h),
256);
14694 var d = c.substring(
0, byteArray.length *
8 /
32);
14695 // b = line1 + line2
14699 var blen = b.length /
11;
14700 for (var i=
0; i
<blen; i++) {
14701 var idx = parseInt(b.substring(i *
11, (i +
1) *
11),
2);
14702 result.push(wordlist[idx]);
14704 return result.join(' ');
14707 self.check = function(mnemonic) {
14708 var mnemonic = mnemonic.split(' ')
14709 if (mnemonic.length %
3 > 0) {
14712 // idx = map(lambda x: bin(self.wordlist.index(x))[
2:].zfill(
11), mnemonic)
14714 for (var i=
0; i
<mnemonic.length; i++) {
14715 var word = mnemonic[i];
14716 var wordIndex = wordlist.indexOf(word);
14717 if (wordIndex == -
1) {
14720 var binaryIndex = zfill(wordIndex.toString(
2),
11);
14721 idx.push(binaryIndex);
14723 var b = idx.join('');
14725 //d = b[:l /
33 *
32]
14727 var d = b.substring(
0, l /
33 *
32);
14728 var h = b.substring(l - l /
33, l);
14729 //nd = binascii.unhexlify(hex(int(d,
2))[
2:].rstrip('L').zfill(l /
33 *
8))
14730 var nd = binaryStringToWordArray(d);
14731 //nh = bin(int(hashlib.sha256(nd).hexdigest(),
16))[
2:].zfill(
256)[:l /
33]
14732 var ndHash = sjcl.hash.sha256.hash(nd);
14733 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14734 var ndBstr = zfill(hexStringToBinaryString(ndHex),
256);
14735 var nh = ndBstr.substring(
0,l/
33);
14739 self.toSeed = function(mnemonic, passphrase) {
14740 passphrase = passphrase || '';
14741 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
14742 passphrase = self.normalizeString(passphrase)
14743 passphrase =
"mnemonic" + passphrase;
14744 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14745 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14746 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS,
512, hmacSHA512);
14747 var hashHex = sjcl.codec.hex.fromBits(result);
14751 self.normalizeString = function(str) {
14752 if (typeof str.normalize ==
"function") {
14753 return str.normalize(
"NFKD");
14756 // TODO decide how to handle this in the future.
14757 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14762 function byteArrayToWordArray(data) {
14764 for (var i=
0; i
<data.length/
4; i++) {
14766 v += data[i*
4 +
0] <<
8 *
3;
14767 v += data[i*
4 +
1] <<
8 *
2;
14768 v += data[i*
4 +
2] <<
8 *
1;
14769 v += data[i*
4 +
3] <<
8 *
0;
14775 function byteArrayToBinaryString(data) {
14777 for (var i=
0; i
<data.length; i++) {
14778 bin += zfill(data[i].toString(
2),
8);
14783 function hexStringToBinaryString(hexString) {
14785 for (var i=
0; i
<hexString.length; i++) {
14786 binaryString += zfill(parseInt(hexString[i],
16).toString(
2),
4);
14788 return binaryString;
14791 function binaryStringToWordArray(binary) {
14792 var aLen = binary.length /
32;
14794 for (var i=
0; i
<aLen; i++) {
14795 var valueStr = binary.substring(
0,
32);
14796 var value = parseInt(valueStr,
2);
14798 binary = binary.slice(
32);
14803 // Pad a numeric string on the left with zero digits until the given width
14805 // Note this differs to the python implementation because it does not
14806 // handle numbers starting with a sign.
14807 function zfill(source, length) {
14808 source = source.toString();
14809 while (source.length < length) {
14810 source = '
0' + source;
14819 <script>(function() {
14821 var mnemonic = new Mnemonic("english");
14823 var bip32RootKey = null;
14824 var bip32ExtendedKey = null;
14825 var network = bitcoin.networks.bitcoin;
14826 var addressRowTemplate = $("#address-row-template");
14828 var showIndex = true;
14829 var showAddress = true;
14830 var showPrivKey = true;
14832 var phraseChangeTimeoutEvent = null;
14833 var rootKeyChangedTimeoutEvent = null;
14836 DOM.network = $(".network");
14837 DOM.phraseNetwork = $("#network-phrase");
14838 DOM.phrase = $(".phrase");
14839 DOM.passphrase = $(".passphrase");
14840 DOM.generate = $(".generate");
14841 DOM.seed = $(".seed");
14842 DOM.rootKey = $(".root-key");
14843 DOM.extendedPrivKey = $(".extended-priv-key");
14844 DOM.extendedPubKey = $(".extended-pub-key");
14845 DOM.bip32tab = $("#bip32-tab");
14846 DOM.bip44tab = $("#bip44-tab");
14847 DOM.bip32panel = $("#bip32");
14848 DOM.bip44panel = $("#bip44");
14849 DOM.bip32path = $("#bip32-path");
14850 DOM.bip44path = $("#bip44-path");
14851 DOM.bip44purpose = $("#bip44 .purpose");
14852 DOM.bip44coin = $("#bip44 .coin");
14853 DOM.bip44account = $("#bip44 .account");
14854 DOM.bip44change = $("#bip44 .change");
14855 DOM.strength = $(".strength");
14856 DOM.addresses = $(".addresses");
14857 DOM.rowsToAdd = $(".rows-to-add");
14858 DOM.more = $(".more");
14859 DOM.feedback = $(".feedback");
14860 DOM.tab = $(".derivation-type a");
14861 DOM.indexToggle = $(".index-toggle");
14862 DOM.addressToggle = $(".address-toggle");
14863 DOM.privateKeyToggle = $(".private-key-toggle");
14867 DOM.network.on("change", networkChanged);
14868 DOM.phrase.on("input", delayedPhraseChanged);
14869 DOM.passphrase.on("input", delayedPhraseChanged);
14870 DOM.generate.on("click", generateClicked);
14871 DOM.more.on("click", showMore);
14872 DOM.rootKey.on("input", delayedRootKeyChanged);
14873 DOM.bip32path.on("input", calcForDerivationPath);
14874 DOM.bip44purpose.on("input", calcForDerivationPath);
14875 DOM.bip44coin.on("input", calcForDerivationPath);
14876 DOM.bip44account.on("input", calcForDerivationPath);
14877 DOM.bip44change.on("input", calcForDerivationPath);
14878 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
14879 DOM.indexToggle.on("click", toggleIndexes);
14880 DOM.addressToggle.on("click", toggleAddresses);
14881 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14884 hideValidationError();
14885 populateNetworkSelect();
14890 function networkChanged(e) {
14891 var network = e.target.value;
14892 networks[network].onSelect();
14893 displayBip32Info();
14896 function delayedPhraseChanged() {
14897 hideValidationError();
14899 if (phraseChangeTimeoutEvent != null) {
14900 clearTimeout(phraseChangeTimeoutEvent);
14902 phraseChangeTimeoutEvent = setTimeout(phraseChanged,
400);
14905 function phraseChanged() {
14907 hideValidationError();
14908 // Get the mnemonic phrase
14909 var phrase = DOM.phrase.val();
14910 var errorText = findPhraseErrors(phrase);
14912 showValidationError(errorText);
14915 // Calculate and display
14916 var passphrase = DOM.passphrase.val();
14917 calcBip32RootKeyFromSeed(phrase, passphrase);
14918 calcForDerivationPath();
14922 function delayedRootKeyChanged() {
14923 // Warn if there is an existing mnemonic or passphrase.
14924 if (DOM.phrase.val().length
> 0 || DOM.passphrase.val().length
> 0) {
14925 if (!confirm(
"This will clear existing mnemonic and passphrase")) {
14926 DOM.rootKey.val(bip32RootKey);
14930 hideValidationError();
14932 // Clear existing mnemonic and passphrase
14933 DOM.phrase.val(
"");
14934 DOM.passphrase.val(
"");
14936 if (rootKeyChangedTimeoutEvent != null) {
14937 clearTimeout(rootKeyChangedTimeoutEvent);
14939 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged,
400);
14942 function rootKeyChanged() {
14944 hideValidationError();
14945 // Validate the root key TODO
14946 var rootKeyBase58 = DOM.rootKey.val();
14947 var errorText = validateRootKey(rootKeyBase58);
14949 showValidationError(errorText);
14952 // Calculate and display
14953 calcBip32RootKeyFromBase58(rootKeyBase58);
14954 calcForDerivationPath();
14958 function calcForDerivationPath() {
14960 hideValidationError();
14961 // Get the derivation path
14962 var derivationPath = getDerivationPath();
14963 var errorText = findDerivationPathErrors(derivationPath);
14965 showValidationError(errorText);
14968 calcBip32ExtendedKey(derivationPath);
14969 displayBip32Info();
14973 function generateClicked() {
14976 setTimeout(function() {
14977 var phrase = generateRandomPhrase();
14985 function toggleIndexes() {
14986 showIndex = !showIndex;
14987 $(
"td.index span").toggleClass(
"invisible");
14990 function toggleAddresses() {
14991 showAddress = !showAddress;
14992 $(
"td.address span").toggleClass(
"invisible");
14995 function togglePrivateKeys() {
14996 showPrivKey = !showPrivKey;
14997 $(
"td.privkey span").toggleClass(
"invisible");
15002 function generateRandomPhrase() {
15003 if (!hasStrongRandom()) {
15004 var errorText =
"This browser does not support strong randomness";
15005 showValidationError(errorText);
15008 var numWords = parseInt(DOM.strength.val());
15009 var strength = numWords /
3 *
32;
15010 var words = mnemonic.generate(strength);
15011 DOM.phrase.val(words);
15015 function calcBip32RootKeyFromSeed(phrase, passphrase) {
15016 seed = mnemonic.toSeed(phrase, passphrase);
15017 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
15020 function calcBip32RootKeyFromBase58(rootKeyBase58) {
15021 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58);
15024 function calcBip32ExtendedKey(path) {
15025 bip32ExtendedKey = bip32RootKey;
15026 // Derive the key from the path
15027 var pathBits = path.split(
"/");
15028 for (var i=
0; i
<pathBits.length; i++) {
15029 var bit = pathBits[i];
15030 var index = parseInt(bit);
15031 if (isNaN(index)) {
15034 var hardened = bit[bit.length-
1] ==
"'";
15036 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
15039 bip32ExtendedKey = bip32ExtendedKey.derive(index);
15044 function showValidationError(errorText) {
15050 function hideValidationError() {
15056 function findPhraseErrors(phrase) {
15057 // TODO make this right
15058 // Preprocess the words
15059 phrase = mnemonic.normalizeString(phrase);
15060 var parts = phrase.split(
" ");
15062 for (var i=
0; i
<parts.length; i++) {
15063 var part = parts[i];
15064 if (part.length
> 0) {
15065 // TODO check that lowercasing is always valid to do
15066 proper.push(part.toLowerCase());
15069 var properPhrase = proper.join(' ');
15071 for (var i=
0; i
<proper.length; i++) {
15072 var word = proper[i];
15073 if (WORDLISTS[
"english"].indexOf(word) == -
1) {
15074 console.log(
"Finding closest match to " + word);
15075 var nearestWord = findNearestWord(word);
15076 return word +
" not in wordlist, did you mean " + nearestWord +
"?";
15079 // Check the words are valid
15080 var isValid = mnemonic.check(properPhrase);
15082 return
"Invalid mnemonic";
15087 function validateRootKey(rootKeyBase58) {
15089 bitcoin.HDNode.fromBase58(rootKeyBase58);
15092 return
"Invalid root key";
15097 function getDerivationPath() {
15098 if (DOM.bip44tab.hasClass(
"active")) {
15099 var purpose = parseIntNoNaN(DOM.bip44purpose.val(),
44);
15100 var coin = parseIntNoNaN(DOM.bip44coin.val(),
0);
15101 var account = parseIntNoNaN(DOM.bip44account.val(),
0);
15102 var change = parseIntNoNaN(DOM.bip44change.val(),
0);
15104 path += purpose +
"'/";
15105 path += coin +
"'/";
15106 path += account +
"'/";
15108 DOM.bip44path.val(path);
15109 var derivationPath = DOM.bip44path.val();
15110 console.log(
"Using derivation path from BIP44 tab: " + derivationPath);
15111 return derivationPath;
15113 else if (DOM.bip32tab.hasClass(
"active")) {
15114 var derivationPath = DOM.bip32path.val();
15115 console.log(
"Using derivation path from BIP32 tab: " + derivationPath);
15116 return derivationPath;
15119 console.log(
"Unknown derivation path");
15123 function findDerivationPathErrors(path) {
15124 // TODO is not perfect but is better than nothing
15126 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#test-vectors
15128 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#extended-keys
15129 var maxDepth =
255; // TODO verify this!!
15130 var maxIndexValue = Math.pow(
2,
31); // TODO verify this!!
15131 if (path[
0] !=
"m") {
15132 return
"First character must be 'm'";
15134 if (path.length
> 1) {
15135 if (path[
1] !=
"/") {
15136 return
"Separator must be '/'";
15138 var indexes = path.split(
"/");
15139 if (indexes.length
> maxDepth) {
15140 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
15142 for (var depth =
1; depth
<indexes.length; depth++) {
15143 var index = indexes[depth];
15144 var invalidChars = index.replace(/^[
0-
9]+'?$/g,
"")
15145 if (invalidChars.length
> 0) {
15146 return
"Invalid characters " + invalidChars +
" found at depth " + depth;
15148 var indexValue = parseInt(index.replace(
"'",
""));
15149 if (isNaN(depth)) {
15150 return
"Invalid number at depth " + depth;
15152 if (indexValue
> maxIndexValue) {
15153 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
15160 function displayBip32Info() {
15162 DOM.seed.val(seed);
15163 var rootKey = bip32RootKey.toBase58();
15164 DOM.rootKey.val(rootKey);
15165 var extendedPrivKey = bip32ExtendedKey.toBase58();
15166 DOM.extendedPrivKey.val(extendedPrivKey);
15167 var extendedPubKey = bip32ExtendedKey.toBase58(false);
15168 DOM.extendedPubKey.val(extendedPubKey);
15169 // Display the addresses and privkeys
15170 clearAddressesList();
15171 displayAddresses(
0,
20);
15174 function displayAddresses(start, total) {
15175 for (var i=
0; i
<total; i++) {
15176 var index = i + start;
15177 new TableRow(index);
15181 function TableRow(index) {
15187 function calculateValues() {
15188 setTimeout(function() {
15189 var key = bip32ExtendedKey.derive(index);
15190 var address = key.getAddress().toString();
15191 var privkey = key.privKey.toWIF(network);
15192 var indexText = getDerivationPath() +
"/" + index;
15193 addAddressToList(indexText, address, privkey);
15201 function showMore() {
15202 var start = DOM.addresses.children().length;
15203 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
15204 if (isNaN(rowsToAdd)) {
15206 DOM.rowsToAdd.val(
"20");
15208 if (rowsToAdd
> 200) {
15209 var msg =
"Generating " + rowsToAdd +
" rows could take a while. ";
15210 msg +=
"Do you want to continue?";
15211 if (!confirm(msg)) {
15215 displayAddresses(start, rowsToAdd);
15218 function clearDisplay() {
15219 clearAddressesList();
15221 hideValidationError();
15224 function clearAddressesList() {
15225 DOM.addresses.empty();
15228 function clearKey() {
15229 DOM.rootKey.val(
"");
15230 DOM.extendedPrivKey.val(
"");
15231 DOM.extendedPubKey.val(
"");
15234 function addAddressToList(indexText, address, privkey) {
15235 var row = $(addressRowTemplate.html());
15237 var indexCell = row.find(
".index span");
15238 var addressCell = row.find(
".address span");
15239 var privkeyCell = row.find(
".privkey span");
15241 indexCell.text(indexText);
15242 addressCell.text(address);
15243 privkeyCell.text(privkey);
15246 indexCell.addClass(
"invisible");
15248 if (!showAddress) {
15249 addressCell.addClass(
"invisible");
15251 if (!showPrivKey) {
15252 privkeyCell.addClass(
"invisible");
15254 DOM.addresses.append(row);
15257 function hasStrongRandom() {
15258 return 'crypto' in window && window['crypto'] !== null;
15261 function disableForms() {
15262 $(
"form").on(
"submit", function(e) {
15263 e.preventDefault();
15267 function parseIntNoNaN(val, defaultVal) {
15268 var v = parseInt(val);
15275 function showPending() {
15277 .text(
"Calculating...")
15281 function findNearestWord(word) {
15282 var words = WORDLISTS[
"english"];
15283 var minDistance =
99;
15284 var closestWord = words[
0];
15285 for (var i=
0; i
<words.length; i++) {
15286 var comparedTo = words[i];
15287 var distance = Levenshtein.get(word, comparedTo);
15288 if (distance < minDistance) {
15289 closestWord = comparedTo;
15290 minDistance = distance;
15293 return closestWord;
15296 function hidePending() {
15302 function populateNetworkSelect() {
15303 for (var i=
0; i
<networks.length; i++) {
15304 var network = networks[i];
15305 var option = $(
"<option>");
15306 option.attr(
"value", i);
15307 option.text(network.name);
15308 DOM.phraseNetwork.append(option);
15315 onSelect: function() {
15316 network = bitcoin.networks.bitcoin;
15317 DOM.bip44coin.val(
0);
15321 name:
"Bitcoin Testnet",
15322 onSelect: function() {
15323 network = bitcoin.networks.testnet;
15324 DOM.bip44coin.val(
1);
15329 onSelect: function() {
15330 network = bitcoin.networks.litecoin;
15331 DOM.bip44coin.val(
2);
15336 onSelect: function() {
15337 network = bitcoin.networks.dogecoin;
15338 DOM.bip44coin.val(
3);
15342 name:
"ShadowCash",
15343 onSelect: function() {
15344 network = bitcoin.networks.shadow;
15345 DOM.bip44coin.val(
35);
15349 name:
"ShadowCash Testnet",
15350 onSelect: function() {
15351 network = bitcoin.networks.shadowtn;
15352 DOM.bip44coin.val(
1);
15357 onSelect: function() {
15358 network = bitcoin.networks.viacoin;
15359 DOM.bip44coin.val(
14);
15363 name:
"Viacoin Testnet",
15364 onSelect: function() {
15365 network = bitcoin.networks.viacointestnet;
15366 DOM.bip44coin.val(
1);
15371 onSelect: function() {
15372 network = bitcoin.networks.jumbucks;
15373 DOM.bip44coin.val(
26);
15378 onSelect: function() {
15379 network = bitcoin.networks.clam;
15380 DOM.bip44coin.val(
23);