]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Merge pull request #134 from dimitris-t/patch-2
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
CommitLineData
ebd8d4e8
IC
1<!DOCTYPE html>
2<html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
ab78acc6 6 <style>/*!
ebd8d4e8
IC
7 * Bootstrap v3.2.0 (http://getbootstrap.com)
8 * Copyright 2011-2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
10 *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}</style>
11 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
12 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
13 <meta content="bitcoin mnemonic converter" name="description" />
b630f83d 14 <meta content="Ian Coleman" name="author" />
18f16009 15 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
3af2954a 16
ab78acc6
IC
17 <style>
18 body {
19 padding-bottom: 32px;
20 }
21 .form-control[readonly] {
22 cursor: text;
23 }
24 .feedback-container {
25 position: fixed;
26 top: 0;
27 width: 100%;
28 text-align: center;
29 z-index: 4;
30 }
31 .feedback {
32 display: table;
33 padding: 0.5em 1em;
34 background-color: orange;
35 margin: 0 auto;
36 font-size: 2em;
37 color: #444;
38 border: 2px solid #555;
39 border-top: 0;
40 border-bottom-left-radius: 20px 20px;
41 border-bottom-right-radius: 20px 20px;
42 }
d5dc92fd
IC
43 .no-border {
44 border: 0;
45 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
47 }
0515eeec
IC
48 .phrase {
49 word-break: keep-all;
50 }
2a6dd137 51 .generate-container .strength {
b0818b31
IC
52 /* override mobile width from bootstrap */
53 width: auto!important;
54 display: inline-block;
55 }
ea87f1d3 56 .languages a {
0515eeec
IC
57 padding-left: 10px;
58 }
ea87f1d3
IC
59 .languages a:nth-of-type(1) {
60 margin-left: -12px;
61 padding-left: 0;
62 }
d737abf6
IC
63 .monospace {
64 font-family: monospace;
65 }
2a6dd137
IC
66 .entropy-container .filtered,
67 .entropy-container .binary {
68 word-wrap: break-word;
69 }
70 .entropy-container li {
71 padding-bottom: 5px;
72 }
73 .card-suit {
74 font-size: 19px;
75 line-height: 0;
76 }
77 .card-suit.club {
78 color: #009F00;
79 }
80 .card-suit.diamond {
81 color: #3D5DC4;
82 }
83 .card-suit.heart {
84 color: #F00;
85 }
86 .card-suit.spade {
87 color: #000;
88 }
e00964cc
IC
89 .qr-container {
90 position: fixed;
91 top: 0;
92 right: 0;
93 text-align: center;
94 background-color: #FFF;
95 border: 1px solid #CCC;
96 }
97 .qr-image {
98 margin: 5px;
99 }
52da415f
IC
100 .qr-hint,
101 .qr-warning {
e00964cc 102 padding: 2px;
52da415f
IC
103 max-width: 150px;
104 }
105 .more-info {
106 cursor: help;
107 border-bottom: 1px dashed #000;
108 text-decoration: none;
e00964cc 109 }
920eb591
IC
110 .version {
111 position: absolute;
112 top: 5px;
113 right: 5px;
114 }
ab78acc6
IC
115 </style>
116 </head>
117 <body>
118 <div class="container">
3af2954a 119
ab78acc6 120 <h1 class="text-center">Mnemonic Code Converter</h1>
cf6c2044 121 <p class="version">v0.3.0</p>
ab78acc6
IC
122 <hr>
123 <div class="row">
124 <div class="col-md-12">
125 <h2>Mnemonic</h2>
126 <form class="form-horizontal" role="form">
ab78acc6 127 <div class="form-group">
c6624d51
IC
128 <div class="col-sm-2"></div>
129 <div class="col-sm-10">
1102f201
IC
130 <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>
131 <p>
ea87f1d3
IC
132 For more info see the
133 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
134 </p>
c6624d51
IC
135 </div>
136 </div>
137 <div class="form-group generate-container">
b0818b31 138 <label class="col-sm-2 control-label"></label>
ab78acc6 139 <div class="col-sm-10">
b0818b31
IC
140 <div class="form-inline">
141 <div class="input-group-inline">
1102f201 142 <span>Generate a random mnemonic, or enter your own below</span>:
b0818b31 143 <button class="btn generate">Generate</button>
b0818b31
IC
144 <select id="strength" class="strength form-control">
145 <option value="3">3</option>
146 <option value="6">6</option>
147 <option value="9">9</option>
148 <option value="12">12</option>
149 <option value="15" selected>15</option>
150 <option value="18">18</option>
151 <option value="21">21</option>
152 <option value="24">24</option>
153 </select>
1102f201 154 <span>words</span>
b0818b31
IC
155 </div>
156 </div>
ab78acc6 157 </div>
0515eeec 158 </div>
c6624d51 159 <div class="entropy-container hidden">
2a6dd137 160 <div class="form-group text-danger">
1102f201 161 <label class="col-sm-2 control-label">Warning</label>
2a6dd137 162 <div class="col-sm-10 form-control-static">
1102f201
IC
163 <span>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
164 <a href="#entropy-notes">Read more</a>
18abe53b
IC
165 </div>
166 </div>
2a6dd137 167 <div class="form-group">
1102f201 168 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
2a6dd137 169 <div class="col-sm-7">
1102f201 170 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards"></textarea>
9ff30bab
IC
171 <div class="row filter-warning text-danger hidden">
172 <p class="col-sm-12">
173 <strong>
174 Some characters have been discarded
175 </strong>
176 </p>
177 </div>
95f04905 178 <div class="row">
1102f201 179 <label class="col-sm-3 control-label"><span class="more-info" title="Based on estimates from zxcvbn using Filtered Entropy">Time To Crack</span></label>
f1e5d484 180 <div class="crack-time col-sm-3 form-control-static"></div>
1102f201 181 <label class="col-sm-3 control-label">Event Count</label>
95f04905
IC
182 <div class="event-count col-sm-3 form-control-static"></div>
183 </div>
184 <div class="row">
1102f201 185 <label class="col-sm-3 control-label">Entropy Type</label>
95f04905 186 <div class="type col-sm-3 form-control-static"></div>
1102f201 187 <label class="col-sm-3 control-label">Bits Per Event</label>
95f04905
IC
188 <div class="bits-per-event col-sm-3 form-control-static"></div>
189 </div>
190 <div class="row">
1102f201 191 <label class="col-sm-3 control-label">Raw Entropy Words</label>
95f04905 192 <div class="word-count col-sm-3 form-control-static"></div>
1102f201 193 <label class="col-sm-3 control-label"><span class="more-info" title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
95f04905
IC
194 <div class="bits col-sm-3 form-control-static"></div>
195 </div>
1102f201 196 <label class="col-sm-3 control-label">Filtered Entropy</label>
2a6dd137 197 <div class="filtered col-sm-9 form-control-static"></div>
1102f201 198 <label class="col-sm-3 control-label">Raw Binary</label>
2a6dd137 199 <div class="binary col-sm-9 form-control-static"></div>
1102f201 200 <label class="col-sm-3 control-label">Mnemonic Length</label>
2a6dd137 201 <div class="col-sm-9">
18abe53b 202 <select class="mnemonic-length form-control">
1102f201
IC
203 <option value="raw" selected>Use Raw Entropy (3 words per 32 bits)</option>
204 <option value="12">12 <span>Words</span></option>
205 <option value="15">15 <span>Words</option>
206 <option value="18">18 <span>Words</span></option>
207 <option value="21">21 <span>Words</span></option>
208 <option value="24">24 <span>Words</span></option>
18abe53b 209 </select>
c6624d51 210 </div>
18abe53b 211 </div>
2a6dd137 212 <div class="col-sm-3">
1102f201 213 <p>Valid entropy values include:</p>
2a6dd137 214 <ul>
1102f201
IC
215 <li><strong>Binary</strong> [0-1]<br>101010011</li>
216 <li><strong>Base 6</strong> [0-5]<br>123434014</li>
217 <li><strong>Dice</strong> [1-6]<br>62535634</li>
218 <li><strong>Base 10</strong> [0-9]<br>90834528</li>
219 <li><strong>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
220 <li><strong>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
2a6dd137
IC
221 </ul>
222 </div>
c6624d51
IC
223 </div>
224 </div>
225 <div class="form-group">
226 <div class="col-sm-2"></div>
227 <div class="col-sm-10 checkbox">
228 <label>
229 <input type="checkbox" class="use-entropy">
1102f201 230 <span>Supply my own source of entropy</span>
c6624d51
IC
231 </label>
232 </div>
233 </div>
234 <div class="form-group">
1102f201 235 <label class="col-sm-2 control-label">Mnemonic Language</label>
0515eeec 236 <div class="col-sm-10 languages">
ea87f1d3
IC
237 <div class="form-control no-border">
238 <a href="#english">English</a>
239 <a href="#japanese" title="Japanese">日本語</a>
240 <a href="#spanish" title="Spanish">Español</a>
241 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
242 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
243 <a href="#french" title="French">Français</a>
244 <a href="#italian" title="Italian">Italiano</a>
245 </div>
0515eeec 246 </div>
ab78acc6
IC
247 </div>
248 <div class="form-group">
1102f201 249 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
ab78acc6 250 <div class="col-sm-10">
e00964cc 251 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
ab78acc6
IC
252 </div>
253 </div>
254 <div class="form-group">
1102f201 255 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
ab78acc6
IC
256 <div class="col-sm-10">
257 <textarea id="passphrase" class="passphrase form-control"></textarea>
258 </div>
259 </div>
73161a92 260 <div class="form-group">
1102f201 261 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
73161a92 262 <div class="col-sm-10">
e00964cc 263 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
73161a92
IC
264 </div>
265 </div>
ab78acc6 266 <div class="form-group">
1102f201 267 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
ab78acc6
IC
268 <div class="col-sm-10">
269 <select id="network-phrase" class="network form-control">
270 <!-- populated by javascript -->
271 </select>
272 </div>
273 </div>
274 <div class="form-group">
1102f201 275 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
ab78acc6 276 <div class="col-sm-10">
e00964cc 277 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
ab78acc6
IC
278 </div>
279 </div>
8d18f379 280 <div class="form-group litecoin-ltub-container hidden">
1102f201 281 <label for="litecoin-use-ltub" class="col-sm-2 control-label">Prefixes</label>
8d18f379
IC
282 <div class="col-sm-10 checkbox">
283 <label>
cf6c2044 284 <input type="checkbox" id="litecoin-use-ltub" class="litecoin-use-ltub" checked="checked">
8d18f379
IC
285 Use <code>Ltpv / Ltub</code> instead of <code>xprv / xpub</code>
286 </label>
287 </div>
288 </div>
ab78acc6
IC
289 </form>
290 </div>
291 </div>
3af2954a 292
ab78acc6 293 <hr>
3af2954a 294
ab78acc6
IC
295 <div class="row">
296 <div class="col-md-12">
297 <h2>Derivation Path</h2>
298 <ul class="derivation-type nav nav-tabs" role="tablist">
9987f0c1
IC
299 <li id="bip32-tab">
300 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
301 </li>
d5dc92fd 302 <li id="bip44-tab" class="active">
ab78acc6
IC
303 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
304 </li>
9987f0c1
IC
305 <li id="bip49-tab">
306 <a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
ab78acc6 307 </li>
cf6c2044
IC
308 <li id="bip141-tab">
309 <a href="#bip141" role="tab" data-toggle="tab">BIP141</a>
310 </li>
ab78acc6
IC
311 </ul>
312 <div class="derivation-type tab-content">
d5dc92fd 313 <div id="bip44" class="tab-pane active">
ab78acc6
IC
314 <form class="form-horizontal" role="form">
315 <br>
316 <div class="col-sm-2"></div>
317 <div class="col-sm-10">
1102f201 318 <p>
ea87f1d3
IC
319 For more info see the
320 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
321 </p>
ab78acc6
IC
322 </div>
323 <div class="form-group">
324 <label for="purpose" class="col-sm-2 control-label">
1102f201 325 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
ab78acc6
IC
326 </label>
327 <div class="col-sm-10">
9987f0c1 328 <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
ab78acc6
IC
329 </div>
330 </div>
331 <div class="form-group">
332 <label for="coin" class="col-sm-2 control-label">
1102f201 333 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
ab78acc6
IC
334 </label>
335 <div class="col-sm-10">
9987f0c1 336 <input id="coin" type="text" class="coin form-control" value="0" readonly>
ab78acc6
IC
337 </div>
338 </div>
339 <div class="form-group">
340 <label for="account" class="col-sm-2 control-label">
1102f201 341 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
ab78acc6
IC
342 </label>
343 <div class="col-sm-10">
344 <input id="account" type="text" class="account form-control" value="0">
345 </div>
346 </div>
347 <div class="form-group">
348 <label for="change" class="col-sm-2 control-label">
1102f201 349 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
ab78acc6
IC
350 </label>
351 <div class="col-sm-10">
352 <input id="change" type="text" class="change form-control" value="0">
353 </div>
354 </div>
20083ab9
IC
355 <div class="form-group">
356 <label class="col-sm-2 control-label">
357 </label>
358 <div class="col-sm-10">
1102f201 359 <p>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
20083ab9
IC
360 </div>
361 </div>
362 <div class="form-group">
363 <label for="account-xprv" class="col-sm-2 control-label">
1102f201 364 <span>Account Extended Private Key</span>
20083ab9
IC
365 </label>
366 <div class="col-sm-10">
367 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
368 </div>
369 </div>
370 <div class="form-group">
371 <label for="account-xpub" class="col-sm-2 control-label">
1102f201 372 <span>Account Extended Public Key</span>
20083ab9
IC
373 </label>
374 <div class="col-sm-10">
375 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
376 </div>
377 </div>
378 <div class="form-group">
379 <label class="col-sm-2 control-label">
380 </label>
381 <div class="col-sm-10">
1102f201 382 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
20083ab9
IC
383 </div>
384 </div>
ab78acc6 385 <div class="form-group">
1102f201 386 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
ab78acc6
IC
387 <div class="col-sm-10">
388 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
389 </div>
390 </div>
391 </form>
392 </div>
393 <div id="bip32" class="tab-pane">
394 <form class="form-horizontal" role="form">
395 <br>
396 <div class="col-sm-2"></div>
397 <div class="col-sm-10">
1102f201 398 <p>
ea87f1d3
IC
399 For more info see the
400 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
401 </p>
ab78acc6 402 </div>
56530adc 403 <div class="form-group">
1102f201 404 <label for="bip32-client" class="col-sm-2 control-label">Client</label>
56530adc
IC
405 <div class="col-sm-10">
406 <select id="bip32-client" class="client form-control">
407 <option value="custom">Custom derivation path</option>
408 <!-- populated by javascript -->
409 </select>
410 </div>
411 </div>
ab78acc6 412 <div class="form-group">
1102f201 413 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
ab78acc6
IC
414 <div class="col-sm-10">
415 <input id="bip32-path" type="text" class="path form-control" value="m/0">
416 </div>
417 </div>
1975bfbc
IC
418 <div class="form-group">
419 <div class="col-sm-2"></div>
420 <label class="col-sm-10">
421 <input class="hardened-addresses" type="checkbox">
1102f201 422 <span>Use hardened addresses</span>
1975bfbc
IC
423 </label>
424 </div>
1975bfbc 425 <div class="form-group">
1102f201 426 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
1975bfbc 427 <div class="col-sm-10">
1102f201 428 <p class="form-control no-border">
1975bfbc 429 Use path <code>m/0'/0'</code> with hardened addresses.
c866242d 430 </p>
1102f201 431 <p class="form-control no-border">
ea87f1d3
IC
432 For more info see the
433 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
1975bfbc
IC
434 </p>
435 </div>
436 </div>
56530adc 437 <div class="form-group">
1102f201 438 <label for="core-path" class="col-sm-2 control-label">Multibit</label>
56530adc
IC
439 <div class="col-sm-10">
440 <p class="form-control no-border">
1102f201 441 <span>Use path <code>m/0'/0</code>.</span>
56530adc
IC
442 </p>
443 <p class="form-control no-border">
1102f201 444 <span>For more info see</span>
56530adc
IC
445 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
446 </p>
447 </div>
448 </div>
aa51da11 449 <div class="form-group">
1102f201 450 <label class="col-sm-2 control-label">Block Explorers</label>
aa51da11
IC
451 <div class="col-sm-10">
452 <p class="form-control no-border">
1102f201
IC
453 <span>Use path <code>m/44'/0'/0'</code>.</span>
454 <span>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
c866242d
IC
455 </p>
456 <p class="form-control no-border">
1102f201 457 <span>Can be used with</span>:
ea87f1d3 458 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
aa51da11
IC
459 </p>
460 </div>
461 </div>
ab78acc6
IC
462 </form>
463 </div>
9987f0c1
IC
464 <div id="bip49" class="tab-pane">
465 <form class="form-horizontal" role="form">
466 <br>
467 <div class="unavailable hidden">
468 <div class="form-group">
469 <div class="col-sm-2"></div>
470 <div class="col-sm-10">
1102f201 471 <p>BIP49 is unavailable for this coin.</p>
9987f0c1
IC
472 </div>
473 </div>
474 </div>
475 <div class="available">
476 <div class="col-sm-2"></div>
477 <div class="col-sm-10">
1102f201 478 <p>
9987f0c1
IC
479 For more info see the
480 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">BIP49 spec</a>.
481 </p>
482 </div>
483 <div class="form-group">
484 <label for="purpose" class="col-sm-2 control-label">
1102f201 485 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
9987f0c1
IC
486 </label>
487 <div class="col-sm-10">
488 <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
489 </div>
490 </div>
491 <div class="form-group">
492 <label for="coin" class="col-sm-2 control-label">
1102f201 493 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
9987f0c1
IC
494 </label>
495 <div class="col-sm-10">
496 <input id="coin" type="text" class="coin form-control" value="0" readonly>
497 </div>
498 </div>
499 <div class="form-group">
500 <label for="account" class="col-sm-2 control-label">
1102f201 501 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
9987f0c1
IC
502 </label>
503 <div class="col-sm-10">
504 <input id="account" type="text" class="account form-control" value="0">
505 </div>
506 </div>
507 <div class="form-group">
508 <label for="change" class="col-sm-2 control-label">
1102f201 509 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
9987f0c1
IC
510 </label>
511 <div class="col-sm-10">
512 <input id="change" type="text" class="change form-control" value="0">
513 </div>
514 </div>
515 <div class="form-group">
516 <label class="col-sm-2 control-label">
517 </label>
518 <div class="col-sm-10">
1102f201 519 <p>The account extended keys can be used for importing to most BIP49 compatible wallets.</p>
9987f0c1
IC
520 </div>
521 </div>
522 <div class="form-group">
523 <label for="account-xprv" class="col-sm-2 control-label">
1102f201 524 <span>Account Extended Private Key</span>
9987f0c1
IC
525 </label>
526 <div class="col-sm-10">
527 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
528 </div>
529 </div>
530 <div class="form-group">
531 <label for="account-xpub" class="col-sm-2 control-label">
1102f201 532 <span>Account Extended Public Key</span>
9987f0c1
IC
533 </label>
534 <div class="col-sm-10">
535 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
536 </div>
537 </div>
538 <div class="form-group">
539 <label class="col-sm-2 control-label">
540 </label>
541 <div class="col-sm-10">
1102f201 542 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
9987f0c1
IC
543 </div>
544 </div>
545 <div class="form-group">
1102f201 546 <label for="bip49-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
9987f0c1
IC
547 <div class="col-sm-10">
548 <input id="bip49-path" type="text" class="path form-control" value="m/49'/0'/0'/0" readonly="readonly">
549 </div>
550 </div>
551 </div>
552 </form>
553 </div>
cf6c2044
IC
554 <div id="bip141" class="tab-pane">
555 <form class="form-horizontal" role="form">
556 <br>
557 <div class="unavailable hidden">
558 <div class="form-group">
559 <div class="col-sm-2"></div>
560 <div class="col-sm-10">
561 <p>BIP141 is unavailable for this coin.</p>
562 </div>
563 </div>
564 </div>
565 <div class="available">
566 <div class="col-sm-2"></div>
567 <div class="col-sm-10">
568 <p>
569 For more info see the
570 <a href="https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki" target="_blank">BIP141 spec</a>
571 </p>
572 </div>
573 <div class="form-group">
574 <label for="bip141-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
575 <div class="col-sm-10">
576 <input id="bip141-path" type="text" class="bip141-path form-control" value="m/0">
577 </div>
578 </div>
579 <div class="form-group">
580 <label class="col-sm-2 control-label">Script Semantics</label>
581 <div class="col-sm-10">
582 <select class="form-control bip141-semantics">
583 <option value="p2wpkh">P2WPKH</option>
584 <option value="p2wpkh-p2sh" selected>P2WPKH nested in P2SH</option>
585 </select>
586 </div>
587 </div>
588 </div>
589 </form>
590 </div>
ab78acc6
IC
591 </div>
592 <form class="form-horizontal" role="form">
593 <div class="form-group">
1102f201 594 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Private Key</label>
ab78acc6 595 <div class="col-sm-10">
e00964cc 596 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
597 </div>
598 </div>
599 <div class="form-group">
1102f201 600 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Public Key</label>
ab78acc6 601 <div class="col-sm-10">
e00964cc 602 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
603 </div>
604 </div>
605 </form>
606 </div>
607 </div>
3af2954a 608
ab78acc6 609 <hr>
3af2954a 610
ab78acc6
IC
611 <div class="row">
612 <div class="col-md-12">
613 <h2>Derived Addresses</h2>
1102f201 614 <p>Note these addreses are derived from the BIP32 Extended Key</p>
0f6b34d6
IC
615 </div>
616 <div class="col-md-12 use-bitpay-addresses-container hidden">
617 <div class="checkbox">
618 <label>
619 <input type="checkbox" class="use-bitpay-addresses">
620 <span>Use BitPay-style addresses for Bitcoin Cash (ie starting with 'C' instead of '1')</span>
621 </label>
622 </div>
623 </div>
624 <div class="col-md-12">
ab78acc6
IC
625 <table class="table table-striped">
626 <thead>
627 <th>
628 <div class="input-group">
1102f201
IC
629 <span>Path</span>&nbsp;&nbsp;
630 <button class="index-toggle">Toggle</button>
ab78acc6
IC
631 </div>
632 </th>
633 <th>
634 <div class="input-group">
1102f201
IC
635 <span>Address</span>&nbsp;&nbsp;
636 <button class="address-toggle">Toggle</button>
ab78acc6
IC
637 </div>
638 </th>
1b12b2f5
IC
639 <th>
640 <div class="input-group">
1102f201
IC
641 <span>Public Key</span>&nbsp;&nbsp;
642 <button class="public-key-toggle">Toggle</button>
1b12b2f5
IC
643 </div>
644 </th>
ab78acc6
IC
645 <th>
646 <div class="input-group">
1102f201
IC
647 <span>Private Key</span>&nbsp;&nbsp;
648 <button class="private-key-toggle">Toggle</button>
ab78acc6
IC
649 </div>
650 </th>
651 </thead>
d737abf6 652 <tbody class="addresses monospace">
c866242d
IC
653 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
654 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
655 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
656 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
657 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
ab78acc6
IC
658 </tbody>
659 </table>
660 </div>
661 </div>
924727ed 662 <span>Show</span>
ab78acc6 663 <input type="number" class="rows-to-add" value="20">
924727ed
IC
664 <button class="more">more rows</button>
665 <span>starting from index</span>
666 <input type="number" class="more-rows-start-index">
667 <span>(leave blank to generate from next index)</span>
3af2954a 668
ab78acc6 669 <hr>
3af2954a 670
ab78acc6
IC
671 <div class="row">
672 <div class="col-md-12">
1102f201
IC
673 <h2>More info</h2>
674 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
675 <p>
ab78acc6
IC
676 Read more at the
677 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
678 </p>
1102f201
IC
679 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
680 <p>
ab78acc6
IC
681 Read more at the
682 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
ea87f1d3 683 </p>
1102f201 684 <p>
ea87f1d3 685 See the demo at
ab78acc6
IC
686 <a href="http://bip32.org/" target="_blank">bip32.org</a>
687 </p>
1102f201
IC
688 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
689 <p>
ab78acc6
IC
690 Read more at the
691 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
692 </p>
1102f201
IC
693 <h3>BIP49 <span class="small">Derivation scheme for P2WPKH-nested-in-P2SH based accounts</span></h3>
694 <p>
861750ae
JC
695 Read more at the
696 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">official BIP49 spec</a>
697 </p>
1102f201 698 <h3>Private Keys</h3>
ab78acc6 699 <p>
1102f201 700 <span>
ea87f1d3
IC
701 Use private keys at
702 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
703 </span>
1102f201 704 <span>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
ab78acc6 705 </p>
1102f201 706 <h3 id="entropy-notes">Entropy</h3>
c6624d51 707 <p>
1102f201 708 <span>
ea87f1d3
IC
709 Entropy values must be sourced from a
710 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
711 </span>
1102f201
IC
712 <span>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
713 <span>
ea87f1d3
IC
714 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address,
715 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
716 random enough for the needs of this tool.
717 </span>
c6624d51 718 </p>
434caecd 719 <p>
1102f201 720 <strong><span>Do not store entropy.</span></strong>
434caecd
IC
721 </p>
722 <p>
1102f201
IC
723 <span>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
724 <span>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
725 <span><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
434caecd 726 </p>
c6624d51 727 <p>
1102f201 728 <span>
ea87f1d3
IC
729 The random mnemonic generator on this page uses a
730 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
731 </span>
1102f201
IC
732 <span>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
733 <span>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
734 <span>In that case you might choose to use your own source of entropy.</span>
c6624d51
IC
735 </p>
736 <p>
1102f201 737 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank">You are not a good source of entropy.</a>
c6624d51 738 </p>
1102f201 739 <h3>License</h3>
52da415f 740 <p>
1102f201 741 <span>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
52da415f
IC
742 </span>
743 </p>
1102f201
IC
744 <p>The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.</p>
745 </div>
746 </div>
747
748 <hr>
749
750 <div class="row">
751 <div class="col-md-12">
752 <h2>Alternative Tools</h2>
753 <p>This tool is interoperable with any BIP39 wallet.</p>
754 <p>Some similar tools to this one (ie not consumer wallets) are</p>
755 <p>
756 <a href="https://bip32jp.github.io/english/">
757 https://bip32jp.github.io/english/
758 </a>
759 </p>
ab78acc6
IC
760 </div>
761 </div>
3af2954a 762
ab78acc6 763 <hr>
3af2954a 764
ab78acc6
IC
765 <div class="row">
766 <div class="col-md-12">
3af2954a 767
1102f201 768 <h2>Offline Usage</h2>
3af2954a 769
1102f201 770 <p>
ab78acc6
IC
771 You can use this tool without having to be online.
772 </p>
1102f201 773 <p>
ab78acc6
IC
774 In your browser, select file save-as, and save this page
775 as a file.
776 </p>
1102f201 777 <p>
ab78acc6
IC
778 Double-click that file to open it in a browser
779 on any offline computer.
780 </p>
781 <p>
1102f201 782 <span>Alternatively, download the file from the repository</span>
ea87f1d3
IC
783 -
784 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
785 </p>
3af2954a 786
ab78acc6
IC
787 </div>
788 </div>
3af2954a 789
ab78acc6 790 <hr>
3af2954a 791
ab78acc6
IC
792 <div class="row">
793 <div class="col-md-12">
3af2954a 794
1102f201 795 <h2>This project is 100% open-source code</h2>
3af2954a 796
ab78acc6 797 <p>
1102f201 798 <span>Get the source code from the repository</span>
ea87f1d3 799 -
b630f83d
IC
800 <a href="https://github.com/iancoleman/bip39" target="_blank">
801 https://github.com/iancoleman/bip39
ab78acc6
IC
802 </a>
803 </p>
3af2954a 804
1102f201 805 <h3>Libraries</h3>
3af2954a 806
ab78acc6
IC
807 <p>
808 <span>BitcoinJS - </span>
809 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
810 https://github.com/bitcoinjs/bitcoinjs-lib
811 </a>
812 </p>
3af2954a 813
ab78acc6
IC
814 <p>
815 <span>jsBIP39 - </span>
816 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
817 https://github.com/iancoleman/jsbip39
818 </a>
819 </p>
3af2954a 820
ab78acc6
IC
821 <p>
822 <span>sjcl - </span>
823 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
824 https://github.com/bitwiseshiftleft/sjcl
825 </a>
826 </p>
3af2954a 827
ab78acc6
IC
828 <p>
829 <span>jQuery - </span>
830 <a href="https://jquery.com/" target="_blank">
831 https://jquery.com/
832 </a>
833 </p>
3af2954a 834
ab78acc6
IC
835 <p>
836 <span>Twitter Bootstrap - </span>
837 <a href="http://getbootstrap.com/" target="_blank">
838 http://getbootstrap.com/
839 </a>
840 </p>
3af2954a 841
ab78acc6
IC
842 </div>
843 </div>
3af2954a 844
ab78acc6 845 </div>
3af2954a 846
e00964cc 847 <div class="qr-container hidden">
1102f201
IC
848 <div class="qr-hint bg-primary hidden">Click field to hide QR</div>
849 <div class="qr-hint bg-primary">Click field to show QR</div>
52da415f
IC
850 <div class="qr-hider hidden">
851 <div class="qr-image"></div>
1102f201 852 <div class="qr-warning bg-primary">Caution: Scanner may keep history</div>
52da415f 853 </div>
e00964cc
IC
854 </div>
855
ab78acc6
IC
856 <div class="feedback-container">
857 <div class="feedback">Loading...</div>
858 </div>
3af2954a 859
ab78acc6
IC
860 <script type="text/template" id="address-row-template">
861 <tr>
862 <td class="index"><span></span></td>
e00964cc
IC
863 <td class="address"><span data-show-qr></span></td>
864 <td class="pubkey"><span data-show-qr></span></td>
865 <td class="privkey"><span data-show-qr></span></td>
ab78acc6
IC
866 </tr>
867 </script>
8b095871
IC
868 <script>// From
869// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
870// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
871// but is not required in any modern browsers.
872// For more information, see
873// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
874
875//----------------------------------------------------------------------
876//
877// ECMAScript 2015 Polyfills
878//
879//----------------------------------------------------------------------
563e401a 880
8b095871
IC
881(function (global) {
882 "use strict";
883
884 // Set this to always override native implementations, for testing
885 // the polyfill in browsers with partial/full ES2015 support.
886 var OVERRIDE_NATIVE_FOR_TESTING = false;
887
888 var undefined = (void 0); // Paranoia
889
890 // Helpers
891
892 function strict(o) {
893 return o === global ? undefined : o;
894 }
895
896 function hook(o, p, f) {
897 var op = o[p];
898 console.assert(typeof op === 'function', 'Hooking a non-function');
899 o[p] = function() {
900 var o = strict(this);
901 var r = f.apply(o, arguments);
902 return r !== undefined ? r : op.apply(o, arguments);
903 };
904 }
905
906 function isSymbol(s) {
907 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
908 }
909
910 function getPropertyDescriptor(target, name) {
911 var desc = Object.getOwnPropertyDescriptor(target, name);
912 var proto = Object.getPrototypeOf(target);
913 while (!desc && proto) {
914 desc = Object.getOwnPropertyDescriptor(proto, name);
915 proto = Object.getPrototypeOf(proto);
563e401a 916 }
8b095871
IC
917 return desc;
918 }
563e401a 919
8b095871
IC
920 var enqueue = (function(nativePromise, nativeSetImmediate) {
921 if (nativePromise)
922 return function(job) { nativePromise.resolve().then(function() { job(); }); };
923 if (nativeSetImmediate)
924 return function(job) { nativeSetImmediate(job); };
925 return function(job) { setTimeout(job, 0); };
926 }(global['Promise'], global['setImmediate']));
563e401a 927
8b095871
IC
928 function define(o, p, v, override) {
929 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
930 return;
931
932 if (typeof v === 'function') {
933 // Sanity check that functions are appropriately named (where possible)
934 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
935 Object.defineProperty(o, p, {
936 value: v,
937 configurable: true,
938 enumerable: false,
939 writable: true
940 });
563e401a 941 } else {
8b095871
IC
942 Object.defineProperty(o, p, {
943 value: v,
944 configurable: false,
945 enumerable: false,
946 writable: false
947 });
563e401a 948 }
8b095871 949 }
563e401a 950
8b095871
IC
951 function set_internal(o, p, v) {
952 Object.defineProperty(o, p, {
953 value: v,
954 configurable: false,
955 enumerable: false,
956 writable: true
957 });
958 }
563e401a 959
8b095871
IC
960 // Snapshot intrinsic functions
961 var $isNaN = global.isNaN,
962 $parseInt = global.parseInt,
963 $parseFloat = global.parseFloat;
964
965 var E = Math.E,
966 LOG10E = Math.LOG10E,
967 LOG2E = Math.LOG2E,
968 abs = Math.abs,
969 ceil = Math.ceil,
970 exp = Math.exp,
971 floor = Math.floor,
972 log = Math.log,
973 max = Math.max,
974 min = Math.min,
975 pow = Math.pow,
976 random = Math.random,
977 sqrt = Math.sqrt;
978
979 var orig_match = String.prototype.match,
980 orig_replace = String.prototype.replace,
981 orig_search = String.prototype.search,
982 orig_split = String.prototype.split;
983
984 // These are used for implementing the polyfills, but not exported.
985
986 // Inspired by https://gist.github.com/1638059
987 /** @constructor */
988 function EphemeronTable() {
989 var secretKey = ObjectCreate(null);
990
991 function conceal(o) {
992 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
993 Object.defineProperty(o, 'valueOf', {
994 value: (function(secretKey) {
995 return function (k) {
996 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
997 };
998 }(secretKey)),
999 configurable: true,
1000 writeable: true,
1001 enumerable: false
1002 });
1003 return secrets;
1004 }
563e401a 1005
8b095871
IC
1006 function reveal(o) {
1007 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
1008 return v === o ? null : v;
1009 }
1010
1011 return {
1012 clear: function() {
1013 secretKey = ObjectCreate(null);
1014 },
1015 remove: function(key) {
1016 var secrets = reveal(key);
1017 if (secrets && HasOwnProperty(secrets, 'value')) {
1018 delete secrets.value;
1019 return true;
1020 }
1021 return false;
1022 },
1023 get: function(key, defaultValue) {
1024 var secrets = reveal(key);
1025 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
1026 },
1027 has: function(key) {
1028 var secrets = reveal(key);
1029 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
1030 },
1031 set: function(key, value) {
1032 var secrets = reveal(key) || conceal(key);
1033 secrets.value = value;
563e401a 1034 }
8b095871
IC
1035 };
1036 }
563e401a 1037
8b095871 1038 var empty = Object.create(null);
563e401a 1039
8b095871
IC
1040 //----------------------------------------------------------------------
1041 //
1042 // ECMAScript 2015
1043 // http://www.ecma-international.org/ecma-262/6.0/
1044 //
1045 //----------------------------------------------------------------------
563e401a 1046
8b095871
IC
1047 // ---------------------------------------
1048 // 19.4 Symbol Objects
1049 // ---------------------------------------
563e401a 1050
8b095871
IC
1051 // NOTE: Symbols are defined here - out of spec order - since we need the
1052 // properties and prototype to be populated for other polyfills.
563e401a 1053
8b095871 1054 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
563e401a 1055
8b095871
IC
1056 var symbolForKey;
1057 (function() {
1058 var secret = Object.create(null);
1059 var symbolMap = {};
1060 symbolForKey = function(k) {
1061 return symbolMap[k];
1062 };
563e401a 1063
8b095871 1064 var GlobalSymbolRegistry = [];
563e401a 1065
8b095871
IC
1066 function unique(bits) {
1067 return Array(bits + 1).join('x').replace(/x/g, function() {
1068 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
1069 });
1070 }
563e401a 1071
8b095871
IC
1072 // 19.4.1 The Symbol Constructor
1073 // 19.4.1.1 Symbol ( description=undefined )
1074 function Symbol(description) {
1075 if (!(this instanceof Symbol)) return new Symbol(description, secret);
1076 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
563e401a 1077
8b095871
IC
1078 var descString = description === undefined ? undefined : String(description);
1079
1080 set_internal(this, '[[SymbolData]]', unique(128));
1081 set_internal(this, '[[Description]]', descString);
1082
1083 symbolMap[this] = this;
1084 return this;
1085 }
1086
1087 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
1088 global.Symbol = Symbol;
1089
1090 // 19.4.2 Properties of the Symbol Constructor
1091
1092 // 19.4.2.1 Symbol.for (key)
1093 define(Symbol, 'for', function for_(key) {
1094 var stringKey = String(key);
1095 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1096 var e = GlobalSymbolRegistry[i];
1097 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
563e401a 1098 }
8b095871
IC
1099 var newSymbol = Symbol(key);
1100 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
1101 return newSymbol;
1102 });
563e401a 1103
8b095871
IC
1104 // 19.4.2.2 Symbol.hasInstance
1105 // 19.4.2.3 Symbol.isConcatSpreadable
563e401a 1106
8b095871
IC
1107 // 19.4.2.4 Symbol.iterator
1108 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
563e401a 1109
8b095871
IC
1110 // 19.4.2.5 Symbol.keyFor (sym)
1111 define(Symbol, 'keyFor', function keyFor(sym) {
1112 if (!(sym instanceof Symbol)) throw TypeError();
1113 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1114 var e = GlobalSymbolRegistry[i];
1115 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
1116 }
1117 return undefined;
1118 });
563e401a 1119
8b095871
IC
1120 // 19.4.2.6 Symbol.match
1121 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
563e401a 1122
8b095871 1123 // 19.4.2.7 Symbol.prototype
563e401a 1124
8b095871
IC
1125 // 19.4.2.8 Symbol.replace
1126 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
563e401a 1127
8b095871
IC
1128 // 19.4.2.9 Symbol.search
1129 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
563e401a 1130
8b095871 1131 // 19.4.2.10 Symbol.species
563e401a 1132
8b095871
IC
1133 // 19.4.2.11 Symbol.search
1134 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
563e401a 1135
8b095871 1136 // 19.4.2.12 Symbol.toPrimitive
563e401a 1137
8b095871
IC
1138 // 19.4.2.13 Symbol.toStringTag
1139 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
1140
1141 // 19.4.2.14 Symbol.unscopables
1142
1143 // 19.4.3 Properties of the Symbol Prototype Object
1144 // 19.4.3.1 Symbol.prototype.constructor
1145
1146 // 19.4.3.2 Symbol.prototype.toString ( )
1147 Object.defineProperty(Symbol.prototype, 'toString', {
1148 value: function toString() {
1149 var s = strict(this);
1150 var desc = s['[[Description]]'];
1151 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
1152 },
1153 configurable: true, writeable: true, enumerable: false });
1154
1155 // 19.4.3.3 Symbol.prototype.valueOf ( )
1156 Object.defineProperty(Symbol.prototype, 'valueOf', {
1157 value: function valueOf() {
1158 // To prevent automatic string conversion:
1159 throw TypeError();
1160
1161 // Spec has approximately the following:
1162 //var s = strict(this);
1163 //if (Type(s) === 'symbol') return s;
1164 //if (Type(s) !== 'object') throw TypeError();
1165 //if (!('[[SymbolData]]' in s)) throw TypeError();
1166 //return s['[[SymbolData]]'];
1167 },
1168 configurable: true, writeable: true, enumerable: false });
1169
1170 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1171 // (Done later to polyfill partial implementations)
1172
1173 // 19.4.4 Properties of Symbol Instances
1174 }());
1175
1176 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
1177
1178 // Defined here so that other prototypes can reference it
1179 // 25.1.2 The %IteratorPrototype% Object
1180 var $IteratorPrototype$ = {};
1181
1182 //----------------------------------------
1183 // 6 ECMAScript Data Types and Values
1184 //----------------------------------------
1185
1186 // 6.1 ECMAScript Language Types
1187
1188 // "Type(x)" is used as shorthand for "the type of x"...
1189 function Type(v) {
1190 switch (typeof v) {
1191 case 'undefined': return 'undefined';
1192 case 'boolean': return 'boolean';
1193 case 'number': return 'number';
1194 case 'string': return 'string';
1195 case 'symbol': return 'symbol';
1196 default:
1197 if (v === null) return 'null';
1198 if (v instanceof global.Symbol) return 'symbol';
1199 return 'object';
563e401a 1200 }
8b095871 1201 }
563e401a 1202
8b095871
IC
1203 // 6.1.5.1 Well-Known Symbols
1204 var $$iterator = global.Symbol.iterator,
1205 $$match = global.Symbol.match,
1206 $$replace = global.Symbol.replace,
1207 $$search = global.Symbol.search,
1208 $$split = global.Symbol.split,
1209 $$toStringTag = global.Symbol.toStringTag;
563e401a 1210
8b095871
IC
1211 //----------------------------------------
1212 // 7 Abstract Operations
1213 //----------------------------------------
1214
1215 //----------------------------------------
1216 // 7.1 Type Conversion
1217 //----------------------------------------
1218
1219 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1220 // just use valueOf()
1221
1222 // 7.1.2 ToBoolean ( argument )
1223 // just use Boolean()
1224
1225 // 7.1.3 ToNumber ( argument )
1226 // just use Number()
1227
1228 // 7.1.4 ToInteger ( argument )
1229 function ToInteger(n) {
1230 n = Number(n);
1231 if ($isNaN(n)) return 0;
1232 if (n === 0 || n === Infinity || n === -Infinity) return n;
1233 return ((n < 0) ? -1 : 1) * floor(abs(n));
563e401a 1234 }
8b095871
IC
1235
1236 // 7.1.5 ToInt32 ( argument )
1237 function ToInt32(v) { return v >> 0; }
1238
1239 // 7.1.6 ToUint32 ( argument )
1240 function ToUint32(v) { return v >>> 0; }
1241
1242 // 7.1.7 ToInt16 ( argument )
1243 function ToInt16(v) { return (v << 16) >> 16; }
1244
1245 // 7.1.8 ToUint16 ( argument )
1246 function ToUint16(v) { return v & 0xFFFF; }
1247
1248 // 7.1.9 ToInt8 ( argument )
1249 function ToInt8(v) { return (v << 24) >> 24; }
1250
1251 // 7.1.10 ToUint8 ( argument )
1252 function ToUint8(v) { return v & 0xFF; }
1253
1254 // 7.1.11 ToUint8Clamp ( argument )
1255 function ToUint8Clamp(argument) {
1256 var number = Number(argument);
1257 if ($isNaN(number)) return 0;
1258 if (number <= 0) return 0;
1259 if (number >= 255) return 255;
1260 var f = floor(number);
1261 if ((f + 0.5) < number) return f + 1;
1262 if (number < (f + 0.5)) return f;
1263 if (f % 2) return f + 1;
1264 return f;
563e401a 1265 }
8b095871
IC
1266
1267 // 7.1.12 ToString ( argument )
1268 // just use String()
1269
1270 // 7.1.13 ToObject ( argument )
1271 function ToObject(v) {
1272 if (v === null || v === undefined) throw TypeError();
1273 return Object(v);
563e401a 1274 }
563e401a 1275
8b095871
IC
1276 // 7.1.14 ToPropertyKey ( argument )
1277 function ToPropertyKey(v) {
1278 return String(v);
1279 }
3af2954a 1280
8b095871
IC
1281 // 7.1.15 ToLength ( argument )
1282 function ToLength(v) {
1283 var len = ToInteger(v);
1284 if (len <= 0) return 0;
1285 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1286 return min(len, 0x20000000000000 - 1); // 2^53-1
ab78acc6 1287 }
3af2954a 1288
8b095871 1289 // 7.1.16 CanonicalNumericIndexString ( argument )
3af2954a 1290
8b095871
IC
1291 //----------------------------------------
1292 // 7.2 Testing and Comparison Operations
1293 //----------------------------------------
3af2954a 1294
8b095871
IC
1295 // 7.2.1 RequireObjectCoercible ( argument )
1296 // 7.2.2 IsArray ( argument )
3af2954a 1297
8b095871
IC
1298 // 7.2.3 IsCallable ( argument )
1299 function IsCallable(o) { return typeof o === 'function'; }
3af2954a 1300
8b095871
IC
1301 // 7.2.4 IsConstructor ( argument )
1302 function IsConstructor(o) {
1303 // Hacks for Safari 7 TypedArray XXXConstructor objects
1304 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1305 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1306 // TODO: Can this be improved on?
1307 return typeof o === 'function';
3af2954a 1308 }
8b095871
IC
1309
1310 // 7.2.5 IsExtensible (O)
1311 // 7.2.6 IsInteger ( argument )
1312
1313 // 7.2.7 IsPropertyKey ( argument )
1314 function IsPropertyKey(argument) {
1315 if (Type(argument) === 'string') return true;
1316 if (Type(argument) === 'symbol') return true;
1317 return false;
3af2954a
IC
1318 }
1319
8b095871
IC
1320 // 7.2.8 IsRegExp ( argument )
1321 // 7.2.5 IsConstructor ( argument )
3af2954a 1322
8b095871
IC
1323 // 7.2.9 SameValue(x, y)
1324 function SameValue(x, y) {
1325 if (typeof x !== typeof y) return false;
1326 switch (typeof x) {
1327 case 'undefined':
1328 return true;
1329 case 'number':
1330 if (x !== x && y !== y) return true;
1331 if (x === 0 && y === 0) return 1/x === 1/y;
1332 return x === y;
1333 case 'boolean':
1334 case 'string':
1335 case 'object':
1336 default:
1337 return x === y;
1338 }
1339 }
3af2954a 1340
8b095871
IC
1341 // 7.2.10 SameValueZero(x, y)
1342 function SameValueZero(x, y) {
1343 if (typeof x !== typeof y) return false;
1344 switch (typeof x) {
1345 case 'undefined':
1346 return true;
1347 case 'number':
1348 if (x !== x && y !== y) return true;
1349 return x === y;
1350 case 'boolean':
1351 case 'string':
1352 case 'object':
1353 default:
1354 return x === y;
1355 }
1356 }
3af2954a 1357
8b095871
IC
1358 //----------------------------------------
1359 // 7.3 Operations on Objects
1360 //----------------------------------------
3af2954a 1361
8b095871
IC
1362 // 7.3.1 Get (O, P)
1363 // - just use o.p or o[p]
3af2954a 1364
8b095871
IC
1365 // 7.3.2 GetV (V, P)
1366 function GetV(v, p) {
1367 var o = ToObject(v);
1368 return o[p];
1369 }
3af2954a 1370
8b095871
IC
1371 // 7.3.3 Set (O, P, V, Throw)
1372 // - just use o.p = v or o[p] = v
3af2954a 1373
3af2954a 1374
3af2954a 1375
3af2954a 1376
8b095871
IC
1377 // 7.3.9 GetMethod (O, P)
1378 function GetMethod(o, p) {
1379 var func = GetV(o, p);
1380 if (func === undefined || func === null) return undefined;
1381 if (!IsCallable(func)) throw TypeError();
1382 return func;
ab78acc6 1383 }
8b095871
IC
1384
1385 // 7.3.10 HasProperty (O, P)
1386 function HasProperty(o, p) {
1387 while (o) {
1388 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1389 if (Type(o) !== 'object') return false;
1390 o = Object.getPrototypeOf(o);
ab78acc6 1391 }
8b095871 1392 return false;
ab78acc6 1393 }
8b095871
IC
1394
1395 // 7.3.11 HasOwnProperty (O, P)
1396 function HasOwnProperty(o, p) {
1397 return Object.prototype.hasOwnProperty.call(o, p);
ab78acc6 1398 }
3af2954a 1399
8b095871
IC
1400 //----------------------------------------
1401 // 7.4 Operations on Iterator Objects
1402 //----------------------------------------
3af2954a 1403
8b095871
IC
1404 // 7.4.1 GetIterator ( obj, method )
1405 function GetIterator(obj, method) {
1406 if (arguments.length < 2)
1407 method = GetMethod(obj, $$iterator);
1408 var iterator = method.call(obj);
1409 if (Type(iterator) !== 'object') throw TypeError();
1410 return iterator;
3af2954a
IC
1411 }
1412
8b095871
IC
1413 // 7.4.2 IteratorNext ( iterator, value )
1414 function IteratorNext(iterator, value) {
1415 if (arguments.length < 2)
1416 var result = iterator.next();
1417 else
1418 result = iterator.next(value);
1419 if (Type(result) !== 'object') throw TypeError();
1420 return result;
1421 }
3af2954a 1422
8b095871
IC
1423 // 7.4.3 IteratorComplete ( iterResult )
1424 function IteratorComplete(iterResult) {
1425 console.assert(Type(iterResult) === 'object');
1426 return Boolean(iterResult.done);
1427 }
3af2954a 1428
8b095871
IC
1429 // 7.4.4 IteratorValue ( iterResult )
1430 function IteratorValue(iterResult) {
1431 console.assert(Type(iterResult) === 'object');
1432 return iterResult.value;
1433 }
1434
1435 // 7.4.5 IteratorStep ( iterator )
1436 function IteratorStep( iterator, value ) {
1437 var result = IteratorNext(iterator, value);
1438 var done = result['done'];
1439 if (Boolean(done) === true) return false;
1440 return result;
1441 }
1442
1443 // 7.4.6 IteratorClose( iterator, completion )
1444 function IteratorClose( iterator, completion ) {
1445 console.assert(Type(iterator) === 'object');
1446 var _return = GetMethod(iterator, 'return');
1447 if (_return === undefined) return completion;
1448 try {
1449 var innerResult = _return[iterator]();
1450 } catch (result) {
1451 // TODO: If completion.[[type]] is throw, return completion
1452 return result;
1453 }
1454 if (Type(innerResult) !== 'object') throw TypeError();
1455 return completion;
1456 }
1457
1458 // 7.4.7 CreateIterResultObject (value, done)
1459 function CreateIterResultObject(value, done) {
1460 console.assert(Type(done) === 'boolean');
1461 var obj = {};
1462 obj["value"] = value;
1463 obj["done"] = done;
1464 return obj;
1465 }
1466
1467 // 7.4.8 CreateListIterator (list)
1468 // 7.4.8.1 ListIterator next( )
1469 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1470 // 7.4.9.1 CompoundIterator next( )
1471
1472 //----------------------------------------
1473 // 8 Executable Code and Execution Contexts
1474 //----------------------------------------
1475
1476 //----------------------------------------
1477 // 8.4 Jobs and Job Queues
1478 //----------------------------------------
1479
1480 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1481 function EnqueueJob(queueName, job, args) {
1482 var fn = function() { job.apply(undefined, args); };
1483 enqueue(fn);
1484 }
1485
1486 // 8.4.2 NextJob result
1487 function NextJob(result) {
1488 // no-op
1489 }
1490
1491 //----------------------------------------
1492 // 9 Ordinary and Exotic Objects Behaviors
1493 //----------------------------------------
1494
1495 // 9.1.11 [[Enumerate]] ()
1496 function Enumerate(obj) {
1497 var e = [];
1498 if (Object(obj) !== obj) return e;
1499 var visited = new Set;
1500 while (obj !== null) {
1501 Object.getOwnPropertyNames(obj).forEach(function(name) {
1502 if (!visited.has(name)) {
1503 var desc = Object.getOwnPropertyDescriptor(obj, name);
1504 if (desc) {
1505 visited.add(name);
1506 if (desc.enumerable) e.push(name);
1507 }
1508 }
1509 });
1510 obj = Object.getPrototypeOf(obj);
1511 }
1512 return e[$$iterator]();
1513 }
1514
1515 // 9.1.12 [[OwnPropertyKeys]] ( )
1516 function OwnPropertyKeys(o) {
1517 return Object.getOwnPropertyNames(o);
1518 }
1519
1520 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1521 function ObjectCreate(proto, internalSlotsList) {
1522 return Object.create(proto, internalSlotsList);
1523 }
1524
1525 // ---------------------------------------
1526 // 19 Fundamental Objects
1527 // ---------------------------------------
1528
1529 // ---------------------------------------
1530 // 19.1 Object Objects
1531 // ---------------------------------------
1532
1533 // 19.1.1 The Object Constructor
1534 // 19.1.1.1 Object ( [ value ] )
1535 // 19.1.2 Properties of the Object Constructor
1536 // 19.1.2.1 Object.assign ( target, ...sources )
1537 define(
1538 Object, 'assign',
1539 function assign(target, /*...*/sources) {
1540 var to = ToObject(target);
1541 if (arguments.length < 2) return to;
1542
1543 var sourcesIndex = 1;
1544 while (sourcesIndex < arguments.length) {
1545 var nextSource = arguments[sourcesIndex++];
1546 if (nextSource === undefined || nextSource === null) {
1547 var keys = [];
1548 } else {
1549 var from = ToObject(nextSource);
1550 keys = OwnPropertyKeys(from);
1551 }
1552 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1553 var nextKey = keys[keysIndex];
1554 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1555 if (desc !== undefined && desc.enumerable) {
1556 var propValue = from[nextKey];
1557 to[nextKey] = propValue;
1558 }
1559 }
1560 }
1561 return to;
1562 });
1563
1564 // 19.1.2.2 Object.create ( O [ , Properties ] )
1565 // 19.1.2.3 Object.defineProperties ( O, Properties )
1566 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1567 // 19.1.2.5 Object.freeze ( O )
1568 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1569
1570 (function() {
1571 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1572 $getOwnPropertyNames = Object.getOwnPropertyNames,
1573 $keys = Object.keys,
1574 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1575
1576 function isStringKey(k) { return !symbolForKey(k); }
1577
1578 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1579 define(
1580 Object, 'getOwnPropertyNames',
1581 function getOwnPropertyNames(o) {
1582 if (Object.prototype.toString.call(o) === '[object Window]') {
1583 // Workaround for cross-realm calling by IE itself.
1584 // https://github.com/inexorabletash/polyfill/issues/96
1585 try {
1586 return $getOwnPropertyNames(o).filter(isStringKey);
1587 } catch (_) {
1588 return $window_names.slice();
1589 }
1590 }
1591 return $getOwnPropertyNames(o).filter(isStringKey);
1592 }, !nativeSymbols);
1593
1594 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1595 define(
1596 Object, 'getOwnPropertySymbols',
1597 function getOwnPropertySymbols(o) {
1598 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1599 }, !nativeSymbols);
1600
1601 // 19.1.2.14 Object.keys ( O )
1602 define(
1603 Object, 'keys',
1604 function keys(o) {
1605 return $keys(o).filter(isStringKey);
1606 }, !nativeSymbols);
1607 }());
1608
1609 // 19.1.2.9 Object.getPrototypeOf ( O )
1610 // 19.1.2.10 Object.is ( value1, value2 )
1611 define(
1612 Object, 'is',
1613 function is(value1, value2) {
1614 return SameValue(value1, value2);
1615 });
1616
1617 // 19.1.2.11 Object.isExtensible ( O )
1618 // 19.1.2.12 Object.isFrozen ( O )
1619 // 19.1.2.13 Object.isSealed ( O )
1620
1621 // 19.1.2.14 Object.keys ( O )
1622 // see above
1623
1624 // 19.1.2.15 Object.preventExtensions ( O )
1625 // 19.1.2.16 Object.prototype
1626 // 19.1.2.17 Object.seal ( O )
1627
1628 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1629 define(
1630 Object, 'setPrototypeOf',
1631 function setPrototypeOf(o, proto) {
1632 if (Type(o) !== 'object') throw TypeError();
1633 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1634 o.__proto__ = proto;
1635 return o;
1636 }
1637 );
1638
1639 // 19.1.3 Properties of the Object Prototype Object
1640 // 19.1.3.1 Object.prototype.constructor
1641 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1642 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1643 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1644 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1645 // 19.1.3.6 Object.prototype.toString ( )
1646 hook(Object.prototype, 'toString',
1647 function() {
1648 var o = strict(this);
1649 if (o === Object(o) && $$toStringTag in o) {
1650 return '[object ' + o[$$toStringTag] + ']';
1651 }
1652 return undefined;
1653 });
1654
1655 // 19.1.3.7 Object.prototype.valueOf ( )
1656 // 19.1.4 Properties of Object Instances
1657
1658 // ---------------------------------------
1659 // 19.2 Function Objects
1660 // ---------------------------------------
1661
1662 // 19.2.1 The Function Constructor
1663 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1664 // 19.2.2 Properties of the Function Constructor
1665 // 19.2.2.1 Function.length
1666 // 19.2.2.2 Function.prototype
1667 // 19.2.3 Properties of the Function Prototype Object
1668 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1669 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1670 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1671 // 19.2.3.4 Function.prototype.constructor
1672 // 19.2.3.5 Function.prototype.toString ( )
1673 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1674 // 19.2.4 Function Instances
1675 // 19.2.4.1 length
1676 // 19.2.4.2 name
1677 // 19.2.4.3 prototype
1678
1679 // (No polyfillable changes from ES5)
1680
1681 // ---------------------------------------
1682 // 19.3 Boolean Objects
1683 // ---------------------------------------
1684
1685 // 19.3.1 The Boolean Constructor
1686 // 19.3.1.1 Boolean ( value )
1687 // 19.3.2 Properties of the Boolean Constructor
1688 // 19.3.2.1 Boolean.prototype
1689 // 19.3.3 Properties of the Boolean Prototype Object
1690 // 19.3.3.1 Boolean.prototype.constructor
1691 // 19.3.3.2 Boolean.prototype.toString ( )
1692 // 19.3.3.3 Boolean.prototype.valueOf ( )
1693 // 19.3.4 Properties of Boolean Instances
1694
1695 // (No polyfillable changes from ES5)
1696
1697 // ---------------------------------------
1698 // 19.4 Symbol Objects
1699 // ---------------------------------------
1700
1701 // Moved earlier in this script, so that other polyfills can depend on them.
1702
1703 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1704 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1705
1706 // ---------------------------------------
1707 // 19.5 Error Objects
1708 // ---------------------------------------
1709
1710 // 19.5.1 The Error Constructor
1711 // 19.5.1.1 Error ( message )
1712 // 19.5.1.2 new Error( ...argumentsList )
1713 // 19.5.2 Properties of the Error Constructor
1714 // 19.5.2.1 Error.prototype
1715 // 19.5.3 Properties of the Error Prototype Object
1716 // 19.5.3.1 Error.prototype.constructor
1717 // 19.5.3.2 Error.prototype.message
1718 // 19.5.3.3 Error.prototype.name
1719 // 19.5.3.4 Error.prototype.toString ( )
1720 // 19.5.4 Properties of Error Instances
1721 // 19.5.5 Native Error Types Used in This Standard
1722 // 19.5.5.1 EvalError
1723 // 19.5.5.2 RangeError
1724 // 19.5.5.3 ReferenceError
1725 // 19.5.5.4 SyntaxError
1726 // 19.5.5.5 TypeError
1727 // 19.5.5.6 URIError
1728 // 19.5.6 NativeError Object Structure
1729 // 19.5.6.1 NativeError Constructors
1730 // 19.5.6.1.1 NativeError ( message )
1731 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1732 // 19.5.6.2 Properties of the NativeError Constructors
1733 // 19.5.6.2.1 NativeError.prototype
1734 // 19.5.6.3 Properties of the NativeError Prototype Objects
1735 // 19.5.6.4 Properties of NativeError Instances
1736
1737 // (No polyfillable changes from ES5)
1738
1739 // ---------------------------------------
1740 // 20 Numbers and Dates
1741 // ---------------------------------------
1742
1743 // ---------------------------------------
1744 // 20.1 Number Objects
1745 // ---------------------------------------
1746
1747 // 20.1.1 The Number Constructor
1748 // 20.1.1.1 Number ( [ value ] )
1749 // 20.1.1.2 new Number ( ...argumentsList )
1750 // 20.1.2 Properties of the Number Constructor
1751
1752 // 20.1.2.1 Number.EPSILON
1753 define(
1754 Number, 'EPSILON',
1755 (function () {
1756 var next, result;
1757 for (next = 1; 1 + next !== 1; next = next / 2)
1758 result = next;
1759 return result;
1760 }()));
1761
1762 // 20.1.2.2 Number.isFinite ( number )
1763 define(
1764 Number, 'isFinite',
1765 function isFinite(number) {
1766 if (Type(number) !== 'number') return false;
1767 if (number !== number || number === +Infinity || number === -Infinity) return false;
1768 return true;
1769 });
1770
1771 // 20.1.2.3 Number.isInteger ( number )
1772 define(
1773 Number, 'isInteger',
1774 function isInteger(number) {
1775 if (Type(number) !== 'number') return false;
1776 if (number !== number || number === +Infinity || number === -Infinity) return false;
1777 var integer = ToInteger(number);
1778 if (integer !== number) return false;
1779 return true;
1780 });
1781
1782 // 20.1.2.4 Number.isNaN ( number )
1783 define(
1784 Number, 'isNaN',
1785 function isNaN(number) {
1786 if (Type(number) !== 'number') return false;
1787 if (number !== number) return true;
1788 return false;
1789 });
1790
1791 // 20.1.2.5 Number.isSafeInteger ( number )
1792 define(
1793 Number, 'isSafeInteger',
1794 function isSafeInteger(number) {
1795 if (Type(number) !== 'number') return false;
1796 if (number !== number || number === +Infinity || number === -Infinity) return false;
1797 var integer = ToInteger(number);
1798 if (integer !== number) return false;
1799 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1800 return true;
1801 return false;
1802 });
1803
1804 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1805 define(
1806 Number, 'MAX_SAFE_INTEGER',
1807 9007199254740991); // 2^53-1
1808
1809 // 20.1.2.7 Number.MAX_VALUE
1810
1811 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1812 define(
1813 Number, 'MIN_SAFE_INTEGER',
1814 -9007199254740991); // -2^53+1
1815
1816 // 20.1.2.9 Number.MIN_VALUE
1817 // 20.1.2.10 Number.NaN
1818 // 20.1.2.11 Number.NEGATIVE_INFINITY
1819
1820 // 20.1.2.12 Number.parseFloat ( string )
1821 define(Number, 'parseFloat', $parseFloat);
1822
1823 // 20.1.2.13 Number.parseInt ( string, radix )
1824 define(Number, 'parseInt', $parseInt);
1825
1826 // 20.1.2.14 Number.POSITIVE_INFINITY
1827 // 20.1.2.15 Number.prototype
1828
1829 // 20.1.3 Properties of the Number Prototype Object
1830 // 20.1.3.1 Number.prototype.constructor
1831 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1832 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1833 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1834 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1835 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1836 // 20.1.3.7 Number.prototype.valueOf ( )
1837 // 20.1.4 Properties of Number Instances
1838
1839 // ---------------------------------------
1840 // 20.2 The Math Object
1841 // ---------------------------------------
1842
1843 // 20.2.1 Value Properties of the Math Object
1844 // 20.2.1.1 Math.E
1845 // 20.2.1.2 Math.LN10
1846 // 20.2.1.3 Math.LN2
1847 // 20.2.1.4 Math.LOG10E
1848 // 20.2.1.5 Math.LOG2E
1849 // 20.2.1.6 Math.PI
1850 // 20.2.1.7 Math.SQRT1_2
1851 // 20.2.1.8 Math.SQRT2
1852
1853 // 20.2.1.9 Math [ @@toStringTag ]
1854 define(Math, $$toStringTag, 'Math');
1855
1856 // 20.2.2 Function Properties of the Math Object
1857 // 20.2.2.1 Math.abs ( x )
1858 // 20.2.2.2 Math.acos ( x )
1859
1860 // 20.2.2.3 Math.acosh(x)
1861 define(
1862 Math, 'acosh',
1863 function acosh(x) {
1864 x = Number(x);
1865 return log(x + sqrt(x * x - 1));
1866 });
1867
1868 // 20.2.2.4 Math.asin ( x )
1869
1870 // 20.2.2.5 Math.asinh( x )
1871 define(
1872 Math, 'asinh',
1873 function asinh(x) {
1874 x = Number(x);
1875 if (SameValue(x, -0)) {
1876 return x;
1877 }
1878 var s = sqrt(x * x + 1);
1879 return (s === -x) ? log(0) : log(x + s);
1880 });
1881
1882 // 20.2.2.6 Math.atan ( x )
1883
1884 // 20.2.2.7 Math.atanh( x )
1885 define(
1886 Math, 'atanh',
1887 function atanh(x) {
1888 x = Number(x);
1889 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1890 });
1891
1892 // 20.2.2.8 Math.atan2 ( y, x )
1893
1894 // 20.2.2.9 Math.cbrt ( x )
1895 define(
1896 Math, 'cbrt',
1897 function cbrt(x) {
1898 x = Number(x);
1899 if ($isNaN(x/x)) {
1900 return x;
1901 }
1902 var r = pow(abs(x), 1/3);
1903 var t = x/r/r;
1904 return r + (r * (t-r) / (2*r + t));
1905 });
1906
1907 // 20.2.2.10 Math.ceil ( x )
1908
1909 // 20.2.2.11 Math.clz32 ( x )
1910 define(
1911 Math, 'clz32',
1912 function clz32(x) {
1913 function clz8(x) {
1914 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1915 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1916 }
1917 x = ToUint32(x);
1918 return x & 0xff000000 ? clz8(x >> 24) :
1919 x & 0xff0000 ? clz8(x >> 16) + 8 :
1920 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1921 });
1922
1923
1924
1925 // 20.2.2.12 Math.cos ( x )
1926
1927 // 20.2.2.13 Math.cosh ( x )
1928 define(
1929 Math, 'cosh',
1930 function cosh(x) {
1931 x = Number(x);
1932 return (pow(E, x) + pow(E, -x)) / 2;
1933 });
1934
1935 // 20.2.2.14 Math.exp ( x )
1936
1937 // 20.2.2.15 Math.expm1 ( x )
1938 define(
1939 Math, 'expm1',
1940 function expm1(x) {
1941 x = Number(x);
1942 // from: http://www.johndcook.com/cpp_log1p.html
1943 if (SameValue(x, -0)) {
1944 return -0;
1945 } else if (abs(x) < 1e-5) {
1946 return x + 0.5 * x * x; // two terms of Taylor expansion
1947 } else {
1948 return exp(x) - 1;
1949 }
1950 });
1951
1952 // 20.2.2.16 Math.floor ( x )
1953
1954 // 20.2.2.17 Math.fround ( x )
1955 define(
1956 Math, 'fround',
1957 function fround(x) {
1958 if ($isNaN(x)) {
1959 return NaN;
1960 }
1961 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1962 return x;
1963 }
1964 return (new Float32Array([x]))[0];
1965 });
1966
1967 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1968 define(
1969 Math, 'hypot',
1970 function hypot() {
1971 var values = [];
1972 var m = 0, sawNaN = false;
1973 for (var i = 0; i < arguments.length; ++i) {
1974 var n = abs(Number(arguments[i]));
1975 if (n === Infinity) return n;
1976 if (n !== n) sawNaN = true;
1977 if (n > m) m = n;
1978 values[i] = n;
1979 }
1980 if (sawNaN) return NaN;
1981 if (m === 0) return +0;
1982 var sum = +0;
1983 for (i = 0; i < values.length; ++i) {
1984 var r = values[i] / m;
1985 sum = sum + r * r;
1986 }
1987 return m * sqrt(sum);
1988 });
1989
1990 // 20.2.2.19 Math.imul ( x, y )
1991 define(
1992 Math, 'imul',
1993 function imul(x, y) {
1994 var a = ToUint32(x);
1995 var b = ToUint32(y);
1996 // (slow but accurate)
1997 var ah = (a >>> 16) & 0xffff;
1998 var al = a & 0xffff;
1999 var bh = (b >>> 16) & 0xffff;
2000 var bl = b & 0xffff;
2001 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
2002 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
2003 );
2004
2005 // 20.2.2.20 Math.log ( x )
2006
2007 // 20.2.2.21 Math.log1p ( x )
2008 define(
2009 Math, 'log1p',
2010 function log1p(x) {
2011 x = Number(x);
2012 // from: http://www.johndcook.com/cpp_expm1.html
2013 if (x < -1) {
2014 return NaN;
2015 } else if (SameValue(x, -0)) {
2016 return -0;
2017 } else if (abs(x) > 1e-4) {
2018 return log(1 + x);
2019 } else {
2020 return (-0.5 * x + 1) * x;
2021 }
2022 });
2023
2024 // 20.2.2.22 Math.log10 ( x )
2025 define(
2026 Math, 'log10',
2027 function log10(x) {
2028 x = Number(x);
2029 return log(x) * LOG10E;
2030 });
2031
2032 // 20.2.2.23 Math.log2 ( x )
2033 define(
2034 Math, 'log2',
2035 function log2(x) {
2036 x = Number(x);
2037 return log(x) * LOG2E;
2038 });
2039
2040 // 20.2.2.24 Math.max ( value1, value2 , ...values )
2041 // 20.2.2.25 Math.min ( value1, value2 , ...values )
2042 // 20.2.2.26 Math.pow ( x, y )
2043 // 20.2.2.27 Math.random ( )
2044 // 20.2.2.28 Math.round ( x )
2045
2046 // 20.2.2.29 Math.sign(x)
2047 define(
2048 Math, 'sign',
2049 function sign(x) {
2050 x = Number(x);
2051 return x < 0 ? -1 : x > 0 ? 1 : x;
2052 });
2053
2054 // 20.2.2.30 Math.sin ( x )
2055
2056 // 20.2.2.31 Math.sinh( x )
2057 define(
2058 Math, 'sinh',
2059 function sinh(x) {
2060 x = Number(x);
2061 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
2062 });
2063
2064 // 20.2.2.32 Math.sqrt ( x )
2065 // 20.2.2.33 Math.tan ( x )
2066
2067 // 20.2.2.34 Math.tanh ( x )
2068 define(
2069 Math, 'tanh',
2070 function tanh(x) {
2071 x = Number(x);
2072 var n = pow(E, 2 * x) - 1,
2073 d = pow(E, 2 * x) + 1;
2074 if (SameValue(x, -0))
2075 return x;
2076 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
2077 });
2078
2079 // 20.2.2.35 Math.trunc ( x )
2080 define(
2081 Math, 'trunc',
2082 function trunc(x) {
2083 x = Number(x);
2084 return $isNaN(x) ? NaN :
2085 x < 0 ? ceil(x) : floor(x);
2086 });
2087
2088 // ---------------------------------------
2089 // 20.3 Date Objects
2090 // ---------------------------------------
2091
2092 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
2093 // 20.3.1.1 Time Values and Time Range
2094 // 20.3.1.2 Day Number and Time within Day
2095 // 20.3.1.3 Year Number
2096 // 20.3.1.4 Month Number
2097 // 20.3.1.5 Date Number
2098 // 20.3.1.6 Week Day
2099 // 20.3.1.7 Local Time Zone Adjustment
2100 // 20.3.1.8 Daylight Saving Time Adjustment
2101 // 20.3.1.9 Local Time
2102 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
2103 // 20.3.1.11 MakeTime (hour, min, sec, ms)
2104 // 20.3.1.12 MakeDay (year, month, date)
2105 // 20.3.1.13 MakeDate (day, time)
2106 // 20.3.1.14 TimeClip (time)
2107 // 20.3.1.15 Date Time String Format
2108 // 20.3.1.15.1 Extended years
2109 // 20.3.2 The Date Constructor
2110 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2111 // 20.3.2.2 Date ( value )
2112 // 20.3.2.3 Date ( )
2113 // 20.3.3 Properties of the Date Constructor
2114 // 20.3.3.1 Date.now ( )
2115 // 20.3.3.2 Date.parse (string)
2116 // 20.3.3.3 Date.prototype
2117 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2118 // 20.3.4 Properties of the Date Prototype Object
2119 // 20.3.4.1 Date.prototype.constructor
2120 // 20.3.4.2 Date.prototype.getDate ( )
2121 // 20.3.4.3 Date.prototype.getDay ( )
2122 // 20.3.4.4 Date.prototype.getFullYear ( )
2123 // 20.3.4.5 Date.prototype.getHours ( )
2124 // 20.3.4.6 Date.prototype.getMilliseconds ( )
2125 // 20.3.4.7 Date.prototype.getMinutes ( )
2126 // 20.3.4.8 Date.prototype.getMonth ( )
2127 // 20.3.4.9 Date.prototype.getSeconds ( )
2128 // 20.3.4.10 Date.prototype.getTime ( )
2129 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
2130 // 20.3.4.12 Date.prototype.getUTCDate ( )
2131 // 20.3.4.13 Date.prototype.getUTCDay ( )
2132 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
2133 // 20.3.4.15 Date.prototype.getUTCHours ( )
2134 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
2135 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
2136 // 20.3.4.18 Date.prototype.getUTCMonth ( )
2137 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
2138 // 20.3.4.20 Date.prototype.setDate ( date )
2139 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
2140 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
2141 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
2142 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
2143 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
2144 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
2145 // 20.3.4.27 Date.prototype.setTime ( time )
2146 // 20.3.4.28 Date.prototype.setUTCDate ( date )
2147 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
2148 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
2149 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
2150 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
2151 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
2152 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
2153 // 20.3.4.35 Date.prototype.toDateString ( )
2154 // 20.3.4.36 Date.prototype.toISOString ( )
2155 // 20.3.4.37 Date.prototype.toJSON ( key )
2156 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
2157 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2158 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
2159 // 20.3.4.41 Date.prototype.toString ( )
2160 // 20.3.4.42 Date.prototype.toTimeString ( )
2161 // 20.3.4.43 Date.prototype.toUTCString ( )
2162 // 20.3.4.44 Date.prototype.valueOf ( )
2163 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
2164 // 20.3.5 Properties of Date Instances
2165
2166 // (No polyfillable changes from ES5)
2167
2168 // ---------------------------------------
2169 // 21 Text Processing
2170 // ---------------------------------------
2171
2172 var string_regexp_dispatch = (function() {
2173 var faux = {}, secret = Symbol();
2174 faux[Symbol.match] = function() { return secret; };
2175 return ("").match(faux) === secret;
2176 }());
2177
2178 // 21.1 String Objects
2179 // 21.1.1 The String Constructor
2180 // 21.1.1.1 String ( value )
2181 // 21.1.2 Properties of the String Constructor
2182 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
2183
2184 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
2185 define(
2186 String, 'fromCodePoint',
2187 function fromCodePoint(/*...codePoints*/) {
2188 var codePoints = arguments,
2189 length = codePoints.length,
2190 elements = [],
2191 nextIndex = 0;
2192 while (nextIndex < length) {
2193 var next = codePoints[nextIndex];
2194 var nextCP = Number(next);
2195 if (!SameValue(nextCP, ToInteger(nextCP)) ||
2196 nextCP < 0 || nextCP > 0x10FFFF) {
2197 throw RangeError('Invalid code point ' + nextCP);
2198 }
2199 if (nextCP < 0x10000) {
2200 elements.push(String.fromCharCode(nextCP));
2201 } else {
2202 nextCP -= 0x10000;
2203 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
2204 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
2205 }
2206 nextIndex += 1;
2207 }
2208 return elements.join('');
2209 });
2210
2211 // 21.1.2.3 String.prototype
2212
2213 // 21.1.2.4 String.raw ( template , ...substitutions )
2214 define(
2215 String, 'raw',
2216 function raw(template /*, ...substitutions*/) {
2217 var substitutions = [].slice.call(arguments, 1);
2218
2219 var cooked = Object(template);
2220 var rawValue = cooked['raw'];
2221 var raw = Object(rawValue);
2222 var len = raw['length'];
2223 var literalSegments = ToLength(len);
2224 if (literalSegments <= 0) return '';
2225 var stringElements = [];
2226 var nextIndex = 0;
2227 while (true) {
2228 var next = raw[nextIndex];
2229 var nextSeg = String(next);
2230 stringElements.push(nextSeg);
2231 if (nextIndex + 1 === literalSegments)
2232 return stringElements.join('');
2233 next = substitutions[nextIndex];
2234 var nextSub = String(next);
2235 stringElements.push(nextSub);
2236 nextIndex = nextIndex + 1;
2237 }
2238 });
2239
2240 // See https://githib.com/inexorabletash/uate for a more useful version.
2241
2242 // 21.1.3 Properties of the String Prototype Object
2243 // 21.1.3.1 String.prototype.charAt ( pos )
2244 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2245
2246 // 21.1.3.3 String.prototype.codePointAt ( pos )
2247 define(
2248 String.prototype, 'codePointAt',
2249 function codePointAt(pos) {
2250 var o = strict(this);
2251 var s = String(o);
2252 var position = ToInteger(pos);
2253 var size = s.length;
2254 if (position < 0 || position >= size) return undefined;
2255 var first = s.charCodeAt(position);
2256 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2257 var second = s.charCodeAt(position + 1);
2258 if (second < 0xDC00 || second > 0xDFFF) return first;
2259 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2260 });
2261
2262 // 21.1.3.4 String.prototype.concat ( ...args )
2263 // 21.1.3.5 String.prototype.constructor
2264
2265 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2266 define(
2267 String.prototype, 'endsWith',
2268 function endsWith(searchString) {
2269 var endPosition = arguments[1];
2270
2271 var o = strict(this);
2272 var s = String(o);
2273 var searchStr = String(searchString);
2274 var len = s.length;
2275 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2276 var end = min(max(pos, 0), len);
2277 var searchLength = searchStr.length;
2278 var start = end - searchLength;
2279 if (start < 0) return false;
2280 if (s.substring(start, start + searchLength) === searchStr) return true;
2281 return false;
2282 });
2283
2284 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2285 define(
2286 String.prototype, 'includes',
2287 function includes(searchString) {
2288 var position = arguments[1];
2289
2290 var o = strict(this);
2291 var s = String(o);
2292 var searchStr = String(searchString);
2293 var pos = ToInteger(position);
2294 var len = s.length;
2295 var start = min(max(pos, 0), len);
2296 return s.indexOf(searchStr, start) !== -1;
2297 });
2298
2299 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2300 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2301 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2302 // 21.1.3.11 String.prototype.match ( regexp )
2303 define(
2304 String.prototype, 'match',
2305 function match(regexp) {
2306 var o = strict(this);
2307 var s = String(o);
2308 if (HasProperty(regexp, $$match)) var rx = regexp;
2309 else rx = new RegExp(regexp);
2310 return rx[$$match](s);
2311 }, !string_regexp_dispatch);
2312
2313 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2314
2315 // Not practical due to table sizes; if needed, pull in:
2316 // https://github.com/walling/unorm/
2317
2318 // 21.1.3.13 String.prototype.repeat ( count )
2319 define(
2320 String.prototype, 'repeat',
2321 function repeat(count) {
2322 var o = strict(this);
2323 var s = String(o);
2324 var n = ToInteger(count);
2325 if (n < 0) throw RangeError();
2326 if (n === Infinity) throw RangeError();
2327 var t = new Array(n + 1).join(s);
2328 return t;
2329 });
2330
2331 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2332 define(
2333 String.prototype, 'replace',
2334 function replace(searchValue, replaceValue) {
2335 var o = strict(this);
2336 if (HasProperty(searchValue, $$replace))
2337 return searchValue[$$replace](o, replaceValue);
2338 return orig_replace.call(o, searchValue, replaceValue);
2339 }, !string_regexp_dispatch);
2340
2341 // 21.1.3.15 String.prototype.search ( regexp )
2342 define(
2343 String.prototype, 'search',
2344 function search(regexp) {
2345 var o = strict(this);
2346 var string = String(o);
2347 if (HasProperty(regexp, $$search)) var rx = regexp;
2348 else rx = new RegExp(regexp);
2349 return rx[$$search](string);
2350 }, !string_regexp_dispatch);
2351
2352 // 21.1.3.16 String.prototype.slice ( start, end )
2353 // 21.1.3.17 String.prototype.split ( separator, limit )
2354 define(
2355 String.prototype, 'split',
2356 function split(separator, limit) {
2357 var o = strict(this);
2358 if (HasProperty(separator, $$split))
2359 return separator[$$split](o, limit);
2360 return orig_split.call(o, separator, limit);
2361 }, !string_regexp_dispatch);
2362
2363 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2364 define(
2365 String.prototype, 'startsWith',
2366 function startsWith(searchString) {
2367 var position = arguments[1];
2368
2369 var o = strict(this);
2370 var s = String(o);
2371 var searchStr = String(searchString);
2372 var pos = ToInteger(position);
2373 var len = s.length;
2374 var start = min(max(pos, 0), len);
2375 var searchLength = searchStr.length;
2376 if (searchLength + start > len) return false;
2377 if (s.substring(start, start + searchLength) === searchStr) return true;
2378 return false;
2379 });
2380
2381 // 21.1.3.19 String.prototype.substring ( start, end )
2382 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2383 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2384 // 21.1.3.22 String.prototype.toLowerCase ( )
2385 // 21.1.3.23 String.prototype.toString ( )
2386 // 21.1.3.24 String.prototype.toUpperCase ( )
2387 // 21.1.3.25 String.prototype.trim ( )
2388 // 21.1.3.26 String.prototype.valueOf ( )
2389
2390 // 21.1.3.27 String.prototype [ @@iterator ]( )
2391 define(
2392 String.prototype, $$iterator,
2393 function entries() {
2394 return CreateStringIterator(this, 'value');
2395 });
2396
2397 // 21.1.4 Properties of String Instances
2398 // 21.1.4.1 length
2399
2400 // 21.1.5 String Iterator Objects
2401 /** @constructor */
2402 function StringIterator() {}
2403
2404 // 21.1.5.1 CreateStringIterator Abstract Operation
2405 function CreateStringIterator(string, kind) {
2406 var s = String(string);
2407 var iterator = new StringIterator;
2408 set_internal(iterator, '[[IteratedString]]', s);
2409 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2410 set_internal(iterator, '[[StringIterationKind]]', kind);
2411 return iterator;
2412 }
2413
2414 // 21.1.5.2 The %StringIteratorPrototype% Object
2415 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2416 StringIterator.prototype = $StringIteratorPrototype$;
2417
2418 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2419 define(
2420 $StringIteratorPrototype$, 'next',
2421 function next() {
2422 var o = ToObject(this);
2423 var s = String(o['[[IteratedString]]']),
2424 index = o['[[StringIteratorNextIndex]]'],
2425 len = s.length;
2426 if (index >= len) {
2427 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2428 return CreateIterResultObject(undefined, true);
2429 }
2430 var cp = s.codePointAt(index);
2431 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2432 return CreateIterResultObject(String.fromCodePoint(cp), false);
2433 });
2434
2435 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2436 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2437
2438 // 21.1.5.3 Properties of String Iterator Instances
2439
2440 // ---------------------------------------
2441 // 21.2 RegExp (Regular Expression) Objects
2442 // ---------------------------------------
2443
2444 // 21.2.1 Patterns
2445 // 21.2.2 Pattern Semantics
2446 // 21.2.2.1 Notation
2447 // 21.2.2.2 Pattern
2448 // 21.2.2.3 Disjunction
2449 // 21.2.2.4 Alternative
2450 // 21.2.2.5 Term
2451 // 21.2.2.6 Assertion
2452 // 21.2.2.7 Quantifier
2453 // 21.2.2.8 Atom
2454 // 21.2.2.9 AtomEscape
2455 // 21.2.2.10 CharacterEscape
2456 // 21.2.2.11 DecimalEscape
2457 // 21.2.2.12 CharacterClassEscape
2458 // 21.2.2.13 CharacterClass
2459 // 21.2.2.14 ClassRanges
2460 // 21.2.2.15 NonemptyClassRanges
2461 // 21.2.2.16 NonemptyClassRangesNoDash
2462 // 21.2.2.17 ClassAtom
2463 // 21.2.2.18 ClassAtomNoDash
2464 // 21.2.2.19 ClassEscape
2465 // 21.2.3 The RegExp Constructor
2466 // 21.2.3.1 RegExp ( pattern, flags )
2467 // 21.2.3.2 new RegExp( ...argumentsList )
2468 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2469 // 21.2.4 Properties of the RegExp Constructor
2470 // 21.2.4.1 RegExp.prototype
2471 // 21.2.5 Properties of the RegExp Prototype Object
2472 // 21.2.5.1 RegExp.prototype.constructor
2473 // 21.2.5.2 RegExp.prototype.exec ( string )
2474
2475 // 21.2.5.3 get RegExp.prototype.flags
2476 if (!('flags' in RegExp.prototype)) {
2477 Object.defineProperty(
2478 RegExp.prototype, 'flags', {
2479 get: function() {
2480 var s = String(this);
2481 return s.substring(s.lastIndexOf('/') + 1);
2482 }
2483 });
2484 }
2485
2486 // 21.2.5.4 get RegExp.prototype.global
2487 // 21.2.5.5 get RegExp.prototype.ignoreCase
2488
2489 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2490 define(RegExp.prototype, $$match, function(string) {
2491 var o = strict(this);
2492 return orig_match.call(string, o);
2493 });
2494
2495 // 21.2.5.7 get RegExp.prototype.multiline
2496
2497 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2498 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2499 var o = strict(this);
2500 return orig_replace.call(string, o, replaceValue);
2501 });
2502
2503 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2504 define(RegExp.prototype, $$search, function(string) {
2505 var o = strict(this);
2506 return orig_search.call(string, o);
2507 });
2508
2509 // 21.2.5.10 get RegExp.prototype.source
2510
2511 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2512 define(RegExp.prototype, $$split, function(string, limit) {
2513 var o = strict(this);
2514 return orig_split.call(string, o, limit);
2515 });
2516
2517 // 21.2.5.12 get RegExp.prototype.sticky
2518 // 21.2.5.13 RegExp.prototype.test( S )
2519 // 21.2.5.14 RegExp.prototype.toString ( )
2520 // 21.2.5.15 get RegExp.prototype.unicode
2521
2522 // 21.2.6 Properties of RegExp Instances
2523 // 21.2.6.1 lastIndex
2524
2525 // (No polyfillable changes from ES5)
2526
2527 // ---------------------------------------
2528 // 22 Indexed Collections
2529 // ---------------------------------------
2530
2531 // ---------------------------------------
2532 // 22.1 Array Objects
2533 // ---------------------------------------
2534
2535 // 22.1.1 The Array Constructor
2536 // 22.1.1.1 Array ( )
2537 // 22.1.1.2 Array (len)
2538 // 22.1.1.3 Array (...items )
2539
2540 // 22.1.2 Properties of the Array Constructor
2541
2542 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2543 define(
2544 Array, 'from',
2545 function from(items) {
2546 var mapfn = arguments[1];
2547 var thisArg = arguments[2];
2548
2549 var c = strict(this);
2550 if (mapfn === undefined) {
2551 var mapping = false;
2552 } else {
2553 if (!IsCallable(mapfn)) throw TypeError();
2554 var t = thisArg;
2555 mapping = true;
2556 }
2557 var usingIterator = GetMethod(items, $$iterator);
2558 if (usingIterator !== undefined) {
2559 if (IsConstructor(c)) {
2560 var a = new c();
2561 } else {
2562 a = new Array(0);
2563 }
2564 var iterator = GetIterator(items, usingIterator);
2565 var k = 0;
2566 while (true) {
2567 var next = IteratorStep(iterator);
2568 if (next === false) {
2569 a.length = k;
2570 return a;
2571 }
2572 var nextValue = IteratorValue(next);
2573 if (mapping)
2574 var mappedValue = mapfn.call(t, nextValue);
2575 else
2576 mappedValue = nextValue;
2577 a[k] = mappedValue;
2578 k += 1;
2579 }
2580 }
2581 var arrayLike = ToObject(items);
2582 var lenValue = arrayLike.length;
2583 var len = ToLength(lenValue);
2584 if (IsConstructor(c)) {
2585 a = new c(len);
2586 } else {
2587 a = new Array(len);
2588 }
2589 k = 0;
2590 while (k < len) {
2591 var kValue = arrayLike[k];
2592 if (mapping)
2593 mappedValue = mapfn.call(t, kValue, k);
2594 else
2595 mappedValue = kValue;
2596 a[k] = mappedValue;
2597 k += 1;
2598 }
2599 a.length = len;
2600 return a;
2601 });
2602
2603 // 22.1.2.2 Array.isArray ( arg )
2604
2605 // 22.1.2.3 Array.of ( ...items )
2606 define(
2607 Array, 'of',
2608 function of() {
2609 var items = arguments;
2610
2611 var lenValue = items.length;
2612 var len = ToUint32(lenValue);
2613 var c = strict(this), a;
2614 if (IsConstructor(c)) {
2615 a = new c(len);
2616 a = ToObject(a);
2617 } else {
2618 a = new Array(len);
2619 }
2620 var k = 0;
2621 while (k < len) {
2622 a[k] = items[k];
2623 k += 1;
2624 }
2625 a.length = len;
2626 return a;
2627 });
2628
2629 // 22.1.2.4 Array.prototype
2630 // 22.1.2.5 get Array [ @@species ]
2631 // 22.1.3 Properties of the Array Prototype Object
2632 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2633 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2634 // 22.1.3.2 Array.prototype.constructor
2635 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2636 define(
2637 Array.prototype, 'copyWithin',
2638 function copyWithin(target, start/*, end*/) {
2639 var end = arguments[2];
2640
2641 var o = ToObject(this);
2642 var lenVal = o.length;
2643 var len = ToLength(lenVal);
2644 len = max(len, 0);
2645 var relativeTarget = ToInteger(target);
2646 var to;
2647 if (relativeTarget < 0)
2648 to = max(len + relativeTarget, 0);
2649 else
2650 to = min(relativeTarget, len);
2651 var relativeStart = ToInteger(start);
2652 var from;
2653 if (relativeStart < 0)
2654 from = max(len + relativeStart, 0);
2655 else
2656 from = min(relativeStart, len);
2657 var relativeEnd;
2658 if (end === undefined)
2659 relativeEnd = len;
2660 else
2661 relativeEnd = ToInteger(end);
2662 var final;
2663 if (relativeEnd < 0)
2664 final = max(len + relativeEnd, 0);
2665 else
2666 final = min(relativeEnd, len);
2667 var count = min(final - from, len - to);
2668 var direction;
2669 if (from < to && to < from + count) {
2670 direction = -1;
2671 from = from + count - 1;
2672 to = to + count - 1;
2673 } else {
2674 direction = 1;
2675 }
2676 while (count > 0) {
2677 var fromKey = String(from);
2678 var toKey = String(to);
2679 var fromPresent = HasProperty(o, fromKey);
2680 if (fromPresent) {
2681 var fromVal = o[fromKey];
2682 o[toKey] = fromVal;
2683 } else {
2684 delete o[toKey];
2685 }
2686 from = from + direction;
2687 to = to + direction;
2688 count = count - 1;
2689 }
2690 return o;
2691 });
2692
2693 // 22.1.3.4 Array.prototype.entries ( )
2694 var nativeArrayIteratorMethods =
2695 ('entries' in Array.prototype && 'next' in [].entries());
2696
2697 define(
2698 Array.prototype, 'entries',
2699 function entries() {
2700 return CreateArrayIterator(this, 'key+value');
2701 }, !nativeArrayIteratorMethods);
2702
2703 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2704
2705 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2706 define(
2707 Array.prototype, 'fill',
2708 function fill(value/*, start, end*/) {
2709 var start = arguments[1],
2710 end = arguments[2];
2711
2712 var o = ToObject(this);
2713 var lenVal = o.length;
2714 var len = ToLength(lenVal);
2715 len = max(len, 0);
2716 var relativeStart = ToInteger(start);
2717 var k;
2718 if (relativeStart < 0)
2719 k = max((len + relativeStart), 0);
2720 else
2721 k = min(relativeStart, len);
2722 var relativeEnd;
2723 if (end === undefined)
2724 relativeEnd = len;
2725 else
2726 relativeEnd = ToInteger(end);
2727 var final;
2728 if (relativeEnd < 0)
2729 final = max((len + relativeEnd), 0);
2730 else
2731 final = min(relativeEnd, len);
2732 while (k < final) {
2733 var pk = String(k);
2734 o[pk] = value;
2735 k += 1;
2736 }
2737 return o;
2738 });
2739
2740 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2741
2742 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2743 define(
2744 Array.prototype, 'find',
2745 function find(predicate) {
2746 var o = ToObject(this);
2747 var lenValue = o.length;
2748 var len = ToInteger(lenValue);
2749 if (!IsCallable(predicate)) throw TypeError();
2750 var t = arguments.length > 1 ? arguments[1] : undefined;
2751 var k = 0;
2752 while (k < len) {
2753 var pk = String(k);
2754 var kPresent = HasProperty(o, pk);
2755 if (kPresent) {
2756 var kValue = o[pk];
2757 var testResult = predicate.call(t, kValue, k, o);
2758 if (Boolean(testResult)) {
2759 return kValue;
2760 }
2761 }
2762 ++k;
2763 }
2764 return undefined;
2765 });
2766
2767 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2768 define(
2769 Array.prototype, 'findIndex',
2770 function findIndex(predicate) {
2771 var o = ToObject(this);
2772 var lenValue = o.length;
2773 var len = ToLength(lenValue);
2774 if (!IsCallable(predicate)) throw TypeError();
2775 var t = arguments.length > 1 ? arguments[1] : undefined;
2776 var k = 0;
2777 while (k < len) {
2778 var pk = String(k);
2779 var kPresent = HasProperty(o, pk);
2780 if (kPresent) {
2781 var kValue = o[pk];
2782 var testResult = predicate.call(t, kValue, k, o);
2783 if (Boolean(testResult)) {
2784 return k;
2785 }
2786 }
2787 ++k;
2788 }
2789 return -1;
2790 });
2791
2792 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2793 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2794 // 22.1.3.12 Array.prototype.join (separator)
2795
2796 // 22.1.3.13 Array.prototype.keys ( )
2797 define(
2798 Array.prototype, 'keys',
2799 function keys() {
2800 return CreateArrayIterator(this, 'key');
2801 }, !nativeArrayIteratorMethods);
2802
2803 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2804 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2805 // 22.1.3.16 Array.prototype.pop ( )
2806 // 22.1.3.17 Array.prototype.push ( ...items )
2807 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2808 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2809 // 22.1.3.20 Array.prototype.reverse ( )
2810 // 22.1.3.21 Array.prototype.shift ( )
2811 // 22.1.3.22 Array.prototype.slice (start, end)
2812 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2813 // 22.1.3.24 Array.prototype.sort (comparefn)
2814 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2815 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2816 // 22.1.3.27 Array.prototype.toString ( )
2817 // 22.1.3.28 Array.prototype.unshift ( ...items )
2818
2819 // 22.1.3.29 Array.prototype.values ( )
2820 define(
2821 Array.prototype, 'values',
2822 function values() {
2823 return CreateArrayIterator(this, 'value');
2824 }, !nativeArrayIteratorMethods);
2825
2826 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2827 define(
2828 Array.prototype, $$iterator,
2829 Array.prototype.values
2830 );
2831
2832 // 22.1.3.31 Array.prototype [ @@unscopables ]
2833 // 22.1.4 Properties of Array Instances
2834 // 22.1.4.1 length
2835
2836 // 22.1.5 Array Iterator Objects
2837 function ArrayIterator() {}
2838
2839 // 22.1.5.1 CreateArrayIterator Abstract Operation
2840 function CreateArrayIterator(array, kind) {
2841 var o = ToObject(array);
2842 var iterator = new ArrayIterator;
2843 set_internal(iterator, '[[IteratedObject]]', o);
2844 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2845 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2846 return iterator;
2847 }
2848
2849 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2850 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
2851 ArrayIterator.prototype = $ArrayIteratorPrototype$;
2852
2853 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
2854 define(
2855 $ArrayIteratorPrototype$, 'next',
2856 function next() {
2857 var o = strict(this);
2858 if (Type(o) !== 'object') throw TypeError();
2859 var a = o['[[IteratedObject]]'],
2860 index = o['[[ArrayIteratorNextIndex]]'],
2861 itemKind = o['[[ArrayIterationKind]]'],
2862 lenValue = a.length,
2863 len = ToUint32(lenValue),
2864 elementKey,
2865 elementValue;
2866 if (itemKind.indexOf('sparse') !== -1) {
2867 var found = false;
2868 while (!found && index < len) {
2869 elementKey = String(index);
2870 found = HasProperty(a, elementKey);
2871 if (!found) {
2872 index += 1;
2873 }
2874 }
2875 }
2876 if (index >= len) {
2877 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2878 return CreateIterResultObject(undefined, true);
2879 }
2880 elementKey = index;
2881 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2882 if (itemKind.indexOf('value') !== -1)
2883 elementValue = a[elementKey];
2884 if (itemKind.indexOf('key+value') !== -1)
2885 return CreateIterResultObject([elementKey, elementValue], false);
2886 if (itemKind.indexOf('key') !== -1)
2887 return CreateIterResultObject(elementKey, false);
2888 if (itemKind === 'value')
2889 return CreateIterResultObject(elementValue, false);
2890 throw Error('Internal error');
2891 });
2892
2893 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2894 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2895
2896 // 22.1.5.3 Properties of Array Iterator Instances
2897
2898
2899 // ---------------------------------------
2900 // 22.2 TypedArray Objects
2901 // ---------------------------------------
2902
2903 // See typedarray.js for TypedArray polyfill
2904
2905 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2906 'Int16Array', 'Uint16Array',
2907 'Int32Array', 'Uint32Array',
2908 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2909 if (!($TypedArrayName$ in global))
2910 return;
2911 var $TypedArray$ = global[$TypedArrayName$];
2912
2913 // 22.2.1 The %TypedArray% Intrinsic Object
2914 // 22.2.1.1 %TypedArray% ( length )
2915 // 22.2.1.2 %TypedArray% ( typedArray )
2916 // 22.2.1.3 %TypedArray% ( object )
2917 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2918 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2919 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2920
2921 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2922 define(
2923 $TypedArray$, 'from',
2924 function from(source) {
2925 var mapfn = arguments[1];
2926 var thisArg = arguments[2];
2927
2928 var c = strict(this);
2929 if (!IsConstructor(c)) throw TypeError();
2930 if (mapfn === undefined) {
2931 var mapping = false;
2932 } else {
2933 if (IsCallable(mapfn)) throw TypeError();
2934 var t = thisArg;
2935 mapping = true;
2936 }
2937 var usingIterator = GetMethod(source, $$iterator);
2938 if (usingIterator !== undefined) {
2939 var iterator = GetIterator(source, usingIterator);
2940 var values = [];
2941 var next = true;
2942 while (next !== false) {
2943 next = IteratorStep(iterator);
2944 if (next !== false) {
2945 var nextValue = IteratorValue(next);
2946 values.push(nextValue);
2947 }
2948 }
2949 var len = values.length;
2950 var newObj = new c(len);
2951 var k = 0;
2952 while (k < len) {
2953 var kValue = values.shift();
2954 if (mapping) {
2955 var mappedValue = mapfn.call(t, kValue);
2956 } else {
2957 mappedValue = kValue;
2958 }
2959 newObj[k] = mappedValue;
2960 ++k;
2961 }
2962 console.assert(values.length === 0);
2963 return newObj;
2964 }
2965 var arrayLike = ToObject(source);
2966 var lenValue = arrayLike.length;
2967 len = ToLength(lenValue);
2968 newObj = new c(len);
2969 k = 0;
2970 while (k < len) {
2971 kValue = arrayLike[k];
2972 if (mapping) {
2973 mappedValue = mapfn.call(t, kValue, k);
2974 } else {
2975 mappedValue = kValue;
2976 }
2977 newObj[k] = mappedValue;
2978 ++k;
2979 }
2980 return newObj;
2981 });
2982
2983 // 22.2.2.2 %TypedArray%.of ( ...items )
2984 define(
2985 $TypedArray$, 'of',
2986 function of() {
2987 var items = arguments;
2988
2989 var len = items.length;
2990 var c = strict(this);
2991 var newObj = new c(len);
2992 var k = 0;
2993 while (k < len) {
2994 newObj[k] = items[k];
2995 ++k;
2996 }
2997 return newObj;
2998 });
2999
3000 // 22.2.2.3 %TypedArray%.prototype
3001 // 22.2.2.4 get %TypedArray% [ @@species ]
3002 // 22.2.3 Properties of the %TypedArrayPrototype% Object
3003 // 22.2.3.1 get %TypedArray%.prototype.buffer
3004 // 22.2.3.2 get %TypedArray%.prototype.byteLength
3005 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
3006 // 22.2.3.4 %TypedArray%.prototype.constructor
3007
3008 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
3009 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
3010
3011 // 22.2.3.6 %TypedArray%.prototype.entries ( )
3012 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
3013
3014 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
3015 define($TypedArray$.prototype, 'every', Array.prototype.every);
3016
3017 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
3018 define(
3019 $TypedArray$.prototype, 'fill',
3020 //Array.prototype.fill // Doesn't work in Safari 7
3021 function fill(value/*, start, end*/) {
3022 var start = arguments[1],
3023 end = arguments[2];
3024
3025 var o = ToObject(this);
3026 var lenVal = o.length;
3027 var len = ToLength(lenVal);
3028 len = max(len, 0);
3029 var relativeStart = ToInteger(start);
3030 var k;
3031 if (relativeStart < 0) k = max((len + relativeStart), 0);
3032 else k = min(relativeStart, len);
3033 var relativeEnd;
3034 if (end === undefined) relativeEnd = len;
3035 else relativeEnd = ToInteger(end);
3036 var final;
3037 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
3038 else final = min(relativeEnd, len);
3039 while (k < final) {
3040 var pk = String(k);
3041 o[pk] = value;
3042 k += 1;
3043 }
3044 return o;
3045 });
3046
3047 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
3048 define(
3049 $TypedArray$.prototype, 'filter',
3050 function filter(callbackfn) {
3051 var thisArg = arguments[1];
3052
3053 var o = ToObject(this);
3054 var lenVal = o.length;
3055 var len = ToLength(lenVal);
3056 if (!IsCallable(callbackfn)) throw TypeError();
3057 var t = thisArg;
3058 var c = o.constructor;
3059 var kept = [];
3060 var k = 0;
3061 var captured = 0;
3062 while (k < len) {
3063 var kValue = o[k];
3064 var selected = callbackfn.call(t, kValue, k, o);
3065 if (selected) {
3066 kept.push(kValue);
3067 ++captured;
3068 }
3069 ++k;
3070 }
3071 var a = new c(captured);
3072 var n = 0;
3073 for (var i = 0; i < kept.length; ++i) {
3074 var e = kept[i];
3075 a[n] = e;
3076 ++n;
3077 }
3078 return a;
3079 });
3080
3081 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
3082 define($TypedArray$.prototype, 'find', Array.prototype.find);
3083
3084 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
3085 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
3086
3087 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
3088 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
3089
3090 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
3091 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
3092
3093 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
3094 define($TypedArray$.prototype, 'join', Array.prototype.join);
3095
3096 // 22.2.3.15 %TypedArray%.prototype.keys ( )
3097 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
3098
3099 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
3100 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
3101
3102 // 22.2.3.17 get %TypedArray%.prototype.length
3103
3104 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
3105 define(
3106 $TypedArray$.prototype, 'map',
3107 function map(callbackfn) {
3108 var thisArg = arguments[1];
3109
3110 var o = ToObject(this);
3111 var lenValue = o.length;
3112 var len = ToLength(lenValue);
3113 if (!IsCallable(callbackfn)) throw TypeError();
3114 var t = thisArg;
3115 var a = undefined;
3116 var c = o.constructor;
3117 if (IsConstructor(c))
3118 a = new c(len);
3119 if (a === undefined)
3120 a = new Array(len);
3121 var k = 0;
3122 while (k < len) {
3123 var kPresent = HasProperty(o, k);
3124 if (kPresent) {
3125 var kValue = o[k];
3126 var mappedValue = callbackfn.call(t, kValue, k, o);
3127 a[k] = mappedValue;
3128 }
3129 ++k;
3130 }
3131 return a;
3132 });
3133
3134 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
3135 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
3136
3137 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
3138 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
3139
3140 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
3141 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
3142
3143 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
3144 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
3145 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
3146
3147 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
3148 define(
3149 $TypedArray$.prototype, 'slice',
3150 function slice(start, end) {
3151 var o = ToObject(this);
3152 var lenVal = o.length;
3153 var len = ToLength(lenVal);
3154 var relativeStart = ToInteger(start);
3155 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
3156 var relativeEnd = (end === undefined) ? len : ToInteger(end);
3157 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
3158 var count = final - k;
3159 var c = o.constructor;
3160 if (IsConstructor(c)) {
3161 var a = new c(count);
3162 } else {
3163 throw TypeError();
3164 }
3165 var n = 0;
3166 while (k < final) {
3167 var kValue = o[k];
3168 a[n] = kValue;
3169 ++k;
3170 ++n;
3171 }
3172 return a;
3173 });
3174
3175 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
3176 define($TypedArray$.prototype, 'some', Array.prototype.some);
3177
3178 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
3179 define(
3180 $TypedArray$.prototype, 'sort',
3181 function sort() {
3182 var comparefn = arguments[0];
3183
3184 function sortCompare(x, y) {
3185 console.assert(Type(x) === 'number' && Type(y) === 'number');
3186 if (x !== x && y !== y) return +0;
3187 if (x !== x) return 1;
3188 if (y !== y) return -1;
3189 if (comparefn !== undefined) {
3190 return comparefn(x, y);
3191 }
3192 if (x < y) return -1;
3193 if (x > y) return 1;
3194 return +0;
3195 }
3196 return Array.prototype.sort.call(this, sortCompare);
3197 });
3198
3199 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
3200 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
3201 // 22.2.3.28 %TypedArray%.prototype.toString ( )
3202
3203 // 22.2.3.29 %TypedArray%.prototype.values ( )
3204 define($TypedArray$.prototype, 'values', Array.prototype.values);
3205
3206 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
3207 define(
3208 $TypedArray$.prototype, $$iterator,
3209 $TypedArray$.prototype.values
3210 );
3211
3212 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3213 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3214
3215 // 22.2.4 The TypedArray Constructors
3216 // 22.2.4.1TypedArray( ... argumentsList)
3217 // 22.2.5 Properties of the TypedArray Constructors
3218 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3219 // 22.2.5.2 TypedArray.prototype
3220 // 22.2.6 Properties of TypedArray Prototype Objects
3221 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3222 // 22.2.6.2 TypedArray.prototype.constructor
3223 // 22.2.7 Properties of TypedArray Instances
3224 });
3225
3226 // ---------------------------------------
3227 // 23 Keyed Collection
3228 // ---------------------------------------
3229
3230 // ---------------------------------------
3231 // 23.1 Map Objects
3232 // ---------------------------------------
3233
3234 (function() {
3235 // 23.1.1 The Map Constructor
3236
3237 // 23.1.1.1 Map ( [ iterable ] )
3238 /** @constructor */
3239 function Map(/*iterable*/) {
3240 var map = strict(this);
3241 var iterable = arguments[0];
3242
3243 if (Type(map) !== 'object') throw TypeError();
3244 if ('[[MapData]]' in map) throw TypeError();
3245
3246 if (iterable !== undefined) {
3247 var adder = map['set'];
3248 if (!IsCallable(adder)) throw TypeError();
3249 var iter = GetIterator(ToObject(iterable));
3250 }
3251 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3252 if (iter === undefined) return map;
3253 while (true) {
3254 var next = IteratorStep(iter);
3255 if (next === false)
3256 return map;
3257 var nextItem = IteratorValue(next);
3258 if (Type(nextItem) !== 'object') throw TypeError();
3259 var k = nextItem[0];
3260 var v = nextItem[1];
3261 adder.call(map, k, v);
3262 }
3263
3264 return map;
3265 }
3266
3267 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3268 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3269 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3270 (new global.Map([['a', 1]]).size !== 1))
3271 global.Map = Map;
3272
3273
3274 function MapDataIndexOf(mapData, key) {
3275 var i;
3276 if (key === key) return mapData.keys.indexOf(key);
3277 // Slow case for NaN
3278 for (i = 0; i < mapData.keys.length; i += 1)
3279 if (SameValueZero(mapData.keys[i], key)) return i;
3280 return -1;
3281 }
3282
3283 // 23.1.1.2 new Map ( ... argumentsList )
3284 // 23.1.2 Properties of the Map Constructor
3285 // 23.1.2.1 Map.prototype
3286 var $MapPrototype$ = {};
3287 Map.prototype = $MapPrototype$;
3288
3289 // 23.1.2.2 get Map [ @@species ]
3290
3291 // 23.1.3 Properties of the Map Prototype Object
3292 // 23.1.3.1 Map.prototype.clear ()
3293 define(
3294 Map.prototype, 'clear',
3295 function clear() {
3296 var m = strict(this);
3297 if (Type(m) !== 'object') throw TypeError();
3298 if (!('[[MapData]]' in m)) throw TypeError();
3299 if (m['[[MapData]]'] === undefined) throw TypeError();
3300 var entries = m['[[MapData]]'];
3301 entries.keys.length = 0;
3302 entries.values.length = 0;
3303 return undefined;
3304 });
3305
3306 // 23.1.3.2 Map.prototype.constructor
3307
3308 // 23.1.3.3 Map.prototype.delete ( key )
3309 define(
3310 Map.prototype, 'delete',
3311 function delete_(key) {
3312 var m = strict(this);
3313 if (Type(m) !== 'object') throw TypeError();
3314 if (!('[[MapData]]' in m)) throw TypeError();
3315 if (m['[[MapData]]'] === undefined) throw TypeError();
3316 var entries = m['[[MapData]]'];
3317 var i = MapDataIndexOf(entries, key);
3318 if (i < 0) return false;
3319 entries.keys[i] = empty;
3320 entries.values[i] = empty;
3321 return true;
3322 });
3323
3324 // 23.1.3.4 Map.prototype.entries ( )
3325 define(
3326 Map.prototype, 'entries',
3327 function entries() {
3328 var m = strict(this);
3329 if (Type(m) !== 'object') throw TypeError();
3330 return CreateMapIterator(m, 'key+value');
3331 });
3332
3333 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3334 define(
3335 Map.prototype, 'forEach',
3336 function forEach(callbackfn /*, thisArg*/) {
3337 var thisArg = arguments[1];
3338
3339 var m = strict(this);
3340 if (Type(m) !== 'object') throw TypeError();
3341 if (!('[[MapData]]' in m)) throw TypeError();
3342 if (m['[[MapData]]'] === undefined) throw TypeError();
3343 var entries = m['[[MapData]]'];
3344
3345 if (!IsCallable(callbackfn)) {
3346 throw TypeError('First argument to forEach is not callable.');
3347 }
3348 for (var i = 0; i < entries.keys.length; ++i) {
3349 if (entries.keys[i] !== empty) {
3350 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3351 }
3352 }
3353 return undefined;
3354 });
3355
3356 // 23.1.3.6 Map.prototype.get ( key )
3357 define(
3358 Map.prototype, 'get',
3359 function get(key) {
3360 var m = strict(this);
3361 if (Type(m) !== 'object') throw TypeError();
3362 if (!('[[MapData]]' in m)) throw TypeError();
3363 if (m['[[MapData]]'] === undefined) throw TypeError();
3364 var entries = m['[[MapData]]'];
3365 var i = MapDataIndexOf(entries, key);
3366 if (i >= 0) return entries.values[i];
3367 return undefined;
3368 });
3369
3370 // 23.1.3.7 Map.prototype.has ( key )
3371 define(
3372 Map.prototype, 'has',
3373 function has(key) {
3374 var m = strict(this);
3375 if (Type(m) !== 'object') throw TypeError();
3376 if (!('[[MapData]]' in m)) throw TypeError();
3377 if (m['[[MapData]]'] === undefined) throw TypeError();
3378 var entries = m['[[MapData]]'];
3379 if (MapDataIndexOf(entries, key) >= 0) return true;
3380 return false;
3381 });
3382
3383 // 23.1.3.8 Map.prototype.keys ( )
3384 define(
3385 Map.prototype, 'keys',
3386 function keys() {
3387 var m = strict(this);
3388 if (Type(m) !== 'object') throw TypeError();
3389 return CreateMapIterator(m, 'key');
3390 });
3391
3392 // 23.1.3.9 Map.prototype.set ( key , value )
3393 define(
3394 Map.prototype, 'set',
3395 function set(key, value) {
3396 var m = strict(this);
3397 if (Type(m) !== 'object') throw TypeError();
3398 if (!('[[MapData]]' in m)) throw TypeError();
3399 if (m['[[MapData]]'] === undefined) throw TypeError();
3400 var entries = m['[[MapData]]'];
3401 var i = MapDataIndexOf(entries, key);
3402 if (i < 0) i = entries.keys.length;
3403 if (SameValue(key, -0)) key = 0;
3404 entries.keys[i] = key;
3405 entries.values[i] = value;
3406 return m;
3407 });
3408
3409 // 23.1.3.10 get Map.prototype.size
3410 Object.defineProperty(
3411 Map.prototype, 'size', {
3412 get: function() {
3413 var m = strict(this);
3414 if (Type(m) !== 'object') throw TypeError();
3415 if (!('[[MapData]]' in m)) throw TypeError();
3416 if (m['[[MapData]]'] === undefined) throw TypeError();
3417 var entries = m['[[MapData]]'];
3418 var count = 0;
3419 for (var i = 0; i < entries.keys.length; ++i) {
3420 if (entries.keys[i] !== empty)
3421 count = count + 1;
3422 }
3423 return count;
3424 }
3425 });
3426
3427 // 23.1.3.11 Map.prototype.values ( )
3428 define(
3429 Map.prototype, 'values',
3430 function values() {
3431 var m = strict(this);
3432 if (Type(m) !== 'object') throw TypeError();
3433 return CreateMapIterator(m, 'value');
3434 });
3435
3436 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3437 define(
3438 Map.prototype, $$iterator,
3439 function() {
3440 var m = strict(this);
3441 if (Type(m) !== 'object') throw TypeError();
3442 return CreateMapIterator(m, 'key+value');
3443 });
3444
3445 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3446 define(global.Map.prototype, $$toStringTag, 'Map');
3447
3448 // 23.1.4 Properties of Map Instances
3449 // 23.1.5 Map Iterator Objects
3450
3451 /** @constructor */
3452 function MapIterator() {}
3453
3454 // 23.1.5.1 CreateMapIterator Abstract Operation
3455 function CreateMapIterator(map, kind) {
3456 if (Type(map) !== 'object') throw TypeError();
3457 if (!('[[MapData]]' in map)) throw TypeError();
3458 if (map['[[MapData]]'] === undefined) throw TypeError();
3459 var iterator = new MapIterator;
3460 set_internal(iterator, '[[Map]]', map);
3461 set_internal(iterator, '[[MapNextIndex]]', 0);
3462 set_internal(iterator, '[[MapIterationKind]]', kind);
3463 return iterator;
3464 }
3465
3466 // 23.1.5.2 The %MapIteratorPrototype% Object
3467 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3468 MapIterator.prototype = $MapIteratorPrototype$;
3469
3470 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3471 define(
3472 $MapIteratorPrototype$, 'next',
3473 function next() {
3474 var o = strict(this);
3475 if (Type(o) !== 'object') throw TypeError();
3476 var m = o['[[Map]]'],
3477 index = o['[[MapNextIndex]]'],
3478 itemKind = o['[[MapIterationKind]]'],
3479 entries = m['[[MapData]]'];
3480 while (index < entries.keys.length) {
3481 var e = {key: entries.keys[index], value: entries.values[index]};
3482 index = index += 1;
3483 set_internal(o, '[[MapNextIndex]]', index);
3484 if (e.key !== empty) {
3485 if (itemKind === 'key') {
3486 return CreateIterResultObject(e.key, false);
3487 } else if (itemKind === 'value') {
3488 return CreateIterResultObject(e.value, false);
3489 } else {
3490 return CreateIterResultObject([e.key, e.value], false);
3491 }
3492 }
3493 }
3494 return CreateIterResultObject(undefined, true);
3495 });
3496
3497 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3498 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3499
3500 // 23.1.5.3 Properties of Map Iterator Instances
3501 }());
3502
3503 // ---------------------------------------
3504 // 23.2 Set Objects
3505 // ---------------------------------------
3506
3507 (function() {
3508 // 23.2.1 The Set Constructor
3509 // 23.2.1.1 Set ( [ iterable ] )
3510
3511 /** @constructor */
3512 function Set(/*iterable*/) {
3513 var set = strict(this);
3514 var iterable = arguments[0];
3515
3516 if (Type(set) !== 'object') throw TypeError();
3517 if ('[[SetData]]' in set) throw TypeError();
3518
3519 if (iterable !== undefined) {
3520 var adder = set['add'];
3521 if (!IsCallable(adder)) throw TypeError();
3522 var iter = GetIterator(ToObject(iterable));
3523 }
3524 set_internal(set, '[[SetData]]', []);
3525 if (iter === undefined) return set;
3526 while (true) {
3527 var next = IteratorStep(iter);
3528 if (next === false)
3529 return set;
3530 var nextValue = IteratorValue(next);
3531 adder.call(set, nextValue);
3532 }
3533
3534 return set;
3535 }
3536
3537 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3538 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3539 (new global.Set([1]).size !== 1))
3540 global.Set = Set;
3541
3542 function SetDataIndexOf(setData, key) {
3543 var i;
3544 if (key === key)
3545 return setData.indexOf(key);
3546 // Slow case for NaN
3547 for (i = 0; i < setData.length; i += 1)
3548 if (SameValueZero(setData[i], key)) return i;
3549 return -1;
3550 }
3551
3552 // 23.2.1.2 new Set ( ...argumentsList )
3553 // 23.2.2 Properties of the Set Constructor
3554
3555 // 23.2.2.1 Set.prototype
3556 var $SetPrototype$ = {};
3557 Set.prototype = $SetPrototype$;
3558
3559 // 23.2.2.2 get Set [ @@species ]
3560 // 23.2.3 Properties of the Set Prototype Object
3561
3562 // 23.2.3.1 Set.prototype.add (value )
3563 define(
3564 Set.prototype, 'add',
3565 function add(value) {
3566 var s = strict(this);
3567 if (Type(s) !== 'object') throw TypeError();
3568 if (!('[[SetData]]' in s)) throw TypeError();
3569 if (s['[[SetData]]'] === undefined) throw TypeError();
3570 if (SameValue(value, -0)) value = 0;
3571 var entries = s['[[SetData]]'];
3572 var i = SetDataIndexOf(entries, value);
3573 if (i < 0) i = s['[[SetData]]'].length;
3574 s['[[SetData]]'][i] = value;
3575
3576 return s;
3577 });
3578
3579 // 23.2.3.2 Set.prototype.clear ()
3580 define(
3581 Set.prototype, 'clear',
3582 function clear() {
3583 var s = strict(this);
3584 if (Type(s) !== 'object') throw TypeError();
3585 if (!('[[SetData]]' in s)) throw TypeError();
3586 if (s['[[SetData]]'] === undefined) throw TypeError();
3587 var entries = s['[[SetData]]'];
3588 entries.length = 0;
3589 return undefined;
3590 });
3591
3592 // 23.2.3.3 Set.prototype.constructor
3593 // 23.2.3.4 Set.prototype.delete ( value )
3594 define(
3595 Set.prototype, 'delete',
3596 function delete_(value) {
3597 var s = strict(this);
3598 if (Type(s) !== 'object') throw TypeError();
3599 if (!('[[SetData]]' in s)) throw TypeError();
3600 if (s['[[SetData]]'] === undefined) throw TypeError();
3601 var entries = s['[[SetData]]'];
3602 var i = SetDataIndexOf(entries, value);
3603 if (i < 0) return false;
3604 entries[i] = empty;
3605 return true;
3606 });
3607
3608 // 23.2.3.5 Set.prototype.entries ( )
3609 define(
3610 Set.prototype, 'entries',
3611 function entries() {
3612 var s = strict(this);
3613 if (Type(s) !== 'object') throw TypeError();
3614 return CreateSetIterator(s, 'key+value');
3615 });
3616
3617 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3618 define(
3619 Set.prototype, 'forEach',
3620 function forEach(callbackfn/*, thisArg*/) {
3621 var thisArg = arguments[1];
3622
3623 var s = strict(this);
3624 if (Type(s) !== 'object') throw TypeError();
3625 if (!('[[SetData]]' in s)) throw TypeError();
3626 if (s['[[SetData]]'] === undefined) throw TypeError();
3627 var entries = s['[[SetData]]'];
3628
3629 if (!IsCallable(callbackfn)) {
3630 throw TypeError('First argument to forEach is not callable.');
3631 }
3632 for (var i = 0; i < entries.length; ++i) {
3633 if (entries[i] !== empty) {
3634 callbackfn.call(thisArg, entries[i], entries[i], s);
3635 }
3636 }
3637 });
3638
3639 // 23.2.3.7 Set.prototype.has ( value )
3640 define(
3641 Set.prototype, 'has',
3642 function has(key) {
3643 var s = strict(this);
3644 if (Type(s) !== 'object') throw TypeError();
3645 if (!('[[SetData]]' in s)) throw TypeError();
3646 if (s['[[SetData]]'] === undefined) throw TypeError();
3647 var entries = s['[[SetData]]'];
3648 return SetDataIndexOf(entries, key) !== -1;
3649 });
3650
3651 // 23.2.3.8 Set.prototype.keys ( )
3652 // See Set.prototype.values
3653
3654 // 23.2.3.9 get Set.prototype.size
3655 Object.defineProperty(
3656 Set.prototype, 'size', {
3657 get: function() {
3658 var s = strict(this);
3659 if (Type(s) !== 'object') throw TypeError();
3660 if (!('[[SetData]]' in s)) throw TypeError();
3661 if (s['[[SetData]]'] === undefined) throw TypeError();
3662 var entries = s['[[SetData]]'];
3663 var count = 0;
3664 for (var i = 0; i < entries.length; ++i) {
3665 if (entries[i] !== empty)
3666 count = count + 1;
3667 }
3668 return count;
3669 }
3670 });
3671
3672 // 23.2.3.10 Set.prototype.values ( )
3673 define(
3674 Set.prototype, 'values',
3675 function values() {
3676 var s = strict(this);
3677 if (Type(s) !== 'object') throw TypeError();
3678 return CreateSetIterator(s, 'value');
3679 });
3680 // NOTE: function name is still 'values':
3681 Set.prototype.keys = Set.prototype.values;
3682
3683 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3684 define(
3685 Set.prototype, $$iterator,
3686 function() {
3687 var s = strict(this);
3688 if (Type(s) !== 'object') throw TypeError();
3689 return CreateSetIterator(s);
3690 });
3691
3692 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3693 define(global.Set.prototype, $$toStringTag, 'Set');
3694
3695 // 23.2.4 Properties of Set Instances
3696 // 23.2.5 Set Iterator Objects
3697 /** @constructor */
3698 function SetIterator() {}
3699
3700 // 23.2.5.1 CreateSetIterator Abstract Operation
3701 function CreateSetIterator(set, kind) {
3702 if (Type(set) !== 'object') throw TypeError();
3703 if (!('[[SetData]]' in set)) throw TypeError();
3704 if (set['[[SetData]]'] === undefined) throw TypeError();
3705 var iterator = new SetIterator;
3706 set_internal(iterator, '[[IteratedSet]]', set);
3707 set_internal(iterator, '[[SetNextIndex]]', 0);
3708 set_internal(iterator, '[[SetIterationKind]]', kind);
3709 return iterator;
3710 }
3711
3712 // 23.2.5.2 The %SetIteratorPrototype% Object
3713 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3714 SetIterator.prototype = $SetIteratorPrototype$;
3715
3716 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3717 define(
3718 $SetIteratorPrototype$, 'next',
3719 function next() {
3720 var o = strict(this);
3721 if (Type(o) !== 'object') throw TypeError();
3722 var s = o['[[IteratedSet]]'],
3723 index = o['[[SetNextIndex]]'],
3724 itemKind = o['[[SetIterationKind]]'],
3725 entries = s['[[SetData]]'];
3726 while (index < entries.length) {
3727 var e = entries[index];
3728 index = index += 1;
3729 set_internal(o, '[[SetNextIndex]]', index);
3730 if (e !== empty) {
3731 if (itemKind === 'key+value')
3732 return CreateIterResultObject([e, e], false);
3733 return CreateIterResultObject(e, false);
3734 }
3735 }
3736 return CreateIterResultObject(undefined, true);
3737 });
3738
3739 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3740 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3741
3742 // 23.2.5.3 Properties of Set Iterator Instances
3743
3744 }());
3745
3746 // ---------------------------------------
3747 // 23.3 WeakMap Objects
3748 // ---------------------------------------
3749
3750 (function() {
3751 // 23.3.1 The WeakMap Constructor
3752 // 23.3.1.1 WeakMap ( [ iterable ] )
3753 /** @constructor */
3754 function WeakMap(/*iterable*/) {
3755 var map = strict(this);
3756 var iterable = arguments[0];
3757
3758 if (Type(map) !== 'object') throw TypeError();
3759 if ('[[WeakMapData]]' in map) throw TypeError();
3760
3761 if (iterable !== undefined) {
3762 var adder = map['set'];
3763 if (!IsCallable(adder)) throw TypeError();
3764 var iter = GetIterator(ToObject(iterable));
3765 }
3766 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3767 if (iter === undefined) return map;
3768 while (true) {
3769 var next = IteratorStep(iter);
3770 if (next === false)
3771 return map;
3772 var nextValue = IteratorValue(next);
3773 if (Type(nextValue) !== 'object') throw TypeError();
3774 var k = nextValue[0];
3775 var v = nextValue[1];
3776 adder.call(map, k, v);
3777 }
3778
3779 return map;
3780 }
3781
3782 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3783 global.WeakMap = WeakMap;
3784
3785 // 23.3.2 Properties of the WeakMap Constructor
3786 // 23.3.2.1 WeakMap.prototype
3787 var $WeakMapPrototype$ = {};
3788 WeakMap.prototype = $WeakMapPrototype$;
3789
3790
3791
3792 // 23.3.2.2 WeakMap[ @@create ] ( )
3793 // 23.3.3 Properties of the WeakMap Prototype Object
3794
3795 // 23.3.3.1 WeakMap.prototype.constructor
3796
3797 // 23.3.3.2 WeakMap.prototype.delete ( key )
3798 define(
3799 WeakMap.prototype, 'delete',
3800 function delete_(key) {
3801 var M = strict(this);
3802 if (Type(M) !== 'object') throw TypeError();
3803 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3804 if (Type(key) !== 'object') throw TypeError('Expected object');
3805 return M['[[WeakMapData]]'].remove(key);
3806 });
3807
3808 // 23.3.3.3 WeakMap.prototype.get ( key )
3809 define(
3810 WeakMap.prototype, 'get',
3811 function get(key, defaultValue) {
3812 var M = strict(this);
3813 if (Type(M) !== 'object') throw TypeError();
3814 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3815 if (Type(key) !== 'object') throw TypeError('Expected object');
3816 return M['[[WeakMapData]]'].get(key, defaultValue);
3817 });
3818
3819 // 23.3.3.4 WeakMap.prototype.has ( key )
3820 define(
3821 WeakMap.prototype, 'has',
3822 function has(key) {
3823 var M = strict(this);
3824 if (Type(M) !== 'object') throw TypeError();
3825 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3826 if (Type(key) !== 'object') throw TypeError('Expected object');
3827 return M['[[WeakMapData]]'].has(key);
3828 });
3829
3830 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3831 define(
3832 WeakMap.prototype, 'set',
3833 function set(key, value) {
3834 var M = strict(this);
3835 if (Type(M) !== 'object') throw TypeError();
3836 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3837 if (Type(key) !== 'object') throw TypeError('Expected object');
3838 M['[[WeakMapData]]'].set(key, value);
3839 return M;
3840 });
3841
3842 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3843 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3844
3845 // 23.3.4 Properties of WeakMap Instances
3846
3847 // Polyfills for incomplete native implementations:
3848 (function() {
3849 var wm = new global.WeakMap();
3850 var orig = global.WeakMap.prototype.set;
3851 define(global.WeakMap.prototype, 'set', function set() {
3852 orig.apply(this, arguments);
3853 return this;
3854 }, wm.set({}, 0) !== wm);
3855 }());
3856 }());
3857
3858 // ---------------------------------------
3859 // 23.4 WeakSet Objects
3860 // ---------------------------------------
3861
3862 (function() {
3863 // 23.4.1 The WeakSet Constructor
3864 // 23.4.1.1 WeakSet ( [ iterable ] )
3865 /** @constructor */
3866 function WeakSet(/*iterable*/) {
3867 var set = strict(this);
3868 var iterable = arguments[0];
3869
3870 if (Type(set) !== 'object') throw TypeError();
3871 if ('[[WeakSetData]]' in set) throw TypeError();
3872
3873 if (iterable !== undefined) {
3874 var adder = set['add'];
3875 if (!IsCallable(adder)) throw TypeError();
3876 var iter = GetIterator(ToObject(iterable));
3877 }
3878 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3879 if (iter === undefined) return set;
3880 while (true) {
3881 var next = IteratorStep(iter);
3882 if (next === false)
3883 return set;
3884 var nextValue = IteratorValue(next);
3885 adder.call(set, nextValue);
3886 }
3887
3888 return set;
3889 }
3890
3891 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3892 global.WeakSet = WeakSet;
3893
3894 // 23.4.2 Properties of the WeakSet Constructor
3895 // 23.4.2.1 WeakSet.prototype
3896 var $WeakSetPrototype$ = {};
3897 WeakSet.prototype = $WeakSetPrototype$;
3898
3899 // 23.4.3 Properties of the WeakSet Prototype Object
3900 // 23.4.3.1 WeakSet.prototype.add (value )
3901 define(
3902 WeakSet.prototype, 'add',
3903 function add(value) {
3904 var S = strict(this);
3905 if (Type(S) !== 'object') throw TypeError();
3906 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3907 if (Type(value) !== 'object') throw TypeError('Expected object');
3908 S['[[WeakSetData]]'].set(value, true);
3909 return S;
3910 });
3911
3912 // 23.4.3.2 WeakSet.prototype.constructor
3913 // 23.4.3.3 WeakSet.prototype.delete ( value )
3914 define(
3915 WeakSet.prototype, 'delete',
3916 function delete_(value) {
3917 var S = strict(this);
3918 if (Type(S) !== 'object') throw TypeError();
3919 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3920 if (Type(value) !== 'object') throw TypeError('Expected object');
3921 return S['[[WeakSetData]]'].remove(value);
3922 });
3923
3924 // 23.4.3.4 WeakSet.prototype.has ( value )
3925 define(
3926 WeakSet.prototype, 'has',
3927 function has(key) {
3928 var S = strict(this);
3929 if (Type(S) !== 'object') throw TypeError();
3930 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3931 if (Type(key) !== 'object') throw TypeError('Expected object');
3932 return S['[[WeakSetData]]'].has(key);
3933 });
3934
3935 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3936 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3937
3938 // 23.4.4 Properties of WeakSet Instances
3939
3940 // Polyfills for incomplete native implementations:
3941 (function() {
3942 var ws = new global.WeakSet();
3943 var orig = global.WeakSet.prototype.add;
3944 define(global.WeakSet.prototype, 'add', function add() {
3945 orig.apply(this, arguments);
3946 return this;
3947 }, ws.add({}) !== ws);
3948 }());
3949 }());
3950
3951 // ---------------------------------------
3952 // 24 Structured Data
3953 // ---------------------------------------
3954
3955 // ---------------------------------------
3956 // 24.1 ArrayBuffer Objects
3957 // ---------------------------------------
3958
3959 // See typedarray.js for TypedArray polyfill
3960
3961 (function() {
3962 if (!('ArrayBuffer' in global))
3963 return;
3964
3965 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3966 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3967 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3968 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3969 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3970 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3971 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3972 // 24.1.2 The ArrayBuffer Constructor
3973 // 24.1.2.1 ArrayBuffer( length )
3974 // 24.1.3 Properties of the ArrayBuffer Constructor
3975
3976 // 24.1.3.1 ArrayBuffer.isView ( arg )
3977 define(
3978 ArrayBuffer, 'isView',
3979 function isView(arg) {
3980 if (Type(arg) !== 'object') return false;
3981 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3982 return false;
3983 });
3984
3985 // 24.1.3.2 ArrayBuffer.prototype
3986 // 24.1.3.3 get ArrayBuffer [ @@species ]
3987 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3988 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3989 // 24.1.4.2 ArrayBuffer.prototype.constructor
3990 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3991
3992 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3993 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3994
3995 // 24.1.5 Properties of the ArrayBuffer Instances
3996 }());
3997
3998 // ---------------------------------------
3999 // 24.2 DataView Objects
4000 // ---------------------------------------
4001
4002 // See typedarray.js for TypedArray polyfill
4003
4004 (function() {
4005 if (!('DataView' in global))
4006 return;
4007
4008 // 24.2.1 Abstract Operations For DataView Objects
4009 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
4010 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
4011 // 24.2.2 The DataView Constructor
4012 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
4013 // 24.2.3 Properties of the DataView Constructor
4014 // 24.2.3.1 DataView.prototype
4015 // 24.2.4 Properties of the DataView Prototype Object
4016 // 24.2.4.1 get DataView.prototype.buffer
4017 // 24.2.4.2 get DataView.prototype.byteLength
4018 // 24.2.4.3 get DataView.prototype.byteOffset
4019 // 24.2.4.4 DataView.prototype.constructor
4020 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
4021 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
4022 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
4023 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
4024 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
4025 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
4026 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
4027 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
4028 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
4029 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
4030 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
4031 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
4032 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
4033 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
4034 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
4035 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
4036
4037 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
4038 define(DataView.prototype, $$toStringTag, 'DataView');
4039
4040 // 24.2.5 Properties of DataView Instances
4041 }());
4042
4043 // ---------------------------------------
4044 // 24.3 The JSON Object
4045 // ---------------------------------------
4046
4047 // 24.3.1 JSON.parse ( text [ , reviver ] )
4048 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
4049 // 24.3.3 JSON [ @@toStringTag ]
4050 define(JSON, $$toStringTag, 'JSON');
4051
4052 // ---------------------------------------
4053 // 25.1 Iteration
4054 // ---------------------------------------
4055
4056 // 25.1.1 Common Iteration Interfaces
4057 // 25.1.1.1 The Iterable Interface
4058 // 25.1.1.2 The Iterator Interface
4059 // 25.1.1.3 The IteratorResult Interface
4060
4061 // 25.1.2 The %IteratorPrototype% Object
4062 // Defined earlier, so other prototypes can reference it.
4063 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
4064 define($IteratorPrototype$, $$iterator, function() {
4065 return this;
4066 });
4067
4068
4069 // ---------------------------------------
4070 // 25.4 Promise Objects
4071 // ---------------------------------------
4072
4073 (function() {
4074 // 25.4 Promise Objects
4075
4076 // 25.4.1 Promise Abstract Operations
4077
4078 // 25.4.1.1 PromiseCapability Records
4079 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
4080
4081 function IfAbruptRejectPromise(value, capability) {
4082 var rejectResult = capability['[[Reject]]'].call(undefined, value);
4083 return capability['[[Promise]]'];
4084 }
4085
4086 // 25.4.1.2 PromiseReaction Records
4087
4088 // 25.4.1.3 CreateResolvingFunctions ( promise )
4089
4090 function CreateResolvingFunctions(promise) {
4091 var alreadyResolved = {'[[value]]': false};
4092 var resolve = PromiseResolveFunction();
4093 set_internal(resolve, '[[Promise]]', promise);
4094 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
4095 var reject = PromiseRejectFunction();
4096 set_internal(reject, '[[Promise]]', promise);
4097 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
4098 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
4099 }
4100
4101 // 25.4.1.3.1 Promise Reject Functions
4102
4103 function PromiseRejectFunction() {
4104 var F = function(reason) {
4105 console.assert(Type(F['[[Promise]]']) === 'object');
4106 var promise = F['[[Promise]]'];
4107 var alreadyResolved = F['[[AlreadyResolved]]'];
4108 if (alreadyResolved['[[value]]']) return undefined;
4109 set_internal(alreadyResolved, '[[value]]', true);
4110 return RejectPromise(promise, reason);
4111 };
4112 return F;
4113 }
4114
4115 // 25.4.1.3.2 Promise Resolve Functions
4116
4117 function PromiseResolveFunction() {
4118 var F = function(resolution) {
4119 console.assert(Type(F['[[Promise]]']) === 'object');
4120 var promise = F['[[Promise]]'];
4121 var alreadyResolved = F['[[AlreadyResolved]]'];
4122 if (alreadyResolved['[[value]]']) return undefined;
4123 set_internal(alreadyResolved, '[[value]]', true);
4124
4125 if (SameValue(resolution, promise)) {
4126 var selfResolutionError = TypeError();
4127 return RejectPromise(promise, selfResolutionError);
4128 }
4129 if (Type(resolution) !== 'object')
4130 return FulfillPromise(promise, resolution);
4131 try {
4132 var then = resolution['then'];
4133 } catch(then) {
4134 return RejectPromise(promise, then);
4135 }
4136 if (!IsCallable(then))
4137 return FulfillPromise(promise, resolution);
4138 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
4139 return undefined;
4140 };
4141 return F;
4142 }
4143
4144 // 25.4.1.4 FulfillPromise ( promise, value )
4145
4146 function FulfillPromise(promise, value) {
4147 console.assert(promise['[[PromiseState]]'] === 'pending');
4148 var reactions = promise['[[PromiseFulfillReactions]]'];
4149 set_internal(promise, '[[PromiseResult]]', value);
4150 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4151 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4152 set_internal(promise, '[[PromiseState]]', 'fulfilled');
4153 return TriggerPromiseReactions(reactions, value);
4154 }
4155
4156 // 25.4.1.5 NewPromiseCapability ( C )
4157
4158 function NewPromiseCapability(c) {
4159 // To keep Promise hermetic, this doesn't look much like the spec.
4160 return CreatePromiseCapabilityRecord(undefined, c);
4161 }
4162
4163 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
4164
4165 function CreatePromiseCapabilityRecord(promise, constructor) {
4166 // To keep Promise hermetic, this doesn't look much like the spec.
4167 console.assert(IsConstructor(constructor));
4168 var promiseCapability = {};
4169 set_internal(promiseCapability, '[[Promise]]', promise);
4170 set_internal(promiseCapability, '[[Resolve]]', undefined);
4171 set_internal(promiseCapability, '[[Reject]]', undefined);
4172 var executor = GetCapabilitiesExecutor();
4173 set_internal(executor, '[[Capability]]', promiseCapability);
4174
4175 // NOTE: Differs from spec; object is constructed here
4176 var constructorResult = promise = new constructor(executor);
4177 set_internal(promiseCapability, '[[Promise]]', promise);
4178
4179 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
4180 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
4181 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
4182 return promiseCapability;
4183 }
4184
4185 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
4186
4187 function GetCapabilitiesExecutor() {
4188 var F = function(resolve, reject) {
4189 console.assert(F['[[Capability]]']);
4190 var promiseCapability = F['[[Capability]]'];
4191 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
4192 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
4193 set_internal(promiseCapability, '[[Resolve]]', resolve);
4194 set_internal(promiseCapability, '[[Reject]]', reject);
4195 return undefined;
4196 };
4197 return F;
4198 }
4199
4200 // 25.4.1.6 IsPromise ( x )
4201
4202 function IsPromise(x) {
4203 if (Type(x) !== 'object') return false;
4204 if (!('[[PromiseState]]' in x)) return false;
4205 if (x['[[PromiseState]]'] === undefined) return false;
4206 return true;
4207 }
4208
4209 // 25.4.1.7 RejectPromise ( promise, reason )
4210
4211 function RejectPromise(promise, reason) {
4212 console.assert(promise['[[PromiseState]]'] === 'pending');
4213 var reactions = promise['[[PromiseRejectReactions]]'];
4214 set_internal(promise, '[[PromiseResult]]', reason);
4215 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4216 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4217 set_internal(promise, '[[PromiseState]]', 'rejected');
4218 return TriggerPromiseReactions(reactions, reason);
4219 }
4220
4221 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4222
4223 function TriggerPromiseReactions(reactions, argument) {
4224 for (var i = 0, len = reactions.length; i < len; ++i)
4225 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4226 return undefined;
4227 }
4228
4229 // 25.4.2 Promise Jobs
4230
4231 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4232
4233 function PromiseReactionJob(reaction, argument) {
4234 var promiseCapability = reaction['[[Capabilities]]'];
4235 var handler = reaction['[[Handler]]'];
4236 var handlerResult, status;
4237 try {
4238 if (handler === 'Identity') handlerResult = argument;
4239 else if (handler === 'Thrower') throw argument;
4240 else handlerResult = handler.call(undefined, argument);
4241 } catch (handlerResult) {
4242 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4243 NextJob(status); return;
4244 }
4245 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4246 NextJob(status);
4247 }
4248
4249 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4250
4251 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4252 // SPEC BUG: promise vs. promiseToResolve
4253 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4254 try {
4255 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4256 resolvingFunctions['[[Reject]]']);
4257 } catch (thenCallResult) {
4258 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4259 NextJob(status); return;
4260 }
4261 NextJob(thenCallResult);
4262 }
4263
4264 // 25.4.3 The Promise Constructor
4265
4266 // 25.4.3.1 Promise ( executor )
4267
4268 function Promise(executor) {
4269 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4270 Object.defineProperty(this, '[[PromiseState]]', config);
4271 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4272 Object.defineProperty(this, '[[PromiseResult]]', config);
4273 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4274 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4275
4276 var promise = this;
4277 if (Type(promise) !== 'object') throw new TypeError();
4278 if (!('[[PromiseState]]' in promise)) throw TypeError();
4279 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4280 if (!IsCallable(executor)) throw TypeError();
4281
4282 set_internal(promise, '[[PromiseConstructor]]', Promise);
4283
4284 return InitializePromise(promise, executor);
4285 }
4286
4287 // 25.4.3.1.1 InitializePromise ( promise, executor )
4288
4289 function InitializePromise(promise, executor) {
4290 console.assert('[[PromiseState]]' in promise);
4291 console.assert(IsCallable(executor));
4292 set_internal(promise, '[[PromiseState]]', 'pending');
4293 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4294 set_internal(promise, '[[PromiseRejectReactions]]', []);
4295 var resolvingFunctions = CreateResolvingFunctions(promise);
4296 try {
4297 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4298 resolvingFunctions['[[Reject]]']);
4299 } catch (completion) {
4300 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4301 }
4302 return promise;
4303 }
4304
4305 // 25.4.4 Properties of the Promise Constructor
4306 // 25.4.4.1 Promise.all ( iterable )
4307
4308 define(Promise, 'all', function all(iterable) {
4309 var c = strict(this);
4310 var promiseCapability = NewPromiseCapability(c);
4311 try {
4312 var iterator = GetIterator(iterable);
4313 } catch (value) {
4314 promiseCapability['[[Reject]]'].call(undefined, value);
4315 return promiseCapability['[[Promise]]'];
4316 }
4317 var values = [];
4318 var remainingElementsCount = { value: 1 };
4319 var index = 0;
4320 while (true) {
4321 try {
4322 var next = IteratorStep(iterator);
4323 } catch (value) {
4324 promiseCapability['[[Reject]]'].call(undefined, value);
4325 return promiseCapability['[[Promise]]'];
4326 }
4327 if (!next) {
4328 remainingElementsCount.value -= 1;
4329 if (remainingElementsCount.value === 0) {
4330 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4331
4332
4333 }
4334 return promiseCapability['[[Promise]]'];
4335 }
4336 try {
4337 var nextValue = IteratorValue(next);
4338 } catch (value) {
4339 promiseCapability['[[Reject]]'].call(undefined, value);
4340 return promiseCapability['[[Promise]]'];
4341 }
4342 try {
4343 var nextPromise = c.resolve(nextValue);
4344 } catch (value) {
4345 promiseCapability['[[Reject]]'].call(undefined, value);
4346 return promiseCapability['[[Promise]]'];
4347 }
4348 var resolveElement = PromiseAllResolveElementFunction();
4349 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4350 set_internal(resolveElement, '[[Index]]', index);
4351 set_internal(resolveElement, '[[Values]]', values);
4352 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4353 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4354 remainingElementsCount.value += 1;
4355 try {
4356 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4357 } catch (value) {
4358 promiseCapability['[[Reject]]'].call(undefined, value);
4359 return promiseCapability['[[Promise]]'];
4360 }
4361 index += 1;
4362 }
4363 });
4364
4365 // 25.4.4.1.1 Promise.all Resolve Element Functions
4366
4367 function PromiseAllResolveElementFunction() {
4368 var F = function(x) {
4369 var alreadyCalled = F['[[AlreadyCalled]]'];
4370 if (alreadyCalled.value) return undefined;
4371 alreadyCalled.value = true;
4372 var index = F['[[Index]]'];
4373 var values = F['[[Values]]'];
4374 var promiseCapability = F['[[Capabilities]]'];
4375 var remainingElementsCount = F['[[RemainingElements]]'];
4376 try {
4377 values[index] = x;
4378 } catch (result) {
4379 promiseCapability['[[Reject]]'].call(undefined, result);
4380 return promiseCapability['[[Promise]]'];
4381 }
4382 remainingElementsCount.value -= 1;
4383 if (remainingElementsCount.value === 0)
4384 return promiseCapability['[[Resolve]]'].call(undefined, values);
4385 return undefined;
4386 };
4387 return F;
4388 }
4389
4390 // 25.4.4.2 Promise.prototype
4391
4392 Promise.prototype = {};
4393
4394 // 25.4.4.3 Promise.race ( iterable )
4395
4396 define(Promise, 'race', function race(iterable) {
4397 var c = strict(this);
4398 var promiseCapability = NewPromiseCapability(c);
4399 try {
4400 var iterator = GetIterator(iterable);
4401 } catch (value) {
4402 promiseCapability['[[Reject]]'].call(undefined, value);
4403 return promiseCapability['[[Promise]]'];
4404 }
4405 while (true) {
4406 try {
4407 var next = IteratorStep(iterator);
4408 } catch (value) {
4409 promiseCapability['[[Reject]]'].call(undefined, value);
4410 return promiseCapability['[[Promise]]'];
4411 }
4412 if (!next) return promiseCapability['[[Promise]]'];
4413 try {
4414 var nextValue = IteratorValue(next);
4415 } catch (value) {
4416 promiseCapability['[[Reject]]'].call(undefined, value);
4417 return promiseCapability['[[Promise]]'];
4418 }
4419 try {
4420 var nextPromise = c.resolve(nextValue);
4421 } catch (value) {
4422 promiseCapability['[[Reject]]'].call(undefined, value);
4423 return promiseCapability['[[Promise]]'];
4424 }
4425 try {
4426 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4427 } catch (value) {
4428 promiseCapability['[[Reject]]'].call(undefined, value);
4429 return promiseCapability['[[Promise]]'];
4430 }
4431 }
4432 });
4433
4434 // 25.4.4.4 Promise.reject ( r )
4435
4436 define(Promise, 'reject', function reject(r) {
4437 var c = strict(this);
4438 var promiseCapability = NewPromiseCapability(c);
4439 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4440 return promiseCapability['[[Promise]]'];
4441 });
4442
4443 // 25.4.4.5 Promise.resolve ( x )
4444
4445 define(Promise, 'resolve', function resolve(x) {
4446 var c = strict(this);
4447 if (IsPromise(x)) {
4448 var constructor = x['[[PromiseConstructor]]'];
4449 if (SameValue(constructor, c)) return x;
4450 }
4451 var promiseCapability = NewPromiseCapability(c);
4452 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4453 return promiseCapability['[[Promise]]'];
4454 });
4455
4456 // 25.4.4.6 Promise [ @@create ] ( )
4457 // 25.4.4.6.1 AllocatePromise ( constructor )
4458 // 25.4.5 Properties of the Promise Prototype Object
4459 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4460
4461 define(Promise.prototype, 'catch', function catch_(onRejected) {
4462 var promise = this;
4463 return promise.then(undefined, onRejected);
4464 });
4465
4466 // 25.4.5.2 Promise.prototype.constructor
4467
4468 Promise.prototype.constructor = Promise;
4469
4470 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4471
4472 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4473 var promise = this;
4474 if (!IsPromise(promise)) throw TypeError();
4475 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4476 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4477 var c = promise.constructor;
4478 var promiseCapability = NewPromiseCapability(c);
4479 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4480 '[[Handler]]': onFulfilled };
4481 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4482 '[[Handler]]': onRejected };
4483 if (promise['[[PromiseState]]'] === 'pending') {
4484 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4485 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4486 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4487 var value = promise['[[PromiseResult]]'];
4488 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4489 } else if (promise['[[PromiseState]]'] === 'rejected') {
4490 var reason = promise['[[PromiseResult]]'];
4491 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4492 }
4493 return promiseCapability['[[Promise]]'];
4494 });
4495
4496 // 25.4.6 Properties of Promise Instances
4497
4498 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4499 global.Promise = Promise;
4500
4501 // Patch early Promise.cast vs. Promise.resolve implementations
4502 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4503 }());
4504
4505 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4506 define(Promise.prototype, $$toStringTag, 'Promise');
4507
4508 // ---------------------------------------
4509 // 26 Reflection
4510 // ---------------------------------------
4511
4512 (function() {
4513 // 26.1 The Reflect Object
4514 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4515 global.Reflect = {};
4516
4517 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4518 define(
4519 Reflect, 'apply',
4520 function apply(target, thisArgument, argumentsList) {
4521 if (!IsCallable(target)) throw TypeError();
4522 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4523 });
4524
4525 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4526 define(
4527 Reflect, 'construct',
4528 function construct(target, argumentsList) {
4529 return __cons(target, argumentsList);
4530 });
4531
4532 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4533 define(
4534 Reflect, 'defineProperty',
4535 function defineProperty(target, propertyKey, attributes) {
4536 try {
4537 Object.defineProperty(target, propertyKey, attributes);
4538 return true;
4539 } catch (_) {
4540 return false;
4541 }
4542 });
4543
4544 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4545 define(
4546 Reflect, 'deleteProperty',
4547 function deleteProperty(target,name) {
4548 try {
4549 delete target[name];
4550 return !HasOwnProperty(target, name);
4551 } catch (_) {
4552 return false;
4553 }
4554 });
4555
4556 // 26.1.5 Reflect.enumerate ( target )
4557 define(
4558 Reflect, 'enumerate',
4559 function enumerate(target) {
4560 target = ToObject(target);
4561 var iterator = Enumerate(target);
4562 return iterator;
4563 });
4564
4565 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4566 define(
4567 Reflect, 'get',
4568 function get(target, name, receiver) {
4569 target = ToObject(target);
4570 name = String(name);
4571 receiver = (receiver === undefined) ? target : ToObject(receiver);
4572 var desc = getPropertyDescriptor(target, name);
4573 if (desc && 'get' in desc)
4574 return Function.prototype.call.call(desc['get'], receiver);
4575 return target[name];
4576 });
4577
4578 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4579 define(
4580 Reflect, 'getOwnPropertyDescriptor',
4581 Object.getOwnPropertyDescriptor);
4582
4583 // 26.1.8 Reflect.getPrototypeOf ( target )
4584 define(
4585 Reflect, 'getPrototypeOf',
4586 Object.getPrototypeOf);
4587
4588 // 26.1.9 Reflect.has ( target, propertyKey )
4589 define(
4590 Reflect, 'has',
4591 function has(target,name) {
4592 return String(name) in ToObject(target);
4593 });
4594
4595 // 26.1.10 Reflect.isExtensible (target)
4596 define(
4597 Reflect, 'isExtensible',
4598 Object.isExtensible);
4599
4600 // 26.1.11 Reflect.ownKeys ( target )
4601 define(
4602 Reflect, 'ownKeys',
4603 function ownKeys(target) {
4604 var obj = ToObject(target);
4605 return Object.getOwnPropertyNames(obj);
4606 });
4607
4608 // 26.1.12 Reflect.preventExtensions ( target )
4609 define(
4610 Reflect, 'preventExtensions',
4611 function preventExtensions(target) {
4612 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4613 });
4614
4615 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4616 define(
4617 Reflect, 'set',
4618 function set(target, name, value, receiver) {
4619 target = ToObject(target);
4620 name = String(name);
4621 receiver = (receiver === undefined) ? target : ToObject(receiver);
4622 var desc = getPropertyDescriptor(target, name);
4623 try {
4624 if (desc && 'set' in desc)
4625 Function.prototype.call.call(desc['set'], receiver, value);
4626 else
4627 target[name] = value;
4628 return true;
4629 } catch (_) {
4630 return false;
4631 }
4632 });
4633
4634 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4635 define(
4636 Reflect, 'setPrototypeOf',
4637 function setPrototypeOf(target, proto) {
4638 try {
4639 target.__proto__ = proto;
4640 return Reflect.getPrototypeOf(target) === proto;
4641 } catch(_) {
4642 return false;
4643 }
4644 });
4645
4646 }());
4647
4648 // ---------------------------------------
4649 // 26.2 Proxy Objects
4650 // ---------------------------------------
4651
4652 // Not polyfillable.
4653
4654}(self));
4655
4656// This helper is defined outside the main scope so that the use of
4657// 'eval' does not taint the scope for minifiers.
4658function __cons(t, a) {
4659 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4660}
6e0f24b1 4661</script>
8a1f452d 4662 <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.foo = 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){
4663'use strict'
4664
4665exports.byteLength = byteLength
4666exports.toByteArray = toByteArray
4667exports.fromByteArray = fromByteArray
4668
4669var lookup = []
4670var revLookup = []
4671var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
4672
4673var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
4674for (var i = 0, len = code.length; i < len; ++i) {
4675 lookup[i] = code[i]
4676 revLookup[code.charCodeAt(i)] = i
4677}
4678
4679revLookup['-'.charCodeAt(0)] = 62
4680revLookup['_'.charCodeAt(0)] = 63
4681
4682function placeHoldersCount (b64) {
4683 var len = b64.length
4684 if (len % 4 > 0) {
4685 throw new Error('Invalid string. Length must be a multiple of 4')
4686 }
4687
4688 // the number of equal signs (place holders)
4689 // if there are two placeholders, than the two characters before it
4690 // represent one byte
4691 // if there is only one, then the three characters before it represent 2 bytes
4692 // this is just a cheap hack to not do indexOf twice
4693 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
4694}
4695
4696function byteLength (b64) {
4697 // base64 is 4/3 + up to two characters of the original data
4698 return b64.length * 3 / 4 - placeHoldersCount(b64)
4699}
4700
4701function toByteArray (b64) {
4702 var i, j, l, tmp, placeHolders, arr
4703 var len = b64.length
4704 placeHolders = placeHoldersCount(b64)
4705
4706 arr = new Arr(len * 3 / 4 - placeHolders)
4707
4708 // if there are placeholders, only get up to the last complete 4 chars
4709 l = placeHolders > 0 ? len - 4 : len
4710
4711 var L = 0
4712
4713 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4714 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
4715 arr[L++] = (tmp >> 16) & 0xFF
4716 arr[L++] = (tmp >> 8) & 0xFF
4717 arr[L++] = tmp & 0xFF
4718 }
4719
4720 if (placeHolders === 2) {
4721 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
4722 arr[L++] = tmp & 0xFF
4723 } else if (placeHolders === 1) {
4724 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
4725 arr[L++] = (tmp >> 8) & 0xFF
4726 arr[L++] = tmp & 0xFF
4727 }
4728
4729 return arr
4730}
4731
4732function tripletToBase64 (num) {
4733 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
4734}
4735
4736function encodeChunk (uint8, start, end) {
4737 var tmp
4738 var output = []
4739 for (var i = start; i < end; i += 3) {
4740 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4741 output.push(tripletToBase64(tmp))
4742 }
4743 return output.join('')
4744}
4745
4746function fromByteArray (uint8) {
4747 var tmp
4748 var len = uint8.length
4749 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
4750 var output = ''
4751 var parts = []
4752 var maxChunkLength = 16383 // must be multiple of 3
4753
4754 // go through the array every three bytes, we'll deal with trailing stuff later
4755 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
4756 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
4757 }
4758
4759 // pad the end with zeros, but make sure to not forget the extra bytes
4760 if (extraBytes === 1) {
4761 tmp = uint8[len - 1]
4762 output += lookup[tmp >> 2]
4763 output += lookup[(tmp << 4) & 0x3F]
4764 output += '=='
4765 } else if (extraBytes === 2) {
4766 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
4767 output += lookup[tmp >> 10]
4768 output += lookup[(tmp >> 4) & 0x3F]
4769 output += lookup[(tmp << 2) & 0x3F]
4770 output += '='
4771 }
4772
4773 parts.push(output)
4774
4775 return parts.join('')
4776}
4777
4778},{}],2:[function(require,module,exports){
4779/*!
4780 * The buffer module from node.js, for the browser.
4781 *
4782 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
4783 * @license MIT
4784 */
4785/* eslint-disable no-proto */
4786
4787'use strict'
4788
4789var base64 = require('base64-js')
4790var ieee754 = require('ieee754')
4791
4792exports.Buffer = Buffer
4793exports.SlowBuffer = SlowBuffer
4794exports.INSPECT_MAX_BYTES = 50
4795
4796var K_MAX_LENGTH = 0x7fffffff
4797exports.kMaxLength = K_MAX_LENGTH
4798
4799/**
4800 * If `Buffer.TYPED_ARRAY_SUPPORT`:
4801 * === true Use Uint8Array implementation (fastest)
4802 * === false Print warning and recommend using `buffer` v4.x which has an Object
4803 * implementation (most compatible, even IE6)
4804 *
4805 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
4806 * Opera 11.6+, iOS 4.2+.
4807 *
4808 * We report that the browser does not support typed arrays if the are not subclassable
4809 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
4810 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
4811 * for __proto__ and has a buggy typed array implementation.
4812 */
4813Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
4814
4815if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
4816 typeof console.error === 'function') {
4817 console.error(
4818 'This browser lacks typed array (Uint8Array) support which is required by ' +
4819 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
4820 )
4821}
4822
4823function typedArraySupport () {
4824 // Can typed array instances can be augmented?
4825 try {
4826 var arr = new Uint8Array(1)
4827 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
4828 return arr.foo() === 42
4829 } catch (e) {
4830 return false
4831 }
4832}
4833
4834function createBuffer (length) {
4835 if (length > K_MAX_LENGTH) {
4836 throw new RangeError('Invalid typed array length')
4837 }
4838 // Return an augmented `Uint8Array` instance
4839 var buf = new Uint8Array(length)
4840 buf.__proto__ = Buffer.prototype
4841 return buf
4842}
4843
4844/**
4845 * The Buffer constructor returns instances of `Uint8Array` that have their
4846 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
4847 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
4848 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
4849 * returns a single octet.
4850 *
4851 * The `Uint8Array` prototype remains unmodified.
4852 */
4853
4854function Buffer (arg, encodingOrOffset, length) {
4855 // Common case.
4856 if (typeof arg === 'number') {
4857 if (typeof encodingOrOffset === 'string') {
4858 throw new Error(
4859 'If encoding is specified then the first argument must be a string'
4860 )
4861 }
4862 return allocUnsafe(arg)
4863 }
4864 return from(arg, encodingOrOffset, length)
4865}
4866
4867// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
4868if (typeof Symbol !== 'undefined' && Symbol.species &&
4869 Buffer[Symbol.species] === Buffer) {
4870 Object.defineProperty(Buffer, Symbol.species, {
4871 value: null,
4872 configurable: true,
4873 enumerable: false,
4874 writable: false
4875 })
4876}
4877
4878Buffer.poolSize = 8192 // not used by this implementation
4879
4880function from (value, encodingOrOffset, length) {
4881 if (typeof value === 'number') {
4882 throw new TypeError('"value" argument must not be a number')
4883 }
4884
4885 if (value instanceof ArrayBuffer) {
4886 return fromArrayBuffer(value, encodingOrOffset, length)
4887 }
4888
4889 if (typeof value === 'string') {
4890 return fromString(value, encodingOrOffset)
4891 }
4892
4893 return fromObject(value)
4894}
4895
4896/**
4897 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
4898 * if value is a number.
4899 * Buffer.from(str[, encoding])
4900 * Buffer.from(array)
4901 * Buffer.from(buffer)
4902 * Buffer.from(arrayBuffer[, byteOffset[, length]])
4903 **/
4904Buffer.from = function (value, encodingOrOffset, length) {
4905 return from(value, encodingOrOffset, length)
4906}
4907
4908// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
4909// https://github.com/feross/buffer/pull/148
4910Buffer.prototype.__proto__ = Uint8Array.prototype
4911Buffer.__proto__ = Uint8Array
4912
4913function assertSize (size) {
4914 if (typeof size !== 'number') {
4915 throw new TypeError('"size" argument must be a number')
4916 } else if (size < 0) {
4917 throw new RangeError('"size" argument must not be negative')
4918 }
4919}
4920
4921function alloc (size, fill, encoding) {
4922 assertSize(size)
4923 if (size <= 0) {
4924 return createBuffer(size)
4925 }
4926 if (fill !== undefined) {
4927 // Only pay attention to encoding if it's a string. This
4928 // prevents accidentally sending in a number that would
4929 // be interpretted as a start offset.
4930 return typeof encoding === 'string'
4931 ? createBuffer(size).fill(fill, encoding)
4932 : createBuffer(size).fill(fill)
4933 }
4934 return createBuffer(size)
4935}
4936
4937/**
4938 * Creates a new filled Buffer instance.
4939 * alloc(size[, fill[, encoding]])
4940 **/
4941Buffer.alloc = function (size, fill, encoding) {
4942 return alloc(size, fill, encoding)
4943}
4944
4945function allocUnsafe (size) {
4946 assertSize(size)
4947 return createBuffer(size < 0 ? 0 : checked(size) | 0)
4948}
4949
4950/**
4951 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
4952 * */
4953Buffer.allocUnsafe = function (size) {
4954 return allocUnsafe(size)
4955}
4956/**
4957 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
4958 */
4959Buffer.allocUnsafeSlow = function (size) {
4960 return allocUnsafe(size)
4961}
4962
4963function fromString (string, encoding) {
4964 if (typeof encoding !== 'string' || encoding === '') {
4965 encoding = 'utf8'
4966 }
4967
4968 if (!Buffer.isEncoding(encoding)) {
4969 throw new TypeError('"encoding" must be a valid string encoding')
4970 }
4971
4972 var length = byteLength(string, encoding) | 0
4973 var buf = createBuffer(length)
4974
4975 var actual = buf.write(string, encoding)
4976
4977 if (actual !== length) {
4978 // Writing a hex string, for example, that contains invalid characters will
4979 // cause everything after the first invalid character to be ignored. (e.g.
4980 // 'abxxcd' will be treated as 'ab')
4981 buf = buf.slice(0, actual)
4982 }
4983
4984 return buf
4985}
4986
4987function fromArrayLike (array) {
4988 var length = array.length < 0 ? 0 : checked(array.length) | 0
4989 var buf = createBuffer(length)
4990 for (var i = 0; i < length; i += 1) {
4991 buf[i] = array[i] & 255
4992 }
4993 return buf
4994}
4995
4996function fromArrayBuffer (array, byteOffset, length) {
4997 if (byteOffset < 0 || array.byteLength < byteOffset) {
4998 throw new RangeError('\'offset\' is out of bounds')
4999 }
5000
5001 if (array.byteLength < byteOffset + (length || 0)) {
5002 throw new RangeError('\'length\' is out of bounds')
5003 }
5004
5005 var buf
5006 if (byteOffset === undefined && length === undefined) {
5007 buf = new Uint8Array(array)
5008 } else if (length === undefined) {
5009 buf = new Uint8Array(array, byteOffset)
5010 } else {
5011 buf = new Uint8Array(array, byteOffset, length)
5012 }
5013
5014 // Return an augmented `Uint8Array` instance
5015 buf.__proto__ = Buffer.prototype
5016 return buf
5017}
5018
5019function fromObject (obj) {
5020 if (Buffer.isBuffer(obj)) {
5021 var len = checked(obj.length) | 0
5022 var buf = createBuffer(len)
5023
5024 if (buf.length === 0) {
5025 return buf
5026 }
5027
5028 obj.copy(buf, 0, 0, len)
5029 return buf
5030 }
5031
5032 if (obj) {
5033 if (isArrayBufferView(obj) || 'length' in obj) {
5034 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
5035 return createBuffer(0)
5036 }
5037 return fromArrayLike(obj)
5038 }
5039
5040 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
5041 return fromArrayLike(obj.data)
5042 }
5043 }
5044
5045 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
5046}
5047
5048function checked (length) {
5049 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
5050 // length is NaN (which is otherwise coerced to zero.)
5051 if (length >= K_MAX_LENGTH) {
5052 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
5053 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
5054 }
5055 return length | 0
5056}
5057
5058function SlowBuffer (length) {
5059 if (+length != length) { // eslint-disable-line eqeqeq
5060 length = 0
5061 }
5062 return Buffer.alloc(+length)
5063}
5064
5065Buffer.isBuffer = function isBuffer (b) {
5066 return b != null && b._isBuffer === true
5067}
5068
5069Buffer.compare = function compare (a, b) {
5070 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
5071 throw new TypeError('Arguments must be Buffers')
5072 }
5073
5074 if (a === b) return 0
5075
5076 var x = a.length
5077 var y = b.length
5078
5079 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
5080 if (a[i] !== b[i]) {
5081 x = a[i]
5082 y = b[i]
5083 break
5084 }
5085 }
5086
5087 if (x < y) return -1
5088 if (y < x) return 1
5089 return 0
5090}
5091
5092Buffer.isEncoding = function isEncoding (encoding) {
5093 switch (String(encoding).toLowerCase()) {
5094 case 'hex':
5095 case 'utf8':
5096 case 'utf-8':
5097 case 'ascii':
5098 case 'latin1':
5099 case 'binary':
5100 case 'base64':
5101 case 'ucs2':
5102 case 'ucs-2':
5103 case 'utf16le':
5104 case 'utf-16le':
5105 return true
5106 default:
5107 return false
5108 }
5109}
5110
5111Buffer.concat = function concat (list, length) {
5112 if (!Array.isArray(list)) {
5113 throw new TypeError('"list" argument must be an Array of Buffers')
5114 }
5115
5116 if (list.length === 0) {
5117 return Buffer.alloc(0)
5118 }
5119
5120 var i
5121 if (length === undefined) {
5122 length = 0
5123 for (i = 0; i < list.length; ++i) {
5124 length += list[i].length
5125 }
5126 }
5127
5128 var buffer = Buffer.allocUnsafe(length)
5129 var pos = 0
5130 for (i = 0; i < list.length; ++i) {
5131 var buf = list[i]
5132 if (!Buffer.isBuffer(buf)) {
5133 throw new TypeError('"list" argument must be an Array of Buffers')
5134 }
5135 buf.copy(buffer, pos)
5136 pos += buf.length
5137 }
5138 return buffer
5139}
5140
5141function byteLength (string, encoding) {
5142 if (Buffer.isBuffer(string)) {
5143 return string.length
5144 }
5145 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
5146 return string.byteLength
5147 }
5148 if (typeof string !== 'string') {
5149 string = '' + string
5150 }
5151
5152 var len = string.length
5153 if (len === 0) return 0
5154
5155 // Use a for loop to avoid recursion
5156 var loweredCase = false
5157 for (;;) {
5158 switch (encoding) {
5159 case 'ascii':
5160 case 'latin1':
5161 case 'binary':
5162 return len
5163 case 'utf8':
5164 case 'utf-8':
5165 case undefined:
5166 return utf8ToBytes(string).length
5167 case 'ucs2':
5168 case 'ucs-2':
5169 case 'utf16le':
5170 case 'utf-16le':
5171 return len * 2
5172 case 'hex':
5173 return len >>> 1
5174 case 'base64':
5175 return base64ToBytes(string).length
5176 default:
5177 if (loweredCase) return utf8ToBytes(string).length // assume utf8
5178 encoding = ('' + encoding).toLowerCase()
5179 loweredCase = true
5180 }
5181 }
5182}
5183Buffer.byteLength = byteLength
5184
5185function slowToString (encoding, start, end) {
5186 var loweredCase = false
5187
5188 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
5189 // property of a typed array.
5190
5191 // This behaves neither like String nor Uint8Array in that we set start/end
5192 // to their upper/lower bounds if the value passed is out of range.
5193 // undefined is handled specially as per ECMA-262 6th Edition,
5194 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
5195 if (start === undefined || start < 0) {
5196 start = 0
5197 }
5198 // Return early if start > this.length. Done here to prevent potential uint32
5199 // coercion fail below.
5200 if (start > this.length) {
5201 return ''
5202 }
5203
5204 if (end === undefined || end > this.length) {
5205 end = this.length
5206 }
5207
5208 if (end <= 0) {
5209 return ''
5210 }
5211
5212 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
5213 end >>>= 0
5214 start >>>= 0
5215
5216 if (end <= start) {
5217 return ''
5218 }
5219
5220 if (!encoding) encoding = 'utf8'
5221
5222 while (true) {
5223 switch (encoding) {
5224 case 'hex':
5225 return hexSlice(this, start, end)
5226
5227 case 'utf8':
5228 case 'utf-8':
5229 return utf8Slice(this, start, end)
5230
5231 case 'ascii':
5232 return asciiSlice(this, start, end)
5233
5234 case 'latin1':
5235 case 'binary':
5236 return latin1Slice(this, start, end)
5237
5238 case 'base64':
5239 return base64Slice(this, start, end)
5240
5241 case 'ucs2':
5242 case 'ucs-2':
5243 case 'utf16le':
5244 case 'utf-16le':
5245 return utf16leSlice(this, start, end)
5246
5247 default:
5248 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5249 encoding = (encoding + '').toLowerCase()
5250 loweredCase = true
5251 }
5252 }
5253}
5254
5255// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
5256// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
5257// reliably in a browserify context because there could be multiple different
5258// copies of the 'buffer' package in use. This method works even for Buffer
5259// instances that were created from another copy of the `buffer` package.
5260// See: https://github.com/feross/buffer/issues/154
5261Buffer.prototype._isBuffer = true
5262
5263function swap (b, n, m) {
5264 var i = b[n]
5265 b[n] = b[m]
5266 b[m] = i
5267}
5268
5269Buffer.prototype.swap16 = function swap16 () {
5270 var len = this.length
5271 if (len % 2 !== 0) {
5272 throw new RangeError('Buffer size must be a multiple of 16-bits')
5273 }
5274 for (var i = 0; i < len; i += 2) {
5275 swap(this, i, i + 1)
5276 }
5277 return this
5278}
5279
5280Buffer.prototype.swap32 = function swap32 () {
5281 var len = this.length
5282 if (len % 4 !== 0) {
5283 throw new RangeError('Buffer size must be a multiple of 32-bits')
5284 }
5285 for (var i = 0; i < len; i += 4) {
5286 swap(this, i, i + 3)
5287 swap(this, i + 1, i + 2)
5288 }
5289 return this
5290}
5291
5292Buffer.prototype.swap64 = function swap64 () {
5293 var len = this.length
5294 if (len % 8 !== 0) {
5295 throw new RangeError('Buffer size must be a multiple of 64-bits')
5296 }
5297 for (var i = 0; i < len; i += 8) {
5298 swap(this, i, i + 7)
5299 swap(this, i + 1, i + 6)
5300 swap(this, i + 2, i + 5)
5301 swap(this, i + 3, i + 4)
5302 }
5303 return this
5304}
5305
5306Buffer.prototype.toString = function toString () {
5307 var length = this.length
5308 if (length === 0) return ''
5309 if (arguments.length === 0) return utf8Slice(this, 0, length)
5310 return slowToString.apply(this, arguments)
5311}
5312
5313Buffer.prototype.equals = function equals (b) {
5314 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
5315 if (this === b) return true
5316 return Buffer.compare(this, b) === 0
5317}
5318
5319Buffer.prototype.inspect = function inspect () {
5320 var str = ''
5321 var max = exports.INSPECT_MAX_BYTES
5322 if (this.length > 0) {
5323 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
5324 if (this.length > max) str += ' ... '
5325 }
5326 return '<Buffer ' + str + '>'
5327}
5328
5329Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
5330 if (!Buffer.isBuffer(target)) {
5331 throw new TypeError('Argument must be a Buffer')
5332 }
5333
5334 if (start === undefined) {
5335 start = 0
5336 }
5337 if (end === undefined) {
5338 end = target ? target.length : 0
5339 }
5340 if (thisStart === undefined) {
5341 thisStart = 0
5342 }
5343 if (thisEnd === undefined) {
5344 thisEnd = this.length
5345 }
5346
5347 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
5348 throw new RangeError('out of range index')
5349 }
5350
5351 if (thisStart >= thisEnd && start >= end) {
5352 return 0
5353 }
5354 if (thisStart >= thisEnd) {
5355 return -1
5356 }
5357 if (start >= end) {
5358 return 1
5359 }
5360
5361 start >>>= 0
5362 end >>>= 0
5363 thisStart >>>= 0
5364 thisEnd >>>= 0
5365
5366 if (this === target) return 0
5367
5368 var x = thisEnd - thisStart
5369 var y = end - start
5370 var len = Math.min(x, y)
5371
5372 var thisCopy = this.slice(thisStart, thisEnd)
5373 var targetCopy = target.slice(start, end)
5374
5375 for (var i = 0; i < len; ++i) {
5376 if (thisCopy[i] !== targetCopy[i]) {
5377 x = thisCopy[i]
5378 y = targetCopy[i]
5379 break
5380 }
5381 }
5382
5383 if (x < y) return -1
5384 if (y < x) return 1
5385 return 0
5386}
5387
5388// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
5389// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
5390//
5391// Arguments:
5392// - buffer - a Buffer to search
5393// - val - a string, Buffer, or number
5394// - byteOffset - an index into `buffer`; will be clamped to an int32
5395// - encoding - an optional encoding, relevant is val is a string
5396// - dir - true for indexOf, false for lastIndexOf
5397function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
5398 // Empty buffer means no match
5399 if (buffer.length === 0) return -1
5400
5401 // Normalize byteOffset
5402 if (typeof byteOffset === 'string') {
5403 encoding = byteOffset
5404 byteOffset = 0
5405 } else if (byteOffset > 0x7fffffff) {
5406 byteOffset = 0x7fffffff
5407 } else if (byteOffset < -0x80000000) {
5408 byteOffset = -0x80000000
5409 }
5410 byteOffset = +byteOffset // Coerce to Number.
5411 if (numberIsNaN(byteOffset)) {
5412 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
5413 byteOffset = dir ? 0 : (buffer.length - 1)
5414 }
5415
5416 // Normalize byteOffset: negative offsets start from the end of the buffer
5417 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
5418 if (byteOffset >= buffer.length) {
5419 if (dir) return -1
5420 else byteOffset = buffer.length - 1
5421 } else if (byteOffset < 0) {
5422 if (dir) byteOffset = 0
5423 else return -1
5424 }
5425
5426 // Normalize val
5427 if (typeof val === 'string') {
5428 val = Buffer.from(val, encoding)
5429 }
5430
5431 // Finally, search either indexOf (if dir is true) or lastIndexOf
5432 if (Buffer.isBuffer(val)) {
5433 // Special case: looking for empty string/buffer always fails
5434 if (val.length === 0) {
5435 return -1
5436 }
5437 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
5438 } else if (typeof val === 'number') {
5439 val = val & 0xFF // Search for a byte value [0-255]
5440 if (typeof Uint8Array.prototype.indexOf === 'function') {
5441 if (dir) {
5442 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
5443 } else {
5444 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
5445 }
5446 }
5447 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
5448 }
5449
5450 throw new TypeError('val must be string, number or Buffer')
5451}
5452
5453function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
5454 var indexSize = 1
5455 var arrLength = arr.length
5456 var valLength = val.length
5457
5458 if (encoding !== undefined) {
5459 encoding = String(encoding).toLowerCase()
5460 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
5461 encoding === 'utf16le' || encoding === 'utf-16le') {
5462 if (arr.length < 2 || val.length < 2) {
5463 return -1
5464 }
5465 indexSize = 2
5466 arrLength /= 2
5467 valLength /= 2
5468 byteOffset /= 2
5469 }
5470 }
5471
5472 function read (buf, i) {
5473 if (indexSize === 1) {
5474 return buf[i]
5475 } else {
5476 return buf.readUInt16BE(i * indexSize)
5477 }
5478 }
5479
5480 var i
5481 if (dir) {
5482 var foundIndex = -1
5483 for (i = byteOffset; i < arrLength; i++) {
5484 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
5485 if (foundIndex === -1) foundIndex = i
5486 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
5487 } else {
5488 if (foundIndex !== -1) i -= i - foundIndex
5489 foundIndex = -1
5490 }
5491 }
5492 } else {
5493 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
5494 for (i = byteOffset; i >= 0; i--) {
5495 var found = true
5496 for (var j = 0; j < valLength; j++) {
5497 if (read(arr, i + j) !== read(val, j)) {
5498 found = false
5499 break
5500 }
5501 }
5502 if (found) return i
5503 }
5504 }
5505
5506 return -1
5507}
5508
5509Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
5510 return this.indexOf(val, byteOffset, encoding) !== -1
5511}
5512
5513Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
5514 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
5515}
5516
5517Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
5518 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
5519}
5520
5521function hexWrite (buf, string, offset, length) {
5522 offset = Number(offset) || 0
5523 var remaining = buf.length - offset
5524 if (!length) {
5525 length = remaining
5526 } else {
5527 length = Number(length)
5528 if (length > remaining) {
5529 length = remaining
5530 }
5531 }
5532
5533 // must be an even number of digits
5534 var strLen = string.length
5535 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
5536
5537 if (length > strLen / 2) {
5538 length = strLen / 2
5539 }
5540 for (var i = 0; i < length; ++i) {
5541 var parsed = parseInt(string.substr(i * 2, 2), 16)
5542 if (numberIsNaN(parsed)) return i
5543 buf[offset + i] = parsed
5544 }
5545 return i
5546}
5547
5548function utf8Write (buf, string, offset, length) {
5549 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
5550}
5551
5552function asciiWrite (buf, string, offset, length) {
5553 return blitBuffer(asciiToBytes(string), buf, offset, length)
5554}
5555
5556function latin1Write (buf, string, offset, length) {
5557 return asciiWrite(buf, string, offset, length)
5558}
5559
5560function base64Write (buf, string, offset, length) {
5561 return blitBuffer(base64ToBytes(string), buf, offset, length)
5562}
5563
5564function ucs2Write (buf, string, offset, length) {
5565 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
5566}
5567
5568Buffer.prototype.write = function write (string, offset, length, encoding) {
5569 // Buffer#write(string)
5570 if (offset === undefined) {
5571 encoding = 'utf8'
5572 length = this.length
5573 offset = 0
5574 // Buffer#write(string, encoding)
5575 } else if (length === undefined && typeof offset === 'string') {
5576 encoding = offset
5577 length = this.length
5578 offset = 0
5579 // Buffer#write(string, offset[, length][, encoding])
5580 } else if (isFinite(offset)) {
5581 offset = offset >>> 0
5582 if (isFinite(length)) {
5583 length = length >>> 0
5584 if (encoding === undefined) encoding = 'utf8'
5585 } else {
5586 encoding = length
5587 length = undefined
5588 }
5589 } else {
5590 throw new Error(
5591 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
5592 )
5593 }
5594
5595 var remaining = this.length - offset
5596 if (length === undefined || length > remaining) length = remaining
5597
5598 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
5599 throw new RangeError('Attempt to write outside buffer bounds')
5600 }
5601
5602 if (!encoding) encoding = 'utf8'
5603
5604 var loweredCase = false
5605 for (;;) {
5606 switch (encoding) {
5607 case 'hex':
5608 return hexWrite(this, string, offset, length)
5609
5610 case 'utf8':
5611 case 'utf-8':
5612 return utf8Write(this, string, offset, length)
5613
5614 case 'ascii':
5615 return asciiWrite(this, string, offset, length)
5616
5617 case 'latin1':
5618 case 'binary':
5619 return latin1Write(this, string, offset, length)
5620
5621 case 'base64':
5622 // Warning: maxLength not taken into account in base64Write
5623 return base64Write(this, string, offset, length)
5624
5625 case 'ucs2':
5626 case 'ucs-2':
5627 case 'utf16le':
5628 case 'utf-16le':
5629 return ucs2Write(this, string, offset, length)
5630
5631 default:
5632 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5633 encoding = ('' + encoding).toLowerCase()
5634 loweredCase = true
5635 }
5636 }
5637}
5638
5639Buffer.prototype.toJSON = function toJSON () {
5640 return {
5641 type: 'Buffer',
5642 data: Array.prototype.slice.call(this._arr || this, 0)
5643 }
5644}
5645
5646function base64Slice (buf, start, end) {
5647 if (start === 0 && end === buf.length) {
5648 return base64.fromByteArray(buf)
5649 } else {
5650 return base64.fromByteArray(buf.slice(start, end))
5651 }
5652}
5653
5654function utf8Slice (buf, start, end) {
5655 end = Math.min(buf.length, end)
5656 var res = []
5657
5658 var i = start
5659 while (i < end) {
5660 var firstByte = buf[i]
5661 var codePoint = null
5662 var bytesPerSequence = (firstByte > 0xEF) ? 4
5663 : (firstByte > 0xDF) ? 3
5664 : (firstByte > 0xBF) ? 2
5665 : 1
5666
5667 if (i + bytesPerSequence <= end) {
5668 var secondByte, thirdByte, fourthByte, tempCodePoint
5669
5670 switch (bytesPerSequence) {
5671 case 1:
5672 if (firstByte < 0x80) {
5673 codePoint = firstByte
5674 }
5675 break
5676 case 2:
5677 secondByte = buf[i + 1]
5678 if ((secondByte & 0xC0) === 0x80) {
5679 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
5680 if (tempCodePoint > 0x7F) {
5681 codePoint = tempCodePoint
5682 }
5683 }
5684 break
5685 case 3:
5686 secondByte = buf[i + 1]
5687 thirdByte = buf[i + 2]
5688 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
5689 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
5690 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
5691 codePoint = tempCodePoint
5692 }
5693 }
5694 break
5695 case 4:
5696 secondByte = buf[i + 1]
5697 thirdByte = buf[i + 2]
5698 fourthByte = buf[i + 3]
5699 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
5700 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
5701 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
5702 codePoint = tempCodePoint
5703 }
5704 }
5705 }
5706 }
5707
5708 if (codePoint === null) {
5709 // we did not generate a valid codePoint so insert a
5710 // replacement char (U+FFFD) and advance only 1 byte
5711 codePoint = 0xFFFD
5712 bytesPerSequence = 1
5713 } else if (codePoint > 0xFFFF) {
5714 // encode to utf16 (surrogate pair dance)
5715 codePoint -= 0x10000
5716 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
5717 codePoint = 0xDC00 | codePoint & 0x3FF
5718 }
5719
5720 res.push(codePoint)
5721 i += bytesPerSequence
5722 }
5723
5724 return decodeCodePointsArray(res)
5725}
5726
5727// Based on http://stackoverflow.com/a/22747272/680742, the browser with
5728// the lowest limit is Chrome, with 0x10000 args.
5729// We go 1 magnitude less, for safety
5730var MAX_ARGUMENTS_LENGTH = 0x1000
5731
5732function decodeCodePointsArray (codePoints) {
5733 var len = codePoints.length
5734 if (len <= MAX_ARGUMENTS_LENGTH) {
5735 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
5736 }
5737
5738 // Decode in chunks to avoid "call stack size exceeded".
5739 var res = ''
5740 var i = 0
5741 while (i < len) {
5742 res += String.fromCharCode.apply(
5743 String,
5744 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
5745 )
5746 }
5747 return res
5748}
5749
5750function asciiSlice (buf, start, end) {
5751 var ret = ''
5752 end = Math.min(buf.length, end)
5753
5754 for (var i = start; i < end; ++i) {
5755 ret += String.fromCharCode(buf[i] & 0x7F)
5756 }
5757 return ret
5758}
5759
5760function latin1Slice (buf, start, end) {
5761 var ret = ''
5762 end = Math.min(buf.length, end)
5763
5764 for (var i = start; i < end; ++i) {
5765 ret += String.fromCharCode(buf[i])
5766 }
5767 return ret
5768}
5769
5770function hexSlice (buf, start, end) {
5771 var len = buf.length
5772
5773 if (!start || start < 0) start = 0
5774 if (!end || end < 0 || end > len) end = len
5775
5776 var out = ''
5777 for (var i = start; i < end; ++i) {
5778 out += toHex(buf[i])
5779 }
5780 return out
5781}
5782
5783function utf16leSlice (buf, start, end) {
5784 var bytes = buf.slice(start, end)
5785 var res = ''
5786 for (var i = 0; i < bytes.length; i += 2) {
5787 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
5788 }
5789 return res
5790}
5791
5792Buffer.prototype.slice = function slice (start, end) {
5793 var len = this.length
5794 start = ~~start
5795 end = end === undefined ? len : ~~end
5796
5797 if (start < 0) {
5798 start += len
5799 if (start < 0) start = 0
5800 } else if (start > len) {
5801 start = len
5802 }
5803
5804 if (end < 0) {
5805 end += len
5806 if (end < 0) end = 0
5807 } else if (end > len) {
5808 end = len
5809 }
5810
5811 if (end < start) end = start
5812
5813 var newBuf = this.subarray(start, end)
5814 // Return an augmented `Uint8Array` instance
5815 newBuf.__proto__ = Buffer.prototype
5816 return newBuf
5817}
5818
5819/*
5820 * Need to make sure that buffer isn't trying to write out of bounds.
5821 */
5822function checkOffset (offset, ext, length) {
5823 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
5824 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
5825}
5826
5827Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
5828 offset = offset >>> 0
5829 byteLength = byteLength >>> 0
5830 if (!noAssert) checkOffset(offset, byteLength, this.length)
5831
5832 var val = this[offset]
5833 var mul = 1
5834 var i = 0
5835 while (++i < byteLength && (mul *= 0x100)) {
5836 val += this[offset + i] * mul
5837 }
5838
5839 return val
5840}
5841
5842Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
5843 offset = offset >>> 0
5844 byteLength = byteLength >>> 0
5845 if (!noAssert) {
5846 checkOffset(offset, byteLength, this.length)
5847 }
5848
5849 var val = this[offset + --byteLength]
5850 var mul = 1
5851 while (byteLength > 0 && (mul *= 0x100)) {
5852 val += this[offset + --byteLength] * mul
5853 }
5854
5855 return val
5856}
5857
5858Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
5859 offset = offset >>> 0
5860 if (!noAssert) checkOffset(offset, 1, this.length)
5861 return this[offset]
5862}
5863
5864Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
5865 offset = offset >>> 0
5866 if (!noAssert) checkOffset(offset, 2, this.length)
5867 return this[offset] | (this[offset + 1] << 8)
5868}
5869
5870Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
5871 offset = offset >>> 0
5872 if (!noAssert) checkOffset(offset, 2, this.length)
5873 return (this[offset] << 8) | this[offset + 1]
5874}
5875
5876Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
5877 offset = offset >>> 0
5878 if (!noAssert) checkOffset(offset, 4, this.length)
5879
5880 return ((this[offset]) |
5881 (this[offset + 1] << 8) |
5882 (this[offset + 2] << 16)) +
5883 (this[offset + 3] * 0x1000000)
5884}
5885
5886Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
5887 offset = offset >>> 0
5888 if (!noAssert) checkOffset(offset, 4, this.length)
5889
5890 return (this[offset] * 0x1000000) +
5891 ((this[offset + 1] << 16) |
5892 (this[offset + 2] << 8) |
5893 this[offset + 3])
5894}
5895
5896Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
5897 offset = offset >>> 0
5898 byteLength = byteLength >>> 0
5899 if (!noAssert) checkOffset(offset, byteLength, this.length)
5900
5901 var val = this[offset]
5902 var mul = 1
5903 var i = 0
5904 while (++i < byteLength && (mul *= 0x100)) {
5905 val += this[offset + i] * mul
5906 }
5907 mul *= 0x80
5908
5909 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5910
5911 return val
5912}
5913
5914Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
5915 offset = offset >>> 0
5916 byteLength = byteLength >>> 0
5917 if (!noAssert) checkOffset(offset, byteLength, this.length)
5918
5919 var i = byteLength
5920 var mul = 1
5921 var val = this[offset + --i]
5922 while (i > 0 && (mul *= 0x100)) {
5923 val += this[offset + --i] * mul
5924 }
5925 mul *= 0x80
5926
5927 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5928
5929 return val
5930}
5931
5932Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
5933 offset = offset >>> 0
5934 if (!noAssert) checkOffset(offset, 1, this.length)
5935 if (!(this[offset] & 0x80)) return (this[offset])
5936 return ((0xff - this[offset] + 1) * -1)
5937}
5938
5939Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
5940 offset = offset >>> 0
5941 if (!noAssert) checkOffset(offset, 2, this.length)
5942 var val = this[offset] | (this[offset + 1] << 8)
5943 return (val & 0x8000) ? val | 0xFFFF0000 : val
5944}
5945
5946Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
5947 offset = offset >>> 0
5948 if (!noAssert) checkOffset(offset, 2, this.length)
5949 var val = this[offset + 1] | (this[offset] << 8)
5950 return (val & 0x8000) ? val | 0xFFFF0000 : val
5951}
5952
5953Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
5954 offset = offset >>> 0
5955 if (!noAssert) checkOffset(offset, 4, this.length)
5956
5957 return (this[offset]) |
5958 (this[offset + 1] << 8) |
5959 (this[offset + 2] << 16) |
5960 (this[offset + 3] << 24)
5961}
5962
5963Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
5964 offset = offset >>> 0
5965 if (!noAssert) checkOffset(offset, 4, this.length)
5966
5967 return (this[offset] << 24) |
5968 (this[offset + 1] << 16) |
5969 (this[offset + 2] << 8) |
5970 (this[offset + 3])
5971}
5972
5973Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
5974 offset = offset >>> 0
5975 if (!noAssert) checkOffset(offset, 4, this.length)
5976 return ieee754.read(this, offset, true, 23, 4)
5977}
5978
5979Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
5980 offset = offset >>> 0
5981 if (!noAssert) checkOffset(offset, 4, this.length)
5982 return ieee754.read(this, offset, false, 23, 4)
5983}
5984
5985Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
5986 offset = offset >>> 0
5987 if (!noAssert) checkOffset(offset, 8, this.length)
5988 return ieee754.read(this, offset, true, 52, 8)
5989}
5990
5991Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
5992 offset = offset >>> 0
5993 if (!noAssert) checkOffset(offset, 8, this.length)
5994 return ieee754.read(this, offset, false, 52, 8)
5995}
5996
5997function checkInt (buf, value, offset, ext, max, min) {
5998 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
5999 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
6000 if (offset + ext > buf.length) throw new RangeError('Index out of range')
6001}
6002
6003Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
6004 value = +value
6005 offset = offset >>> 0
6006 byteLength = byteLength >>> 0
6007 if (!noAssert) {
6008 var maxBytes = Math.pow(2, 8 * byteLength) - 1
6009 checkInt(this, value, offset, byteLength, maxBytes, 0)
6010 }
6011
6012 var mul = 1
6013 var i = 0
6014 this[offset] = value & 0xFF
6015 while (++i < byteLength && (mul *= 0x100)) {
6016 this[offset + i] = (value / mul) & 0xFF
6017 }
6018
6019 return offset + byteLength
6020}
6021
6022Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
6023 value = +value
6024 offset = offset >>> 0
6025 byteLength = byteLength >>> 0
6026 if (!noAssert) {
6027 var maxBytes = Math.pow(2, 8 * byteLength) - 1
6028 checkInt(this, value, offset, byteLength, maxBytes, 0)
6029 }
6030
6031 var i = byteLength - 1
6032 var mul = 1
6033 this[offset + i] = value & 0xFF
6034 while (--i >= 0 && (mul *= 0x100)) {
6035 this[offset + i] = (value / mul) & 0xFF
6036 }
6037
6038 return offset + byteLength
6039}
6040
6041Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
6042 value = +value
6043 offset = offset >>> 0
6044 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
6045 this[offset] = (value & 0xff)
6046 return offset + 1
6047}
6048
6049Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
6050 value = +value
6051 offset = offset >>> 0
6052 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
6053 this[offset] = (value & 0xff)
6054 this[offset + 1] = (value >>> 8)
6055 return offset + 2
6056}
6057
6058Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
6059 value = +value
6060 offset = offset >>> 0
6061 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
6062 this[offset] = (value >>> 8)
6063 this[offset + 1] = (value & 0xff)
6064 return offset + 2
6065}
6066
6067Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
6068 value = +value
6069 offset = offset >>> 0
6070 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
6071 this[offset + 3] = (value >>> 24)
6072 this[offset + 2] = (value >>> 16)
6073 this[offset + 1] = (value >>> 8)
6074 this[offset] = (value & 0xff)
6075 return offset + 4
6076}
6077
6078Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
6079 value = +value
6080 offset = offset >>> 0
6081 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
6082 this[offset] = (value >>> 24)
6083 this[offset + 1] = (value >>> 16)
6084 this[offset + 2] = (value >>> 8)
6085 this[offset + 3] = (value & 0xff)
6086 return offset + 4
6087}
6088
6089Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
6090 value = +value
6091 offset = offset >>> 0
6092 if (!noAssert) {
6093 var limit = Math.pow(2, (8 * byteLength) - 1)
6094
6095 checkInt(this, value, offset, byteLength, limit - 1, -limit)
6096 }
6097
6098 var i = 0
6099 var mul = 1
6100 var sub = 0
6101 this[offset] = value & 0xFF
6102 while (++i < byteLength && (mul *= 0x100)) {
6103 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
6104 sub = 1
6105 }
6106 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
6107 }
6108
6109 return offset + byteLength
6110}
6111
6112Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
6113 value = +value
6114 offset = offset >>> 0
6115 if (!noAssert) {
6116 var limit = Math.pow(2, (8 * byteLength) - 1)
6117
6118 checkInt(this, value, offset, byteLength, limit - 1, -limit)
6119 }
6120
6121 var i = byteLength - 1
6122 var mul = 1
6123 var sub = 0
6124 this[offset + i] = value & 0xFF
6125 while (--i >= 0 && (mul *= 0x100)) {
6126 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
6127 sub = 1
6128 }
6129 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
6130 }
6131
6132 return offset + byteLength
6133}
6134
6135Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
6136 value = +value
6137 offset = offset >>> 0
6138 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
6139 if (value < 0) value = 0xff + value + 1
6140 this[offset] = (value & 0xff)
6141 return offset + 1
6142}
6143
6144Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
6145 value = +value
6146 offset = offset >>> 0
6147 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
6148 this[offset] = (value & 0xff)
6149 this[offset + 1] = (value >>> 8)
6150 return offset + 2
6151}
6152
6153Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
6154 value = +value
6155 offset = offset >>> 0
6156 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
6157 this[offset] = (value >>> 8)
6158 this[offset + 1] = (value & 0xff)
6159 return offset + 2
6160}
6161
6162Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
6163 value = +value
6164 offset = offset >>> 0
6165 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
6166 this[offset] = (value & 0xff)
6167 this[offset + 1] = (value >>> 8)
6168 this[offset + 2] = (value >>> 16)
6169 this[offset + 3] = (value >>> 24)
6170 return offset + 4
6171}
6172
6173Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
6174 value = +value
6175 offset = offset >>> 0
6176 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
6177 if (value < 0) value = 0xffffffff + value + 1
6178 this[offset] = (value >>> 24)
6179 this[offset + 1] = (value >>> 16)
6180 this[offset + 2] = (value >>> 8)
6181 this[offset + 3] = (value & 0xff)
6182 return offset + 4
6183}
6184
6185function checkIEEE754 (buf, value, offset, ext, max, min) {
6186 if (offset + ext > buf.length) throw new RangeError('Index out of range')
6187 if (offset < 0) throw new RangeError('Index out of range')
6188}
6189
6190function writeFloat (buf, value, offset, littleEndian, noAssert) {
6191 value = +value
6192 offset = offset >>> 0
6193 if (!noAssert) {
6194 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
6195 }
6196 ieee754.write(buf, value, offset, littleEndian, 23, 4)
6197 return offset + 4
6198}
6199
6200Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
6201 return writeFloat(this, value, offset, true, noAssert)
6202}
6203
6204Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
6205 return writeFloat(this, value, offset, false, noAssert)
6206}
6207
6208function writeDouble (buf, value, offset, littleEndian, noAssert) {
6209 value = +value
6210 offset = offset >>> 0
6211 if (!noAssert) {
6212 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
6213 }
6214 ieee754.write(buf, value, offset, littleEndian, 52, 8)
6215 return offset + 8
6216}
6217
6218Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
6219 return writeDouble(this, value, offset, true, noAssert)
6220}
6221
6222Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
6223 return writeDouble(this, value, offset, false, noAssert)
6224}
6225
6226// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
6227Buffer.prototype.copy = function copy (target, targetStart, start, end) {
6228 if (!start) start = 0
6229 if (!end && end !== 0) end = this.length
6230 if (targetStart >= target.length) targetStart = target.length
6231 if (!targetStart) targetStart = 0
6232 if (end > 0 && end < start) end = start
6233
6234 // Copy 0 bytes; we're done
6235 if (end === start) return 0
6236 if (target.length === 0 || this.length === 0) return 0
6237
6238 // Fatal error conditions
6239 if (targetStart < 0) {
6240 throw new RangeError('targetStart out of bounds')
6241 }
6242 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
6243 if (end < 0) throw new RangeError('sourceEnd out of bounds')
6244
6245 // Are we oob?
6246 if (end > this.length) end = this.length
6247 if (target.length - targetStart < end - start) {
6248 end = target.length - targetStart + start
6249 }
6250
6251 var len = end - start
6252 var i
6253
6254 if (this === target && start < targetStart && targetStart < end) {
6255 // descending copy from end
6256 for (i = len - 1; i >= 0; --i) {
6257 target[i + targetStart] = this[i + start]
6258 }
6259 } else if (len < 1000) {
6260 // ascending copy from start
6261 for (i = 0; i < len; ++i) {
6262 target[i + targetStart] = this[i + start]
6263 }
6264 } else {
6265 Uint8Array.prototype.set.call(
6266 target,
6267 this.subarray(start, start + len),
6268 targetStart
6269 )
6270 }
6271
6272 return len
6273}
6274
6275// Usage:
6276// buffer.fill(number[, offset[, end]])
6277// buffer.fill(buffer[, offset[, end]])
6278// buffer.fill(string[, offset[, end]][, encoding])
6279Buffer.prototype.fill = function fill (val, start, end, encoding) {
6280 // Handle string cases:
6281 if (typeof val === 'string') {
6282 if (typeof start === 'string') {
6283 encoding = start
6284 start = 0
6285 end = this.length
6286 } else if (typeof end === 'string') {
6287 encoding = end
6288 end = this.length
6289 }
6290 if (val.length === 1) {
6291 var code = val.charCodeAt(0)
6292 if (code < 256) {
6293 val = code
6294 }
6295 }
6296 if (encoding !== undefined && typeof encoding !== 'string') {
6297 throw new TypeError('encoding must be a string')
6298 }
6299 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
6300 throw new TypeError('Unknown encoding: ' + encoding)
6301 }
6302 } else if (typeof val === 'number') {
6303 val = val & 255
6304 }
6305
6306 // Invalid ranges are not set to a default, so can range check early.
6307 if (start < 0 || this.length < start || this.length < end) {
6308 throw new RangeError('Out of range index')
6309 }
6310
6311 if (end <= start) {
6312 return this
6313 }
6314
6315 start = start >>> 0
6316 end = end === undefined ? this.length : end >>> 0
6317
6318 if (!val) val = 0
6319
6320 var i
6321 if (typeof val === 'number') {
6322 for (i = start; i < end; ++i) {
6323 this[i] = val
6324 }
6325 } else {
6326 var bytes = Buffer.isBuffer(val)
6327 ? val
6328 : new Buffer(val, encoding)
6329 var len = bytes.length
6330 for (i = 0; i < end - start; ++i) {
6331 this[i + start] = bytes[i % len]
6332 }
6333 }
6334
6335 return this
6336}
6337
6338// HELPER FUNCTIONS
6339// ================
6340
6341var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
6342
6343function base64clean (str) {
6344 // Node strips out invalid characters like \n and \t from the string, base64-js does not
6345 str = str.trim().replace(INVALID_BASE64_RE, '')
6346 // Node converts strings with length < 2 to ''
6347 if (str.length < 2) return ''
6348 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
6349 while (str.length % 4 !== 0) {
6350 str = str + '='
6351 }
6352 return str
6353}
6354
6355function toHex (n) {
6356 if (n < 16) return '0' + n.toString(16)
6357 return n.toString(16)
6358}
6359
6360function utf8ToBytes (string, units) {
6361 units = units || Infinity
6362 var codePoint
6363 var length = string.length
6364 var leadSurrogate = null
6365 var bytes = []
6366
6367 for (var i = 0; i < length; ++i) {
6368 codePoint = string.charCodeAt(i)
6369
6370 // is surrogate component
6371 if (codePoint > 0xD7FF && codePoint < 0xE000) {
6372 // last char was a lead
6373 if (!leadSurrogate) {
6374 // no lead yet
6375 if (codePoint > 0xDBFF) {
6376 // unexpected trail
6377 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6378 continue
6379 } else if (i + 1 === length) {
6380 // unpaired lead
6381 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6382 continue
6383 }
6384
6385 // valid lead
6386 leadSurrogate = codePoint
6387
6388 continue
6389 }
6390
6391 // 2 leads in a row
6392 if (codePoint < 0xDC00) {
6393 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6394 leadSurrogate = codePoint
6395 continue
6396 }
6397
6398 // valid surrogate pair
6399 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
6400 } else if (leadSurrogate) {
6401 // valid bmp char, but last char was a lead
6402 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6403 }
6404
6405 leadSurrogate = null
6406
6407 // encode utf8
6408 if (codePoint < 0x80) {
6409 if ((units -= 1) < 0) break
6410 bytes.push(codePoint)
6411 } else if (codePoint < 0x800) {
6412 if ((units -= 2) < 0) break
6413 bytes.push(
6414 codePoint >> 0x6 | 0xC0,
6415 codePoint & 0x3F | 0x80
6416 )
6417 } else if (codePoint < 0x10000) {
6418 if ((units -= 3) < 0) break
6419 bytes.push(
6420 codePoint >> 0xC | 0xE0,
6421 codePoint >> 0x6 & 0x3F | 0x80,
6422 codePoint & 0x3F | 0x80
6423 )
6424 } else if (codePoint < 0x110000) {
6425 if ((units -= 4) < 0) break
6426 bytes.push(
6427 codePoint >> 0x12 | 0xF0,
6428 codePoint >> 0xC & 0x3F | 0x80,
6429 codePoint >> 0x6 & 0x3F | 0x80,
6430 codePoint & 0x3F | 0x80
6431 )
6432 } else {
6433 throw new Error('Invalid code point')
6434 }
6435 }
6436
6437 return bytes
6438}
6439
6440function asciiToBytes (str) {
6441 var byteArray = []
6442 for (var i = 0; i < str.length; ++i) {
6443 // Node's code seems to be doing this and not & 0x7F..
6444 byteArray.push(str.charCodeAt(i) & 0xFF)
6445 }
6446 return byteArray
6447}
6448
6449function utf16leToBytes (str, units) {
6450 var c, hi, lo
6451 var byteArray = []
6452 for (var i = 0; i < str.length; ++i) {
6453 if ((units -= 2) < 0) break
6454
6455 c = str.charCodeAt(i)
6456 hi = c >> 8
6457 lo = c % 256
6458 byteArray.push(lo)
6459 byteArray.push(hi)
6460 }
6461
6462 return byteArray
6463}
6464
6465function base64ToBytes (str) {
6466 return base64.toByteArray(base64clean(str))
6467}
6468
6469function blitBuffer (src, dst, offset, length) {
6470 for (var i = 0; i < length; ++i) {
6471 if ((i + offset >= dst.length) || (i >= src.length)) break
6472 dst[i + offset] = src[i]
6473 }
6474 return i
6475}
6476
6477// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
6478function isArrayBufferView (obj) {
6479 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
6480}
6481
6482function numberIsNaN (obj) {
6483 return obj !== obj // eslint-disable-line no-self-compare
6484}
6485
6486},{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
6487exports.read = function (buffer, offset, isLE, mLen, nBytes) {
6488 var e, m
6489 var eLen = nBytes * 8 - mLen - 1
6490 var eMax = (1 << eLen) - 1
6491 var eBias = eMax >> 1
6492 var nBits = -7
6493 var i = isLE ? (nBytes - 1) : 0
6494 var d = isLE ? -1 : 1
6495 var s = buffer[offset + i]
6496
6497 i += d
6498
6499 e = s & ((1 << (-nBits)) - 1)
6500 s >>= (-nBits)
6501 nBits += eLen
6502 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6503
6504 m = e & ((1 << (-nBits)) - 1)
6505 e >>= (-nBits)
6506 nBits += mLen
6507 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6508
6509 if (e === 0) {
6510 e = 1 - eBias
6511 } else if (e === eMax) {
6512 return m ? NaN : ((s ? -1 : 1) * Infinity)
6513 } else {
6514 m = m + Math.pow(2, mLen)
6515 e = e - eBias
6516 }
6517 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
6518}
6519
6520exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
6521 var e, m, c
6522 var eLen = nBytes * 8 - mLen - 1
6523 var eMax = (1 << eLen) - 1
6524 var eBias = eMax >> 1
6525 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
6526 var i = isLE ? 0 : (nBytes - 1)
6527 var d = isLE ? 1 : -1
6528 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
6529
6530 value = Math.abs(value)
6531
6532 if (isNaN(value) || value === Infinity) {
6533 m = isNaN(value) ? 1 : 0
6534 e = eMax
6535 } else {
6536 e = Math.floor(Math.log(value) / Math.LN2)
6537 if (value * (c = Math.pow(2, -e)) < 1) {
6538 e--
6539 c *= 2
6540 }
6541 if (e + eBias >= 1) {
6542 value += rt / c
6543 } else {
6544 value += rt * Math.pow(2, 1 - eBias)
6545 }
6546 if (value * c >= 2) {
6547 e++
6548 c /= 2
6549 }
6550
6551 if (e + eBias >= eMax) {
6552 m = 0
6553 e = eMax
6554 } else if (e + eBias >= 1) {
6555 m = (value * c - 1) * Math.pow(2, mLen)
6556 e = e + eBias
6557 } else {
6558 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
6559 e = 0
6560 }
6561 }
6562
6563 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
6564
6565 e = (e << mLen) | m
6566 eLen += mLen
6567 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
6568
6569 buffer[offset + i - d] |= s * 128
6570}
6571
6572},{}],4:[function(require,module,exports){
6573window.basex = require('base-x')
6574},{"base-x":5}],5:[function(require,module,exports){
6575// base-x encoding
6576// Forked from https://github.com/cryptocoinjs/bs58
6577// Originally written by Mike Hearn for BitcoinJ
6578// Copyright (c) 2011 Google Inc
6579// Ported to JavaScript by Stefan Thomas
6580// Merged Buffer refactorings from base58-native by Stephen Pair
6581// Copyright (c) 2013 BitPay Inc
6582
6583var Buffer = require('safe-buffer').Buffer
6584
6585module.exports = function base (ALPHABET) {
6586 var ALPHABET_MAP = {}
6587 var BASE = ALPHABET.length
6588 var LEADER = ALPHABET.charAt(0)
6589
6590 // pre-compute lookup table
6591 for (var z = 0; z < ALPHABET.length; z++) {
6592 var x = ALPHABET.charAt(z)
6593
6594 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
6595 ALPHABET_MAP[x] = z
6596 }
6597
6598 function encode (source) {
6599 if (source.length === 0) return ''
6600
6601 var digits = [0]
6602 for (var i = 0; i < source.length; ++i) {
6603 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
6604 carry += digits[j] << 8
6605 digits[j] = carry % BASE
6606 carry = (carry / BASE) | 0
6607 }
6608
6609 while (carry > 0) {
6610 digits.push(carry % BASE)
6611 carry = (carry / BASE) | 0
6612 }
6613 }
6614
6615 var string = ''
6616
6617 // deal with leading zeros
6618 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
6619 // convert digits to a string
6620 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
6621
6622 return string
6623 }
6624
6625 function decodeUnsafe (string) {
6626 if (string.length === 0) return Buffer.allocUnsafe(0)
6627
6628 var bytes = [0]
6629 for (var i = 0; i < string.length; i++) {
6630 var value = ALPHABET_MAP[string[i]]
6631 if (value === undefined) return
6632
6633 for (var j = 0, carry = value; j < bytes.length; ++j) {
6634 carry += bytes[j] * BASE
6635 bytes[j] = carry & 0xff
6636 carry >>= 8
6637 }
6638
6639 while (carry > 0) {
6640 bytes.push(carry & 0xff)
6641 carry >>= 8
6642 }
6643 }
6644
6645 // deal with leading zeros
6646 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
6647 bytes.push(0)
6648 }
6649
6650 return Buffer.from(bytes.reverse())
6651 }
6652
6653 function decode (string) {
6654 var buffer = decodeUnsafe(string)
6655 if (buffer) return buffer
6656
6657 throw new Error('Non-base' + BASE + ' character')
6658 }
6659
6660 return {
6661 encode: encode,
6662 decodeUnsafe: decodeUnsafe,
6663 decode: decode
6664 }
6665}
6666
6667},{"safe-buffer":6}],6:[function(require,module,exports){
6668module.exports = require('buffer')
6669
6670},{"buffer":2}]},{},[4])(4)
6671});</script>
6e0f24b1
IC
6672 <script>(function (root) {
6673 "use strict";
6674
6675/***** unorm.js *****/
6676
6677/*
6678 * UnicodeNormalizer 1.0.0
6679 * Copyright (c) 2008 Matsuza
6680 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
6681 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
6682 * $Rev: 13309 $
6683 */
6684
6685 var DEFAULT_FEATURE = [null, 0, {}];
6686 var CACHE_THRESHOLD = 10;
6687 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
6688 var NCount = VCount * TCount; // 588
6689 var SCount = LCount * NCount; // 11172
6690
6691 var UChar = function(cp, feature){
6692 this.codepoint = cp;
6693 this.feature = feature;
6694 };
6695
6696 // Strategies
6697 var cache = {};
6698 var cacheCounter = [];
6699 for (var i = 0; i <= 0xFF; ++i){
6700 cacheCounter[i] = 0;
6701 }
6702
6703 function fromCache(next, cp, needFeature){
6704 var ret = cache[cp];
6705 if(!ret){
6706 ret = next(cp, needFeature);
6707 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
6708 cache[cp] = ret;
6709 }
6710 }
6711 return ret;
6712 }
6713
6714 function fromData(next, cp, needFeature){
6715 var hash = cp & 0xFF00;
6716 var dunit = UChar.udata[hash] || {};
6717 var f = dunit[cp];
6718 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
6719 }
6720 function fromCpOnly(next, cp, needFeature){
6721 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
6722 }
6723 function fromRuleBasedJamo(next, cp, needFeature){
6724 var j;
6725 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
6726 return next(cp, needFeature);
6727 }
6728 if(LBase <= cp && cp < LBase + LCount){
6729 var c = {};
6730 var base = (cp - LBase) * VCount;
6731 for (j = 0; j < VCount; ++j){
6732 c[VBase + j] = SBase + TCount * (j + base);
6733 }
6734 return new UChar(cp, [,,c]);
6735 }
6736
6737 var SIndex = cp - SBase;
6738 var TIndex = SIndex % TCount;
6739 var feature = [];
6740 if(TIndex !== 0){
6741 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
6742 } else {
6743 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
6744 feature[2] = {};
6745 for (j = 1; j < TCount; ++j){
6746 feature[2][TBase + j] = cp + j;
6747 }
6748 }
6749 return new UChar(cp, feature);
6750 }
6751 function fromCpFilter(next, cp, needFeature){
6752 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
6753 }
6754
6755 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
6756
6757 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
6758 return function (cp, needFeature) {
6759 return strategy(next, cp, needFeature);
6760 };
6761 }, null);
6762
6763 UChar.isHighSurrogate = function(cp){
6764 return cp >= 0xD800 && cp <= 0xDBFF;
6765 };
6766 UChar.isLowSurrogate = function(cp){
6767 return cp >= 0xDC00 && cp <= 0xDFFF;
6768 };
6769
6770 UChar.prototype.prepFeature = function(){
6771 if(!this.feature){
6772 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
6773 }
6774 };
6775
6776 UChar.prototype.toString = function(){
6777 if(this.codepoint < 0x10000){
6778 return String.fromCharCode(this.codepoint);
6779 } else {
6780 var x = this.codepoint - 0x10000;
6781 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
6782 }
6783 };
6784
6785 UChar.prototype.getDecomp = function(){
6786 this.prepFeature();
6787 return this.feature[0] || null;
6788 };
6789
6790 UChar.prototype.isCompatibility = function(){
6791 this.prepFeature();
6792 return !!this.feature[1] && (this.feature[1] & (1 << 8));
6793 };
6794 UChar.prototype.isExclude = function(){
6795 this.prepFeature();
6796 return !!this.feature[1] && (this.feature[1] & (1 << 9));
6797 };
6798 UChar.prototype.getCanonicalClass = function(){
6799 this.prepFeature();
6800 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
6801 };
6802 UChar.prototype.getComposite = function(following){
6803 this.prepFeature();
6804 if(!this.feature[2]){
6805 return null;
6806 }
6807 var cp = this.feature[2][following.codepoint];
6808 return cp ? UChar.fromCharCode(cp) : null;
6809 };
6810
6811 var UCharIterator = function(str){
6812 this.str = str;
6813 this.cursor = 0;
6814 };
6815 UCharIterator.prototype.next = function(){
6816 if(!!this.str && this.cursor < this.str.length){
6817 var cp = this.str.charCodeAt(this.cursor++);
6818 var d;
6819 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
6820 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
6821 ++this.cursor;
6822 }
6823 return UChar.fromCharCode(cp);
6824 } else {
6825 this.str = null;
6826 return null;
6827 }
6828 };
6829
6830 var RecursDecompIterator = function(it, cano){
6831 this.it = it;
6832 this.canonical = cano;
6833 this.resBuf = [];
6834 };
6835
6836 RecursDecompIterator.prototype.next = function(){
6837 function recursiveDecomp(cano, uchar){
6838 var decomp = uchar.getDecomp();
6839 if(!!decomp && !(cano && uchar.isCompatibility())){
6840 var ret = [];
6841 for(var i = 0; i < decomp.length; ++i){
6842 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
6843 ret = ret.concat(a);
6844 }
6845 return ret;
6846 } else {
6847 return [uchar];
6848 }
6849 }
6850 if(this.resBuf.length === 0){
6851 var uchar = this.it.next();
6852 if(!uchar){
6853 return null;
6854 }
6855 this.resBuf = recursiveDecomp(this.canonical, uchar);
6856 }
6857 return this.resBuf.shift();
6858 };
6859
6860 var DecompIterator = function(it){
6861 this.it = it;
6862 this.resBuf = [];
6863 };
6864
6865 DecompIterator.prototype.next = function(){
6866 var cc;
6867 if(this.resBuf.length === 0){
6868 do{
6869 var uchar = this.it.next();
6870 if(!uchar){
6871 break;
6872 }
6873 cc = uchar.getCanonicalClass();
6874 var inspt = this.resBuf.length;
6875 if(cc !== 0){
6876 for(; inspt > 0; --inspt){
6877 var uchar2 = this.resBuf[inspt - 1];
6878 var cc2 = uchar2.getCanonicalClass();
6879 if(cc2 <= cc){
6880 break;
6881 }
6882 }
6883 }
6884 this.resBuf.splice(inspt, 0, uchar);
6885 } while(cc !== 0);
6886 }
6887 return this.resBuf.shift();
6888 };
6889
6890 var CompIterator = function(it){
6891 this.it = it;
6892 this.procBuf = [];
6893 this.resBuf = [];
6894 this.lastClass = null;
6895 };
6896
6897 CompIterator.prototype.next = function(){
6898 while(this.resBuf.length === 0){
6899 var uchar = this.it.next();
6900 if(!uchar){
6901 this.resBuf = this.procBuf;
6902 this.procBuf = [];
6903 break;
6904 }
6905 if(this.procBuf.length === 0){
6906 this.lastClass = uchar.getCanonicalClass();
6907 this.procBuf.push(uchar);
6908 } else {
6909 var starter = this.procBuf[0];
6910 var composite = starter.getComposite(uchar);
6911 var cc = uchar.getCanonicalClass();
6912 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
6913 this.procBuf[0] = composite;
6914 } else {
6915 if(cc === 0){
6916 this.resBuf = this.procBuf;
6917 this.procBuf = [];
6918 }
6919 this.lastClass = cc;
6920 this.procBuf.push(uchar);
6921 }
6922 }
6923 }
6924 return this.resBuf.shift();
6925 };
6926
6927 var createIterator = function(mode, str){
6928 switch(mode){
6929 case "NFD":
6930 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
6931 case "NFKD":
6932 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
6933 case "NFC":
6934 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
6935 case "NFKC":
6936 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
6937 }
6938 throw mode + " is invalid";
6939 };
6940 var normalize = function(mode, str){
6941 var it = createIterator(mode, str);
6942 var ret = "";
6943 var uchar;
6944 while(!!(uchar = it.next())){
6945 ret += uchar.toString();
6946 }
6947 return ret;
6948 };
6949
6950 /* API functions */
6951 function nfd(str){
6952 return normalize("NFD", str);
6953 }
6954
6955 function nfkd(str){
6956 return normalize("NFKD", str);
6957 }
6958
6959 function nfc(str){
6960 return normalize("NFC", str);
6961 }
6962
6963 function nfkc(str){
6964 return normalize("NFKC", str);
6965 }
6966
6967/* Unicode data */
6968UChar.udata={
69690:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]},
6970256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]},
6971512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]},
6972768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]},
69731024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]},
69741280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]},
69751536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]},
69761792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]},
69772048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]},
69782304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]},
69792560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]},
69802816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]},
69813072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]},
69823328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]},
69833584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]},
69843840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]},
69854096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]},
69864352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]},
69874608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
69884864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]},
69895120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
69905376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
69915632:{71231:[,9],71350:[,9],71351:[,7]},
69925888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
69936144:{6313:[,228]},
69946400:{6457:[,222],6458:[,230],6459:[,220]},
69956656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]},
69966912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]},
69977168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]},
69987424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]},
69997680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]},
70007936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]},
70018192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]},
70028448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]},
70038704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]},
70048960:{9001:[[12296]],9002:[[12297]]},
70059216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]},
700610752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
700711264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
700811520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]},
700911776:{11935:[[27597],256],12019:[[40863],256]},
701012032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]},
701112288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]},
701212544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]},
701312800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]},
701413056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]},
701527136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
701627392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
701742496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]},
701842752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
701943008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]},
702043264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
702143520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
702243776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
702348128:{113822:[,1]},
702453504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]},
702553760:{119362:[,230],119363:[,230],119364:[,230]},
702654272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]},
702754528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]},
702854784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]},
702955040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]},
703059392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
703160928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]},
703261696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]},
703361952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]},
703463488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]},
703563744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]},
703664000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]},
703764256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]},
703864512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]},
703964768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]},
704065024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]},
704165280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]}
7042
7043};
7044
7045 /***** Module to export */
7046 var unorm = {
7047 nfc: nfc,
7048 nfd: nfd,
7049 nfkc: nfkc,
7050 nfkd: nfkd
7051 };
7052
7053 /*globals module:true,define:true*/
7054
7055 // CommonJS
7056 if (typeof module === "object") {
7057 module.exports = unorm;
7058
7059 // AMD
7060 } else if (typeof define === "function" && define.amd) {
7061 define("unorm", function () {
7062 return unorm;
7063 });
7064
7065 // Global
7066 } else {
7067 root.unorm = unorm;
7068 }
7069
7070 /***** Export as shim for String::normalize method *****/
7071 /*
7072 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
7073
7074 21.1.3.12 String.prototype.normalize(form="NFC")
7075 When the normalize method is called with one argument form, the following steps are taken:
7076
7077 1. Let O be CheckObjectCoercible(this value).
7078 2. Let S be ToString(O).
7079 3. ReturnIfAbrupt(S).
7080 4. If form is not provided or undefined let form be "NFC".
7081 5. Let f be ToString(form).
7082 6. ReturnIfAbrupt(f).
7083 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
7084 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms.
7085 9. Return ns.
7086
7087 The length property of the normalize method is 0.
7088
7089 *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.
7090 */
7091 unorm.shimApplied = false;
7092
7093 if (!String.prototype.normalize) {
7094 String.prototype.normalize = function(form) {
7095 var str = "" + this;
7096 form = form === undefined ? "NFC" : form;
7097
7098 if (form === "NFC") {
7099 return unorm.nfc(str);
7100 } else if (form === "NFD") {
7101 return unorm.nfd(str);
7102 } else if (form === "NFKC") {
7103 return unorm.nfkc(str);
7104 } else if (form === "NFKD") {
7105 return unorm.nfkd(str);
7106 } else {
7107 throw new RangeError("Invalid normalization form: " + form);
7108 }
7109 };
7110
7111 unorm.shimApplied = true;
7112 }
7113}(this));
8b095871
IC
7114</script>
7115 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
7116!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)
7117},_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))
7118},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});
7119</script>
7120 <script>/*!
7121 * Bootstrap v3.2.0 (http://getbootstrap.com)
7122 * Copyright 2011-2014 Twitter, Inc.
7123 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7124 */
7125if("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>
7126 <script>(function() {
7127 'use strict';
7128
7129 /**
7130 * Extend an Object with another Object's properties.
7131 *
7132 * The source objects are specified as additional arguments.
7133 *
7134 * @param dst Object the object to extend.
7135 *
7136 * @return Object the final object.
7137 */
7138 var _extend = function(dst) {
7139 var sources = Array.prototype.slice.call(arguments, 1);
7140 for (var i=0; i<sources.length; ++i) {
7141 var src = sources[i];
7142 for (var p in src) {
7143 if (src.hasOwnProperty(p)) dst[p] = src[p];
7144 }
7145 }
7146 return dst;
7147 };
7148
7149
7150 /**
7151 * Defer execution of given function.
7152 * @param {Function} func
7153 */
7154 var _defer = function(func) {
7155 if (typeof setImmediate === 'function') {
7156 return setImmediate(func);
7157 } else {
7158 return setTimeout(func, 0);
7159 }
7160 };
7161
7162 /**
7163 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
7164 */
7165 var Levenshtein = {
7166 /**
7167 * Calculate levenshtein distance of the two strings.
7168 *
7169 * @param str1 String the first string.
7170 * @param str2 String the second string.
7171 * @return Integer the levenshtein distance (0 and above).
7172 */
7173 get: function(str1, str2) {
7174 // base cases
7175 if (str1 === str2) return 0;
7176 if (str1.length === 0) return str2.length;
7177 if (str2.length === 0) return str1.length;
7178
7179 // two rows
7180 var prevRow = new Array(str2.length + 1),
7181 curCol, nextCol, i, j, tmp;
7182
7183 // initialise previous row
7184 for (i=0; i<prevRow.length; ++i) {
7185 prevRow[i] = i;
7186 }
7187
7188 // calculate current row distance from previous row
7189 for (i=0; i<str1.length; ++i) {
7190 nextCol = i + 1;
7191
7192 for (j=0; j<str2.length; ++j) {
7193 curCol = nextCol;
7194
7195 // substution
7196 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7197 // insertion
7198 tmp = curCol + 1;
7199 if (nextCol > tmp) {
7200 nextCol = tmp;
7201 }
7202 // deletion
7203 tmp = prevRow[j + 1] + 1;
7204 if (nextCol > tmp) {
7205 nextCol = tmp;
7206 }
7207
7208 // copy current col value into previous (in preparation for next iteration)
7209 prevRow[j] = curCol;
7210 }
7211
7212 // copy last col value into previous (in preparation for next iteration)
7213 prevRow[j] = nextCol;
7214 }
7215
7216 return nextCol;
7217 },
7218
7219 /**
7220 * Asynchronously calculate levenshtein distance of the two strings.
7221 *
7222 * @param str1 String the first string.
7223 * @param str2 String the second string.
7224 * @param cb Function callback function with signature: function(Error err, int distance)
7225 * @param [options] Object additional options.
7226 * @param [options.progress] Function progress callback with signature: function(percentComplete)
7227 */
7228 getAsync: function(str1, str2, cb, options) {
7229 options = _extend({}, {
7230 progress: null
7231 }, options);
7232
7233 // base cases
7234 if (str1 === str2) return cb(null, 0);
7235 if (str1.length === 0) return cb(null, str2.length);
7236 if (str2.length === 0) return cb(null, str1.length);
7237
7238 // two rows
7239 var prevRow = new Array(str2.length + 1),
7240 curCol, nextCol,
7241 i, j, tmp,
7242 startTime, currentTime;
7243
7244 // initialise previous row
7245 for (i=0; i<prevRow.length; ++i) {
7246 prevRow[i] = i;
7247 }
7248
7249 nextCol = 1;
7250 i = 0;
7251 j = -1;
7252
7253 var __calculate = function() {
7254 // reset timer
7255 startTime = new Date().valueOf();
7256 currentTime = startTime;
7257
7258 // keep going until one second has elapsed
7259 while (currentTime - startTime < 1000) {
7260 // reached end of current row?
7261 if (str2.length <= (++j)) {
7262 // copy current into previous (in preparation for next iteration)
7263 prevRow[j] = nextCol;
7264
7265 // if already done all chars
7266 if (str1.length <= (++i)) {
7267 return cb(null, nextCol);
7268 }
7269 // else if we have more left to do
7270 else {
7271 nextCol = i + 1;
7272 j = 0;
7273 }
7274 }
7275
7276 // calculation
7277 curCol = nextCol;
7278
7279 // substution
7280 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7281 // insertion
7282 tmp = curCol + 1;
7283 if (nextCol > tmp) {
7284 nextCol = tmp;
7285 }
7286 // deletion
7287 tmp = prevRow[j + 1] + 1;
7288 if (nextCol > tmp) {
7289 nextCol = tmp;
7290 }
7291
7292 // copy current into previous (in preparation for next iteration)
7293 prevRow[j] = curCol;
7294
7295 // get current time
7296 currentTime = new Date().valueOf();
7297 }
7298
7299 // send a progress update?
7300 if (null !== options.progress) {
7301 try {
7302 options.progress.call(null, (i * 100.0/ str1.length));
7303 } catch (err) {
7304 return cb('Progress callback: ' + err.toString());
7305 }
7306 }
7307
7308 // next iteration
7309 _defer(__calculate);
7310 };
7311
7312 __calculate();
7313 }
7314
7315 };
7316
7317 // amd
7318 if (typeof define !== "undefined" && define !== null && define.amd) {
7319 define(function() {
7320 return Levenshtein;
7321 });
7322 }
7323 // commonjs
7324 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
7325 module.exports = Levenshtein;
7326 }
7327 // web worker
7328 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
7329 self.Levenshtein = Levenshtein;
7330 }
7331 // browser main thread
7332 else if (typeof window !== "undefined" && window !== null) {
7333 window.Levenshtein = Levenshtein;
7334 }
7335}());
7336
7337</script>
7338 <script>(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;d<a.length&&0==a[d];)d++;this.num=Array(a.length-d+c);for(var b=0;b<a.length-d;b++)this.num[b]=a[b+d]}function p(a,c){this.totalCount=a;this.dataCount=c}function t(){this.buffer=[];this.length=0}u.prototype={getLength:function(){return this.data.length},
7339write:function(a){for(var c=0;c<this.data.length;c++)a.put(this.data.charCodeAt(c),8)}};o.prototype={addData:function(a){this.dataList.push(new u(a));this.dataCache=null},isDark:function(a,c){if(0>a||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e<c.length;e++)b+=c[e].dataCount;
7340for(e=0;e<this.dataList.length;e++)c=this.dataList[e],d.put(c.mode,4),d.put(c.getLength(),j.getLengthInBits(c.mode,a)),c.write(d);if(d.getLengthInBits()<=8*b)break}this.typeNumber=a}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17;this.modules=Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=Array(this.moduleCount);for(var b=0;b<this.moduleCount;b++)this.modules[d][b]=null}this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-
73417,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(a,c);7<=this.typeNumber&&this.setupTypeNumber(a);null==this.dataCache&&(this.dataCache=o.createData(this.typeNumber,this.errorCorrectLevel,this.dataList));this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,c){for(var d=-1;7>=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
73420<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c<this.modules.length;c++)for(var d=1*c,b=0;b<this.modules[c].length;b++){var e=1*b;this.modules[c][b]&&(a.beginFill(0,100),a.moveTo(e,d),a.lineTo(e+1,d),a.lineTo(e+1,d+1),a.lineTo(e,d+1),a.endFill())}return a},
7343setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(a=8;a<this.moduleCount-8;a++)null==this.modules[6][a]&&(this.modules[6][a]=0==a%2)},setupPositionAdjustPattern:function(){for(var a=j.getPatternPosition(this.typeNumber),c=0;c<a.length;c++)for(var d=0;d<a.length;d++){var b=a[c],e=a[d];if(null==this.modules[b][e])for(var f=-2;2>=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
7344j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
7345b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0<i;i-=2)for(6==i&&i--;;){for(var g=0;2>g;g++)if(null==this.modules[b][i-g]){var n=!1;f<a.length&&(n=1==(a[f]>>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
7346c),b=new t,e=0;e<d.length;e++){var f=d[e];b.put(f.mode,4);b.put(f.getLength(),j.getLengthInBits(f.mode,a));f.write(b)}for(e=a=0;e<c.length;e++)a+=c[e].dataCount;if(b.getLengthInBits()>8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
73470,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g<c.length;g++){var n=c[g].dataCount,h=c[g].totalCount-n,b=Math.max(b,n),e=Math.max(e,h);f[g]=Array(n);for(var k=0;k<f[g].length;k++)f[g][k]=255&a.buffer[k+d];d+=n;k=j.getErrorCorrectPolynomial(h);n=(new q(f[g],k.getLength()-1)).mod(k);i[g]=Array(k.getLength()-1);for(k=0;k<i[g].length;k++)h=k+n.getLength()-i[g].length,i[g][k]=0<=h?n.get(h):0}for(k=g=0;k<c.length;k++)g+=c[k].totalCount;d=Array(g);for(k=n=0;k<b;k++)for(g=0;g<c.length;g++)k<f[g].length&&
7348(d[n++]=f[g][k]);for(k=0;k<e;k++)for(g=0;g<c.length;g++)k<i[g].length&&(d[n++]=i[g][k]);return d};s=4;for(var j={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,
734978,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var c=a<<10;0<=j.getBCHDigit(c)-j.getBCHDigit(j.G15);)c^=j.G15<<j.getBCHDigit(c)-j.getBCHDigit(j.G15);return(a<<10|c)^j.G15_MASK},getBCHTypeNumber:function(a){for(var c=a<<12;0<=j.getBCHDigit(c)-
7350j.getBCHDigit(j.G18);)c^=j.G18<<j.getBCHDigit(c)-j.getBCHDigit(j.G18);return a<<12|c},getBCHDigit:function(a){for(var c=0;0!=a;)c++,a>>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
7351a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;d<a;d++)c=c.multiply(new q([1,l.gexp(d)],0));return c},getLengthInBits:function(a,c){if(1<=c&&10>c)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
7352a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b<c;b++)for(var e=0;e<c;e++){for(var f=0,i=a.isDark(b,e),g=-1;1>=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5<f&&(d+=3+f-5)}for(b=0;b<c-1;b++)for(e=0;e<c-1;e++)if(f=0,a.isDark(b,e)&&f++,a.isDark(b+1,e)&&f++,a.isDark(b,e+1)&&f++,a.isDark(b+1,e+1)&&f++,0==f||4==f)d+=3;for(b=0;b<c;b++)for(e=0;e<c-6;e++)a.isDark(b,e)&&!a.isDark(b,e+1)&&a.isDark(b,e+
73532)&&a.isDark(b,e+3)&&a.isDark(b,e+4)&&!a.isDark(b,e+5)&&a.isDark(b,e+6)&&(d+=40);for(e=0;e<c;e++)for(b=0;b<c-6;b++)a.isDark(b,e)&&!a.isDark(b+1,e)&&a.isDark(b+2,e)&&a.isDark(b+3,e)&&a.isDark(b+4,e)&&!a.isDark(b+5,e)&&a.isDark(b+6,e)&&(d+=40);for(e=f=0;e<c;e++)for(b=0;b<c;b++)a.isDark(b,e)&&f++;a=Math.abs(100*f/c/c-50)/5;return d+10*a}},l={glog:function(a){if(1>a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
7354LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<<m;for(m=8;256>m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d<this.getLength();d++)for(var b=0;b<a.getLength();b++)c[d+b]^=l.gexp(l.glog(this.get(d))+l.glog(a.get(b)));return new q(c,0)},mod:function(a){if(0>
7355this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b<this.getLength();b++)d[b]=this.get(b);for(b=0;b<a.getLength();b++)d[b]^=l.gexp(l.glog(a.get(b))+c);return(new q(d,0)).mod(a)}};p.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],
7356[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,
7357116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,
735843,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,
73593,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,
736055,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,
736145,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];p.getRSBlocks=function(a,c){var d=p.getRsBlockTable(a,c);if(void 0==d)throw Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+c);for(var b=d.length/3,e=[],f=0;f<b;f++)for(var h=d[3*f+0],g=d[3*f+1],j=d[3*f+2],l=0;l<h;l++)e.push(new p(g,j));return e};p.getRsBlockTable=function(a,c){switch(c){case 1:return p.RS_BLOCK_TABLE[4*(a-1)+0];case 0:return p.RS_BLOCK_TABLE[4*(a-1)+1];case 3:return p.RS_BLOCK_TABLE[4*
7362(a-1)+2];case 2:return p.RS_BLOCK_TABLE[4*(a-1)+3]}};t.prototype={get:function(a){return 1==(this.buffer[Math.floor(a/8)]>>>7-a%8&1)},put:function(a,c){for(var d=0;d<c;d++)this.putBit(1==(a>>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1,
861750ae 7363correctLevel:3,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)for(var i=0;i<a.getModuleCount();i++){d.fillStyle=a.isDark(f,i)?h.foreground:h.background;var g=Math.ceil((i+1)*b)-Math.floor(i*b),
8b095871
IC
7364j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)}}else{a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();c=r("<table></table>").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e<a.getModuleCount();e++){f=r("<tr></tr>").css("height",b+"px").appendTo(c);for(i=0;i<a.getModuleCount();i++)r("<td></td>").css("width",
7365d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;$(a).appendTo(this)})}})($);
7366</script>
9987f0c1
IC
7367 <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.bitcoinjs = 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){
7368(function (global){
7369'use strict';
8b095871 7370
9987f0c1
IC
7371// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
7372// original notice:
8b095871 7373
9987f0c1
IC
7374/*!
7375 * The buffer module from node.js, for the browser.
7376 *
7377 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7378 * @license MIT
7379 */
7380function compare(a, b) {
7381 if (a === b) {
7382 return 0;
7383 }
8b095871 7384
9987f0c1
IC
7385 var x = a.length;
7386 var y = b.length;
8b095871 7387
9987f0c1
IC
7388 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
7389 if (a[i] !== b[i]) {
7390 x = a[i];
7391 y = b[i];
7392 break;
7393 }
7394 }
8b095871 7395
9987f0c1
IC
7396 if (x < y) {
7397 return -1;
8b095871 7398 }
9987f0c1
IC
7399 if (y < x) {
7400 return 1;
8b095871 7401 }
9987f0c1 7402 return 0;
8b095871 7403}
9987f0c1
IC
7404function isBuffer(b) {
7405 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
7406 return global.Buffer.isBuffer(b);
8b095871 7407 }
9987f0c1 7408 return !!(b != null && b._isBuffer);
8b095871
IC
7409}
7410
9987f0c1 7411// based on node assert, original notice:
8b095871 7412
9987f0c1
IC
7413// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
7414//
7415// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
7416//
7417// Originally from narwhal.js (http://narwhaljs.org)
7418// Copyright (c) 2009 Thomas Robinson <280north.com>
7419//
7420// Permission is hereby granted, free of charge, to any person obtaining a copy
7421// of this software and associated documentation files (the 'Software'), to
7422// deal in the Software without restriction, including without limitation the
7423// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7424// sell copies of the Software, and to permit persons to whom the Software is
7425// furnished to do so, subject to the following conditions:
7426//
7427// The above copyright notice and this permission notice shall be included in
7428// all copies or substantial portions of the Software.
7429//
7430// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
7431// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7432// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7433// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
7434// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
7435// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 7436
9987f0c1
IC
7437var util = require('util/');
7438var hasOwn = Object.prototype.hasOwnProperty;
7439var pSlice = Array.prototype.slice;
7440var functionsHaveNames = (function () {
7441 return function foo() {}.name === 'foo';
7442}());
7443function pToString (obj) {
7444 return Object.prototype.toString.call(obj);
8b095871 7445}
9987f0c1
IC
7446function isView(arrbuf) {
7447 if (isBuffer(arrbuf)) {
7448 return false;
7449 }
7450 if (typeof global.ArrayBuffer !== 'function') {
7451 return false;
7452 }
7453 if (typeof ArrayBuffer.isView === 'function') {
7454 return ArrayBuffer.isView(arrbuf);
7455 }
7456 if (!arrbuf) {
7457 return false;
7458 }
7459 if (arrbuf instanceof DataView) {
7460 return true;
7461 }
7462 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
7463 return true;
7464 }
7465 return false;
8b095871 7466}
9987f0c1
IC
7467// 1. The assert module provides functions that throw
7468// AssertionError's when particular conditions are not met. The
7469// assert module must conform to the following interface.
8b095871 7470
9987f0c1 7471var assert = module.exports = ok;
8b095871 7472
9987f0c1
IC
7473// 2. The AssertionError is defined in assert.
7474// new assert.AssertionError({ message: message,
7475// actual: actual,
7476// expected: expected })
8b095871 7477
9987f0c1
IC
7478var regex = /\s*function\s+([^\(\s]*)\s*/;
7479// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
7480function getName(func) {
7481 if (!util.isFunction(func)) {
7482 return;
7483 }
7484 if (functionsHaveNames) {
7485 return func.name;
7486 }
7487 var str = func.toString();
7488 var match = str.match(regex);
7489 return match && match[1];
8b095871 7490}
9987f0c1
IC
7491assert.AssertionError = function AssertionError(options) {
7492 this.name = 'AssertionError';
7493 this.actual = options.actual;
7494 this.expected = options.expected;
7495 this.operator = options.operator;
7496 if (options.message) {
7497 this.message = options.message;
7498 this.generatedMessage = false;
7499 } else {
7500 this.message = getMessage(this);
7501 this.generatedMessage = true;
7502 }
7503 var stackStartFunction = options.stackStartFunction || fail;
7504 if (Error.captureStackTrace) {
7505 Error.captureStackTrace(this, stackStartFunction);
7506 } else {
7507 // non v8 browsers so we can have a stacktrace
7508 var err = new Error();
7509 if (err.stack) {
7510 var out = err.stack;
8b095871 7511
9987f0c1
IC
7512 // try to strip useless frames
7513 var fn_name = getName(stackStartFunction);
7514 var idx = out.indexOf('\n' + fn_name);
7515 if (idx >= 0) {
7516 // once we have located the function frame
7517 // we need to strip out everything before it (and its line)
7518 var next_line = out.indexOf('\n', idx + 1);
7519 out = out.substring(next_line + 1);
7520 }
8b095871 7521
9987f0c1 7522 this.stack = out;
8b095871 7523 }
8b095871 7524 }
9987f0c1 7525};
8b095871 7526
9987f0c1
IC
7527// assert.AssertionError instanceof Error
7528util.inherits(assert.AssertionError, Error);
8b095871 7529
9987f0c1
IC
7530function truncate(s, n) {
7531 if (typeof s === 'string') {
7532 return s.length < n ? s : s.slice(0, n);
7533 } else {
7534 return s;
8b095871 7535 }
8b095871 7536}
9987f0c1
IC
7537function inspect(something) {
7538 if (functionsHaveNames || !util.isFunction(something)) {
7539 return util.inspect(something);
7540 }
7541 var rawname = getName(something);
7542 var name = rawname ? ': ' + rawname : '';
7543 return '[Function' + name + ']';
8b095871 7544}
9987f0c1
IC
7545function getMessage(self) {
7546 return truncate(inspect(self.actual), 128) + ' ' +
7547 self.operator + ' ' +
7548 truncate(inspect(self.expected), 128);
8b095871
IC
7549}
7550
9987f0c1
IC
7551// At present only the three keys mentioned above are used and
7552// understood by the spec. Implementations or sub modules can pass
7553// other keys to the AssertionError's constructor - they will be
7554// ignored.
3af2954a 7555
9987f0c1
IC
7556// 3. All of the following functions must throw an AssertionError
7557// when a corresponding condition is not met, with a message that
7558// may be undefined if not provided. All assertion methods provide
7559// both the actual and expected values to the assertion error for
7560// display purposes.
8b095871 7561
9987f0c1
IC
7562function fail(actual, expected, message, operator, stackStartFunction) {
7563 throw new assert.AssertionError({
7564 message: message,
7565 actual: actual,
7566 expected: expected,
7567 operator: operator,
7568 stackStartFunction: stackStartFunction
7569 });
8b095871
IC
7570}
7571
9987f0c1
IC
7572// EXTENSION! allows for well behaved errors defined elsewhere.
7573assert.fail = fail;
8b095871 7574
9987f0c1
IC
7575// 4. Pure assertion tests whether a value is truthy, as determined
7576// by !!guard.
7577// assert.ok(guard, message_opt);
7578// This statement is equivalent to assert.equal(true, !!guard,
7579// message_opt);. To test strictly for the value true, use
7580// assert.strictEqual(true, guard, message_opt);.
8b095871 7581
9987f0c1
IC
7582function ok(value, message) {
7583 if (!value) fail(value, true, message, '==', assert.ok);
8b095871 7584}
9987f0c1 7585assert.ok = ok;
8b095871 7586
9987f0c1
IC
7587// 5. The equality assertion tests shallow, coercive equality with
7588// ==.
7589// assert.equal(actual, expected, message_opt);
7590
7591assert.equal = function equal(actual, expected, message) {
7592 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
7593};
7594
7595// 6. The non-equality assertion tests for whether two objects are not equal
7596// with != assert.notEqual(actual, expected, message_opt);
7597
7598assert.notEqual = function notEqual(actual, expected, message) {
7599 if (actual == expected) {
7600 fail(actual, expected, message, '!=', assert.notEqual);
8b095871 7601 }
9987f0c1 7602};
8b095871 7603
9987f0c1
IC
7604// 7. The equivalence assertion tests a deep equality relation.
7605// assert.deepEqual(actual, expected, message_opt);
7606
7607assert.deepEqual = function deepEqual(actual, expected, message) {
7608 if (!_deepEqual(actual, expected, false)) {
7609 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
8b095871 7610 }
9987f0c1
IC
7611};
7612
7613assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
7614 if (!_deepEqual(actual, expected, true)) {
7615 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
7616 }
7617};
7618
7619function _deepEqual(actual, expected, strict, memos) {
7620 // 7.1. All identical values are equivalent, as determined by ===.
7621 if (actual === expected) {
7622 return true;
7623 } else if (isBuffer(actual) && isBuffer(expected)) {
7624 return compare(actual, expected) === 0;
7625
7626 // 7.2. If the expected value is a Date object, the actual value is
7627 // equivalent if it is also a Date object that refers to the same time.
7628 } else if (util.isDate(actual) && util.isDate(expected)) {
7629 return actual.getTime() === expected.getTime();
7630
7631 // 7.3 If the expected value is a RegExp object, the actual value is
7632 // equivalent if it is also a RegExp object with the same source and
7633 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
7634 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
7635 return actual.source === expected.source &&
7636 actual.global === expected.global &&
7637 actual.multiline === expected.multiline &&
7638 actual.lastIndex === expected.lastIndex &&
7639 actual.ignoreCase === expected.ignoreCase;
7640
7641 // 7.4. Other pairs that do not both pass typeof value == 'object',
7642 // equivalence is determined by ==.
7643 } else if ((actual === null || typeof actual !== 'object') &&
7644 (expected === null || typeof expected !== 'object')) {
7645 return strict ? actual === expected : actual == expected;
7646
7647 // If both values are instances of typed arrays, wrap their underlying
7648 // ArrayBuffers in a Buffer each to increase performance
7649 // This optimization requires the arrays to have the same type as checked by
7650 // Object.prototype.toString (aka pToString). Never perform binary
7651 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
7652 // bit patterns are not identical.
7653 } else if (isView(actual) && isView(expected) &&
7654 pToString(actual) === pToString(expected) &&
7655 !(actual instanceof Float32Array ||
7656 actual instanceof Float64Array)) {
7657 return compare(new Uint8Array(actual.buffer),
7658 new Uint8Array(expected.buffer)) === 0;
7659
7660 // 7.5 For all other Object pairs, including Array objects, equivalence is
7661 // determined by having the same number of owned properties (as verified
7662 // with Object.prototype.hasOwnProperty.call), the same set of keys
7663 // (although not necessarily the same order), equivalent values for every
7664 // corresponding key, and an identical 'prototype' property. Note: this
7665 // accounts for both named and indexed properties on Arrays.
7666 } else if (isBuffer(actual) !== isBuffer(expected)) {
7667 return false;
7668 } else {
7669 memos = memos || {actual: [], expected: []};
7670
7671 var actualIndex = memos.actual.indexOf(actual);
7672 if (actualIndex !== -1) {
7673 if (actualIndex === memos.expected.indexOf(expected)) {
7674 return true;
7675 }
7676 }
7677
7678 memos.actual.push(actual);
7679 memos.expected.push(expected);
7680
7681 return objEquiv(actual, expected, strict, memos);
7682 }
7683}
7684
7685function isArguments(object) {
7686 return Object.prototype.toString.call(object) == '[object Arguments]';
7687}
7688
7689function objEquiv(a, b, strict, actualVisitedObjects) {
7690 if (a === null || a === undefined || b === null || b === undefined)
7691 return false;
7692 // if one is a primitive, the other must be same
7693 if (util.isPrimitive(a) || util.isPrimitive(b))
7694 return a === b;
7695 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
7696 return false;
7697 var aIsArgs = isArguments(a);
7698 var bIsArgs = isArguments(b);
7699 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
7700 return false;
7701 if (aIsArgs) {
7702 a = pSlice.call(a);
7703 b = pSlice.call(b);
7704 return _deepEqual(a, b, strict);
7705 }
7706 var ka = objectKeys(a);
7707 var kb = objectKeys(b);
7708 var key, i;
7709 // having the same number of owned properties (keys incorporates
7710 // hasOwnProperty)
7711 if (ka.length !== kb.length)
7712 return false;
7713 //the same set of keys (although not necessarily the same order),
7714 ka.sort();
7715 kb.sort();
7716 //~~~cheap key test
7717 for (i = ka.length - 1; i >= 0; i--) {
7718 if (ka[i] !== kb[i])
7719 return false;
7720 }
7721 //equivalent values for every corresponding key, and
7722 //~~~possibly expensive deep test
7723 for (i = ka.length - 1; i >= 0; i--) {
7724 key = ka[i];
7725 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
7726 return false;
7727 }
7728 return true;
7729}
7730
7731// 8. The non-equivalence assertion tests for any deep inequality.
7732// assert.notDeepEqual(actual, expected, message_opt);
7733
7734assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
7735 if (_deepEqual(actual, expected, false)) {
7736 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
7737 }
7738};
7739
7740assert.notDeepStrictEqual = notDeepStrictEqual;
7741function notDeepStrictEqual(actual, expected, message) {
7742 if (_deepEqual(actual, expected, true)) {
7743 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
7744 }
7745}
7746
7747
7748// 9. The strict equality assertion tests strict equality, as determined by ===.
7749// assert.strictEqual(actual, expected, message_opt);
7750
7751assert.strictEqual = function strictEqual(actual, expected, message) {
7752 if (actual !== expected) {
7753 fail(actual, expected, message, '===', assert.strictEqual);
7754 }
7755};
7756
7757// 10. The strict non-equality assertion tests for strict inequality, as
7758// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
7759
7760assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
7761 if (actual === expected) {
7762 fail(actual, expected, message, '!==', assert.notStrictEqual);
7763 }
7764};
7765
7766function expectedException(actual, expected) {
7767 if (!actual || !expected) {
7768 return false;
7769 }
7770
7771 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
7772 return expected.test(actual);
7773 }
7774
7775 try {
7776 if (actual instanceof expected) {
7777 return true;
7778 }
7779 } catch (e) {
7780 // Ignore. The instanceof check doesn't work for arrow functions.
7781 }
7782
7783 if (Error.isPrototypeOf(expected)) {
7784 return false;
7785 }
7786
7787 return expected.call({}, actual) === true;
7788}
7789
7790function _tryBlock(block) {
7791 var error;
7792 try {
7793 block();
7794 } catch (e) {
7795 error = e;
7796 }
7797 return error;
7798}
7799
7800function _throws(shouldThrow, block, expected, message) {
7801 var actual;
7802
7803 if (typeof block !== 'function') {
7804 throw new TypeError('"block" argument must be a function');
7805 }
7806
7807 if (typeof expected === 'string') {
7808 message = expected;
7809 expected = null;
7810 }
7811
7812 actual = _tryBlock(block);
7813
7814 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
7815 (message ? ' ' + message : '.');
7816
7817 if (shouldThrow && !actual) {
7818 fail(actual, expected, 'Missing expected exception' + message);
7819 }
7820
7821 var userProvidedMessage = typeof message === 'string';
7822 var isUnwantedException = !shouldThrow && util.isError(actual);
7823 var isUnexpectedException = !shouldThrow && actual && !expected;
7824
7825 if ((isUnwantedException &&
7826 userProvidedMessage &&
7827 expectedException(actual, expected)) ||
7828 isUnexpectedException) {
7829 fail(actual, expected, 'Got unwanted exception' + message);
7830 }
7831
7832 if ((shouldThrow && actual && expected &&
7833 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
7834 throw actual;
7835 }
7836}
7837
7838// 11. Expected to throw an error:
7839// assert.throws(block, Error_opt, message_opt);
7840
7841assert.throws = function(block, /*optional*/error, /*optional*/message) {
7842 _throws(true, block, error, message);
7843};
7844
7845// EXTENSION! This is annoying to write outside this module.
7846assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
7847 _throws(false, block, error, message);
7848};
7849
7850assert.ifError = function(err) { if (err) throw err; };
7851
7852var objectKeys = Object.keys || function (obj) {
7853 var keys = [];
7854 for (var key in obj) {
7855 if (hasOwn.call(obj, key)) keys.push(key);
7856 }
7857 return keys;
7858};
7859
7860}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
cf6c2044 7861},{"util/":33}],2:[function(require,module,exports){
9987f0c1
IC
7862'use strict'
7863
7864exports.byteLength = byteLength
7865exports.toByteArray = toByteArray
7866exports.fromByteArray = fromByteArray
7867
7868var lookup = []
7869var revLookup = []
7870var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
7871
7872var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
7873for (var i = 0, len = code.length; i < len; ++i) {
7874 lookup[i] = code[i]
7875 revLookup[code.charCodeAt(i)] = i
7876}
7877
7878revLookup['-'.charCodeAt(0)] = 62
7879revLookup['_'.charCodeAt(0)] = 63
7880
7881function placeHoldersCount (b64) {
7882 var len = b64.length
7883 if (len % 4 > 0) {
7884 throw new Error('Invalid string. Length must be a multiple of 4')
7885 }
7886
7887 // the number of equal signs (place holders)
7888 // if there are two placeholders, than the two characters before it
7889 // represent one byte
7890 // if there is only one, then the three characters before it represent 2 bytes
7891 // this is just a cheap hack to not do indexOf twice
7892 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
7893}
7894
7895function byteLength (b64) {
7896 // base64 is 4/3 + up to two characters of the original data
cf6c2044 7897 return b64.length * 3 / 4 - placeHoldersCount(b64)
9987f0c1
IC
7898}
7899
7900function toByteArray (b64) {
cf6c2044 7901 var i, j, l, tmp, placeHolders, arr
9987f0c1
IC
7902 var len = b64.length
7903 placeHolders = placeHoldersCount(b64)
7904
cf6c2044 7905 arr = new Arr(len * 3 / 4 - placeHolders)
9987f0c1
IC
7906
7907 // if there are placeholders, only get up to the last complete 4 chars
7908 l = placeHolders > 0 ? len - 4 : len
7909
7910 var L = 0
7911
cf6c2044 7912 for (i = 0, j = 0; i < l; i += 4, j += 3) {
9987f0c1
IC
7913 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
7914 arr[L++] = (tmp >> 16) & 0xFF
7915 arr[L++] = (tmp >> 8) & 0xFF
7916 arr[L++] = tmp & 0xFF
7917 }
7918
7919 if (placeHolders === 2) {
7920 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
7921 arr[L++] = tmp & 0xFF
7922 } else if (placeHolders === 1) {
7923 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
7924 arr[L++] = (tmp >> 8) & 0xFF
7925 arr[L++] = tmp & 0xFF
7926 }
7927
7928 return arr
7929}
7930
7931function tripletToBase64 (num) {
7932 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
7933}
7934
7935function encodeChunk (uint8, start, end) {
7936 var tmp
7937 var output = []
7938 for (var i = start; i < end; i += 3) {
7939 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
7940 output.push(tripletToBase64(tmp))
7941 }
7942 return output.join('')
7943}
7944
7945function fromByteArray (uint8) {
7946 var tmp
7947 var len = uint8.length
7948 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
7949 var output = ''
7950 var parts = []
7951 var maxChunkLength = 16383 // must be multiple of 3
7952
7953 // go through the array every three bytes, we'll deal with trailing stuff later
7954 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
7955 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
7956 }
7957
7958 // pad the end with zeros, but make sure to not forget the extra bytes
7959 if (extraBytes === 1) {
7960 tmp = uint8[len - 1]
7961 output += lookup[tmp >> 2]
7962 output += lookup[(tmp << 4) & 0x3F]
7963 output += '=='
7964 } else if (extraBytes === 2) {
7965 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
7966 output += lookup[tmp >> 10]
7967 output += lookup[(tmp >> 4) & 0x3F]
7968 output += lookup[(tmp << 2) & 0x3F]
7969 output += '='
7970 }
7971
7972 parts.push(output)
7973
7974 return parts.join('')
7975}
7976
7977},{}],3:[function(require,module,exports){
7978
7979},{}],4:[function(require,module,exports){
cf6c2044
IC
7980(function (global){
7981'use strict';
7982
7983var buffer = require('buffer');
7984var Buffer = buffer.Buffer;
7985var SlowBuffer = buffer.SlowBuffer;
7986var MAX_LEN = buffer.kMaxLength || 2147483647;
7987exports.alloc = function alloc(size, fill, encoding) {
7988 if (typeof Buffer.alloc === 'function') {
7989 return Buffer.alloc(size, fill, encoding);
7990 }
7991 if (typeof encoding === 'number') {
7992 throw new TypeError('encoding must not be number');
7993 }
7994 if (typeof size !== 'number') {
7995 throw new TypeError('size must be a number');
7996 }
7997 if (size > MAX_LEN) {
7998 throw new RangeError('size is too large');
7999 }
8000 var enc = encoding;
8001 var _fill = fill;
8002 if (_fill === undefined) {
8003 enc = undefined;
8004 _fill = 0;
8005 }
8006 var buf = new Buffer(size);
8007 if (typeof _fill === 'string') {
8008 var fillBuf = new Buffer(_fill, enc);
8009 var flen = fillBuf.length;
8010 var i = -1;
8011 while (++i < size) {
8012 buf[i] = fillBuf[i % flen];
8013 }
8014 } else {
8015 buf.fill(_fill);
8016 }
8017 return buf;
8018}
8019exports.allocUnsafe = function allocUnsafe(size) {
8020 if (typeof Buffer.allocUnsafe === 'function') {
8021 return Buffer.allocUnsafe(size);
8022 }
8023 if (typeof size !== 'number') {
8024 throw new TypeError('size must be a number');
8025 }
8026 if (size > MAX_LEN) {
8027 throw new RangeError('size is too large');
8028 }
8029 return new Buffer(size);
8030}
8031exports.from = function from(value, encodingOrOffset, length) {
8032 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
8033 return Buffer.from(value, encodingOrOffset, length);
8034 }
8035 if (typeof value === 'number') {
8036 throw new TypeError('"value" argument must not be a number');
8037 }
8038 if (typeof value === 'string') {
8039 return new Buffer(value, encodingOrOffset);
8040 }
8041 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
8042 var offset = encodingOrOffset;
8043 if (arguments.length === 1) {
8044 return new Buffer(value);
8045 }
8046 if (typeof offset === 'undefined') {
8047 offset = 0;
8048 }
8049 var len = length;
8050 if (typeof len === 'undefined') {
8051 len = value.byteLength - offset;
8052 }
8053 if (offset >= value.byteLength) {
8054 throw new RangeError('\'offset\' is out of bounds');
8055 }
8056 if (len > value.byteLength - offset) {
8057 throw new RangeError('\'length\' is out of bounds');
8058 }
8059 return new Buffer(value.slice(offset, offset + len));
8060 }
8061 if (Buffer.isBuffer(value)) {
8062 var out = new Buffer(value.length);
8063 value.copy(out, 0, 0, value.length);
8064 return out;
8065 }
8066 if (value) {
8067 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
8068 return new Buffer(value);
8069 }
8070 if (value.type === 'Buffer' && Array.isArray(value.data)) {
8071 return new Buffer(value.data);
8072 }
8073 }
8074
8075 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
8076}
8077exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
8078 if (typeof Buffer.allocUnsafeSlow === 'function') {
8079 return Buffer.allocUnsafeSlow(size);
8080 }
8081 if (typeof size !== 'number') {
8082 throw new TypeError('size must be a number');
8083 }
8084 if (size >= MAX_LEN) {
8085 throw new RangeError('size is too large');
8086 }
8087 return new SlowBuffer(size);
8088}
8089
8090}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
8091},{"buffer":5}],5:[function(require,module,exports){
9987f0c1
IC
8092/*!
8093 * The buffer module from node.js, for the browser.
8094 *
8095 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
8096 * @license MIT
8097 */
8098/* eslint-disable no-proto */
8099
8100'use strict'
8101
8102var base64 = require('base64-js')
8103var ieee754 = require('ieee754')
8104
8105exports.Buffer = Buffer
8106exports.SlowBuffer = SlowBuffer
8107exports.INSPECT_MAX_BYTES = 50
8108
8109var K_MAX_LENGTH = 0x7fffffff
8110exports.kMaxLength = K_MAX_LENGTH
8111
8112/**
8113 * If `Buffer.TYPED_ARRAY_SUPPORT`:
8114 * === true Use Uint8Array implementation (fastest)
8115 * === false Print warning and recommend using `buffer` v4.x which has an Object
8116 * implementation (most compatible, even IE6)
8117 *
8118 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
8119 * Opera 11.6+, iOS 4.2+.
8120 *
8121 * We report that the browser does not support typed arrays if the are not subclassable
8122 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
8123 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
8124 * for __proto__ and has a buggy typed array implementation.
8125 */
8126Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
8127
8128if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
8129 typeof console.error === 'function') {
8130 console.error(
8131 'This browser lacks typed array (Uint8Array) support which is required by ' +
8132 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
8133 )
8134}
8135
8136function typedArraySupport () {
8137 // Can typed array instances can be augmented?
8138 try {
8139 var arr = new Uint8Array(1)
8140 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
8141 return arr.foo() === 42
8142 } catch (e) {
8143 return false
8144 }
8145}
8146
8147function createBuffer (length) {
8148 if (length > K_MAX_LENGTH) {
8149 throw new RangeError('Invalid typed array length')
8150 }
8151 // Return an augmented `Uint8Array` instance
8152 var buf = new Uint8Array(length)
8153 buf.__proto__ = Buffer.prototype
8154 return buf
8155}
8156
8157/**
8158 * The Buffer constructor returns instances of `Uint8Array` that have their
8159 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
8160 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
8161 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
8162 * returns a single octet.
8163 *
8164 * The `Uint8Array` prototype remains unmodified.
8165 */
8166
8167function Buffer (arg, encodingOrOffset, length) {
8168 // Common case.
8169 if (typeof arg === 'number') {
8170 if (typeof encodingOrOffset === 'string') {
8171 throw new Error(
8172 'If encoding is specified then the first argument must be a string'
8173 )
8174 }
8175 return allocUnsafe(arg)
8176 }
8177 return from(arg, encodingOrOffset, length)
8178}
8179
8180// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
8181if (typeof Symbol !== 'undefined' && Symbol.species &&
8182 Buffer[Symbol.species] === Buffer) {
8183 Object.defineProperty(Buffer, Symbol.species, {
8184 value: null,
8185 configurable: true,
8186 enumerable: false,
8187 writable: false
8188 })
8189}
8190
8191Buffer.poolSize = 8192 // not used by this implementation
8192
8193function from (value, encodingOrOffset, length) {
8194 if (typeof value === 'number') {
8195 throw new TypeError('"value" argument must not be a number')
8196 }
8197
8198 if (value instanceof ArrayBuffer) {
8199 return fromArrayBuffer(value, encodingOrOffset, length)
8200 }
8201
8202 if (typeof value === 'string') {
8203 return fromString(value, encodingOrOffset)
8204 }
8205
8206 return fromObject(value)
8207}
8208
8209/**
8210 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
8211 * if value is a number.
8212 * Buffer.from(str[, encoding])
8213 * Buffer.from(array)
8214 * Buffer.from(buffer)
8215 * Buffer.from(arrayBuffer[, byteOffset[, length]])
8216 **/
8217Buffer.from = function (value, encodingOrOffset, length) {
8218 return from(value, encodingOrOffset, length)
8219}
8220
8221// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
8222// https://github.com/feross/buffer/pull/148
8223Buffer.prototype.__proto__ = Uint8Array.prototype
8224Buffer.__proto__ = Uint8Array
8225
8226function assertSize (size) {
8227 if (typeof size !== 'number') {
8228 throw new TypeError('"size" argument must be a number')
8229 } else if (size < 0) {
8230 throw new RangeError('"size" argument must not be negative')
8231 }
8232}
8233
8234function alloc (size, fill, encoding) {
8235 assertSize(size)
8236 if (size <= 0) {
8237 return createBuffer(size)
8238 }
8239 if (fill !== undefined) {
8240 // Only pay attention to encoding if it's a string. This
8241 // prevents accidentally sending in a number that would
8242 // be interpretted as a start offset.
8243 return typeof encoding === 'string'
8244 ? createBuffer(size).fill(fill, encoding)
8245 : createBuffer(size).fill(fill)
8246 }
8247 return createBuffer(size)
8248}
8249
8250/**
8251 * Creates a new filled Buffer instance.
8252 * alloc(size[, fill[, encoding]])
8253 **/
8254Buffer.alloc = function (size, fill, encoding) {
8255 return alloc(size, fill, encoding)
8256}
8257
8258function allocUnsafe (size) {
8259 assertSize(size)
8260 return createBuffer(size < 0 ? 0 : checked(size) | 0)
8261}
8262
8263/**
8264 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
8265 * */
8266Buffer.allocUnsafe = function (size) {
8267 return allocUnsafe(size)
8268}
8269/**
8270 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
8271 */
8272Buffer.allocUnsafeSlow = function (size) {
8273 return allocUnsafe(size)
8274}
8275
8276function fromString (string, encoding) {
8277 if (typeof encoding !== 'string' || encoding === '') {
8278 encoding = 'utf8'
8279 }
8280
8281 if (!Buffer.isEncoding(encoding)) {
8282 throw new TypeError('"encoding" must be a valid string encoding')
8283 }
8284
8285 var length = byteLength(string, encoding) | 0
8286 var buf = createBuffer(length)
8287
8288 var actual = buf.write(string, encoding)
8289
8290 if (actual !== length) {
8291 // Writing a hex string, for example, that contains invalid characters will
8292 // cause everything after the first invalid character to be ignored. (e.g.
8293 // 'abxxcd' will be treated as 'ab')
8294 buf = buf.slice(0, actual)
8295 }
8296
8297 return buf
8298}
8299
8300function fromArrayLike (array) {
8301 var length = array.length < 0 ? 0 : checked(array.length) | 0
8302 var buf = createBuffer(length)
8303 for (var i = 0; i < length; i += 1) {
8304 buf[i] = array[i] & 255
8305 }
8306 return buf
8307}
8308
8309function fromArrayBuffer (array, byteOffset, length) {
8310 if (byteOffset < 0 || array.byteLength < byteOffset) {
8311 throw new RangeError('\'offset\' is out of bounds')
8312 }
8313
8314 if (array.byteLength < byteOffset + (length || 0)) {
8315 throw new RangeError('\'length\' is out of bounds')
8316 }
8317
8318 var buf
8319 if (byteOffset === undefined && length === undefined) {
8320 buf = new Uint8Array(array)
8321 } else if (length === undefined) {
8322 buf = new Uint8Array(array, byteOffset)
8323 } else {
8324 buf = new Uint8Array(array, byteOffset, length)
8325 }
8326
8327 // Return an augmented `Uint8Array` instance
8328 buf.__proto__ = Buffer.prototype
8329 return buf
8330}
8331
8332function fromObject (obj) {
8333 if (Buffer.isBuffer(obj)) {
8334 var len = checked(obj.length) | 0
8335 var buf = createBuffer(len)
8336
8337 if (buf.length === 0) {
8338 return buf
8339 }
8340
8341 obj.copy(buf, 0, 0, len)
8342 return buf
8343 }
8344
8345 if (obj) {
8346 if (isArrayBufferView(obj) || 'length' in obj) {
8347 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
8348 return createBuffer(0)
8349 }
8350 return fromArrayLike(obj)
8351 }
8352
8353 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
8354 return fromArrayLike(obj.data)
8355 }
8356 }
8357
8358 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
8359}
8360
8361function checked (length) {
8362 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
8363 // length is NaN (which is otherwise coerced to zero.)
8364 if (length >= K_MAX_LENGTH) {
8365 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
8366 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
8367 }
8368 return length | 0
8369}
8370
8371function SlowBuffer (length) {
8372 if (+length != length) { // eslint-disable-line eqeqeq
8373 length = 0
8374 }
8375 return Buffer.alloc(+length)
8376}
8377
8378Buffer.isBuffer = function isBuffer (b) {
8379 return b != null && b._isBuffer === true
8380}
8381
8382Buffer.compare = function compare (a, b) {
8383 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
8384 throw new TypeError('Arguments must be Buffers')
8385 }
8386
8387 if (a === b) return 0
8388
8389 var x = a.length
8390 var y = b.length
8391
8392 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
8393 if (a[i] !== b[i]) {
8394 x = a[i]
8395 y = b[i]
8396 break
8397 }
8b095871 8398 }
9987f0c1
IC
8399
8400 if (x < y) return -1
8401 if (y < x) return 1
8402 return 0
8b095871
IC
8403}
8404
9987f0c1
IC
8405Buffer.isEncoding = function isEncoding (encoding) {
8406 switch (String(encoding).toLowerCase()) {
8407 case 'hex':
8408 case 'utf8':
8409 case 'utf-8':
8410 case 'ascii':
8411 case 'latin1':
8412 case 'binary':
8413 case 'base64':
8414 case 'ucs2':
8415 case 'ucs-2':
8416 case 'utf16le':
8417 case 'utf-16le':
8418 return true
8419 default:
8420 return false
8b095871 8421 }
9987f0c1
IC
8422}
8423
8424Buffer.concat = function concat (list, length) {
8425 if (!Array.isArray(list)) {
8426 throw new TypeError('"list" argument must be an Array of Buffers')
8427 }
8428
8429 if (list.length === 0) {
8430 return Buffer.alloc(0)
8431 }
8432
8433 var i
8434 if (length === undefined) {
8435 length = 0
8436 for (i = 0; i < list.length; ++i) {
8437 length += list[i].length
8b095871 8438 }
9987f0c1
IC
8439 }
8440
8441 var buffer = Buffer.allocUnsafe(length)
8442 var pos = 0
8443 for (i = 0; i < list.length; ++i) {
8444 var buf = list[i]
8445 if (!Buffer.isBuffer(buf)) {
8446 throw new TypeError('"list" argument must be an Array of Buffers')
8b095871 8447 }
9987f0c1
IC
8448 buf.copy(buffer, pos)
8449 pos += buf.length
8b095871 8450 }
9987f0c1 8451 return buffer
8b095871
IC
8452}
8453
9987f0c1
IC
8454function byteLength (string, encoding) {
8455 if (Buffer.isBuffer(string)) {
8456 return string.length
8457 }
8458 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
8459 return string.byteLength
8460 }
8461 if (typeof string !== 'string') {
8462 string = '' + string
8463 }
8464
8465 var len = string.length
8466 if (len === 0) return 0
8467
8468 // Use a for loop to avoid recursion
8469 var loweredCase = false
8470 for (;;) {
8471 switch (encoding) {
8472 case 'ascii':
8473 case 'latin1':
8474 case 'binary':
8475 return len
8476 case 'utf8':
8477 case 'utf-8':
8478 case undefined:
8479 return utf8ToBytes(string).length
8480 case 'ucs2':
8481 case 'ucs-2':
8482 case 'utf16le':
8483 case 'utf-16le':
8484 return len * 2
8485 case 'hex':
8486 return len >>> 1
8487 case 'base64':
8488 return base64ToBytes(string).length
8489 default:
8490 if (loweredCase) return utf8ToBytes(string).length // assume utf8
8491 encoding = ('' + encoding).toLowerCase()
8492 loweredCase = true
8493 }
8494 }
8b095871 8495}
9987f0c1 8496Buffer.byteLength = byteLength
8b095871 8497
9987f0c1
IC
8498function slowToString (encoding, start, end) {
8499 var loweredCase = false
8500
8501 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
8502 // property of a typed array.
8503
8504 // This behaves neither like String nor Uint8Array in that we set start/end
8505 // to their upper/lower bounds if the value passed is out of range.
8506 // undefined is handled specially as per ECMA-262 6th Edition,
8507 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
8508 if (start === undefined || start < 0) {
8509 start = 0
8510 }
8511 // Return early if start > this.length. Done here to prevent potential uint32
8512 // coercion fail below.
8513 if (start > this.length) {
8514 return ''
8515 }
8516
8517 if (end === undefined || end > this.length) {
8518 end = this.length
8519 }
8520
8521 if (end <= 0) {
8522 return ''
8523 }
8524
8525 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
8526 end >>>= 0
8527 start >>>= 0
8528
8529 if (end <= start) {
8530 return ''
8531 }
8532
8533 if (!encoding) encoding = 'utf8'
8534
8535 while (true) {
8536 switch (encoding) {
8537 case 'hex':
8538 return hexSlice(this, start, end)
8539
8540 case 'utf8':
8541 case 'utf-8':
8542 return utf8Slice(this, start, end)
8543
8544 case 'ascii':
8545 return asciiSlice(this, start, end)
8546
8547 case 'latin1':
8548 case 'binary':
8549 return latin1Slice(this, start, end)
8550
8551 case 'base64':
8552 return base64Slice(this, start, end)
8553
8554 case 'ucs2':
8555 case 'ucs-2':
8556 case 'utf16le':
8557 case 'utf-16le':
8558 return utf16leSlice(this, start, end)
8559
8560 default:
8561 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
8562 encoding = (encoding + '').toLowerCase()
8563 loweredCase = true
8b095871
IC
8564 }
8565 }
8b095871
IC
8566}
8567
9987f0c1
IC
8568// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
8569// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
8570// reliably in a browserify context because there could be multiple different
8571// copies of the 'buffer' package in use. This method works even for Buffer
8572// instances that were created from another copy of the `buffer` package.
8573// See: https://github.com/feross/buffer/issues/154
8574Buffer.prototype._isBuffer = true
8575
8576function swap (b, n, m) {
8577 var i = b[n]
8578 b[n] = b[m]
8579 b[m] = i
8580}
8581
8582Buffer.prototype.swap16 = function swap16 () {
8583 var len = this.length
8584 if (len % 2 !== 0) {
8585 throw new RangeError('Buffer size must be a multiple of 16-bits')
8b095871 8586 }
9987f0c1
IC
8587 for (var i = 0; i < len; i += 2) {
8588 swap(this, i, i + 1)
8b095871 8589 }
9987f0c1
IC
8590 return this
8591}
8592
8593Buffer.prototype.swap32 = function swap32 () {
8594 var len = this.length
8595 if (len % 4 !== 0) {
8596 throw new RangeError('Buffer size must be a multiple of 32-bits')
8b095871 8597 }
9987f0c1
IC
8598 for (var i = 0; i < len; i += 4) {
8599 swap(this, i, i + 3)
8600 swap(this, i + 1, i + 2)
8601 }
8602 return this
8603}
8604
8605Buffer.prototype.swap64 = function swap64 () {
8606 var len = this.length
8607 if (len % 8 !== 0) {
8608 throw new RangeError('Buffer size must be a multiple of 64-bits')
8609 }
8610 for (var i = 0; i < len; i += 8) {
8611 swap(this, i, i + 7)
8612 swap(this, i + 1, i + 6)
8613 swap(this, i + 2, i + 5)
8614 swap(this, i + 3, i + 4)
8615 }
8616 return this
8617}
8618
8619Buffer.prototype.toString = function toString () {
8620 var length = this.length
8621 if (length === 0) return ''
8622 if (arguments.length === 0) return utf8Slice(this, 0, length)
8623 return slowToString.apply(this, arguments)
8624}
8625
8626Buffer.prototype.equals = function equals (b) {
8627 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
8628 if (this === b) return true
8629 return Buffer.compare(this, b) === 0
8630}
8631
8632Buffer.prototype.inspect = function inspect () {
8633 var str = ''
8634 var max = exports.INSPECT_MAX_BYTES
8635 if (this.length > 0) {
8636 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
8637 if (this.length > max) str += ' ... '
8638 }
8639 return '<Buffer ' + str + '>'
8640}
8641
8642Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
8643 if (!Buffer.isBuffer(target)) {
8644 throw new TypeError('Argument must be a Buffer')
8645 }
8646
8647 if (start === undefined) {
8648 start = 0
8649 }
8650 if (end === undefined) {
8651 end = target ? target.length : 0
8652 }
8653 if (thisStart === undefined) {
8654 thisStart = 0
8655 }
8656 if (thisEnd === undefined) {
8657 thisEnd = this.length
8658 }
8659
8660 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
8661 throw new RangeError('out of range index')
8662 }
8663
8664 if (thisStart >= thisEnd && start >= end) {
8665 return 0
8666 }
8667 if (thisStart >= thisEnd) {
8668 return -1
8669 }
8670 if (start >= end) {
8671 return 1
8672 }
8673
8674 start >>>= 0
8675 end >>>= 0
8676 thisStart >>>= 0
8677 thisEnd >>>= 0
8678
8679 if (this === target) return 0
8680
8681 var x = thisEnd - thisStart
8682 var y = end - start
8683 var len = Math.min(x, y)
8684
8685 var thisCopy = this.slice(thisStart, thisEnd)
8686 var targetCopy = target.slice(start, end)
8687
8688 for (var i = 0; i < len; ++i) {
8689 if (thisCopy[i] !== targetCopy[i]) {
8690 x = thisCopy[i]
8691 y = targetCopy[i]
8692 break
8693 }
8694 }
8695
8696 if (x < y) return -1
8697 if (y < x) return 1
8698 return 0
8699}
8700
8701// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
8702// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
8703//
8704// Arguments:
8705// - buffer - a Buffer to search
8706// - val - a string, Buffer, or number
8707// - byteOffset - an index into `buffer`; will be clamped to an int32
8708// - encoding - an optional encoding, relevant is val is a string
8709// - dir - true for indexOf, false for lastIndexOf
8710function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
8711 // Empty buffer means no match
8712 if (buffer.length === 0) return -1
8713
8714 // Normalize byteOffset
8715 if (typeof byteOffset === 'string') {
8716 encoding = byteOffset
8717 byteOffset = 0
8718 } else if (byteOffset > 0x7fffffff) {
8719 byteOffset = 0x7fffffff
8720 } else if (byteOffset < -0x80000000) {
8721 byteOffset = -0x80000000
8722 }
8723 byteOffset = +byteOffset // Coerce to Number.
8724 if (numberIsNaN(byteOffset)) {
8725 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
8726 byteOffset = dir ? 0 : (buffer.length - 1)
8727 }
8728
8729 // Normalize byteOffset: negative offsets start from the end of the buffer
8730 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
8731 if (byteOffset >= buffer.length) {
8732 if (dir) return -1
8733 else byteOffset = buffer.length - 1
8734 } else if (byteOffset < 0) {
8735 if (dir) byteOffset = 0
8736 else return -1
8737 }
8738
8739 // Normalize val
8740 if (typeof val === 'string') {
8741 val = Buffer.from(val, encoding)
8742 }
8743
8744 // Finally, search either indexOf (if dir is true) or lastIndexOf
8745 if (Buffer.isBuffer(val)) {
8746 // Special case: looking for empty string/buffer always fails
8747 if (val.length === 0) {
8748 return -1
8749 }
8750 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
8751 } else if (typeof val === 'number') {
8752 val = val & 0xFF // Search for a byte value [0-255]
8753 if (typeof Uint8Array.prototype.indexOf === 'function') {
8754 if (dir) {
8755 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
8756 } else {
8757 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
8758 }
8759 }
8760 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
8761 }
8762
8763 throw new TypeError('val must be string, number or Buffer')
8764}
8765
8766function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
8767 var indexSize = 1
8768 var arrLength = arr.length
8769 var valLength = val.length
8770
8771 if (encoding !== undefined) {
8772 encoding = String(encoding).toLowerCase()
8773 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
8774 encoding === 'utf16le' || encoding === 'utf-16le') {
8775 if (arr.length < 2 || val.length < 2) {
8776 return -1
8777 }
8778 indexSize = 2
8779 arrLength /= 2
8780 valLength /= 2
8781 byteOffset /= 2
8782 }
8783 }
8784
8785 function read (buf, i) {
8786 if (indexSize === 1) {
8787 return buf[i]
8788 } else {
8789 return buf.readUInt16BE(i * indexSize)
8790 }
8791 }
8792
8793 var i
8794 if (dir) {
8795 var foundIndex = -1
8796 for (i = byteOffset; i < arrLength; i++) {
8797 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
8798 if (foundIndex === -1) foundIndex = i
8799 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
8800 } else {
8801 if (foundIndex !== -1) i -= i - foundIndex
8802 foundIndex = -1
8803 }
8804 }
8805 } else {
8806 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
8807 for (i = byteOffset; i >= 0; i--) {
8808 var found = true
8809 for (var j = 0; j < valLength; j++) {
8810 if (read(arr, i + j) !== read(val, j)) {
8811 found = false
8812 break
8813 }
8814 }
8815 if (found) return i
8b095871
IC
8816 }
8817 }
8b095871 8818
9987f0c1 8819 return -1
8b095871
IC
8820}
8821
9987f0c1
IC
8822Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
8823 return this.indexOf(val, byteOffset, encoding) !== -1
8b095871
IC
8824}
8825
9987f0c1
IC
8826Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
8827 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
8b095871
IC
8828}
8829
9987f0c1
IC
8830Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
8831 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
8b095871
IC
8832}
8833
9987f0c1
IC
8834function hexWrite (buf, string, offset, length) {
8835 offset = Number(offset) || 0
8836 var remaining = buf.length - offset
8837 if (!length) {
8838 length = remaining
8839 } else {
8840 length = Number(length)
8841 if (length > remaining) {
8842 length = remaining
8843 }
8844 }
8b095871 8845
9987f0c1
IC
8846 // must be an even number of digits
8847 var strLen = string.length
8848 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
8b095871 8849
9987f0c1
IC
8850 if (length > strLen / 2) {
8851 length = strLen / 2
8852 }
8853 for (var i = 0; i < length; ++i) {
8854 var parsed = parseInt(string.substr(i * 2, 2), 16)
8855 if (numberIsNaN(parsed)) return i
8856 buf[offset + i] = parsed
8857 }
8858 return i
8b095871
IC
8859}
8860
9987f0c1
IC
8861function utf8Write (buf, string, offset, length) {
8862 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
8863}
8b095871 8864
9987f0c1
IC
8865function asciiWrite (buf, string, offset, length) {
8866 return blitBuffer(asciiToBytes(string), buf, offset, length)
8b095871
IC
8867}
8868
9987f0c1
IC
8869function latin1Write (buf, string, offset, length) {
8870 return asciiWrite(buf, string, offset, length)
8b095871
IC
8871}
8872
9987f0c1
IC
8873function base64Write (buf, string, offset, length) {
8874 return blitBuffer(base64ToBytes(string), buf, offset, length)
8b095871
IC
8875}
8876
9987f0c1
IC
8877function ucs2Write (buf, string, offset, length) {
8878 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
8b095871
IC
8879}
8880
9987f0c1
IC
8881Buffer.prototype.write = function write (string, offset, length, encoding) {
8882 // Buffer#write(string)
8883 if (offset === undefined) {
8884 encoding = 'utf8'
8885 length = this.length
8886 offset = 0
8887 // Buffer#write(string, encoding)
8888 } else if (length === undefined && typeof offset === 'string') {
8889 encoding = offset
8890 length = this.length
8891 offset = 0
8892 // Buffer#write(string, offset[, length][, encoding])
8893 } else if (isFinite(offset)) {
8894 offset = offset >>> 0
8895 if (isFinite(length)) {
8896 length = length >>> 0
8897 if (encoding === undefined) encoding = 'utf8'
8898 } else {
8899 encoding = length
8900 length = undefined
8b095871 8901 }
9987f0c1
IC
8902 } else {
8903 throw new Error(
8904 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
8905 )
8b095871 8906 }
8b095871 8907
9987f0c1
IC
8908 var remaining = this.length - offset
8909 if (length === undefined || length > remaining) length = remaining
8b095871 8910
9987f0c1
IC
8911 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
8912 throw new RangeError('Attempt to write outside buffer bounds')
8913 }
8b095871 8914
9987f0c1 8915 if (!encoding) encoding = 'utf8'
8b095871 8916
9987f0c1
IC
8917 var loweredCase = false
8918 for (;;) {
8919 switch (encoding) {
8920 case 'hex':
8921 return hexWrite(this, string, offset, length)
8b095871 8922
9987f0c1
IC
8923 case 'utf8':
8924 case 'utf-8':
8925 return utf8Write(this, string, offset, length)
8b095871 8926
9987f0c1
IC
8927 case 'ascii':
8928 return asciiWrite(this, string, offset, length)
8b095871 8929
9987f0c1
IC
8930 case 'latin1':
8931 case 'binary':
8932 return latin1Write(this, string, offset, length)
8b095871 8933
9987f0c1
IC
8934 case 'base64':
8935 // Warning: maxLength not taken into account in base64Write
8936 return base64Write(this, string, offset, length)
8b095871 8937
9987f0c1
IC
8938 case 'ucs2':
8939 case 'ucs-2':
8940 case 'utf16le':
8941 case 'utf-16le':
8942 return ucs2Write(this, string, offset, length)
8b095871 8943
9987f0c1
IC
8944 default:
8945 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
8946 encoding = ('' + encoding).toLowerCase()
8947 loweredCase = true
8948 }
8949 }
8b095871
IC
8950}
8951
9987f0c1
IC
8952Buffer.prototype.toJSON = function toJSON () {
8953 return {
8954 type: 'Buffer',
8955 data: Array.prototype.slice.call(this._arr || this, 0)
8956 }
8b095871
IC
8957}
8958
9987f0c1
IC
8959function base64Slice (buf, start, end) {
8960 if (start === 0 && end === buf.length) {
8961 return base64.fromByteArray(buf)
8962 } else {
8963 return base64.fromByteArray(buf.slice(start, end))
8964 }
8b095871
IC
8965}
8966
9987f0c1
IC
8967function utf8Slice (buf, start, end) {
8968 end = Math.min(buf.length, end)
8969 var res = []
8b095871 8970
9987f0c1
IC
8971 var i = start
8972 while (i < end) {
8973 var firstByte = buf[i]
8974 var codePoint = null
8975 var bytesPerSequence = (firstByte > 0xEF) ? 4
8976 : (firstByte > 0xDF) ? 3
8977 : (firstByte > 0xBF) ? 2
8978 : 1
8b095871 8979
9987f0c1
IC
8980 if (i + bytesPerSequence <= end) {
8981 var secondByte, thirdByte, fourthByte, tempCodePoint
8b095871 8982
9987f0c1
IC
8983 switch (bytesPerSequence) {
8984 case 1:
8985 if (firstByte < 0x80) {
8986 codePoint = firstByte
8987 }
8988 break
8989 case 2:
8990 secondByte = buf[i + 1]
8991 if ((secondByte & 0xC0) === 0x80) {
8992 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
8993 if (tempCodePoint > 0x7F) {
8994 codePoint = tempCodePoint
8995 }
8996 }
8997 break
8998 case 3:
8999 secondByte = buf[i + 1]
9000 thirdByte = buf[i + 2]
9001 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
9002 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
9003 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
9004 codePoint = tempCodePoint
9005 }
9006 }
9007 break
9008 case 4:
9009 secondByte = buf[i + 1]
9010 thirdByte = buf[i + 2]
9011 fourthByte = buf[i + 3]
9012 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
9013 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
9014 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
9015 codePoint = tempCodePoint
9016 }
9017 }
9018 }
8b095871 9019 }
9987f0c1
IC
9020
9021 if (codePoint === null) {
9022 // we did not generate a valid codePoint so insert a
9023 // replacement char (U+FFFD) and advance only 1 byte
9024 codePoint = 0xFFFD
9025 bytesPerSequence = 1
9026 } else if (codePoint > 0xFFFF) {
9027 // encode to utf16 (surrogate pair dance)
9028 codePoint -= 0x10000
9029 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
9030 codePoint = 0xDC00 | codePoint & 0x3FF
8b095871 9031 }
9987f0c1
IC
9032
9033 res.push(codePoint)
9034 i += bytesPerSequence
8b095871 9035 }
9987f0c1
IC
9036
9037 return decodeCodePointsArray(res)
9038}
9039
9040// Based on http://stackoverflow.com/a/22747272/680742, the browser with
9041// the lowest limit is Chrome, with 0x10000 args.
9042// We go 1 magnitude less, for safety
9043var MAX_ARGUMENTS_LENGTH = 0x1000
9044
9045function decodeCodePointsArray (codePoints) {
9046 var len = codePoints.length
9047 if (len <= MAX_ARGUMENTS_LENGTH) {
9048 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
8b095871 9049 }
9987f0c1
IC
9050
9051 // Decode in chunks to avoid "call stack size exceeded".
9052 var res = ''
9053 var i = 0
9054 while (i < len) {
9055 res += String.fromCharCode.apply(
9056 String,
9057 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
9058 )
9059 }
9060 return res
8b095871
IC
9061}
9062
9987f0c1
IC
9063function asciiSlice (buf, start, end) {
9064 var ret = ''
9065 end = Math.min(buf.length, end)
9066
9067 for (var i = start; i < end; ++i) {
9068 ret += String.fromCharCode(buf[i] & 0x7F)
8b095871 9069 }
9987f0c1 9070 return ret
8b095871
IC
9071}
9072
9987f0c1
IC
9073function latin1Slice (buf, start, end) {
9074 var ret = ''
9075 end = Math.min(buf.length, end)
9076
9077 for (var i = start; i < end; ++i) {
9078 ret += String.fromCharCode(buf[i])
8b095871 9079 }
9987f0c1 9080 return ret
8b095871
IC
9081}
9082
9987f0c1
IC
9083function hexSlice (buf, start, end) {
9084 var len = buf.length
8b095871 9085
9987f0c1
IC
9086 if (!start || start < 0) start = 0
9087 if (!end || end < 0 || end > len) end = len
8b095871 9088
9987f0c1
IC
9089 var out = ''
9090 for (var i = start; i < end; ++i) {
9091 out += toHex(buf[i])
9092 }
9093 return out
8b095871
IC
9094}
9095
9987f0c1
IC
9096function utf16leSlice (buf, start, end) {
9097 var bytes = buf.slice(start, end)
9098 var res = ''
9099 for (var i = 0; i < bytes.length; i += 2) {
9100 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
8b095871 9101 }
9987f0c1 9102 return res
8b095871
IC
9103}
9104
9987f0c1
IC
9105Buffer.prototype.slice = function slice (start, end) {
9106 var len = this.length
9107 start = ~~start
9108 end = end === undefined ? len : ~~end
8b095871 9109
9987f0c1
IC
9110 if (start < 0) {
9111 start += len
9112 if (start < 0) start = 0
9113 } else if (start > len) {
9114 start = len
9115 }
8b095871 9116
9987f0c1
IC
9117 if (end < 0) {
9118 end += len
9119 if (end < 0) end = 0
9120 } else if (end > len) {
9121 end = len
9122 }
9123
9124 if (end < start) end = start
9125
9126 var newBuf = this.subarray(start, end)
9127 // Return an augmented `Uint8Array` instance
9128 newBuf.__proto__ = Buffer.prototype
9129 return newBuf
8b095871
IC
9130}
9131
9987f0c1
IC
9132/*
9133 * Need to make sure that buffer isn't trying to write out of bounds.
9134 */
9135function checkOffset (offset, ext, length) {
9136 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
9137 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
8b095871
IC
9138}
9139
9987f0c1
IC
9140Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
9141 offset = offset >>> 0
9142 byteLength = byteLength >>> 0
9143 if (!noAssert) checkOffset(offset, byteLength, this.length)
9144
9145 var val = this[offset]
9146 var mul = 1
9147 var i = 0
9148 while (++i < byteLength && (mul *= 0x100)) {
9149 val += this[offset + i] * mul
9150 }
9151
9152 return val
8b095871
IC
9153}
9154
9987f0c1
IC
9155Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
9156 offset = offset >>> 0
9157 byteLength = byteLength >>> 0
9158 if (!noAssert) {
9159 checkOffset(offset, byteLength, this.length)
9160 }
9161
9162 var val = this[offset + --byteLength]
9163 var mul = 1
9164 while (byteLength > 0 && (mul *= 0x100)) {
9165 val += this[offset + --byteLength] * mul
9166 }
9167
9168 return val
8b095871
IC
9169}
9170
9987f0c1
IC
9171Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
9172 offset = offset >>> 0
9173 if (!noAssert) checkOffset(offset, 1, this.length)
9174 return this[offset]
8b095871
IC
9175}
9176
9987f0c1
IC
9177Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
9178 offset = offset >>> 0
9179 if (!noAssert) checkOffset(offset, 2, this.length)
9180 return this[offset] | (this[offset + 1] << 8)
8b095871
IC
9181}
9182
9987f0c1
IC
9183Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
9184 offset = offset >>> 0
9185 if (!noAssert) checkOffset(offset, 2, this.length)
9186 return (this[offset] << 8) | this[offset + 1]
8b095871
IC
9187}
9188
9987f0c1
IC
9189Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
9190 offset = offset >>> 0
9191 if (!noAssert) checkOffset(offset, 4, this.length)
9192
9193 return ((this[offset]) |
9194 (this[offset + 1] << 8) |
9195 (this[offset + 2] << 16)) +
9196 (this[offset + 3] * 0x1000000)
8b095871
IC
9197}
9198
9987f0c1
IC
9199Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
9200 offset = offset >>> 0
9201 if (!noAssert) checkOffset(offset, 4, this.length)
9202
9203 return (this[offset] * 0x1000000) +
9204 ((this[offset + 1] << 16) |
9205 (this[offset + 2] << 8) |
9206 this[offset + 3])
8b095871
IC
9207}
9208
9987f0c1
IC
9209Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
9210 offset = offset >>> 0
9211 byteLength = byteLength >>> 0
9212 if (!noAssert) checkOffset(offset, byteLength, this.length)
9213
9214 var val = this[offset]
9215 var mul = 1
9216 var i = 0
9217 while (++i < byteLength && (mul *= 0x100)) {
9218 val += this[offset + i] * mul
8b095871 9219 }
9987f0c1
IC
9220 mul *= 0x80
9221
9222 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
9223
9224 return val
9225}
9226
9227Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
9228 offset = offset >>> 0
9229 byteLength = byteLength >>> 0
9230 if (!noAssert) checkOffset(offset, byteLength, this.length)
9231
9232 var i = byteLength
9233 var mul = 1
9234 var val = this[offset + --i]
9235 while (i > 0 && (mul *= 0x100)) {
9236 val += this[offset + --i] * mul
8b095871 9237 }
9987f0c1
IC
9238 mul *= 0x80
9239
9240 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
9241
9242 return val
8b095871
IC
9243}
9244
9987f0c1
IC
9245Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
9246 offset = offset >>> 0
9247 if (!noAssert) checkOffset(offset, 1, this.length)
9248 if (!(this[offset] & 0x80)) return (this[offset])
9249 return ((0xff - this[offset] + 1) * -1)
8b095871
IC
9250}
9251
9987f0c1
IC
9252Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
9253 offset = offset >>> 0
9254 if (!noAssert) checkOffset(offset, 2, this.length)
9255 var val = this[offset] | (this[offset + 1] << 8)
9256 return (val & 0x8000) ? val | 0xFFFF0000 : val
8b095871
IC
9257}
9258
9987f0c1
IC
9259Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
9260 offset = offset >>> 0
9261 if (!noAssert) checkOffset(offset, 2, this.length)
9262 var val = this[offset + 1] | (this[offset] << 8)
9263 return (val & 0x8000) ? val | 0xFFFF0000 : val
8b095871
IC
9264}
9265
9987f0c1
IC
9266Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
9267 offset = offset >>> 0
9268 if (!noAssert) checkOffset(offset, 4, this.length)
9269
9270 return (this[offset]) |
9271 (this[offset + 1] << 8) |
9272 (this[offset + 2] << 16) |
9273 (this[offset + 3] << 24)
8b095871
IC
9274}
9275
9987f0c1
IC
9276Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
9277 offset = offset >>> 0
9278 if (!noAssert) checkOffset(offset, 4, this.length)
9279
9280 return (this[offset] << 24) |
9281 (this[offset + 1] << 16) |
9282 (this[offset + 2] << 8) |
9283 (this[offset + 3])
8b095871
IC
9284}
9285
9987f0c1
IC
9286Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
9287 offset = offset >>> 0
9288 if (!noAssert) checkOffset(offset, 4, this.length)
9289 return ieee754.read(this, offset, true, 23, 4)
8b095871
IC
9290}
9291
9987f0c1
IC
9292Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
9293 offset = offset >>> 0
9294 if (!noAssert) checkOffset(offset, 4, this.length)
9295 return ieee754.read(this, offset, false, 23, 4)
8b095871
IC
9296}
9297
9987f0c1
IC
9298Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
9299 offset = offset >>> 0
9300 if (!noAssert) checkOffset(offset, 8, this.length)
9301 return ieee754.read(this, offset, true, 52, 8)
8b095871
IC
9302}
9303
9987f0c1
IC
9304Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
9305 offset = offset >>> 0
9306 if (!noAssert) checkOffset(offset, 8, this.length)
9307 return ieee754.read(this, offset, false, 52, 8)
9308}
8b095871 9309
9987f0c1
IC
9310function checkInt (buf, value, offset, ext, max, min) {
9311 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
9312 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
9313 if (offset + ext > buf.length) throw new RangeError('Index out of range')
9314}
9315
9316Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
9317 value = +value
9318 offset = offset >>> 0
9319 byteLength = byteLength >>> 0
9320 if (!noAssert) {
9321 var maxBytes = Math.pow(2, 8 * byteLength) - 1
9322 checkInt(this, value, offset, byteLength, maxBytes, 0)
8b095871 9323 }
9987f0c1
IC
9324
9325 var mul = 1
9326 var i = 0
9327 this[offset] = value & 0xFF
9328 while (++i < byteLength && (mul *= 0x100)) {
9329 this[offset + i] = (value / mul) & 0xFF
8b095871 9330 }
8b095871 9331
9987f0c1 9332 return offset + byteLength
8b095871
IC
9333}
9334
9987f0c1
IC
9335Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
9336 value = +value
9337 offset = offset >>> 0
9338 byteLength = byteLength >>> 0
9339 if (!noAssert) {
9340 var maxBytes = Math.pow(2, 8 * byteLength) - 1
9341 checkInt(this, value, offset, byteLength, maxBytes, 0)
9342 }
8b095871 9343
9987f0c1
IC
9344 var i = byteLength - 1
9345 var mul = 1
9346 this[offset + i] = value & 0xFF
9347 while (--i >= 0 && (mul *= 0x100)) {
9348 this[offset + i] = (value / mul) & 0xFF
9349 }
9350
9351 return offset + byteLength
8b095871
IC
9352}
9353
9987f0c1
IC
9354Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
9355 value = +value
9356 offset = offset >>> 0
9357 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
9358 this[offset] = (value & 0xff)
9359 return offset + 1
8b095871
IC
9360}
9361
9987f0c1
IC
9362Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
9363 value = +value
9364 offset = offset >>> 0
9365 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
9366 this[offset] = (value & 0xff)
9367 this[offset + 1] = (value >>> 8)
9368 return offset + 2
8b095871
IC
9369}
9370
9987f0c1
IC
9371Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
9372 value = +value
9373 offset = offset >>> 0
9374 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
9375 this[offset] = (value >>> 8)
9376 this[offset + 1] = (value & 0xff)
9377 return offset + 2
8b095871
IC
9378}
9379
9987f0c1
IC
9380Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
9381 value = +value
9382 offset = offset >>> 0
9383 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
9384 this[offset + 3] = (value >>> 24)
9385 this[offset + 2] = (value >>> 16)
9386 this[offset + 1] = (value >>> 8)
9387 this[offset] = (value & 0xff)
9388 return offset + 4
8b095871
IC
9389}
9390
9987f0c1
IC
9391Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
9392 value = +value
9393 offset = offset >>> 0
9394 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
9395 this[offset] = (value >>> 24)
9396 this[offset + 1] = (value >>> 16)
9397 this[offset + 2] = (value >>> 8)
9398 this[offset + 3] = (value & 0xff)
9399 return offset + 4
8b095871
IC
9400}
9401
9987f0c1
IC
9402Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
9403 value = +value
9404 offset = offset >>> 0
9405 if (!noAssert) {
9406 var limit = Math.pow(2, (8 * byteLength) - 1)
9407
9408 checkInt(this, value, offset, byteLength, limit - 1, -limit)
9409 }
9410
9411 var i = 0
9412 var mul = 1
9413 var sub = 0
9414 this[offset] = value & 0xFF
9415 while (++i < byteLength && (mul *= 0x100)) {
9416 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
9417 sub = 1
9418 }
9419 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8b095871 9420 }
9987f0c1
IC
9421
9422 return offset + byteLength
8b095871
IC
9423}
9424
9987f0c1
IC
9425Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
9426 value = +value
9427 offset = offset >>> 0
9428 if (!noAssert) {
9429 var limit = Math.pow(2, (8 * byteLength) - 1)
8b095871 9430
9987f0c1
IC
9431 checkInt(this, value, offset, byteLength, limit - 1, -limit)
9432 }
9433
9434 var i = byteLength - 1
9435 var mul = 1
9436 var sub = 0
9437 this[offset + i] = value & 0xFF
9438 while (--i >= 0 && (mul *= 0x100)) {
9439 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
9440 sub = 1
9441 }
9442 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
9443 }
9444
9445 return offset + byteLength
8b095871
IC
9446}
9447
9987f0c1
IC
9448Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
9449 value = +value
9450 offset = offset >>> 0
9451 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
9452 if (value < 0) value = 0xff + value + 1
9453 this[offset] = (value & 0xff)
9454 return offset + 1
8b095871
IC
9455}
9456
9987f0c1
IC
9457Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
9458 value = +value
9459 offset = offset >>> 0
9460 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
9461 this[offset] = (value & 0xff)
9462 this[offset + 1] = (value >>> 8)
9463 return offset + 2
8b095871
IC
9464}
9465
9987f0c1
IC
9466Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
9467 value = +value
9468 offset = offset >>> 0
9469 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
9470 this[offset] = (value >>> 8)
9471 this[offset + 1] = (value & 0xff)
9472 return offset + 2
8b095871
IC
9473}
9474
9987f0c1
IC
9475Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
9476 value = +value
9477 offset = offset >>> 0
9478 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
9479 this[offset] = (value & 0xff)
9480 this[offset + 1] = (value >>> 8)
9481 this[offset + 2] = (value >>> 16)
9482 this[offset + 3] = (value >>> 24)
9483 return offset + 4
8b095871
IC
9484}
9485
9987f0c1
IC
9486Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
9487 value = +value
9488 offset = offset >>> 0
9489 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
9490 if (value < 0) value = 0xffffffff + value + 1
9491 this[offset] = (value >>> 24)
9492 this[offset + 1] = (value >>> 16)
9493 this[offset + 2] = (value >>> 8)
9494 this[offset + 3] = (value & 0xff)
9495 return offset + 4
8b095871
IC
9496}
9497
9987f0c1
IC
9498function checkIEEE754 (buf, value, offset, ext, max, min) {
9499 if (offset + ext > buf.length) throw new RangeError('Index out of range')
9500 if (offset < 0) throw new RangeError('Index out of range')
8b095871
IC
9501}
9502
9987f0c1
IC
9503function writeFloat (buf, value, offset, littleEndian, noAssert) {
9504 value = +value
9505 offset = offset >>> 0
9506 if (!noAssert) {
9507 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
8b095871 9508 }
9987f0c1
IC
9509 ieee754.write(buf, value, offset, littleEndian, 23, 4)
9510 return offset + 4
8b095871
IC
9511}
9512
9987f0c1
IC
9513Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
9514 return writeFloat(this, value, offset, true, noAssert)
8b095871
IC
9515}
9516
9987f0c1
IC
9517Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
9518 return writeFloat(this, value, offset, false, noAssert)
9519}
9520
9521function writeDouble (buf, value, offset, littleEndian, noAssert) {
9522 value = +value
9523 offset = offset >>> 0
9524 if (!noAssert) {
9525 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
8b095871 9526 }
9987f0c1
IC
9527 ieee754.write(buf, value, offset, littleEndian, 52, 8)
9528 return offset + 8
8b095871
IC
9529}
9530
9987f0c1
IC
9531Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
9532 return writeDouble(this, value, offset, true, noAssert)
8b095871
IC
9533}
9534
9987f0c1
IC
9535Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
9536 return writeDouble(this, value, offset, false, noAssert)
8b095871
IC
9537}
9538
9987f0c1
IC
9539// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
9540Buffer.prototype.copy = function copy (target, targetStart, start, end) {
9541 if (!start) start = 0
9542 if (!end && end !== 0) end = this.length
9543 if (targetStart >= target.length) targetStart = target.length
9544 if (!targetStart) targetStart = 0
9545 if (end > 0 && end < start) end = start
8b095871 9546
9987f0c1
IC
9547 // Copy 0 bytes; we're done
9548 if (end === start) return 0
9549 if (target.length === 0 || this.length === 0) return 0
8b095871 9550
9987f0c1
IC
9551 // Fatal error conditions
9552 if (targetStart < 0) {
9553 throw new RangeError('targetStart out of bounds')
8b095871 9554 }
9987f0c1
IC
9555 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
9556 if (end < 0) throw new RangeError('sourceEnd out of bounds')
8b095871 9557
9987f0c1
IC
9558 // Are we oob?
9559 if (end > this.length) end = this.length
9560 if (target.length - targetStart < end - start) {
9561 end = target.length - targetStart + start
9562 }
8b095871 9563
9987f0c1
IC
9564 var len = end - start
9565 var i
9566
9567 if (this === target && start < targetStart && targetStart < end) {
9568 // descending copy from end
9569 for (i = len - 1; i >= 0; --i) {
9570 target[i + targetStart] = this[i + start]
8b095871 9571 }
9987f0c1
IC
9572 } else if (len < 1000) {
9573 // ascending copy from start
9574 for (i = 0; i < len; ++i) {
9575 target[i + targetStart] = this[i + start]
8b095871 9576 }
9987f0c1
IC
9577 } else {
9578 Uint8Array.prototype.set.call(
9579 target,
9580 this.subarray(start, start + len),
9581 targetStart
9582 )
9583 }
8b095871 9584
9987f0c1
IC
9585 return len
9586}
9587
9588// Usage:
9589// buffer.fill(number[, offset[, end]])
9590// buffer.fill(buffer[, offset[, end]])
9591// buffer.fill(string[, offset[, end]][, encoding])
9592Buffer.prototype.fill = function fill (val, start, end, encoding) {
9593 // Handle string cases:
9594 if (typeof val === 'string') {
9595 if (typeof start === 'string') {
9596 encoding = start
9597 start = 0
9598 end = this.length
9599 } else if (typeof end === 'string') {
9600 encoding = end
9601 end = this.length
9602 }
9603 if (val.length === 1) {
9604 var code = val.charCodeAt(0)
9605 if (code < 256) {
9606 val = code
8b095871
IC
9607 }
9608 }
9987f0c1
IC
9609 if (encoding !== undefined && typeof encoding !== 'string') {
9610 throw new TypeError('encoding must be a string')
9611 }
9612 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
9613 throw new TypeError('Unknown encoding: ' + encoding)
9614 }
9615 } else if (typeof val === 'number') {
9616 val = val & 255
8b095871 9617 }
8b095871 9618
9987f0c1
IC
9619 // Invalid ranges are not set to a default, so can range check early.
9620 if (start < 0 || this.length < start || this.length < end) {
9621 throw new RangeError('Out of range index')
8b095871 9622 }
9987f0c1
IC
9623
9624 if (end <= start) {
9625 return this
8b095871 9626 }
8b095871 9627
9987f0c1
IC
9628 start = start >>> 0
9629 end = end === undefined ? this.length : end >>> 0
8b095871 9630
9987f0c1
IC
9631 if (!val) val = 0
9632
9633 var i
9634 if (typeof val === 'number') {
9635 for (i = start; i < end; ++i) {
9636 this[i] = val
8b095871 9637 }
9987f0c1
IC
9638 } else {
9639 var bytes = Buffer.isBuffer(val)
9640 ? val
9641 : new Buffer(val, encoding)
9642 var len = bytes.length
9643 for (i = 0; i < end - start; ++i) {
9644 this[i + start] = bytes[i % len]
8b095871
IC
9645 }
9646 }
9987f0c1
IC
9647
9648 return this
8b095871
IC
9649}
9650
9987f0c1
IC
9651// HELPER FUNCTIONS
9652// ================
8b095871 9653
9987f0c1 9654var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
8b095871 9655
9987f0c1
IC
9656function base64clean (str) {
9657 // Node strips out invalid characters like \n and \t from the string, base64-js does not
9658 str = str.trim().replace(INVALID_BASE64_RE, '')
9659 // Node converts strings with length < 2 to ''
9660 if (str.length < 2) return ''
9661 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
9662 while (str.length % 4 !== 0) {
9663 str = str + '='
8b095871 9664 }
9987f0c1
IC
9665 return str
9666}
9667
9668function toHex (n) {
9669 if (n < 16) return '0' + n.toString(16)
9670 return n.toString(16)
9671}
9672
9673function utf8ToBytes (string, units) {
9674 units = units || Infinity
9675 var codePoint
9676 var length = string.length
9677 var leadSurrogate = null
9678 var bytes = []
9679
9680 for (var i = 0; i < length; ++i) {
9681 codePoint = string.charCodeAt(i)
9682
9683 // is surrogate component
9684 if (codePoint > 0xD7FF && codePoint < 0xE000) {
9685 // last char was a lead
9686 if (!leadSurrogate) {
9687 // no lead yet
9688 if (codePoint > 0xDBFF) {
9689 // unexpected trail
9690 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9691 continue
9692 } else if (i + 1 === length) {
9693 // unpaired lead
9694 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9695 continue
9696 }
9697
9698 // valid lead
9699 leadSurrogate = codePoint
9700
9701 continue
9702 }
9703
9704 // 2 leads in a row
9705 if (codePoint < 0xDC00) {
9706 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9707 leadSurrogate = codePoint
9708 continue
9709 }
9710
9711 // valid surrogate pair
9712 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
9713 } else if (leadSurrogate) {
9714 // valid bmp char, but last char was a lead
9715 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9716 }
9717
9718 leadSurrogate = null
9719
9720 // encode utf8
9721 if (codePoint < 0x80) {
9722 if ((units -= 1) < 0) break
9723 bytes.push(codePoint)
9724 } else if (codePoint < 0x800) {
9725 if ((units -= 2) < 0) break
9726 bytes.push(
9727 codePoint >> 0x6 | 0xC0,
9728 codePoint & 0x3F | 0x80
9729 )
9730 } else if (codePoint < 0x10000) {
9731 if ((units -= 3) < 0) break
9732 bytes.push(
9733 codePoint >> 0xC | 0xE0,
9734 codePoint >> 0x6 & 0x3F | 0x80,
9735 codePoint & 0x3F | 0x80
9736 )
9737 } else if (codePoint < 0x110000) {
9738 if ((units -= 4) < 0) break
9739 bytes.push(
9740 codePoint >> 0x12 | 0xF0,
9741 codePoint >> 0xC & 0x3F | 0x80,
9742 codePoint >> 0x6 & 0x3F | 0x80,
9743 codePoint & 0x3F | 0x80
9744 )
9745 } else {
9746 throw new Error('Invalid code point')
9747 }
8b095871 9748 }
9987f0c1
IC
9749
9750 return bytes
8b095871
IC
9751}
9752
9987f0c1
IC
9753function asciiToBytes (str) {
9754 var byteArray = []
9755 for (var i = 0; i < str.length; ++i) {
9756 // Node's code seems to be doing this and not & 0x7F..
9757 byteArray.push(str.charCodeAt(i) & 0xFF)
8b095871 9758 }
9987f0c1 9759 return byteArray
8b095871
IC
9760}
9761
9987f0c1
IC
9762function utf16leToBytes (str, units) {
9763 var c, hi, lo
9764 var byteArray = []
9765 for (var i = 0; i < str.length; ++i) {
9766 if ((units -= 2) < 0) break
8b095871 9767
9987f0c1
IC
9768 c = str.charCodeAt(i)
9769 hi = c >> 8
9770 lo = c % 256
9771 byteArray.push(lo)
9772 byteArray.push(hi)
9773 }
8b095871 9774
9987f0c1
IC
9775 return byteArray
9776}
8b095871 9777
9987f0c1
IC
9778function base64ToBytes (str) {
9779 return base64.toByteArray(base64clean(str))
9780}
8b095871 9781
9987f0c1
IC
9782function blitBuffer (src, dst, offset, length) {
9783 for (var i = 0; i < length; ++i) {
9784 if ((i + offset >= dst.length) || (i >= src.length)) break
9785 dst[i + offset] = src[i]
9786 }
9787 return i
9788}
9789
9790// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
9791function isArrayBufferView (obj) {
9792 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
9793}
9794
9795function numberIsNaN (obj) {
9796 return obj !== obj // eslint-disable-line no-self-compare
9797}
8b095871 9798
cf6c2044 9799},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
8b095871 9800(function (Buffer){
9987f0c1
IC
9801// Copyright Joyent, Inc. and other Node contributors.
9802//
9803// Permission is hereby granted, free of charge, to any person obtaining a
9804// copy of this software and associated documentation files (the
9805// "Software"), to deal in the Software without restriction, including
9806// without limitation the rights to use, copy, modify, merge, publish,
9807// distribute, sublicense, and/or sell copies of the Software, and to permit
9808// persons to whom the Software is furnished to do so, subject to the
9809// following conditions:
9810//
9811// The above copyright notice and this permission notice shall be included
9812// in all copies or substantial portions of the Software.
9813//
9814// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9815// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9816// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9817// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9818// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9819// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9820// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 9821
9987f0c1
IC
9822// NOTE: These type checking functions intentionally don't use `instanceof`
9823// because it is fragile and can be easily faked with `Object.create()`.
8b095871 9824
9987f0c1
IC
9825function isArray(arg) {
9826 if (Array.isArray) {
9827 return Array.isArray(arg);
9828 }
9829 return objectToString(arg) === '[object Array]';
8b095871 9830}
9987f0c1 9831exports.isArray = isArray;
8b095871 9832
9987f0c1
IC
9833function isBoolean(arg) {
9834 return typeof arg === 'boolean';
8b095871 9835}
9987f0c1 9836exports.isBoolean = isBoolean;
8b095871 9837
9987f0c1
IC
9838function isNull(arg) {
9839 return arg === null;
8b095871 9840}
9987f0c1 9841exports.isNull = isNull;
8b095871 9842
9987f0c1
IC
9843function isNullOrUndefined(arg) {
9844 return arg == null;
9845}
9846exports.isNullOrUndefined = isNullOrUndefined;
8b095871 9847
9987f0c1
IC
9848function isNumber(arg) {
9849 return typeof arg === 'number';
9850}
9851exports.isNumber = isNumber;
8b095871 9852
9987f0c1
IC
9853function isString(arg) {
9854 return typeof arg === 'string';
9855}
9856exports.isString = isString;
8b095871 9857
9987f0c1
IC
9858function isSymbol(arg) {
9859 return typeof arg === 'symbol';
8b095871 9860}
9987f0c1 9861exports.isSymbol = isSymbol;
8b095871 9862
9987f0c1
IC
9863function isUndefined(arg) {
9864 return arg === void 0;
9865}
9866exports.isUndefined = isUndefined;
8b095871 9867
9987f0c1
IC
9868function isRegExp(re) {
9869 return objectToString(re) === '[object RegExp]';
8b095871 9870}
9987f0c1 9871exports.isRegExp = isRegExp;
8b095871 9872
9987f0c1
IC
9873function isObject(arg) {
9874 return typeof arg === 'object' && arg !== null;
9875}
9876exports.isObject = isObject;
8b095871 9877
9987f0c1
IC
9878function isDate(d) {
9879 return objectToString(d) === '[object Date]';
9880}
9881exports.isDate = isDate;
8b095871 9882
9987f0c1
IC
9883function isError(e) {
9884 return (objectToString(e) === '[object Error]' || e instanceof Error);
8b095871 9885}
9987f0c1 9886exports.isError = isError;
8b095871 9887
9987f0c1
IC
9888function isFunction(arg) {
9889 return typeof arg === 'function';
8b095871 9890}
9987f0c1 9891exports.isFunction = isFunction;
8b095871 9892
9987f0c1
IC
9893function isPrimitive(arg) {
9894 return arg === null ||
9895 typeof arg === 'boolean' ||
9896 typeof arg === 'number' ||
9897 typeof arg === 'string' ||
9898 typeof arg === 'symbol' || // ES6 symbol
9899 typeof arg === 'undefined';
9900}
9901exports.isPrimitive = isPrimitive;
8b095871 9902
9987f0c1 9903exports.isBuffer = Buffer.isBuffer;
8b095871 9904
9987f0c1
IC
9905function objectToString(o) {
9906 return Object.prototype.toString.call(o);
8b095871
IC
9907}
9908
9987f0c1 9909}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
cf6c2044 9910},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
9987f0c1 9911// Copyright Joyent, Inc. and other Node contributors.
8b095871 9912//
9987f0c1
IC
9913// Permission is hereby granted, free of charge, to any person obtaining a
9914// copy of this software and associated documentation files (the
9915// "Software"), to deal in the Software without restriction, including
9916// without limitation the rights to use, copy, modify, merge, publish,
9917// distribute, sublicense, and/or sell copies of the Software, and to permit
9918// persons to whom the Software is furnished to do so, subject to the
9919// following conditions:
8b095871 9920//
9987f0c1
IC
9921// The above copyright notice and this permission notice shall be included
9922// in all copies or substantial portions of the Software.
8b095871 9923//
9987f0c1
IC
9924// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9925// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9926// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9927// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9928// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9929// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9930// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 9931
9987f0c1
IC
9932function EventEmitter() {
9933 this._events = this._events || {};
9934 this._maxListeners = this._maxListeners || undefined;
9935}
9936module.exports = EventEmitter;
8b095871 9937
9987f0c1
IC
9938// Backwards-compat with node 0.10.x
9939EventEmitter.EventEmitter = EventEmitter;
8b095871 9940
9987f0c1
IC
9941EventEmitter.prototype._events = undefined;
9942EventEmitter.prototype._maxListeners = undefined;
8b095871 9943
9987f0c1
IC
9944// By default EventEmitters will print a warning if more than 10 listeners are
9945// added to it. This is a useful default which helps finding memory leaks.
9946EventEmitter.defaultMaxListeners = 10;
8b095871 9947
9987f0c1
IC
9948// Obviously not all Emitters should be limited to 10. This function allows
9949// that to be increased. Set to zero for unlimited.
9950EventEmitter.prototype.setMaxListeners = function(n) {
9951 if (!isNumber(n) || n < 0 || isNaN(n))
9952 throw TypeError('n must be a positive number');
9953 this._maxListeners = n;
9954 return this;
9955};
8b095871 9956
9987f0c1
IC
9957EventEmitter.prototype.emit = function(type) {
9958 var er, handler, len, args, i, listeners;
9959
9960 if (!this._events)
9961 this._events = {};
9962
9963 // If there is no 'error' event listener then throw.
9964 if (type === 'error') {
9965 if (!this._events.error ||
9966 (isObject(this._events.error) && !this._events.error.length)) {
9967 er = arguments[1];
9968 if (er instanceof Error) {
9969 throw er; // Unhandled 'error' event
9970 } else {
9971 // At least give some kind of context to the user
9972 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
9973 err.context = er;
9974 throw err;
9975 }
9976 }
8b095871 9977 }
8b095871 9978
9987f0c1
IC
9979 handler = this._events[type];
9980
9981 if (isUndefined(handler))
9982 return false;
9983
9984 if (isFunction(handler)) {
9985 switch (arguments.length) {
9986 // fast cases
9987 case 1:
9988 handler.call(this);
9989 break;
9990 case 2:
9991 handler.call(this, arguments[1]);
9992 break;
9993 case 3:
9994 handler.call(this, arguments[1], arguments[2]);
9995 break;
9996 // slower
9997 default:
9998 args = Array.prototype.slice.call(arguments, 1);
9999 handler.apply(this, args);
10000 }
10001 } else if (isObject(handler)) {
10002 args = Array.prototype.slice.call(arguments, 1);
10003 listeners = handler.slice();
10004 len = listeners.length;
10005 for (i = 0; i < len; i++)
10006 listeners[i].apply(this, args);
8b095871 10007 }
8b095871 10008
9987f0c1
IC
10009 return true;
10010};
10011
10012EventEmitter.prototype.addListener = function(type, listener) {
10013 var m;
10014
10015 if (!isFunction(listener))
10016 throw TypeError('listener must be a function');
10017
10018 if (!this._events)
10019 this._events = {};
10020
10021 // To avoid recursion in the case that type === "newListener"! Before
10022 // adding it to the listeners, first emit "newListener".
10023 if (this._events.newListener)
10024 this.emit('newListener', type,
10025 isFunction(listener.listener) ?
10026 listener.listener : listener);
10027
10028 if (!this._events[type])
10029 // Optimize the case of one listener. Don't need the extra array object.
10030 this._events[type] = listener;
10031 else if (isObject(this._events[type]))
10032 // If we've already got an array, just append.
10033 this._events[type].push(listener);
10034 else
10035 // Adding the second element, need to change to array.
10036 this._events[type] = [this._events[type], listener];
8b095871 10037
9987f0c1
IC
10038 // Check for listener leak
10039 if (isObject(this._events[type]) && !this._events[type].warned) {
10040 if (!isUndefined(this._maxListeners)) {
10041 m = this._maxListeners;
10042 } else {
10043 m = EventEmitter.defaultMaxListeners;
8b095871 10044 }
8b095871 10045
9987f0c1
IC
10046 if (m && m > 0 && this._events[type].length > m) {
10047 this._events[type].warned = true;
10048 console.error('(node) warning: possible EventEmitter memory ' +
10049 'leak detected. %d listeners added. ' +
10050 'Use emitter.setMaxListeners() to increase limit.',
10051 this._events[type].length);
10052 if (typeof console.trace === 'function') {
10053 // not supported in IE 10
10054 console.trace();
10055 }
10056 }
8b095871 10057 }
8b095871 10058
9987f0c1
IC
10059 return this;
10060};
8b095871 10061
9987f0c1 10062EventEmitter.prototype.on = EventEmitter.prototype.addListener;
8b095871 10063
9987f0c1
IC
10064EventEmitter.prototype.once = function(type, listener) {
10065 if (!isFunction(listener))
10066 throw TypeError('listener must be a function');
8b095871 10067
9987f0c1 10068 var fired = false;
8b095871 10069
9987f0c1
IC
10070 function g() {
10071 this.removeListener(type, g);
8b095871 10072
9987f0c1
IC
10073 if (!fired) {
10074 fired = true;
10075 listener.apply(this, arguments);
10076 }
10077 }
8b095871 10078
9987f0c1
IC
10079 g.listener = listener;
10080 this.on(type, g);
8b095871 10081
9987f0c1 10082 return this;
8b095871
IC
10083};
10084
9987f0c1
IC
10085// emits a 'removeListener' event iff the listener was removed
10086EventEmitter.prototype.removeListener = function(type, listener) {
10087 var list, position, length, i;
8b095871 10088
9987f0c1
IC
10089 if (!isFunction(listener))
10090 throw TypeError('listener must be a function');
8b095871 10091
9987f0c1
IC
10092 if (!this._events || !this._events[type])
10093 return this;
8b095871 10094
9987f0c1
IC
10095 list = this._events[type];
10096 length = list.length;
10097 position = -1;
8b095871 10098
9987f0c1
IC
10099 if (list === listener ||
10100 (isFunction(list.listener) && list.listener === listener)) {
10101 delete this._events[type];
10102 if (this._events.removeListener)
10103 this.emit('removeListener', type, listener);
8b095871 10104
9987f0c1
IC
10105 } else if (isObject(list)) {
10106 for (i = length; i-- > 0;) {
10107 if (list[i] === listener ||
10108 (list[i].listener && list[i].listener === listener)) {
10109 position = i;
10110 break;
10111 }
8b095871
IC
10112 }
10113
9987f0c1
IC
10114 if (position < 0)
10115 return this;
8b095871 10116
9987f0c1
IC
10117 if (list.length === 1) {
10118 list.length = 0;
10119 delete this._events[type];
10120 } else {
10121 list.splice(position, 1);
10122 }
8b095871 10123
9987f0c1
IC
10124 if (this._events.removeListener)
10125 this.emit('removeListener', type, listener);
10126 }
8b095871 10127
9987f0c1
IC
10128 return this;
10129};
8b095871 10130
9987f0c1
IC
10131EventEmitter.prototype.removeAllListeners = function(type) {
10132 var key, listeners;
8b095871 10133
9987f0c1
IC
10134 if (!this._events)
10135 return this;
8b095871 10136
9987f0c1
IC
10137 // not listening for removeListener, no need to emit
10138 if (!this._events.removeListener) {
10139 if (arguments.length === 0)
10140 this._events = {};
10141 else if (this._events[type])
10142 delete this._events[type];
10143 return this;
8b095871 10144 }
9987f0c1
IC
10145
10146 // emit removeListener for all listeners on all events
10147 if (arguments.length === 0) {
10148 for (key in this._events) {
10149 if (key === 'removeListener') continue;
10150 this.removeAllListeners(key);
10151 }
10152 this.removeAllListeners('removeListener');
10153 this._events = {};
10154 return this;
8b095871 10155 }
8b095871 10156
9987f0c1 10157 listeners = this._events[type];
8b095871 10158
9987f0c1
IC
10159 if (isFunction(listeners)) {
10160 this.removeListener(type, listeners);
10161 } else if (listeners) {
10162 // LIFO order
10163 while (listeners.length)
10164 this.removeListener(type, listeners[listeners.length - 1]);
8b095871 10165 }
9987f0c1 10166 delete this._events[type];
8b095871 10167
9987f0c1
IC
10168 return this;
10169};
8b095871 10170
9987f0c1
IC
10171EventEmitter.prototype.listeners = function(type) {
10172 var ret;
10173 if (!this._events || !this._events[type])
10174 ret = [];
10175 else if (isFunction(this._events[type]))
10176 ret = [this._events[type]];
10177 else
10178 ret = this._events[type].slice();
10179 return ret;
8b095871
IC
10180};
10181
9987f0c1
IC
10182EventEmitter.prototype.listenerCount = function(type) {
10183 if (this._events) {
10184 var evlistener = this._events[type];
8b095871 10185
9987f0c1
IC
10186 if (isFunction(evlistener))
10187 return 1;
10188 else if (evlistener)
10189 return evlistener.length;
8b095871 10190 }
9987f0c1 10191 return 0;
8b095871
IC
10192};
10193
9987f0c1
IC
10194EventEmitter.listenerCount = function(emitter, type) {
10195 return emitter.listenerCount(type);
10196};
8b095871 10197
9987f0c1
IC
10198function isFunction(arg) {
10199 return typeof arg === 'function';
10200}
8b095871 10201
9987f0c1
IC
10202function isNumber(arg) {
10203 return typeof arg === 'number';
8b095871
IC
10204}
10205
9987f0c1
IC
10206function isObject(arg) {
10207 return typeof arg === 'object' && arg !== null;
10208}
8b095871 10209
9987f0c1
IC
10210function isUndefined(arg) {
10211 return arg === void 0;
10212}
8b095871 10213
cf6c2044 10214},{}],8:[function(require,module,exports){
9987f0c1
IC
10215exports.read = function (buffer, offset, isLE, mLen, nBytes) {
10216 var e, m
10217 var eLen = nBytes * 8 - mLen - 1
10218 var eMax = (1 << eLen) - 1
10219 var eBias = eMax >> 1
10220 var nBits = -7
10221 var i = isLE ? (nBytes - 1) : 0
10222 var d = isLE ? -1 : 1
10223 var s = buffer[offset + i]
8b095871 10224
9987f0c1 10225 i += d
8b095871 10226
9987f0c1
IC
10227 e = s & ((1 << (-nBits)) - 1)
10228 s >>= (-nBits)
10229 nBits += eLen
10230 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8b095871 10231
9987f0c1
IC
10232 m = e & ((1 << (-nBits)) - 1)
10233 e >>= (-nBits)
10234 nBits += mLen
10235 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8b095871 10236
9987f0c1
IC
10237 if (e === 0) {
10238 e = 1 - eBias
10239 } else if (e === eMax) {
10240 return m ? NaN : ((s ? -1 : 1) * Infinity)
10241 } else {
10242 m = m + Math.pow(2, mLen)
10243 e = e - eBias
8b095871 10244 }
9987f0c1 10245 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
8b095871
IC
10246}
10247
9987f0c1
IC
10248exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
10249 var e, m, c
10250 var eLen = nBytes * 8 - mLen - 1
10251 var eMax = (1 << eLen) - 1
10252 var eBias = eMax >> 1
10253 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
10254 var i = isLE ? 0 : (nBytes - 1)
10255 var d = isLE ? 1 : -1
10256 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
8b095871 10257
9987f0c1 10258 value = Math.abs(value)
8b095871 10259
9987f0c1
IC
10260 if (isNaN(value) || value === Infinity) {
10261 m = isNaN(value) ? 1 : 0
10262 e = eMax
10263 } else {
10264 e = Math.floor(Math.log(value) / Math.LN2)
10265 if (value * (c = Math.pow(2, -e)) < 1) {
10266 e--
10267 c *= 2
10268 }
10269 if (e + eBias >= 1) {
10270 value += rt / c
10271 } else {
10272 value += rt * Math.pow(2, 1 - eBias)
10273 }
10274 if (value * c >= 2) {
10275 e++
10276 c /= 2
10277 }
8b095871 10278
9987f0c1
IC
10279 if (e + eBias >= eMax) {
10280 m = 0
10281 e = eMax
10282 } else if (e + eBias >= 1) {
10283 m = (value * c - 1) * Math.pow(2, mLen)
10284 e = e + eBias
10285 } else {
10286 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
10287 e = 0
10288 }
8b095871 10289 }
8b095871 10290
9987f0c1
IC
10291 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
10292
10293 e = (e << mLen) | m
10294 eLen += mLen
10295 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
10296
10297 buffer[offset + i - d] |= s * 128
10298}
8b095871 10299
cf6c2044 10300},{}],9:[function(require,module,exports){
9987f0c1
IC
10301if (typeof Object.create === 'function') {
10302 // implementation from standard node.js 'util' module
10303 module.exports = function inherits(ctor, superCtor) {
10304 ctor.super_ = superCtor
10305 ctor.prototype = Object.create(superCtor.prototype, {
10306 constructor: {
10307 value: ctor,
10308 enumerable: false,
10309 writable: true,
10310 configurable: true
10311 }
10312 });
10313 };
10314} else {
10315 // old school shim for old browsers
10316 module.exports = function inherits(ctor, superCtor) {
10317 ctor.super_ = superCtor
10318 var TempCtor = function () {}
10319 TempCtor.prototype = superCtor.prototype
10320 ctor.prototype = new TempCtor()
10321 ctor.prototype.constructor = ctor
10322 }
10323}
10324
cf6c2044 10325},{}],10:[function(require,module,exports){
8b095871 10326/*!
9987f0c1 10327 * Determine if an object is a Buffer
8b095871
IC
10328 *
10329 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
10330 * @license MIT
10331 */
10332
9987f0c1
IC
10333// The _isBuffer check is for Safari 5-7 support, because it's missing
10334// Object.prototype.constructor. Remove this eventually
10335module.exports = function (obj) {
10336 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
10337}
8b095871 10338
9987f0c1
IC
10339function isBuffer (obj) {
10340 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
8b095871
IC
10341}
10342
9987f0c1
IC
10343// For Node v0.10 support. Remove this eventually.
10344function isSlowBuffer (obj) {
10345 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
10346}
8b095871 10347
cf6c2044 10348},{}],11:[function(require,module,exports){
9987f0c1 10349var toString = {}.toString;
8b095871 10350
9987f0c1
IC
10351module.exports = Array.isArray || function (arr) {
10352 return toString.call(arr) == '[object Array]';
10353};
8b095871 10354
cf6c2044 10355},{}],12:[function(require,module,exports){
9987f0c1
IC
10356(function (process){
10357'use strict';
8b095871 10358
9987f0c1
IC
10359if (!process.version ||
10360 process.version.indexOf('v0.') === 0 ||
10361 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
10362 module.exports = nextTick;
10363} else {
10364 module.exports = process.nextTick;
8b095871
IC
10365}
10366
9987f0c1
IC
10367function nextTick(fn, arg1, arg2, arg3) {
10368 if (typeof fn !== 'function') {
10369 throw new TypeError('"callback" argument must be a function');
10370 }
10371 var len = arguments.length;
10372 var args, i;
10373 switch (len) {
10374 case 0:
10375 case 1:
10376 return process.nextTick(fn);
10377 case 2:
10378 return process.nextTick(function afterTickOne() {
10379 fn.call(null, arg1);
10380 });
10381 case 3:
10382 return process.nextTick(function afterTickTwo() {
10383 fn.call(null, arg1, arg2);
10384 });
10385 case 4:
10386 return process.nextTick(function afterTickThree() {
10387 fn.call(null, arg1, arg2, arg3);
10388 });
10389 default:
10390 args = new Array(len - 1);
10391 i = 0;
10392 while (i < args.length) {
10393 args[i++] = arguments[i];
8b095871 10394 }
9987f0c1
IC
10395 return process.nextTick(function afterTick() {
10396 fn.apply(null, args);
10397 });
8b095871 10398 }
8b095871
IC
10399}
10400
9987f0c1 10401}).call(this,require('_process'))
cf6c2044 10402},{"_process":13}],13:[function(require,module,exports){
9987f0c1
IC
10403// shim for using process in browser
10404var process = module.exports = {};
8b095871 10405
9987f0c1
IC
10406// cached from whatever global is present so that test runners that stub it
10407// don't break things. But we need to wrap it in a try catch in case it is
10408// wrapped in strict mode code which doesn't define any globals. It's inside a
10409// function because try/catches deoptimize in certain engines.
8b095871 10410
9987f0c1
IC
10411var cachedSetTimeout;
10412var cachedClearTimeout;
8b095871 10413
9987f0c1
IC
10414function defaultSetTimout() {
10415 throw new Error('setTimeout has not been defined');
10416}
10417function defaultClearTimeout () {
10418 throw new Error('clearTimeout has not been defined');
10419}
10420(function () {
10421 try {
10422 if (typeof setTimeout === 'function') {
10423 cachedSetTimeout = setTimeout;
10424 } else {
10425 cachedSetTimeout = defaultSetTimout;
10426 }
10427 } catch (e) {
10428 cachedSetTimeout = defaultSetTimout;
10429 }
10430 try {
10431 if (typeof clearTimeout === 'function') {
10432 cachedClearTimeout = clearTimeout;
10433 } else {
10434 cachedClearTimeout = defaultClearTimeout;
10435 }
10436 } catch (e) {
10437 cachedClearTimeout = defaultClearTimeout;
8b095871 10438 }
9987f0c1
IC
10439} ())
10440function runTimeout(fun) {
10441 if (cachedSetTimeout === setTimeout) {
10442 //normal enviroments in sane situations
10443 return setTimeout(fun, 0);
10444 }
10445 // if setTimeout wasn't available but was latter defined
10446 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
10447 cachedSetTimeout = setTimeout;
10448 return setTimeout(fun, 0);
10449 }
10450 try {
10451 // when when somebody has screwed with setTimeout but no I.E. maddness
10452 return cachedSetTimeout(fun, 0);
10453 } catch(e){
10454 try {
10455 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
10456 return cachedSetTimeout.call(null, fun, 0);
10457 } catch(e){
10458 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
10459 return cachedSetTimeout.call(this, fun, 0);
10460 }
8b095871 10461 }
8b095871 10462
8b095871 10463
8b095871 10464}
9987f0c1
IC
10465function runClearTimeout(marker) {
10466 if (cachedClearTimeout === clearTimeout) {
10467 //normal enviroments in sane situations
10468 return clearTimeout(marker);
10469 }
10470 // if clearTimeout wasn't available but was latter defined
10471 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
10472 cachedClearTimeout = clearTimeout;
10473 return clearTimeout(marker);
10474 }
10475 try {
10476 // when when somebody has screwed with setTimeout but no I.E. maddness
10477 return cachedClearTimeout(marker);
10478 } catch (e){
10479 try {
10480 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
10481 return cachedClearTimeout.call(null, marker);
10482 } catch (e){
10483 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
10484 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
10485 return cachedClearTimeout.call(this, marker);
10486 }
10487 }
8b095871 10488
8b095871 10489
8b095871 10490
8b095871 10491}
9987f0c1
IC
10492var queue = [];
10493var draining = false;
10494var currentQueue;
10495var queueIndex = -1;
8b095871 10496
9987f0c1
IC
10497function cleanUpNextTick() {
10498 if (!draining || !currentQueue) {
10499 return;
10500 }
10501 draining = false;
10502 if (currentQueue.length) {
10503 queue = currentQueue.concat(queue);
10504 } else {
10505 queueIndex = -1;
10506 }
10507 if (queue.length) {
10508 drainQueue();
10509 }
8b095871
IC
10510}
10511
9987f0c1
IC
10512function drainQueue() {
10513 if (draining) {
10514 return;
10515 }
10516 var timeout = runTimeout(cleanUpNextTick);
10517 draining = true;
8b095871 10518
9987f0c1
IC
10519 var len = queue.length;
10520 while(len) {
10521 currentQueue = queue;
10522 queue = [];
10523 while (++queueIndex < len) {
10524 if (currentQueue) {
10525 currentQueue[queueIndex].run();
10526 }
10527 }
10528 queueIndex = -1;
10529 len = queue.length;
10530 }
10531 currentQueue = null;
10532 draining = false;
10533 runClearTimeout(timeout);
8b095871
IC
10534}
10535
9987f0c1
IC
10536process.nextTick = function (fun) {
10537 var args = new Array(arguments.length - 1);
10538 if (arguments.length > 1) {
10539 for (var i = 1; i < arguments.length; i++) {
10540 args[i - 1] = arguments[i];
10541 }
10542 }
10543 queue.push(new Item(fun, args));
10544 if (queue.length === 1 && !draining) {
10545 runTimeout(drainQueue);
10546 }
10547};
8b095871 10548
9987f0c1
IC
10549// v8 likes predictible objects
10550function Item(fun, array) {
10551 this.fun = fun;
10552 this.array = array;
8b095871 10553}
9987f0c1
IC
10554Item.prototype.run = function () {
10555 this.fun.apply(null, this.array);
10556};
10557process.title = 'browser';
10558process.browser = true;
10559process.env = {};
10560process.argv = [];
10561process.version = ''; // empty string to avoid regexp issues
10562process.versions = {};
8b095871 10563
9987f0c1 10564function noop() {}
8b095871 10565
9987f0c1
IC
10566process.on = noop;
10567process.addListener = noop;
10568process.once = noop;
10569process.off = noop;
10570process.removeListener = noop;
10571process.removeAllListeners = noop;
10572process.emit = noop;
10573process.prependListener = noop;
10574process.prependOnceListener = noop;
8b095871 10575
9987f0c1 10576process.listeners = function (name) { return [] }
8b095871 10577
9987f0c1
IC
10578process.binding = function (name) {
10579 throw new Error('process.binding is not supported');
10580};
8b095871 10581
9987f0c1
IC
10582process.cwd = function () { return '/' };
10583process.chdir = function (dir) {
10584 throw new Error('process.chdir is not supported');
10585};
10586process.umask = function() { return 0; };
8b095871 10587
cf6c2044 10588},{}],14:[function(require,module,exports){
9987f0c1 10589module.exports = require('./lib/_stream_duplex.js');
8b095871 10590
cf6c2044 10591},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
9987f0c1
IC
10592// a duplex stream is just a stream that is both readable and writable.
10593// Since JS doesn't have multiple prototypal inheritance, this class
10594// prototypally inherits from Readable, and then parasitically from
10595// Writable.
8b095871 10596
9987f0c1 10597'use strict';
8b095871 10598
9987f0c1 10599/*<replacement>*/
8b095871 10600
9987f0c1
IC
10601var objectKeys = Object.keys || function (obj) {
10602 var keys = [];
10603 for (var key in obj) {
10604 keys.push(key);
10605 }return keys;
10606};
10607/*</replacement>*/
8b095871 10608
9987f0c1 10609module.exports = Duplex;
8b095871 10610
cf6c2044
IC
10611/*<replacement>*/
10612var processNextTick = require('process-nextick-args');
10613/*</replacement>*/
10614
9987f0c1
IC
10615/*<replacement>*/
10616var util = require('core-util-is');
10617util.inherits = require('inherits');
10618/*</replacement>*/
8b095871 10619
9987f0c1
IC
10620var Readable = require('./_stream_readable');
10621var Writable = require('./_stream_writable');
8b095871 10622
9987f0c1 10623util.inherits(Duplex, Readable);
8b095871 10624
9987f0c1
IC
10625var keys = objectKeys(Writable.prototype);
10626for (var v = 0; v < keys.length; v++) {
10627 var method = keys[v];
10628 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
8b095871 10629}
8b095871 10630
9987f0c1
IC
10631function Duplex(options) {
10632 if (!(this instanceof Duplex)) return new Duplex(options);
8b095871 10633
9987f0c1
IC
10634 Readable.call(this, options);
10635 Writable.call(this, options);
8b095871 10636
9987f0c1 10637 if (options && options.readable === false) this.readable = false;
8b095871 10638
9987f0c1 10639 if (options && options.writable === false) this.writable = false;
8b095871 10640
9987f0c1
IC
10641 this.allowHalfOpen = true;
10642 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
8b095871 10643
9987f0c1 10644 this.once('end', onend);
8b095871
IC
10645}
10646
9987f0c1
IC
10647// the no-half-open enforcer
10648function onend() {
10649 // if we allow half-open state, or if the writable side ended,
10650 // then we're ok.
10651 if (this.allowHalfOpen || this._writableState.ended) return;
8b095871 10652
9987f0c1
IC
10653 // no more data can be written.
10654 // But allow more writes to happen in this tick.
10655 processNextTick(onEndNT, this);
8b095871
IC
10656}
10657
9987f0c1
IC
10658function onEndNT(self) {
10659 self.end();
8b095871
IC
10660}
10661
9987f0c1
IC
10662function forEach(xs, f) {
10663 for (var i = 0, l = xs.length; i < l; i++) {
10664 f(xs[i], i);
10665 }
8b095871 10666}
cf6c2044 10667},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
9987f0c1
IC
10668// a passthrough stream.
10669// basically just the most minimal sort of Transform stream.
10670// Every written chunk gets output as-is.
8b095871 10671
9987f0c1 10672'use strict';
8b095871 10673
9987f0c1 10674module.exports = PassThrough;
8b095871 10675
9987f0c1 10676var Transform = require('./_stream_transform');
8b095871 10677
9987f0c1
IC
10678/*<replacement>*/
10679var util = require('core-util-is');
10680util.inherits = require('inherits');
10681/*</replacement>*/
8b095871 10682
9987f0c1 10683util.inherits(PassThrough, Transform);
8b095871 10684
9987f0c1
IC
10685function PassThrough(options) {
10686 if (!(this instanceof PassThrough)) return new PassThrough(options);
8b095871 10687
9987f0c1 10688 Transform.call(this, options);
8b095871
IC
10689}
10690
9987f0c1
IC
10691PassThrough.prototype._transform = function (chunk, encoding, cb) {
10692 cb(null, chunk);
10693};
cf6c2044
IC
10694},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
10695(function (process){
9987f0c1 10696'use strict';
8b095871 10697
cf6c2044 10698module.exports = Readable;
8b095871 10699
cf6c2044 10700/*<replacement>*/
9987f0c1
IC
10701var processNextTick = require('process-nextick-args');
10702/*</replacement>*/
8b095871 10703
9987f0c1
IC
10704/*<replacement>*/
10705var isArray = require('isarray');
10706/*</replacement>*/
8b095871 10707
9987f0c1
IC
10708/*<replacement>*/
10709var Duplex;
10710/*</replacement>*/
8b095871 10711
9987f0c1 10712Readable.ReadableState = ReadableState;
8b095871 10713
9987f0c1
IC
10714/*<replacement>*/
10715var EE = require('events').EventEmitter;
8b095871 10716
9987f0c1
IC
10717var EElistenerCount = function (emitter, type) {
10718 return emitter.listeners(type).length;
10719};
10720/*</replacement>*/
8b095871 10721
9987f0c1
IC
10722/*<replacement>*/
10723var Stream = require('./internal/streams/stream');
10724/*</replacement>*/
8b095871 10725
cf6c2044 10726var Buffer = require('buffer').Buffer;
9987f0c1 10727/*<replacement>*/
cf6c2044 10728var bufferShim = require('buffer-shims');
9987f0c1 10729/*</replacement>*/
8b095871 10730
9987f0c1
IC
10731/*<replacement>*/
10732var util = require('core-util-is');
10733util.inherits = require('inherits');
10734/*</replacement>*/
10735
10736/*<replacement>*/
10737var debugUtil = require('util');
10738var debug = void 0;
10739if (debugUtil && debugUtil.debuglog) {
10740 debug = debugUtil.debuglog('stream');
10741} else {
10742 debug = function () {};
8b095871 10743}
9987f0c1 10744/*</replacement>*/
8b095871 10745
9987f0c1 10746var BufferList = require('./internal/streams/BufferList');
9987f0c1
IC
10747var StringDecoder;
10748
10749util.inherits(Readable, Stream);
10750
10751var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
10752
10753function prependListener(emitter, event, fn) {
10754 // Sadly this is not cacheable as some libraries bundle their own
10755 // event emitter implementation with them.
10756 if (typeof emitter.prependListener === 'function') {
10757 return emitter.prependListener(event, fn);
8b095871 10758 } else {
9987f0c1
IC
10759 // This is a hack to make sure that our error handler is attached before any
10760 // userland ones. NEVER DO THIS. This is here only because this code needs
10761 // to continue to work with older versions of Node.js that do not include
10762 // the prependListener() method. The goal is to eventually remove this hack.
10763 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
8b095871
IC
10764 }
10765}
10766
9987f0c1
IC
10767function ReadableState(options, stream) {
10768 Duplex = Duplex || require('./_stream_duplex');
8b095871 10769
9987f0c1 10770 options = options || {};
8b095871 10771
9987f0c1
IC
10772 // object stream flag. Used to make read(n) ignore n and to
10773 // make all the buffer merging and length checks go away
10774 this.objectMode = !!options.objectMode;
8b095871 10775
9987f0c1 10776 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
8b095871 10777
9987f0c1
IC
10778 // the point at which it stops calling _read() to fill the buffer
10779 // Note: 0 is a valid value, means "don't call _read preemptively ever"
10780 var hwm = options.highWaterMark;
10781 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
10782 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
8b095871 10783
9987f0c1 10784 // cast to ints.
cf6c2044 10785 this.highWaterMark = ~~this.highWaterMark;
8b095871 10786
9987f0c1
IC
10787 // A linked list is used to store data chunks instead of an array because the
10788 // linked list can remove elements from the beginning faster than
10789 // array.shift()
10790 this.buffer = new BufferList();
10791 this.length = 0;
10792 this.pipes = null;
10793 this.pipesCount = 0;
10794 this.flowing = null;
10795 this.ended = false;
10796 this.endEmitted = false;
10797 this.reading = false;
8b095871 10798
cf6c2044
IC
10799 // a flag to be able to tell if the onwrite cb is called immediately,
10800 // or on a later tick. We set this to true at first, because any
10801 // actions that shouldn't happen until "later" should generally also
10802 // not happen before the first write call.
9987f0c1 10803 this.sync = true;
8b095871 10804
9987f0c1
IC
10805 // whenever we return null, then we set a flag to say
10806 // that we're awaiting a 'readable' event emission.
10807 this.needReadable = false;
10808 this.emittedReadable = false;
10809 this.readableListening = false;
10810 this.resumeScheduled = false;
8b095871 10811
9987f0c1
IC
10812 // Crypto is kind of old and crusty. Historically, its default string
10813 // encoding is 'binary' so we have to make this configurable.
10814 // Everything else in the universe uses 'utf8', though.
10815 this.defaultEncoding = options.defaultEncoding || 'utf8';
8b095871 10816
cf6c2044
IC
10817 // when piping, we only care about 'readable' events that happen
10818 // after read()ing all the bytes and not getting any pushback.
10819 this.ranOut = false;
10820
9987f0c1
IC
10821 // the number of writers that are awaiting a drain event in .pipe()s
10822 this.awaitDrain = 0;
8b095871 10823
9987f0c1
IC
10824 // if true, a maybeReadMore has been scheduled
10825 this.readingMore = false;
8b095871 10826
9987f0c1
IC
10827 this.decoder = null;
10828 this.encoding = null;
10829 if (options.encoding) {
10830 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
10831 this.decoder = new StringDecoder(options.encoding);
10832 this.encoding = options.encoding;
8b095871 10833 }
8b095871
IC
10834}
10835
9987f0c1
IC
10836function Readable(options) {
10837 Duplex = Duplex || require('./_stream_duplex');
8b095871 10838
9987f0c1 10839 if (!(this instanceof Readable)) return new Readable(options);
8b095871 10840
9987f0c1 10841 this._readableState = new ReadableState(options, this);
8b095871 10842
9987f0c1
IC
10843 // legacy
10844 this.readable = true;
10845
cf6c2044 10846 if (options && typeof options.read === 'function') this._read = options.read;
8b095871 10847
9987f0c1
IC
10848 Stream.call(this);
10849}
8b095871 10850
9987f0c1
IC
10851// Manually shove something into the read() buffer.
10852// This returns true if the highWaterMark has not been hit yet,
10853// similar to how Writable.write() returns true if you should
10854// write() some more.
10855Readable.prototype.push = function (chunk, encoding) {
10856 var state = this._readableState;
9987f0c1 10857
cf6c2044
IC
10858 if (!state.objectMode && typeof chunk === 'string') {
10859 encoding = encoding || state.defaultEncoding;
10860 if (encoding !== state.encoding) {
10861 chunk = bufferShim.from(chunk, encoding);
10862 encoding = '';
9987f0c1 10863 }
9987f0c1 10864 }
8b095871 10865
cf6c2044 10866 return readableAddChunk(this, state, chunk, encoding, false);
9987f0c1 10867};
8b095871 10868
9987f0c1
IC
10869// Unshift should *always* be something directly out of read()
10870Readable.prototype.unshift = function (chunk) {
cf6c2044
IC
10871 var state = this._readableState;
10872 return readableAddChunk(this, state, chunk, '', true);
9987f0c1 10873};
8b095871 10874
cf6c2044
IC
10875Readable.prototype.isPaused = function () {
10876 return this._readableState.flowing === false;
10877};
10878
10879function readableAddChunk(stream, state, chunk, encoding, addToFront) {
10880 var er = chunkInvalid(state, chunk);
10881 if (er) {
10882 stream.emit('error', er);
10883 } else if (chunk === null) {
9987f0c1
IC
10884 state.reading = false;
10885 onEofChunk(stream, state);
cf6c2044
IC
10886 } else if (state.objectMode || chunk && chunk.length > 0) {
10887 if (state.ended && !addToFront) {
10888 var e = new Error('stream.push() after EOF');
10889 stream.emit('error', e);
10890 } else if (state.endEmitted && addToFront) {
10891 var _e = new Error('stream.unshift() after end event');
10892 stream.emit('error', _e);
10893 } else {
10894 var skipAdd;
10895 if (state.decoder && !addToFront && !encoding) {
10896 chunk = state.decoder.write(chunk);
10897 skipAdd = !state.objectMode && chunk.length === 0;
10898 }
10899
10900 if (!addToFront) state.reading = false;
10901
10902 // Don't add to the buffer if we've decoded to an empty string chunk and
10903 // we're not in object mode
10904 if (!skipAdd) {
10905 // if we want the data now, just emit it.
10906 if (state.flowing && state.length === 0 && !state.sync) {
10907 stream.emit('data', chunk);
10908 stream.read(0);
9987f0c1 10909 } else {
cf6c2044
IC
10910 // update the buffer info.
10911 state.length += state.objectMode ? 1 : chunk.length;
10912 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
10913
10914 if (state.needReadable) emitReadable(stream);
9987f0c1
IC
10915 }
10916 }
cf6c2044
IC
10917
10918 maybeReadMore(stream, state);
9987f0c1 10919 }
cf6c2044
IC
10920 } else if (!addToFront) {
10921 state.reading = false;
8b095871
IC
10922 }
10923
9987f0c1 10924 return needMoreData(state);
8b095871
IC
10925}
10926
9987f0c1
IC
10927// if it's past the high water mark, we can push in some more.
10928// Also, if we have no data yet, we can stand some
10929// more bytes. This is to work around cases where hwm=0,
10930// such as the repl. Also, if the push() triggered a
10931// readable event, and the user called read(largeNumber) such that
10932// needReadable was set, then we ought to push more, so that another
10933// 'readable' event will be triggered.
10934function needMoreData(state) {
10935 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
8b095871
IC
10936}
10937
9987f0c1
IC
10938// backwards compatibility.
10939Readable.prototype.setEncoding = function (enc) {
10940 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
10941 this._readableState.decoder = new StringDecoder(enc);
10942 this._readableState.encoding = enc;
10943 return this;
10944};
8b095871 10945
9987f0c1
IC
10946// Don't raise the hwm > 8MB
10947var MAX_HWM = 0x800000;
10948function computeNewHighWaterMark(n) {
10949 if (n >= MAX_HWM) {
10950 n = MAX_HWM;
10951 } else {
10952 // Get the next highest power of 2 to prevent increasing hwm excessively in
10953 // tiny amounts
10954 n--;
10955 n |= n >>> 1;
10956 n |= n >>> 2;
10957 n |= n >>> 4;
10958 n |= n >>> 8;
10959 n |= n >>> 16;
10960 n++;
10961 }
10962 return n;
8b095871
IC
10963}
10964
9987f0c1
IC
10965// This function is designed to be inlinable, so please take care when making
10966// changes to the function body.
10967function howMuchToRead(n, state) {
10968 if (n <= 0 || state.length === 0 && state.ended) return 0;
10969 if (state.objectMode) return 1;
10970 if (n !== n) {
10971 // Only flow one buffer at a time
10972 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
10973 }
10974 // If we're asking for more than the current hwm, then raise the hwm.
10975 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
10976 if (n <= state.length) return n;
10977 // Don't have enough
10978 if (!state.ended) {
10979 state.needReadable = true;
10980 return 0;
10981 }
10982 return state.length;
8b095871
IC
10983}
10984
9987f0c1
IC
10985// you can override either this method, or the async _read(n) below.
10986Readable.prototype.read = function (n) {
10987 debug('read', n);
10988 n = parseInt(n, 10);
10989 var state = this._readableState;
10990 var nOrig = n;
8b095871 10991
9987f0c1
IC
10992 if (n !== 0) state.emittedReadable = false;
10993
10994 // if we're doing read(0) to trigger a readable event, but we
10995 // already have a bunch of data in the buffer, then just trigger
10996 // the 'readable' event and move on.
10997 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
10998 debug('read: emitReadable', state.length, state.ended);
10999 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
11000 return null;
8b095871 11001 }
8b095871 11002
9987f0c1 11003 n = howMuchToRead(n, state);
8b095871 11004
9987f0c1
IC
11005 // if we've ended, and we're now clear, then finish it up.
11006 if (n === 0 && state.ended) {
11007 if (state.length === 0) endReadable(this);
11008 return null;
11009 }
8b095871 11010
9987f0c1
IC
11011 // All the actual chunk generation logic needs to be
11012 // *below* the call to _read. The reason is that in certain
11013 // synthetic stream cases, such as passthrough streams, _read
11014 // may be a completely synchronous operation which may change
11015 // the state of the read buffer, providing enough data when
11016 // before there was *not* enough.
11017 //
11018 // So, the steps are:
11019 // 1. Figure out what the state of things will be after we do
11020 // a read from the buffer.
11021 //
11022 // 2. If that resulting state will trigger a _read, then call _read.
11023 // Note that this may be asynchronous, or synchronous. Yes, it is
11024 // deeply ugly to write APIs this way, but that still doesn't mean
11025 // that the Readable class should behave improperly, as streams are
11026 // designed to be sync/async agnostic.
11027 // Take note if the _read call is sync or async (ie, if the read call
11028 // has returned yet), so that we know whether or not it's safe to emit
11029 // 'readable' etc.
11030 //
11031 // 3. Actually pull the requested chunks out of the buffer and return.
8b095871 11032
9987f0c1
IC
11033 // if we need a readable event, then we need to do some reading.
11034 var doRead = state.needReadable;
11035 debug('need readable', doRead);
8b095871 11036
9987f0c1
IC
11037 // if we currently have less than the highWaterMark, then also read some
11038 if (state.length === 0 || state.length - n < state.highWaterMark) {
11039 doRead = true;
11040 debug('length less than watermark', doRead);
11041 }
8b095871 11042
9987f0c1
IC
11043 // however, if we've ended, then there's no point, and if we're already
11044 // reading, then it's unnecessary.
11045 if (state.ended || state.reading) {
11046 doRead = false;
11047 debug('reading or ended', doRead);
11048 } else if (doRead) {
11049 debug('do read');
11050 state.reading = true;
11051 state.sync = true;
11052 // if the length is currently zero, then we *need* a readable event.
11053 if (state.length === 0) state.needReadable = true;
11054 // call internal read method
11055 this._read(state.highWaterMark);
11056 state.sync = false;
11057 // If _read pushed data synchronously, then `reading` will be false,
11058 // and we need to re-evaluate how much data we can return to the user.
11059 if (!state.reading) n = howMuchToRead(nOrig, state);
11060 }
8b095871 11061
9987f0c1
IC
11062 var ret;
11063 if (n > 0) ret = fromList(n, state);else ret = null;
8b095871 11064
9987f0c1
IC
11065 if (ret === null) {
11066 state.needReadable = true;
11067 n = 0;
11068 } else {
11069 state.length -= n;
11070 }
8b095871 11071
9987f0c1
IC
11072 if (state.length === 0) {
11073 // If we have nothing in the buffer, then we want to know
11074 // as soon as we *do* get something into the buffer.
11075 if (!state.ended) state.needReadable = true;
8b095871 11076
9987f0c1
IC
11077 // If we tried to read() past the EOF, then emit end on the next tick.
11078 if (nOrig !== n && state.ended) endReadable(this);
11079 }
8b095871 11080
9987f0c1 11081 if (ret !== null) this.emit('data', ret);
8b095871 11082
9987f0c1
IC
11083 return ret;
11084};
8b095871 11085
cf6c2044
IC
11086function chunkInvalid(state, chunk) {
11087 var er = null;
11088 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
11089 er = new TypeError('Invalid non-string/buffer chunk');
11090 }
11091 return er;
11092}
11093
9987f0c1
IC
11094function onEofChunk(stream, state) {
11095 if (state.ended) return;
11096 if (state.decoder) {
11097 var chunk = state.decoder.end();
11098 if (chunk && chunk.length) {
11099 state.buffer.push(chunk);
11100 state.length += state.objectMode ? 1 : chunk.length;
11101 }
11102 }
11103 state.ended = true;
8b095871 11104
9987f0c1
IC
11105 // emit 'readable' now to make sure it gets picked up.
11106 emitReadable(stream);
8b095871
IC
11107}
11108
9987f0c1
IC
11109// Don't emit readable right away in sync mode, because this can trigger
11110// another read() call => stack overflow. This way, it might trigger
11111// a nextTick recursion warning, but that's not so bad.
11112function emitReadable(stream) {
11113 var state = stream._readableState;
11114 state.needReadable = false;
11115 if (!state.emittedReadable) {
11116 debug('emitReadable', state.flowing);
11117 state.emittedReadable = true;
11118 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
11119 }
8b095871
IC
11120}
11121
9987f0c1
IC
11122function emitReadable_(stream) {
11123 debug('emit readable');
11124 stream.emit('readable');
11125 flow(stream);
8b095871
IC
11126}
11127
9987f0c1
IC
11128// at this point, the user has presumably seen the 'readable' event,
11129// and called read() to consume some data. that may have triggered
11130// in turn another _read(n) call, in which case reading = true if
11131// it's in progress.
11132// However, if we're not ended, or reading, and the length < hwm,
11133// then go ahead and try to read some more preemptively.
11134function maybeReadMore(stream, state) {
11135 if (!state.readingMore) {
11136 state.readingMore = true;
11137 processNextTick(maybeReadMore_, stream, state);
11138 }
8b095871
IC
11139}
11140
9987f0c1
IC
11141function maybeReadMore_(stream, state) {
11142 var len = state.length;
11143 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
11144 debug('maybeReadMore read 0');
11145 stream.read(0);
11146 if (len === state.length)
11147 // didn't get any data, stop spinning.
11148 break;else len = state.length;
11149 }
11150 state.readingMore = false;
8b095871
IC
11151}
11152
9987f0c1
IC
11153// abstract method. to be overridden in specific implementation classes.
11154// call cb(er, data) where data is <= n in length.
11155// for virtual (non-string, non-buffer) streams, "length" is somewhat
11156// arbitrary, and perhaps not very meaningful.
11157Readable.prototype._read = function (n) {
11158 this.emit('error', new Error('_read() is not implemented'));
11159};
8b095871 11160
9987f0c1
IC
11161Readable.prototype.pipe = function (dest, pipeOpts) {
11162 var src = this;
11163 var state = this._readableState;
11164
11165 switch (state.pipesCount) {
11166 case 0:
11167 state.pipes = dest;
11168 break;
11169 case 1:
11170 state.pipes = [state.pipes, dest];
11171 break;
11172 default:
11173 state.pipes.push(dest);
11174 break;
8b095871 11175 }
9987f0c1
IC
11176 state.pipesCount += 1;
11177 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
8b095871 11178
9987f0c1 11179 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
8b095871 11180
cf6c2044 11181 var endFn = doEnd ? onend : cleanup;
9987f0c1 11182 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
8b095871 11183
9987f0c1 11184 dest.on('unpipe', onunpipe);
cf6c2044 11185 function onunpipe(readable) {
9987f0c1
IC
11186 debug('onunpipe');
11187 if (readable === src) {
cf6c2044 11188 cleanup();
9987f0c1 11189 }
8b095871
IC
11190 }
11191
9987f0c1
IC
11192 function onend() {
11193 debug('onend');
11194 dest.end();
11195 }
8b095871 11196
9987f0c1
IC
11197 // when the dest drains, it reduces the awaitDrain counter
11198 // on the source. This would be more elegant with a .once()
11199 // handler in flow(), but adding and removing repeatedly is
11200 // too slow.
11201 var ondrain = pipeOnDrain(src);
11202 dest.on('drain', ondrain);
8b095871 11203
9987f0c1
IC
11204 var cleanedUp = false;
11205 function cleanup() {
11206 debug('cleanup');
11207 // cleanup event handlers once the pipe is broken
11208 dest.removeListener('close', onclose);
11209 dest.removeListener('finish', onfinish);
11210 dest.removeListener('drain', ondrain);
11211 dest.removeListener('error', onerror);
11212 dest.removeListener('unpipe', onunpipe);
11213 src.removeListener('end', onend);
cf6c2044 11214 src.removeListener('end', cleanup);
9987f0c1 11215 src.removeListener('data', ondata);
8b095871 11216
9987f0c1
IC
11217 cleanedUp = true;
11218
11219 // if the reader is waiting for a drain event from this
11220 // specific writer, then it would cause it to never start
11221 // flowing again.
11222 // So, if this is awaiting a drain, then we just call it now.
11223 // If we don't know, then assume that we are waiting for one.
11224 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
8b095871 11225 }
8b095871 11226
9987f0c1
IC
11227 // If the user pushes more data while we're writing to dest then we'll end up
11228 // in ondata again. However, we only want to increase awaitDrain once because
11229 // dest will only emit one 'drain' event for the multiple writes.
11230 // => Introduce a guard on increasing awaitDrain.
11231 var increasedAwaitDrain = false;
11232 src.on('data', ondata);
11233 function ondata(chunk) {
11234 debug('ondata');
11235 increasedAwaitDrain = false;
11236 var ret = dest.write(chunk);
11237 if (false === ret && !increasedAwaitDrain) {
11238 // If the user unpiped during `dest.write()`, it is possible
11239 // to get stuck in a permanently paused state if that write
11240 // also returned false.
11241 // => Check whether `dest` is still a piping destination.
11242 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
11243 debug('false write response, pause', src._readableState.awaitDrain);
11244 src._readableState.awaitDrain++;
11245 increasedAwaitDrain = true;
11246 }
11247 src.pause();
11248 }
8b095871 11249 }
8b095871 11250
9987f0c1
IC
11251 // if the dest has an error, then stop piping into it.
11252 // however, don't suppress the throwing behavior for this.
11253 function onerror(er) {
11254 debug('onerror', er);
11255 unpipe();
11256 dest.removeListener('error', onerror);
11257 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
8b095871 11258 }
8b095871 11259
9987f0c1
IC
11260 // Make sure our error handler is attached before userland ones.
11261 prependListener(dest, 'error', onerror);
11262
11263 // Both close and finish should trigger unpipe, but only once.
11264 function onclose() {
11265 dest.removeListener('finish', onfinish);
11266 unpipe();
8b095871 11267 }
9987f0c1
IC
11268 dest.once('close', onclose);
11269 function onfinish() {
11270 debug('onfinish');
11271 dest.removeListener('close', onclose);
11272 unpipe();
11273 }
11274 dest.once('finish', onfinish);
8b095871 11275
9987f0c1
IC
11276 function unpipe() {
11277 debug('unpipe');
11278 src.unpipe(dest);
8b095871 11279 }
8b095871 11280
9987f0c1
IC
11281 // tell the dest that it's being piped to
11282 dest.emit('pipe', src);
8b095871 11283
9987f0c1
IC
11284 // start the flow if it hasn't been started already.
11285 if (!state.flowing) {
11286 debug('pipe resume');
11287 src.resume();
8b095871
IC
11288 }
11289
9987f0c1
IC
11290 return dest;
11291};
8b095871 11292
9987f0c1
IC
11293function pipeOnDrain(src) {
11294 return function () {
11295 var state = src._readableState;
11296 debug('pipeOnDrain', state.awaitDrain);
11297 if (state.awaitDrain) state.awaitDrain--;
11298 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
11299 state.flowing = true;
11300 flow(src);
11301 }
11302 };
8b095871
IC
11303}
11304
9987f0c1
IC
11305Readable.prototype.unpipe = function (dest) {
11306 var state = this._readableState;
8b095871 11307
9987f0c1
IC
11308 // if we're not piping anywhere, then do nothing.
11309 if (state.pipesCount === 0) return this;
8b095871 11310
9987f0c1
IC
11311 // just one destination. most common case.
11312 if (state.pipesCount === 1) {
11313 // passed in one, but it's not the right one.
11314 if (dest && dest !== state.pipes) return this;
11315
11316 if (!dest) dest = state.pipes;
11317
11318 // got a match.
11319 state.pipes = null;
11320 state.pipesCount = 0;
11321 state.flowing = false;
cf6c2044 11322 if (dest) dest.emit('unpipe', this);
9987f0c1 11323 return this;
8b095871
IC
11324 }
11325
9987f0c1 11326 // slow case. multiple pipe destinations.
8b095871 11327
9987f0c1
IC
11328 if (!dest) {
11329 // remove all.
11330 var dests = state.pipes;
11331 var len = state.pipesCount;
11332 state.pipes = null;
11333 state.pipesCount = 0;
11334 state.flowing = false;
8b095871 11335
9987f0c1 11336 for (var i = 0; i < len; i++) {
cf6c2044 11337 dests[i].emit('unpipe', this);
9987f0c1 11338 }return this;
8b095871 11339 }
8b095871 11340
9987f0c1
IC
11341 // try to find the right one.
11342 var index = indexOf(state.pipes, dest);
11343 if (index === -1) return this;
8b095871 11344
9987f0c1
IC
11345 state.pipes.splice(index, 1);
11346 state.pipesCount -= 1;
11347 if (state.pipesCount === 1) state.pipes = state.pipes[0];
8b095871 11348
cf6c2044 11349 dest.emit('unpipe', this);
8b095871 11350
9987f0c1
IC
11351 return this;
11352};
8b095871 11353
9987f0c1
IC
11354// set up data events if they are asked for
11355// Ensure readable listeners eventually get something
11356Readable.prototype.on = function (ev, fn) {
11357 var res = Stream.prototype.on.call(this, ev, fn);
11358
11359 if (ev === 'data') {
11360 // Start flowing on next tick if stream isn't explicitly paused
11361 if (this._readableState.flowing !== false) this.resume();
11362 } else if (ev === 'readable') {
11363 var state = this._readableState;
11364 if (!state.endEmitted && !state.readableListening) {
11365 state.readableListening = state.needReadable = true;
11366 state.emittedReadable = false;
11367 if (!state.reading) {
11368 processNextTick(nReadingNextTick, this);
11369 } else if (state.length) {
cf6c2044 11370 emitReadable(this, state);
9987f0c1
IC
11371 }
11372 }
8b095871 11373 }
8b095871 11374
9987f0c1
IC
11375 return res;
11376};
11377Readable.prototype.addListener = Readable.prototype.on;
8b095871 11378
9987f0c1
IC
11379function nReadingNextTick(self) {
11380 debug('readable nexttick read 0');
11381 self.read(0);
8b095871
IC
11382}
11383
9987f0c1
IC
11384// pause() and resume() are remnants of the legacy readable stream API
11385// If the user uses them, then switch into old mode.
11386Readable.prototype.resume = function () {
11387 var state = this._readableState;
11388 if (!state.flowing) {
11389 debug('resume');
11390 state.flowing = true;
11391 resume(this, state);
11392 }
11393 return this;
11394};
11395
11396function resume(stream, state) {
11397 if (!state.resumeScheduled) {
11398 state.resumeScheduled = true;
11399 processNextTick(resume_, stream, state);
8b095871 11400 }
8b095871
IC
11401}
11402
9987f0c1
IC
11403function resume_(stream, state) {
11404 if (!state.reading) {
11405 debug('resume read 0');
11406 stream.read(0);
11407 }
11408
11409 state.resumeScheduled = false;
11410 state.awaitDrain = 0;
11411 stream.emit('resume');
11412 flow(stream);
11413 if (state.flowing && !state.reading) stream.read(0);
8b095871
IC
11414}
11415
9987f0c1
IC
11416Readable.prototype.pause = function () {
11417 debug('call pause flowing=%j', this._readableState.flowing);
11418 if (false !== this._readableState.flowing) {
11419 debug('pause');
11420 this._readableState.flowing = false;
11421 this.emit('pause');
11422 }
11423 return this;
11424};
11425
11426function flow(stream) {
11427 var state = stream._readableState;
11428 debug('flow', state.flowing);
11429 while (state.flowing && stream.read() !== null) {}
8b095871
IC
11430}
11431
9987f0c1
IC
11432// wrap an old-style stream as the async data source.
11433// This is *not* part of the readable stream interface.
11434// It is an ugly unfortunate mess of history.
11435Readable.prototype.wrap = function (stream) {
11436 var state = this._readableState;
11437 var paused = false;
8b095871 11438
9987f0c1
IC
11439 var self = this;
11440 stream.on('end', function () {
11441 debug('wrapped end');
11442 if (state.decoder && !state.ended) {
11443 var chunk = state.decoder.end();
11444 if (chunk && chunk.length) self.push(chunk);
11445 }
8b095871 11446
9987f0c1
IC
11447 self.push(null);
11448 });
8b095871 11449
9987f0c1
IC
11450 stream.on('data', function (chunk) {
11451 debug('wrapped data');
11452 if (state.decoder) chunk = state.decoder.write(chunk);
8b095871 11453
9987f0c1
IC
11454 // don't skip over falsy values in objectMode
11455 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
8b095871 11456
9987f0c1
IC
11457 var ret = self.push(chunk);
11458 if (!ret) {
11459 paused = true;
11460 stream.pause();
8b095871 11461 }
9987f0c1
IC
11462 });
11463
11464 // proxy all the other methods.
11465 // important when wrapping filters and duplexes.
11466 for (var i in stream) {
11467 if (this[i] === undefined && typeof stream[i] === 'function') {
11468 this[i] = function (method) {
11469 return function () {
11470 return stream[method].apply(stream, arguments);
11471 };
11472 }(i);
8b095871 11473 }
8b095871
IC
11474 }
11475
9987f0c1
IC
11476 // proxy certain important events.
11477 for (var n = 0; n < kProxyEvents.length; n++) {
11478 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
11479 }
8b095871 11480
9987f0c1
IC
11481 // when we try to consume some more bytes, simply unpause the
11482 // underlying stream.
11483 self._read = function (n) {
11484 debug('wrapped _read', n);
11485 if (paused) {
11486 paused = false;
11487 stream.resume();
11488 }
11489 };
8b095871 11490
9987f0c1
IC
11491 return self;
11492};
8b095871 11493
9987f0c1
IC
11494// exposed for testing purposes only.
11495Readable._fromList = fromList;
8b095871 11496
9987f0c1
IC
11497// Pluck off n bytes from an array of buffers.
11498// Length is the combined lengths of all the buffers in the list.
11499// This function is designed to be inlinable, so please take care when making
11500// changes to the function body.
11501function fromList(n, state) {
11502 // nothing buffered
11503 if (state.length === 0) return null;
8b095871 11504
9987f0c1
IC
11505 var ret;
11506 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
11507 // read it all, truncate the list
11508 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
11509 state.buffer.clear();
8b095871 11510 } else {
9987f0c1
IC
11511 // read part of list
11512 ret = fromListPartial(n, state.buffer, state.decoder);
8b095871
IC
11513 }
11514
9987f0c1 11515 return ret;
8b095871
IC
11516}
11517
9987f0c1
IC
11518// Extracts only enough buffered data to satisfy the amount requested.
11519// This function is designed to be inlinable, so please take care when making
11520// changes to the function body.
11521function fromListPartial(n, list, hasStrings) {
11522 var ret;
11523 if (n < list.head.data.length) {
11524 // slice is the same for buffers and strings
11525 ret = list.head.data.slice(0, n);
11526 list.head.data = list.head.data.slice(n);
11527 } else if (n === list.head.data.length) {
11528 // first chunk is a perfect match
11529 ret = list.shift();
8b095871 11530 } else {
9987f0c1
IC
11531 // result spans more than one buffer
11532 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
8b095871 11533 }
9987f0c1 11534 return ret;
8b095871
IC
11535}
11536
9987f0c1
IC
11537// Copies a specified amount of characters from the list of buffered data
11538// chunks.
11539// This function is designed to be inlinable, so please take care when making
11540// changes to the function body.
11541function copyFromBufferString(n, list) {
11542 var p = list.head;
11543 var c = 1;
11544 var ret = p.data;
11545 n -= ret.length;
11546 while (p = p.next) {
11547 var str = p.data;
11548 var nb = n > str.length ? str.length : n;
11549 if (nb === str.length) ret += str;else ret += str.slice(0, n);
11550 n -= nb;
11551 if (n === 0) {
11552 if (nb === str.length) {
11553 ++c;
11554 if (p.next) list.head = p.next;else list.head = list.tail = null;
11555 } else {
11556 list.head = p;
11557 p.data = str.slice(nb);
11558 }
11559 break;
11560 }
11561 ++c;
8b095871 11562 }
9987f0c1
IC
11563 list.length -= c;
11564 return ret;
8b095871
IC
11565}
11566
9987f0c1
IC
11567// Copies a specified amount of bytes from the list of buffered data chunks.
11568// This function is designed to be inlinable, so please take care when making
11569// changes to the function body.
11570function copyFromBuffer(n, list) {
cf6c2044 11571 var ret = bufferShim.allocUnsafe(n);
9987f0c1
IC
11572 var p = list.head;
11573 var c = 1;
11574 p.data.copy(ret);
11575 n -= p.data.length;
11576 while (p = p.next) {
11577 var buf = p.data;
11578 var nb = n > buf.length ? buf.length : n;
11579 buf.copy(ret, ret.length - n, 0, nb);
11580 n -= nb;
11581 if (n === 0) {
11582 if (nb === buf.length) {
11583 ++c;
11584 if (p.next) list.head = p.next;else list.head = list.tail = null;
11585 } else {
11586 list.head = p;
11587 p.data = buf.slice(nb);
8b095871 11588 }
9987f0c1 11589 break;
8b095871 11590 }
9987f0c1 11591 ++c;
8b095871 11592 }
9987f0c1
IC
11593 list.length -= c;
11594 return ret;
8b095871
IC
11595}
11596
9987f0c1
IC
11597function endReadable(stream) {
11598 var state = stream._readableState;
8b095871 11599
9987f0c1
IC
11600 // If we get here before consuming all the bytes, then that is a
11601 // bug in node. Should never happen.
11602 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
8b095871 11603
9987f0c1
IC
11604 if (!state.endEmitted) {
11605 state.ended = true;
11606 processNextTick(endReadableNT, state, stream);
8b095871 11607 }
9987f0c1 11608}
8b095871 11609
9987f0c1
IC
11610function endReadableNT(state, stream) {
11611 // Check that we didn't get one last unshift.
11612 if (!state.endEmitted && state.length === 0) {
11613 state.endEmitted = true;
11614 stream.readable = false;
11615 stream.emit('end');
11616 }
8b095871
IC
11617}
11618
9987f0c1
IC
11619function forEach(xs, f) {
11620 for (var i = 0, l = xs.length; i < l; i++) {
11621 f(xs[i], i);
11622 }
8b095871
IC
11623}
11624
9987f0c1
IC
11625function indexOf(xs, x) {
11626 for (var i = 0, l = xs.length; i < l; i++) {
11627 if (xs[i] === x) return i;
8b095871 11628 }
9987f0c1 11629 return -1;
8b095871 11630}
cf6c2044
IC
11631}).call(this,require('_process'))
11632},{"./_stream_duplex":15,"./internal/streams/BufferList":20,"./internal/streams/stream":21,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":22,"util":3}],18:[function(require,module,exports){
9987f0c1
IC
11633// a transform stream is a readable/writable stream where you do
11634// something with the data. Sometimes it's called a "filter",
11635// but that's not a great name for it, since that implies a thing where
11636// some bits pass through, and others are simply ignored. (That would
11637// be a valid example of a transform, of course.)
11638//
11639// While the output is causally related to the input, it's not a
11640// necessarily symmetric or synchronous transformation. For example,
11641// a zlib stream might take multiple plain-text writes(), and then
11642// emit a single compressed chunk some time in the future.
11643//
11644// Here's how this works:
11645//
11646// The Transform stream has all the aspects of the readable and writable
11647// stream classes. When you write(chunk), that calls _write(chunk,cb)
11648// internally, and returns false if there's a lot of pending writes
11649// buffered up. When you call read(), that calls _read(n) until
11650// there's enough pending readable data buffered up.
11651//
11652// In a transform stream, the written data is placed in a buffer. When
11653// _read(n) is called, it transforms the queued up data, calling the
11654// buffered _write cb's as it consumes chunks. If consuming a single
11655// written chunk would result in multiple output chunks, then the first
11656// outputted bit calls the readcb, and subsequent chunks just go into
11657// the read buffer, and will cause it to emit 'readable' if necessary.
11658//
11659// This way, back-pressure is actually determined by the reading side,
11660// since _read has to be called to start processing a new chunk. However,
11661// a pathological inflate type of transform can cause excessive buffering
11662// here. For example, imagine a stream where every byte of input is
11663// interpreted as an integer from 0-255, and then results in that many
11664// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
11665// 1kb of data being output. In this case, you could write a very small
11666// amount of input, and end up with a very large amount of output. In
11667// such a pathological inflating mechanism, there'd be no way to tell
11668// the system to stop doing the transform. A single 4MB write could
11669// cause the system to run out of memory.
11670//
11671// However, even in such a pathological case, only a single written chunk
11672// would be consumed, and then the rest would wait (un-transformed) until
11673// the results of the previous transformed chunk were consumed.
8b095871 11674
9987f0c1 11675'use strict';
8b095871 11676
9987f0c1 11677module.exports = Transform;
8b095871 11678
9987f0c1 11679var Duplex = require('./_stream_duplex');
8b095871 11680
9987f0c1
IC
11681/*<replacement>*/
11682var util = require('core-util-is');
11683util.inherits = require('inherits');
11684/*</replacement>*/
8b095871 11685
9987f0c1 11686util.inherits(Transform, Duplex);
8b095871 11687
9987f0c1
IC
11688function TransformState(stream) {
11689 this.afterTransform = function (er, data) {
11690 return afterTransform(stream, er, data);
11691 };
8b095871 11692
9987f0c1
IC
11693 this.needTransform = false;
11694 this.transforming = false;
11695 this.writecb = null;
11696 this.writechunk = null;
11697 this.writeencoding = null;
11698}
8b095871 11699
9987f0c1
IC
11700function afterTransform(stream, er, data) {
11701 var ts = stream._transformState;
11702 ts.transforming = false;
8b095871 11703
9987f0c1 11704 var cb = ts.writecb;
8b095871 11705
cf6c2044 11706 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
8b095871 11707
9987f0c1
IC
11708 ts.writechunk = null;
11709 ts.writecb = null;
8b095871 11710
9987f0c1 11711 if (data !== null && data !== undefined) stream.push(data);
8b095871 11712
9987f0c1 11713 cb(er);
8b095871 11714
9987f0c1
IC
11715 var rs = stream._readableState;
11716 rs.reading = false;
11717 if (rs.needReadable || rs.length < rs.highWaterMark) {
11718 stream._read(rs.highWaterMark);
11719 }
11720}
8b095871 11721
9987f0c1
IC
11722function Transform(options) {
11723 if (!(this instanceof Transform)) return new Transform(options);
8b095871 11724
9987f0c1 11725 Duplex.call(this, options);
8b095871 11726
9987f0c1 11727 this._transformState = new TransformState(this);
8b095871 11728
9987f0c1 11729 var stream = this;
8b095871 11730
9987f0c1
IC
11731 // start out asking for a readable event once data is transformed.
11732 this._readableState.needReadable = true;
8b095871 11733
9987f0c1
IC
11734 // we have implemented the _read method, and done the other things
11735 // that Readable wants before the first _read call, so unset the
11736 // sync guard flag.
11737 this._readableState.sync = false;
8b095871 11738
9987f0c1
IC
11739 if (options) {
11740 if (typeof options.transform === 'function') this._transform = options.transform;
8b095871 11741
9987f0c1 11742 if (typeof options.flush === 'function') this._flush = options.flush;
8b095871 11743 }
8b095871 11744
9987f0c1
IC
11745 // When the writable side finishes, then flush out anything remaining.
11746 this.once('prefinish', function () {
11747 if (typeof this._flush === 'function') this._flush(function (er, data) {
11748 done(stream, er, data);
11749 });else done(stream);
11750 });
11751}
8b095871 11752
9987f0c1
IC
11753Transform.prototype.push = function (chunk, encoding) {
11754 this._transformState.needTransform = false;
11755 return Duplex.prototype.push.call(this, chunk, encoding);
11756};
8b095871 11757
9987f0c1
IC
11758// This is the part where you do stuff!
11759// override this function in implementation classes.
11760// 'chunk' is an input chunk.
11761//
11762// Call `push(newChunk)` to pass along transformed output
11763// to the readable side. You may call 'push' zero or more times.
11764//
11765// Call `cb(err)` when you are done with this chunk. If you pass
11766// an error, then that'll put the hurt on the whole operation. If you
11767// never call cb(), then you'll never get another chunk.
11768Transform.prototype._transform = function (chunk, encoding, cb) {
11769 throw new Error('_transform() is not implemented');
11770};
8b095871 11771
9987f0c1
IC
11772Transform.prototype._write = function (chunk, encoding, cb) {
11773 var ts = this._transformState;
11774 ts.writecb = cb;
11775 ts.writechunk = chunk;
11776 ts.writeencoding = encoding;
11777 if (!ts.transforming) {
11778 var rs = this._readableState;
11779 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
8b095871 11780 }
9987f0c1 11781};
8b095871 11782
9987f0c1
IC
11783// Doesn't matter what the args are here.
11784// _transform does all the work.
11785// That we got here means that the readable side wants more data.
11786Transform.prototype._read = function (n) {
11787 var ts = this._transformState;
8b095871 11788
9987f0c1
IC
11789 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
11790 ts.transforming = true;
11791 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
11792 } else {
11793 // mark that we need a transform, so that any data that comes in
11794 // will get processed, now that we've asked for it.
11795 ts.needTransform = true;
11796 }
11797};
8b095871 11798
9987f0c1
IC
11799function done(stream, er, data) {
11800 if (er) return stream.emit('error', er);
8b095871 11801
9987f0c1 11802 if (data !== null && data !== undefined) stream.push(data);
8b095871 11803
9987f0c1
IC
11804 // if there's nothing in the write buffer, then that means
11805 // that nothing more will ever be provided
11806 var ws = stream._writableState;
11807 var ts = stream._transformState;
8b095871 11808
9987f0c1 11809 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
8b095871 11810
9987f0c1
IC
11811 if (ts.transforming) throw new Error('Calling transform done when still transforming');
11812
11813 return stream.push(null);
11814}
cf6c2044
IC
11815},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
11816(function (process){
9987f0c1
IC
11817// A bit simpler than readable streams.
11818// Implement an async ._write(chunk, encoding, cb), and it'll handle all
11819// the drain event emission and buffering.
11820
11821'use strict';
11822
cf6c2044 11823module.exports = Writable;
9987f0c1 11824
cf6c2044 11825/*<replacement>*/
9987f0c1
IC
11826var processNextTick = require('process-nextick-args');
11827/*</replacement>*/
11828
9987f0c1
IC
11829/*<replacement>*/
11830var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
11831/*</replacement>*/
8b095871 11832
9987f0c1
IC
11833/*<replacement>*/
11834var Duplex;
11835/*</replacement>*/
11836
11837Writable.WritableState = WritableState;
11838
11839/*<replacement>*/
11840var util = require('core-util-is');
11841util.inherits = require('inherits');
11842/*</replacement>*/
11843
11844/*<replacement>*/
11845var internalUtil = {
11846 deprecate: require('util-deprecate')
8b095871 11847};
9987f0c1 11848/*</replacement>*/
8b095871 11849
9987f0c1
IC
11850/*<replacement>*/
11851var Stream = require('./internal/streams/stream');
11852/*</replacement>*/
8b095871 11853
cf6c2044 11854var Buffer = require('buffer').Buffer;
9987f0c1 11855/*<replacement>*/
cf6c2044 11856var bufferShim = require('buffer-shims');
9987f0c1 11857/*</replacement>*/
8b095871 11858
9987f0c1 11859util.inherits(Writable, Stream);
8b095871 11860
9987f0c1 11861function nop() {}
8b095871 11862
cf6c2044
IC
11863function WriteReq(chunk, encoding, cb) {
11864 this.chunk = chunk;
11865 this.encoding = encoding;
11866 this.callback = cb;
11867 this.next = null;
11868}
11869
9987f0c1
IC
11870function WritableState(options, stream) {
11871 Duplex = Duplex || require('./_stream_duplex');
8b095871 11872
9987f0c1 11873 options = options || {};
8b095871 11874
9987f0c1
IC
11875 // object stream flag to indicate whether or not this stream
11876 // contains buffers or objects.
11877 this.objectMode = !!options.objectMode;
8b095871 11878
9987f0c1 11879 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
8b095871 11880
9987f0c1
IC
11881 // the point at which write() starts returning false
11882 // Note: 0 is a valid value, means that we always return false if
11883 // the entire buffer is not flushed immediately on write()
11884 var hwm = options.highWaterMark;
11885 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
11886 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
8b095871 11887
9987f0c1 11888 // cast to ints.
cf6c2044 11889 this.highWaterMark = ~~this.highWaterMark;
8b095871 11890
9987f0c1
IC
11891 // drain event flag.
11892 this.needDrain = false;
11893 // at the start of calling end()
11894 this.ending = false;
11895 // when end() has been called, and returned
11896 this.ended = false;
11897 // when 'finish' is emitted
11898 this.finished = false;
8b095871 11899
9987f0c1
IC
11900 // should we decode strings into buffers before passing to _write?
11901 // this is here so that some node-core streams can optimize string
11902 // handling at a lower level.
11903 var noDecode = options.decodeStrings === false;
11904 this.decodeStrings = !noDecode;
8b095871 11905
9987f0c1
IC
11906 // Crypto is kind of old and crusty. Historically, its default string
11907 // encoding is 'binary' so we have to make this configurable.
11908 // Everything else in the universe uses 'utf8', though.
11909 this.defaultEncoding = options.defaultEncoding || 'utf8';
8b095871 11910
9987f0c1
IC
11911 // not an actual buffer we keep track of, but a measurement
11912 // of how much we're waiting to get pushed to some underlying
11913 // socket or file.
11914 this.length = 0;
8b095871 11915
9987f0c1
IC
11916 // a flag to see when we're in the middle of a write.
11917 this.writing = false;
8b095871 11918
9987f0c1
IC
11919 // when true all writes will be buffered until .uncork() call
11920 this.corked = 0;
8b095871 11921
9987f0c1
IC
11922 // a flag to be able to tell if the onwrite cb is called immediately,
11923 // or on a later tick. We set this to true at first, because any
11924 // actions that shouldn't happen until "later" should generally also
11925 // not happen before the first write call.
11926 this.sync = true;
8b095871 11927
9987f0c1
IC
11928 // a flag to know if we're processing previously buffered items, which
11929 // may call the _write() callback in the same tick, so that we don't
11930 // end up in an overlapped onwrite situation.
11931 this.bufferProcessing = false;
8b095871 11932
9987f0c1
IC
11933 // the callback that's passed to _write(chunk,cb)
11934 this.onwrite = function (er) {
11935 onwrite(stream, er);
11936 };
8b095871 11937
9987f0c1
IC
11938 // the callback that the user supplies to write(chunk,encoding,cb)
11939 this.writecb = null;
8b095871 11940
9987f0c1
IC
11941 // the amount that is being written when _write is called.
11942 this.writelen = 0;
8b095871 11943
9987f0c1
IC
11944 this.bufferedRequest = null;
11945 this.lastBufferedRequest = null;
8b095871 11946
9987f0c1
IC
11947 // number of pending user-supplied write callbacks
11948 // this must be 0 before 'finish' can be emitted
11949 this.pendingcb = 0;
8b095871 11950
9987f0c1
IC
11951 // emit prefinish if the only thing we're waiting for is _write cbs
11952 // This is relevant for synchronous Transform streams
11953 this.prefinished = false;
8b095871 11954
9987f0c1
IC
11955 // True if the error was already emitted and should not be thrown again
11956 this.errorEmitted = false;
8b095871 11957
9987f0c1
IC
11958 // count buffered requests
11959 this.bufferedRequestCount = 0;
8b095871 11960
9987f0c1
IC
11961 // allocate the first CorkedRequest, there is always
11962 // one allocated and free to use, and we maintain at most two
11963 this.corkedRequestsFree = new CorkedRequest(this);
11964}
8b095871 11965
9987f0c1
IC
11966WritableState.prototype.getBuffer = function getBuffer() {
11967 var current = this.bufferedRequest;
11968 var out = [];
11969 while (current) {
11970 out.push(current);
11971 current = current.next;
11972 }
11973 return out;
11974};
11975
11976(function () {
11977 try {
11978 Object.defineProperty(WritableState.prototype, 'buffer', {
11979 get: internalUtil.deprecate(function () {
11980 return this.getBuffer();
cf6c2044 11981 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
9987f0c1
IC
11982 });
11983 } catch (_) {}
11984})();
11985
11986// Test _writableState for inheritance to account for Duplex streams,
11987// whose prototype chain only points to Readable.
11988var realHasInstance;
11989if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
11990 realHasInstance = Function.prototype[Symbol.hasInstance];
11991 Object.defineProperty(Writable, Symbol.hasInstance, {
11992 value: function (object) {
11993 if (realHasInstance.call(this, object)) return true;
11994
11995 return object && object._writableState instanceof WritableState;
8b095871 11996 }
9987f0c1
IC
11997 });
11998} else {
11999 realHasInstance = function (object) {
12000 return object instanceof this;
12001 };
12002}
8b095871 12003
9987f0c1
IC
12004function Writable(options) {
12005 Duplex = Duplex || require('./_stream_duplex');
12006
12007 // Writable ctor is applied to Duplexes, too.
12008 // `realHasInstance` is necessary because using plain `instanceof`
12009 // would return false, as no `_writableState` property is attached.
12010
12011 // Trying to use the custom `instanceof` for Writable here will also break the
12012 // Node.js LazyTransform implementation, which has a non-trivial getter for
12013 // `_writableState` that would lead to infinite recursion.
12014 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
12015 return new Writable(options);
8b095871
IC
12016 }
12017
9987f0c1
IC
12018 this._writableState = new WritableState(options, this);
12019
12020 // legacy.
12021 this.writable = true;
12022
12023 if (options) {
12024 if (typeof options.write === 'function') this._write = options.write;
12025
12026 if (typeof options.writev === 'function') this._writev = options.writev;
9987f0c1
IC
12027 }
12028
12029 Stream.call(this);
12030}
12031
12032// Otherwise people can pipe Writable streams, which is just wrong.
12033Writable.prototype.pipe = function () {
12034 this.emit('error', new Error('Cannot pipe, not readable'));
8b095871
IC
12035};
12036
9987f0c1
IC
12037function writeAfterEnd(stream, cb) {
12038 var er = new Error('write after end');
12039 // TODO: defer error events consistently everywhere, not just the cb
12040 stream.emit('error', er);
12041 processNextTick(cb, er);
12042}
8b095871 12043
9987f0c1
IC
12044// Checks that a user-supplied chunk is valid, especially for the particular
12045// mode the stream is in. Currently this means that `null` is never accepted
12046// and undefined/non-string values are only allowed in object mode.
12047function validChunk(stream, state, chunk, cb) {
12048 var valid = true;
12049 var er = false;
8b095871 12050
9987f0c1
IC
12051 if (chunk === null) {
12052 er = new TypeError('May not write null values to stream');
12053 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
12054 er = new TypeError('Invalid non-string/buffer chunk');
12055 }
12056 if (er) {
12057 stream.emit('error', er);
12058 processNextTick(cb, er);
12059 valid = false;
8b095871 12060 }
9987f0c1
IC
12061 return valid;
12062}
8b095871 12063
9987f0c1
IC
12064Writable.prototype.write = function (chunk, encoding, cb) {
12065 var state = this._writableState;
12066 var ret = false;
cf6c2044 12067 var isBuf = Buffer.isBuffer(chunk);
8b095871 12068
9987f0c1
IC
12069 if (typeof encoding === 'function') {
12070 cb = encoding;
12071 encoding = null;
12072 }
8b095871 12073
9987f0c1
IC
12074 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
12075
12076 if (typeof cb !== 'function') cb = nop;
12077
12078 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
12079 state.pendingcb++;
12080 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
8b095871 12081 }
8b095871 12082
9987f0c1 12083 return ret;
8b095871
IC
12084};
12085
9987f0c1
IC
12086Writable.prototype.cork = function () {
12087 var state = this._writableState;
12088
12089 state.corked++;
8b095871
IC
12090};
12091
9987f0c1
IC
12092Writable.prototype.uncork = function () {
12093 var state = this._writableState;
12094
12095 if (state.corked) {
12096 state.corked--;
12097
12098 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
12099 }
8b095871
IC
12100};
12101
9987f0c1
IC
12102Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
12103 // node::ParseEncoding() requires lower case.
12104 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
12105 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
12106 this._writableState.defaultEncoding = encoding;
12107 return this;
12108};
8b095871 12109
9987f0c1
IC
12110function decodeChunk(state, chunk, encoding) {
12111 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
cf6c2044 12112 chunk = bufferShim.from(chunk, encoding);
9987f0c1
IC
12113 }
12114 return chunk;
8b095871
IC
12115}
12116
9987f0c1
IC
12117// if we're already writing something, then just put this
12118// in the queue, and wait our turn. Otherwise, call _write
12119// If we return false, then we need a drain event, so set that flag.
12120function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
12121 if (!isBuf) {
cf6c2044
IC
12122 chunk = decodeChunk(state, chunk, encoding);
12123 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
9987f0c1
IC
12124 }
12125 var len = state.objectMode ? 1 : chunk.length;
8b095871 12126
9987f0c1 12127 state.length += len;
8b095871 12128
9987f0c1
IC
12129 var ret = state.length < state.highWaterMark;
12130 // we must ensure that previous needDrain will not be reset to false.
12131 if (!ret) state.needDrain = true;
12132
12133 if (state.writing || state.corked) {
12134 var last = state.lastBufferedRequest;
cf6c2044 12135 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
9987f0c1
IC
12136 if (last) {
12137 last.next = state.lastBufferedRequest;
12138 } else {
12139 state.bufferedRequest = state.lastBufferedRequest;
12140 }
12141 state.bufferedRequestCount += 1;
12142 } else {
12143 doWrite(stream, state, false, len, chunk, encoding, cb);
8b095871 12144 }
9987f0c1
IC
12145
12146 return ret;
8b095871
IC
12147}
12148
9987f0c1
IC
12149function doWrite(stream, state, writev, len, chunk, encoding, cb) {
12150 state.writelen = len;
12151 state.writecb = cb;
12152 state.writing = true;
12153 state.sync = true;
12154 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
12155 state.sync = false;
12156}
8b095871 12157
9987f0c1
IC
12158function onwriteError(stream, state, sync, er, cb) {
12159 --state.pendingcb;
cf6c2044 12160 if (sync) processNextTick(cb, er);else cb(er);
8b095871 12161
cf6c2044
IC
12162 stream._writableState.errorEmitted = true;
12163 stream.emit('error', er);
9987f0c1 12164}
8b095871 12165
9987f0c1
IC
12166function onwriteStateUpdate(state) {
12167 state.writing = false;
12168 state.writecb = null;
12169 state.length -= state.writelen;
12170 state.writelen = 0;
8b095871
IC
12171}
12172
9987f0c1
IC
12173function onwrite(stream, er) {
12174 var state = stream._writableState;
12175 var sync = state.sync;
12176 var cb = state.writecb;
8b095871 12177
9987f0c1 12178 onwriteStateUpdate(state);
8b095871 12179
9987f0c1
IC
12180 if (er) onwriteError(stream, state, sync, er, cb);else {
12181 // Check if we're actually ready to finish, but don't emit yet
12182 var finished = needFinish(state);
12183
12184 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
12185 clearBuffer(stream, state);
8b095871 12186 }
9987f0c1
IC
12187
12188 if (sync) {
12189 /*<replacement>*/
12190 asyncWrite(afterWrite, stream, state, finished, cb);
12191 /*</replacement>*/
12192 } else {
12193 afterWrite(stream, state, finished, cb);
8b095871 12194 }
9987f0c1
IC
12195 }
12196}
8b095871 12197
9987f0c1
IC
12198function afterWrite(stream, state, finished, cb) {
12199 if (!finished) onwriteDrain(stream, state);
12200 state.pendingcb--;
12201 cb();
12202 finishMaybe(stream, state);
8b095871 12203}
8b095871 12204
9987f0c1
IC
12205// Must force callback to be called on nextTick, so that we don't
12206// emit 'drain' before the write() consumer gets the 'false' return
12207// value, and has a chance to attach a 'drain' listener.
12208function onwriteDrain(stream, state) {
12209 if (state.length === 0 && state.needDrain) {
12210 state.needDrain = false;
12211 stream.emit('drain');
12212 }
12213}
8b095871 12214
9987f0c1
IC
12215// if there's something in the buffer waiting, then process it
12216function clearBuffer(stream, state) {
12217 state.bufferProcessing = true;
12218 var entry = state.bufferedRequest;
8b095871 12219
9987f0c1
IC
12220 if (stream._writev && entry && entry.next) {
12221 // Fast case, write everything using _writev()
12222 var l = state.bufferedRequestCount;
12223 var buffer = new Array(l);
12224 var holder = state.corkedRequestsFree;
12225 holder.entry = entry;
8b095871 12226
9987f0c1 12227 var count = 0;
9987f0c1
IC
12228 while (entry) {
12229 buffer[count] = entry;
9987f0c1
IC
12230 entry = entry.next;
12231 count += 1;
12232 }
8b095871 12233
9987f0c1 12234 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
8b095871 12235
9987f0c1
IC
12236 // doWrite is almost always async, defer these to save a bit of time
12237 // as the hot path ends with doWrite
12238 state.pendingcb++;
12239 state.lastBufferedRequest = null;
12240 if (holder.next) {
12241 state.corkedRequestsFree = holder.next;
12242 holder.next = null;
12243 } else {
12244 state.corkedRequestsFree = new CorkedRequest(state);
12245 }
12246 } else {
12247 // Slow case, write chunks one-by-one
12248 while (entry) {
12249 var chunk = entry.chunk;
12250 var encoding = entry.encoding;
12251 var cb = entry.callback;
12252 var len = state.objectMode ? 1 : chunk.length;
8b095871 12253
9987f0c1
IC
12254 doWrite(stream, state, false, len, chunk, encoding, cb);
12255 entry = entry.next;
12256 // if we didn't call the onwrite immediately, then
12257 // it means that we need to wait until it does.
12258 // also, that means that the chunk and cb are currently
12259 // being processed, so move the buffer counter past them.
12260 if (state.writing) {
12261 break;
12262 }
12263 }
8b095871 12264
9987f0c1
IC
12265 if (entry === null) state.lastBufferedRequest = null;
12266 }
8b095871 12267
9987f0c1
IC
12268 state.bufferedRequestCount = 0;
12269 state.bufferedRequest = entry;
12270 state.bufferProcessing = false;
8b095871 12271}
8b095871 12272
9987f0c1
IC
12273Writable.prototype._write = function (chunk, encoding, cb) {
12274 cb(new Error('_write() is not implemented'));
12275};
8b095871 12276
9987f0c1 12277Writable.prototype._writev = null;
8b095871 12278
9987f0c1
IC
12279Writable.prototype.end = function (chunk, encoding, cb) {
12280 var state = this._writableState;
8b095871 12281
9987f0c1
IC
12282 if (typeof chunk === 'function') {
12283 cb = chunk;
12284 chunk = null;
12285 encoding = null;
12286 } else if (typeof encoding === 'function') {
12287 cb = encoding;
12288 encoding = null;
12289 }
8b095871 12290
9987f0c1 12291 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
8b095871 12292
9987f0c1
IC
12293 // .end() fully uncorks
12294 if (state.corked) {
12295 state.corked = 1;
12296 this.uncork();
12297 }
8b095871 12298
9987f0c1
IC
12299 // ignore unnecessary end() calls.
12300 if (!state.ending && !state.finished) endWritable(this, state, cb);
12301};
8b095871 12302
9987f0c1
IC
12303function needFinish(state) {
12304 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
12305}
cf6c2044
IC
12306
12307function prefinish(stream, state) {
12308 if (!state.prefinished) {
9987f0c1
IC
12309 state.prefinished = true;
12310 stream.emit('prefinish');
9987f0c1 12311 }
8b095871
IC
12312}
12313
9987f0c1
IC
12314function finishMaybe(stream, state) {
12315 var need = needFinish(state);
12316 if (need) {
9987f0c1 12317 if (state.pendingcb === 0) {
cf6c2044 12318 prefinish(stream, state);
9987f0c1
IC
12319 state.finished = true;
12320 stream.emit('finish');
cf6c2044
IC
12321 } else {
12322 prefinish(stream, state);
9987f0c1
IC
12323 }
12324 }
12325 return need;
8b095871
IC
12326}
12327
9987f0c1
IC
12328function endWritable(stream, state, cb) {
12329 state.ending = true;
12330 finishMaybe(stream, state);
12331 if (cb) {
12332 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
8b095871 12333 }
9987f0c1
IC
12334 state.ended = true;
12335 stream.writable = false;
8b095871
IC
12336}
12337
cf6c2044
IC
12338// It seems a linked list but it is not
12339// there will be only 2 of these for each stream
12340function CorkedRequest(state) {
12341 var _this = this;
8b095871 12342
cf6c2044
IC
12343 this.next = null;
12344 this.entry = null;
12345 this.finish = function (err) {
12346 var entry = _this.entry;
12347 _this.entry = null;
12348 while (entry) {
12349 var cb = entry.callback;
12350 state.pendingcb--;
12351 cb(err);
12352 entry = entry.next;
9987f0c1 12353 }
cf6c2044
IC
12354 if (state.corkedRequestsFree) {
12355 state.corkedRequestsFree.next = _this;
12356 } else {
12357 state.corkedRequestsFree = _this;
9987f0c1 12358 }
cf6c2044
IC
12359 };
12360}
12361}).call(this,require('_process'))
12362},{"./_stream_duplex":15,"./internal/streams/stream":21,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"inherits":9,"process-nextick-args":12,"util-deprecate":30}],20:[function(require,module,exports){
9987f0c1 12363'use strict';
8b095871 12364
cf6c2044 12365var Buffer = require('buffer').Buffer;
8b095871 12366/*<replacement>*/
cf6c2044 12367var bufferShim = require('buffer-shims');
9987f0c1 12368/*</replacement>*/
8b095871 12369
cf6c2044 12370module.exports = BufferList;
8b095871 12371
cf6c2044
IC
12372function BufferList() {
12373 this.head = null;
12374 this.tail = null;
12375 this.length = 0;
12376}
8b095871 12377
cf6c2044
IC
12378BufferList.prototype.push = function (v) {
12379 var entry = { data: v, next: null };
12380 if (this.length > 0) this.tail.next = entry;else this.head = entry;
12381 this.tail = entry;
12382 ++this.length;
12383};
8b095871 12384
cf6c2044
IC
12385BufferList.prototype.unshift = function (v) {
12386 var entry = { data: v, next: this.head };
12387 if (this.length === 0) this.tail = entry;
12388 this.head = entry;
12389 ++this.length;
12390};
9987f0c1 12391
cf6c2044
IC
12392BufferList.prototype.shift = function () {
12393 if (this.length === 0) return;
12394 var ret = this.head.data;
12395 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
12396 --this.length;
12397 return ret;
12398};
8b095871 12399
cf6c2044
IC
12400BufferList.prototype.clear = function () {
12401 this.head = this.tail = null;
12402 this.length = 0;
12403};
8b095871 12404
cf6c2044
IC
12405BufferList.prototype.join = function (s) {
12406 if (this.length === 0) return '';
12407 var p = this.head;
12408 var ret = '' + p.data;
12409 while (p = p.next) {
12410 ret += s + p.data;
12411 }return ret;
12412};
8b095871 12413
cf6c2044
IC
12414BufferList.prototype.concat = function (n) {
12415 if (this.length === 0) return bufferShim.alloc(0);
12416 if (this.length === 1) return this.head.data;
12417 var ret = bufferShim.allocUnsafe(n >>> 0);
12418 var p = this.head;
12419 var i = 0;
12420 while (p) {
12421 p.data.copy(ret, i);
12422 i += p.data.length;
12423 p = p.next;
9987f0c1 12424 }
cf6c2044
IC
12425 return ret;
12426};
12427},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
12428module.exports = require('events').EventEmitter;
8b095871 12429
cf6c2044
IC
12430},{"events":7}],22:[function(require,module,exports){
12431'use strict';
8b095871 12432
cf6c2044 12433var Buffer = require('safe-buffer').Buffer;
8b095871 12434
cf6c2044
IC
12435var isEncoding = Buffer.isEncoding || function (encoding) {
12436 encoding = '' + encoding;
12437 switch (encoding && encoding.toLowerCase()) {
12438 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':
12439 return true;
12440 default:
12441 return false;
9987f0c1 12442 }
cf6c2044 12443};
8b095871 12444
cf6c2044
IC
12445function _normalizeEncoding(enc) {
12446 if (!enc) return 'utf8';
12447 var retried;
12448 while (true) {
12449 switch (enc) {
12450 case 'utf8':
12451 case 'utf-8':
12452 return 'utf8';
12453 case 'ucs2':
12454 case 'ucs-2':
12455 case 'utf16le':
12456 case 'utf-16le':
12457 return 'utf16le';
12458 case 'latin1':
12459 case 'binary':
12460 return 'latin1';
12461 case 'base64':
12462 case 'ascii':
12463 case 'hex':
12464 return enc;
12465 default:
12466 if (retried) return; // undefined
12467 enc = ('' + enc).toLowerCase();
12468 retried = true;
9987f0c1 12469 }
9987f0c1 12470 }
cf6c2044 12471};
8b095871 12472
cf6c2044
IC
12473// Do not cache `Buffer.isEncoding` when checking encoding names as some
12474// modules monkey-patch it to support additional encodings
12475function normalizeEncoding(enc) {
12476 var nenc = _normalizeEncoding(enc);
12477 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
12478 return nenc || enc;
9987f0c1 12479}
8b095871 12480
cf6c2044
IC
12481// StringDecoder provides an interface for efficiently splitting a series of
12482// buffers into a series of JS strings without breaking apart multi-byte
12483// characters.
12484exports.StringDecoder = StringDecoder;
12485function StringDecoder(encoding) {
12486 this.encoding = normalizeEncoding(encoding);
12487 var nb;
12488 switch (this.encoding) {
12489 case 'utf16le':
12490 this.text = utf16Text;
12491 this.end = utf16End;
12492 nb = 4;
12493 break;
12494 case 'utf8':
12495 this.fillLast = utf8FillLast;
12496 nb = 4;
12497 break;
12498 case 'base64':
12499 this.text = base64Text;
12500 this.end = base64End;
12501 nb = 3;
12502 break;
12503 default:
12504 this.write = simpleWrite;
12505 this.end = simpleEnd;
12506 return;
12507 }
12508 this.lastNeed = 0;
12509 this.lastTotal = 0;
12510 this.lastChar = Buffer.allocUnsafe(nb);
9987f0c1 12511}
8b095871 12512
cf6c2044
IC
12513StringDecoder.prototype.write = function (buf) {
12514 if (buf.length === 0) return '';
12515 var r;
12516 var i;
12517 if (this.lastNeed) {
12518 r = this.fillLast(buf);
12519 if (r === undefined) return '';
12520 i = this.lastNeed;
12521 this.lastNeed = 0;
12522 } else {
12523 i = 0;
12524 }
12525 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
12526 return r || '';
9987f0c1 12527};
8b095871 12528
cf6c2044 12529StringDecoder.prototype.end = utf8End;
8b095871 12530
cf6c2044
IC
12531// Returns only complete characters in a Buffer
12532StringDecoder.prototype.text = utf8Text;
8b095871 12533
cf6c2044
IC
12534// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
12535StringDecoder.prototype.fillLast = function (buf) {
12536 if (this.lastNeed <= buf.length) {
12537 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
12538 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
9987f0c1 12539 }
cf6c2044
IC
12540 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
12541 this.lastNeed -= buf.length;
12542};
8b095871 12543
cf6c2044
IC
12544// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
12545// continuation byte.
12546function utf8CheckByte(byte) {
12547 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
12548 return -1;
9987f0c1 12549}
8b095871 12550
cf6c2044
IC
12551// Checks at most 3 bytes at the end of a Buffer in order to detect an
12552// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
12553// needed to complete the UTF-8 character (if applicable) are returned.
12554function utf8CheckIncomplete(self, buf, i) {
12555 var j = buf.length - 1;
12556 if (j < i) return 0;
12557 var nb = utf8CheckByte(buf[j]);
12558 if (nb >= 0) {
12559 if (nb > 0) self.lastNeed = nb - 1;
12560 return nb;
9987f0c1
IC
12561 }
12562 if (--j < i) return 0;
12563 nb = utf8CheckByte(buf[j]);
12564 if (nb >= 0) {
12565 if (nb > 0) self.lastNeed = nb - 2;
12566 return nb;
12567 }
12568 if (--j < i) return 0;
12569 nb = utf8CheckByte(buf[j]);
12570 if (nb >= 0) {
12571 if (nb > 0) {
12572 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
8b095871 12573 }
9987f0c1 12574 return nb;
8b095871 12575 }
9987f0c1
IC
12576 return 0;
12577}
8b095871 12578
9987f0c1
IC
12579// Validates as many continuation bytes for a multi-byte UTF-8 character as
12580// needed or are available. If we see a non-continuation byte where we expect
12581// one, we "replace" the validated continuation bytes we've seen so far with
12582// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
12583// behavior. The continuation byte check is included three times in the case
12584// where all of the continuation bytes for a character exist in the same buffer.
12585// It is also done this way as a slight performance increase instead of using a
12586// loop.
12587function utf8CheckExtraBytes(self, buf, p) {
12588 if ((buf[0] & 0xC0) !== 0x80) {
12589 self.lastNeed = 0;
12590 return '\ufffd'.repeat(p);
12591 }
12592 if (self.lastNeed > 1 && buf.length > 1) {
12593 if ((buf[1] & 0xC0) !== 0x80) {
12594 self.lastNeed = 1;
12595 return '\ufffd'.repeat(p + 1);
12596 }
12597 if (self.lastNeed > 2 && buf.length > 2) {
12598 if ((buf[2] & 0xC0) !== 0x80) {
12599 self.lastNeed = 2;
12600 return '\ufffd'.repeat(p + 2);
12601 }
12602 }
12603 }
8b095871
IC
12604}
12605
9987f0c1
IC
12606// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
12607function utf8FillLast(buf) {
12608 var p = this.lastTotal - this.lastNeed;
12609 var r = utf8CheckExtraBytes(this, buf, p);
12610 if (r !== undefined) return r;
12611 if (this.lastNeed <= buf.length) {
12612 buf.copy(this.lastChar, p, 0, this.lastNeed);
12613 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
8b095871 12614 }
9987f0c1
IC
12615 buf.copy(this.lastChar, p, 0, buf.length);
12616 this.lastNeed -= buf.length;
8b095871
IC
12617}
12618
9987f0c1
IC
12619// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
12620// partial character, the character's bytes are buffered until the required
12621// number of bytes are available.
12622function utf8Text(buf, i) {
12623 var total = utf8CheckIncomplete(this, buf, i);
12624 if (!this.lastNeed) return buf.toString('utf8', i);
12625 this.lastTotal = total;
12626 var end = buf.length - (total - this.lastNeed);
12627 buf.copy(this.lastChar, 0, end);
12628 return buf.toString('utf8', i, end);
8b095871
IC
12629}
12630
9987f0c1
IC
12631// For UTF-8, a replacement character for each buffered byte of a (partial)
12632// character needs to be added to the output.
12633function utf8End(buf) {
12634 var r = buf && buf.length ? this.write(buf) : '';
12635 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
12636 return r;
12637}
8b095871 12638
9987f0c1
IC
12639// UTF-16LE typically needs two bytes per character, but even if we have an even
12640// number of bytes available, we need to check if we end on a leading/high
12641// surrogate. In that case, we need to wait for the next two bytes in order to
12642// decode the last character properly.
12643function utf16Text(buf, i) {
12644 if ((buf.length - i) % 2 === 0) {
12645 var r = buf.toString('utf16le', i);
12646 if (r) {
12647 var c = r.charCodeAt(r.length - 1);
12648 if (c >= 0xD800 && c <= 0xDBFF) {
12649 this.lastNeed = 2;
12650 this.lastTotal = 4;
12651 this.lastChar[0] = buf[buf.length - 2];
12652 this.lastChar[1] = buf[buf.length - 1];
12653 return r.slice(0, -1);
12654 }
12655 }
12656 return r;
8b095871 12657 }
9987f0c1
IC
12658 this.lastNeed = 1;
12659 this.lastTotal = 2;
12660 this.lastChar[0] = buf[buf.length - 1];
12661 return buf.toString('utf16le', i, buf.length - 1);
8b095871
IC
12662}
12663
9987f0c1
IC
12664// For UTF-16LE we do not explicitly append special replacement characters if we
12665// end on a partial character, we simply let v8 handle that.
12666function utf16End(buf) {
12667 var r = buf && buf.length ? this.write(buf) : '';
12668 if (this.lastNeed) {
12669 var end = this.lastTotal - this.lastNeed;
12670 return r + this.lastChar.toString('utf16le', 0, end);
8b095871 12671 }
9987f0c1 12672 return r;
8b095871
IC
12673}
12674
9987f0c1
IC
12675function base64Text(buf, i) {
12676 var n = (buf.length - i) % 3;
12677 if (n === 0) return buf.toString('base64', i);
12678 this.lastNeed = 3 - n;
12679 this.lastTotal = 3;
12680 if (n === 1) {
12681 this.lastChar[0] = buf[buf.length - 1];
12682 } else {
12683 this.lastChar[0] = buf[buf.length - 2];
12684 this.lastChar[1] = buf[buf.length - 1];
12685 }
12686 return buf.toString('base64', i, buf.length - n);
12687}
8b095871 12688
9987f0c1
IC
12689function base64End(buf) {
12690 var r = buf && buf.length ? this.write(buf) : '';
12691 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
12692 return r;
12693}
8b095871 12694
9987f0c1
IC
12695// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
12696function simpleWrite(buf) {
12697 return buf.toString(this.encoding);
12698}
8b095871 12699
9987f0c1
IC
12700function simpleEnd(buf) {
12701 return buf && buf.length ? this.write(buf) : '';
12702}
cf6c2044
IC
12703},{"safe-buffer":27}],23:[function(require,module,exports){
12704module.exports = require('./readable').PassThrough
8b095871 12705
cf6c2044
IC
12706},{"./readable":24}],24:[function(require,module,exports){
12707exports = module.exports = require('./lib/_stream_readable.js');
12708exports.Stream = exports;
12709exports.Readable = exports;
12710exports.Writable = require('./lib/_stream_writable.js');
12711exports.Duplex = require('./lib/_stream_duplex.js');
12712exports.Transform = require('./lib/_stream_transform.js');
12713exports.PassThrough = require('./lib/_stream_passthrough.js');
8b095871 12714
cf6c2044
IC
12715},{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
12716module.exports = require('./readable').Transform
8b095871 12717
cf6c2044
IC
12718},{"./readable":24}],26:[function(require,module,exports){
12719module.exports = require('./lib/_stream_writable.js');
8b095871 12720
cf6c2044
IC
12721},{"./lib/_stream_writable.js":19}],27:[function(require,module,exports){
12722module.exports = require('buffer')
8b095871 12723
cf6c2044 12724},{"buffer":5}],28:[function(require,module,exports){
9987f0c1
IC
12725// Copyright Joyent, Inc. and other Node contributors.
12726//
12727// Permission is hereby granted, free of charge, to any person obtaining a
12728// copy of this software and associated documentation files (the
12729// "Software"), to deal in the Software without restriction, including
12730// without limitation the rights to use, copy, modify, merge, publish,
12731// distribute, sublicense, and/or sell copies of the Software, and to permit
12732// persons to whom the Software is furnished to do so, subject to the
12733// following conditions:
12734//
12735// The above copyright notice and this permission notice shall be included
12736// in all copies or substantial portions of the Software.
12737//
12738// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12739// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12740// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
12741// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12742// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
12743// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
12744// USE OR OTHER DEALINGS IN THE SOFTWARE.
12745
cf6c2044
IC
12746module.exports = Stream;
12747
12748var EE = require('events').EventEmitter;
12749var inherits = require('inherits');
12750
12751inherits(Stream, EE);
12752Stream.Readable = require('readable-stream/readable.js');
12753Stream.Writable = require('readable-stream/writable.js');
12754Stream.Duplex = require('readable-stream/duplex.js');
12755Stream.Transform = require('readable-stream/transform.js');
12756Stream.PassThrough = require('readable-stream/passthrough.js');
12757
12758// Backwards-compat with node 0.4.x
12759Stream.Stream = Stream;
12760
12761
12762
12763// old-style streams. Note that the pipe method (the only relevant
12764// part of this class) is overridden in the Readable class.
12765
12766function Stream() {
12767 EE.call(this);
12768}
12769
12770Stream.prototype.pipe = function(dest, options) {
12771 var source = this;
12772
12773 function ondata(chunk) {
12774 if (dest.writable) {
12775 if (false === dest.write(chunk) && source.pause) {
12776 source.pause();
12777 }
8b095871
IC
12778 }
12779 }
12780
cf6c2044
IC
12781 source.on('data', ondata);
12782
12783 function ondrain() {
12784 if (source.readable && source.resume) {
12785 source.resume();
9987f0c1
IC
12786 }
12787 }
8b095871 12788
cf6c2044 12789 dest.on('drain', ondrain);
8b095871 12790
cf6c2044
IC
12791 // If the 'end' option is not supplied, dest.end() will be called when
12792 // source gets the 'end' or 'close' events. Only dest.end() once.
12793 if (!dest._isStdio && (!options || options.end !== false)) {
12794 source.on('end', onend);
12795 source.on('close', onclose);
8b095871 12796 }
8b095871 12797
cf6c2044
IC
12798 var didOnEnd = false;
12799 function onend() {
12800 if (didOnEnd) return;
12801 didOnEnd = true;
8b095871 12802
cf6c2044 12803 dest.end();
8b095871
IC
12804 }
12805
8b095871 12806
cf6c2044
IC
12807 function onclose() {
12808 if (didOnEnd) return;
12809 didOnEnd = true;
8b095871 12810
cf6c2044 12811 if (typeof dest.destroy === 'function') dest.destroy();
9987f0c1 12812 }
cf6c2044
IC
12813
12814 // don't leave dangling pipes when there are errors.
12815 function onerror(er) {
12816 cleanup();
12817 if (EE.listenerCount(this, 'error') === 0) {
12818 throw er; // Unhandled stream error in pipe.
12819 }
12820 }
12821
12822 source.on('error', onerror);
12823 dest.on('error', onerror);
12824
12825 // remove all the event listeners that were added.
12826 function cleanup() {
12827 source.removeListener('data', ondata);
12828 dest.removeListener('drain', ondrain);
12829
12830 source.removeListener('end', onend);
12831 source.removeListener('close', onclose);
12832
12833 source.removeListener('error', onerror);
12834 dest.removeListener('error', onerror);
12835
12836 source.removeListener('end', cleanup);
12837 source.removeListener('close', cleanup);
12838
12839 dest.removeListener('close', cleanup);
12840 }
12841
12842 source.on('end', cleanup);
12843 source.on('close', cleanup);
12844
12845 dest.on('close', cleanup);
12846
12847 dest.emit('pipe', source);
12848
12849 // Allow for unix-like usage: A.pipe(B).pipe(C)
12850 return dest;
12851};
12852
12853},{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":23,"readable-stream/readable.js":24,"readable-stream/transform.js":25,"readable-stream/writable.js":26}],29:[function(require,module,exports){
12854// Copyright Joyent, Inc. and other Node contributors.
12855//
12856// Permission is hereby granted, free of charge, to any person obtaining a
12857// copy of this software and associated documentation files (the
12858// "Software"), to deal in the Software without restriction, including
12859// without limitation the rights to use, copy, modify, merge, publish,
12860// distribute, sublicense, and/or sell copies of the Software, and to permit
12861// persons to whom the Software is furnished to do so, subject to the
12862// following conditions:
12863//
12864// The above copyright notice and this permission notice shall be included
12865// in all copies or substantial portions of the Software.
12866//
12867// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12868// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12869// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
12870// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12871// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
12872// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
12873// USE OR OTHER DEALINGS IN THE SOFTWARE.
12874
12875var Buffer = require('buffer').Buffer;
12876
12877var isBufferEncoding = Buffer.isEncoding
12878 || function(encoding) {
12879 switch (encoding && encoding.toLowerCase()) {
12880 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;
12881 default: return false;
12882 }
12883 }
12884
12885
12886function assertEncoding(encoding) {
12887 if (encoding && !isBufferEncoding(encoding)) {
12888 throw new Error('Unknown encoding: ' + encoding);
12889 }
12890}
12891
12892// StringDecoder provides an interface for efficiently splitting a series of
12893// buffers into a series of JS strings without breaking apart multi-byte
12894// characters. CESU-8 is handled as part of the UTF-8 encoding.
12895//
12896// @TODO Handling all encodings inside a single object makes it very difficult
12897// to reason about this code, so it should be split up in the future.
12898// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
12899// points as used by CESU-8.
12900var StringDecoder = exports.StringDecoder = function(encoding) {
12901 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
12902 assertEncoding(encoding);
12903 switch (this.encoding) {
12904 case 'utf8':
12905 // CESU-8 represents each of Surrogate Pair by 3-bytes
12906 this.surrogateSize = 3;
12907 break;
12908 case 'ucs2':
12909 case 'utf16le':
12910 // UTF-16 represents each of Surrogate Pair by 2-bytes
12911 this.surrogateSize = 2;
12912 this.detectIncompleteChar = utf16DetectIncompleteChar;
12913 break;
12914 case 'base64':
12915 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
12916 this.surrogateSize = 3;
12917 this.detectIncompleteChar = base64DetectIncompleteChar;
12918 break;
12919 default:
12920 this.write = passThroughWrite;
12921 return;
12922 }
12923
12924 // Enough space to store all bytes of a single character. UTF-8 needs 4
12925 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
12926 this.charBuffer = new Buffer(6);
12927 // Number of bytes received for the current incomplete multi-byte character.
12928 this.charReceived = 0;
12929 // Number of bytes expected for the current incomplete multi-byte character.
12930 this.charLength = 0;
12931};
12932
12933
12934// write decodes the given buffer and returns it as JS string that is
12935// guaranteed to not contain any partial multi-byte characters. Any partial
12936// character found at the end of the buffer is buffered up, and will be
12937// returned when calling write again with the remaining bytes.
12938//
12939// Note: Converting a Buffer containing an orphan surrogate to a String
12940// currently works, but converting a String to a Buffer (via `new Buffer`, or
12941// Buffer#write) will replace incomplete surrogates with the unicode
12942// replacement character. See https://codereview.chromium.org/121173009/ .
12943StringDecoder.prototype.write = function(buffer) {
12944 var charStr = '';
12945 // if our last write ended with an incomplete multibyte character
12946 while (this.charLength) {
12947 // determine how many remaining bytes this buffer has to offer for this char
12948 var available = (buffer.length >= this.charLength - this.charReceived) ?
12949 this.charLength - this.charReceived :
12950 buffer.length;
12951
12952 // add the new bytes to the char buffer
12953 buffer.copy(this.charBuffer, this.charReceived, 0, available);
12954 this.charReceived += available;
12955
12956 if (this.charReceived < this.charLength) {
12957 // still not enough chars in this buffer? wait for more ...
12958 return '';
12959 }
12960
12961 // remove bytes belonging to the current character from the buffer
12962 buffer = buffer.slice(available, buffer.length);
12963
12964 // get the character that was split
12965 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
12966
12967 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
12968 var charCode = charStr.charCodeAt(charStr.length - 1);
12969 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
12970 this.charLength += this.surrogateSize;
12971 charStr = '';
12972 continue;
12973 }
12974 this.charReceived = this.charLength = 0;
12975
12976 // if there are no more bytes in this buffer, just emit our char
12977 if (buffer.length === 0) {
12978 return charStr;
12979 }
12980 break;
12981 }
12982
12983 // determine and set charLength / charReceived
12984 this.detectIncompleteChar(buffer);
12985
12986 var end = buffer.length;
12987 if (this.charLength) {
12988 // buffer the incomplete character bytes we got
12989 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
12990 end -= this.charReceived;
12991 }
12992
12993 charStr += buffer.toString(this.encoding, 0, end);
12994
12995 var end = charStr.length - 1;
12996 var charCode = charStr.charCodeAt(end);
12997 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
12998 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
12999 var size = this.surrogateSize;
13000 this.charLength += size;
13001 this.charReceived += size;
13002 this.charBuffer.copy(this.charBuffer, size, 0, size);
13003 buffer.copy(this.charBuffer, 0, 0, size);
13004 return charStr.substring(0, end);
13005 }
13006
13007 // or just emit the charStr
13008 return charStr;
13009};
13010
13011// detectIncompleteChar determines if there is an incomplete UTF-8 character at
13012// the end of the given buffer. If so, it sets this.charLength to the byte
13013// length that character, and sets this.charReceived to the number of bytes
13014// that are available for this character.
13015StringDecoder.prototype.detectIncompleteChar = function(buffer) {
13016 // determine how many bytes we have to check at the end of this buffer
13017 var i = (buffer.length >= 3) ? 3 : buffer.length;
13018
13019 // Figure out if one of the last i bytes of our buffer announces an
13020 // incomplete char.
13021 for (; i > 0; i--) {
13022 var c = buffer[buffer.length - i];
13023
13024 // See http://en.wikipedia.org/wiki/UTF-8#Description
13025
13026 // 110XXXXX
13027 if (i == 1 && c >> 5 == 0x06) {
13028 this.charLength = 2;
13029 break;
13030 }
13031
13032 // 1110XXXX
13033 if (i <= 2 && c >> 4 == 0x0E) {
13034 this.charLength = 3;
13035 break;
13036 }
13037
13038 // 11110XXX
13039 if (i <= 3 && c >> 3 == 0x1E) {
13040 this.charLength = 4;
13041 break;
13042 }
13043 }
13044 this.charReceived = i;
13045};
13046
13047StringDecoder.prototype.end = function(buffer) {
13048 var res = '';
13049 if (buffer && buffer.length)
13050 res = this.write(buffer);
13051
13052 if (this.charReceived) {
13053 var cr = this.charReceived;
13054 var buf = this.charBuffer;
13055 var enc = this.encoding;
13056 res += buf.slice(0, cr).toString(enc);
13057 }
13058
13059 return res;
13060};
13061
13062function passThroughWrite(buffer) {
13063 return buffer.toString(this.encoding);
13064}
13065
13066function utf16DetectIncompleteChar(buffer) {
13067 this.charReceived = buffer.length % 2;
13068 this.charLength = this.charReceived ? 2 : 0;
13069}
13070
13071function base64DetectIncompleteChar(buffer) {
13072 this.charReceived = buffer.length % 3;
13073 this.charLength = this.charReceived ? 3 : 0;
13074}
13075
13076},{"buffer":5}],30:[function(require,module,exports){
13077(function (global){
13078
13079/**
13080 * Module exports.
13081 */
13082
13083module.exports = deprecate;
13084
13085/**
13086 * Mark that a method should not be used.
13087 * Returns a modified function which warns once by default.
13088 *
13089 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
13090 *
13091 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
13092 * will throw an Error when invoked.
13093 *
13094 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
13095 * will invoke `console.trace()` instead of `console.error()`.
13096 *
13097 * @param {Function} fn - the function to deprecate
13098 * @param {String} msg - the string to print to the console when `fn` is invoked
13099 * @returns {Function} a new "deprecated" version of `fn`
13100 * @api public
13101 */
13102
13103function deprecate (fn, msg) {
13104 if (config('noDeprecation')) {
13105 return fn;
13106 }
13107
13108 var warned = false;
13109 function deprecated() {
13110 if (!warned) {
13111 if (config('throwDeprecation')) {
13112 throw new Error(msg);
13113 } else if (config('traceDeprecation')) {
13114 console.trace(msg);
13115 } else {
13116 console.warn(msg);
13117 }
13118 warned = true;
13119 }
13120 return fn.apply(this, arguments);
13121 }
13122
13123 return deprecated;
13124}
13125
13126/**
13127 * Checks `localStorage` for boolean values for the given `name`.
13128 *
13129 * @param {String} name
13130 * @returns {Boolean}
13131 * @api private
13132 */
13133
13134function config (name) {
13135 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
13136 try {
13137 if (!global.localStorage) return false;
13138 } catch (_) {
13139 return false;
13140 }
13141 var val = global.localStorage[name];
13142 if (null == val) return false;
13143 return String(val).toLowerCase() === 'true';
13144}
13145
13146}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
13147},{}],31:[function(require,module,exports){
13148arguments[4][9][0].apply(exports,arguments)
13149},{"dup":9}],32:[function(require,module,exports){
13150module.exports = function isBuffer(arg) {
13151 return arg && typeof arg === 'object'
13152 && typeof arg.copy === 'function'
13153 && typeof arg.fill === 'function'
13154 && typeof arg.readUInt8 === 'function';
13155}
13156},{}],33:[function(require,module,exports){
13157(function (process,global){
13158// Copyright Joyent, Inc. and other Node contributors.
13159//
13160// Permission is hereby granted, free of charge, to any person obtaining a
13161// copy of this software and associated documentation files (the
13162// "Software"), to deal in the Software without restriction, including
13163// without limitation the rights to use, copy, modify, merge, publish,
13164// distribute, sublicense, and/or sell copies of the Software, and to permit
13165// persons to whom the Software is furnished to do so, subject to the
13166// following conditions:
13167//
13168// The above copyright notice and this permission notice shall be included
13169// in all copies or substantial portions of the Software.
13170//
13171// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13172// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13173// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
13174// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
13175// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13176// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
13177// USE OR OTHER DEALINGS IN THE SOFTWARE.
13178
13179var formatRegExp = /%[sdj%]/g;
13180exports.format = function(f) {
13181 if (!isString(f)) {
13182 var objects = [];
13183 for (var i = 0; i < arguments.length; i++) {
13184 objects.push(inspect(arguments[i]));
13185 }
13186 return objects.join(' ');
13187 }
13188
13189 var i = 1;
13190 var args = arguments;
13191 var len = args.length;
13192 var str = String(f).replace(formatRegExp, function(x) {
13193 if (x === '%%') return '%';
13194 if (i >= len) return x;
13195 switch (x) {
13196 case '%s': return String(args[i++]);
13197 case '%d': return Number(args[i++]);
13198 case '%j':
13199 try {
13200 return JSON.stringify(args[i++]);
13201 } catch (_) {
13202 return '[Circular]';
13203 }
13204 default:
13205 return x;
13206 }
13207 });
13208 for (var x = args[i]; i < len; x = args[++i]) {
13209 if (isNull(x) || !isObject(x)) {
13210 str += ' ' + x;
13211 } else {
13212 str += ' ' + inspect(x);
13213 }
13214 }
13215 return str;
13216};
13217
13218
13219// Mark that a method should not be used.
13220// Returns a modified function which warns once by default.
13221// If --no-deprecation is set, then it is a no-op.
13222exports.deprecate = function(fn, msg) {
13223 // Allow for deprecating things in the process of starting up.
13224 if (isUndefined(global.process)) {
13225 return function() {
13226 return exports.deprecate(fn, msg).apply(this, arguments);
13227 };
13228 }
13229
13230 if (process.noDeprecation === true) {
13231 return fn;
13232 }
13233
13234 var warned = false;
13235 function deprecated() {
13236 if (!warned) {
13237 if (process.throwDeprecation) {
13238 throw new Error(msg);
13239 } else if (process.traceDeprecation) {
13240 console.trace(msg);
13241 } else {
13242 console.error(msg);
13243 }
13244 warned = true;
13245 }
13246 return fn.apply(this, arguments);
13247 }
13248
13249 return deprecated;
13250};
13251
13252
13253var debugs = {};
13254var debugEnviron;
13255exports.debuglog = function(set) {
13256 if (isUndefined(debugEnviron))
13257 debugEnviron = process.env.NODE_DEBUG || '';
13258 set = set.toUpperCase();
13259 if (!debugs[set]) {
13260 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
13261 var pid = process.pid;
13262 debugs[set] = function() {
13263 var msg = exports.format.apply(exports, arguments);
13264 console.error('%s %d: %s', set, pid, msg);
13265 };
13266 } else {
13267 debugs[set] = function() {};
13268 }
13269 }
13270 return debugs[set];
13271};
8b095871 13272
8b095871 13273
9987f0c1
IC
13274/**
13275 * Echos the value of a value. Trys to print the value out
13276 * in the best way possible given the different types.
13277 *
13278 * @param {Object} obj The object to print out.
13279 * @param {Object} opts Optional options object that alters the output.
13280 */
13281/* legacy: obj, showHidden, depth, colors*/
13282function inspect(obj, opts) {
13283 // default options
13284 var ctx = {
13285 seen: [],
13286 stylize: stylizeNoColor
13287 };
13288 // legacy...
13289 if (arguments.length >= 3) ctx.depth = arguments[2];
13290 if (arguments.length >= 4) ctx.colors = arguments[3];
13291 if (isBoolean(opts)) {
13292 // legacy...
13293 ctx.showHidden = opts;
13294 } else if (opts) {
13295 // got an "options" object
13296 exports._extend(ctx, opts);
13297 }
13298 // set default options
13299 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
13300 if (isUndefined(ctx.depth)) ctx.depth = 2;
13301 if (isUndefined(ctx.colors)) ctx.colors = false;
13302 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
13303 if (ctx.colors) ctx.stylize = stylizeWithColor;
13304 return formatValue(ctx, obj, ctx.depth);
13305}
13306exports.inspect = inspect;
8b095871 13307
8b095871 13308
9987f0c1
IC
13309// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
13310inspect.colors = {
13311 'bold' : [1, 22],
13312 'italic' : [3, 23],
13313 'underline' : [4, 24],
13314 'inverse' : [7, 27],
13315 'white' : [37, 39],
13316 'grey' : [90, 39],
13317 'black' : [30, 39],
13318 'blue' : [34, 39],
13319 'cyan' : [36, 39],
13320 'green' : [32, 39],
13321 'magenta' : [35, 39],
13322 'red' : [31, 39],
13323 'yellow' : [33, 39]
13324};
8b095871 13325
9987f0c1
IC
13326// Don't use 'blue' not visible on cmd.exe
13327inspect.styles = {
13328 'special': 'cyan',
13329 'number': 'yellow',
13330 'boolean': 'yellow',
13331 'undefined': 'grey',
13332 'null': 'bold',
13333 'string': 'green',
13334 'date': 'magenta',
13335 // "name": intentionally not styling
13336 'regexp': 'red'
13337};
8b095871 13338
8b095871 13339
9987f0c1
IC
13340function stylizeWithColor(str, styleType) {
13341 var style = inspect.styles[styleType];
8b095871 13342
9987f0c1
IC
13343 if (style) {
13344 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
13345 '\u001b[' + inspect.colors[style][1] + 'm';
13346 } else {
13347 return str;
8b095871 13348 }
9987f0c1 13349}
8b095871 13350
8b095871 13351
9987f0c1
IC
13352function stylizeNoColor(str, styleType) {
13353 return str;
13354}
8b095871 13355
8b095871 13356
9987f0c1
IC
13357function arrayToHash(array) {
13358 var hash = {};
8b095871 13359
9987f0c1
IC
13360 array.forEach(function(val, idx) {
13361 hash[val] = true;
13362 });
8b095871 13363
9987f0c1
IC
13364 return hash;
13365}
8b095871 13366
8b095871 13367
9987f0c1
IC
13368function formatValue(ctx, value, recurseTimes) {
13369 // Provide a hook for user-specified inspect functions.
13370 // Check that value is an object with an inspect function on it
13371 if (ctx.customInspect &&
13372 value &&
13373 isFunction(value.inspect) &&
13374 // Filter out the util module, it's inspect function is special
13375 value.inspect !== exports.inspect &&
13376 // Also filter out any prototype objects using the circular check.
13377 !(value.constructor && value.constructor.prototype === value)) {
13378 var ret = value.inspect(recurseTimes, ctx);
13379 if (!isString(ret)) {
13380 ret = formatValue(ctx, ret, recurseTimes);
8b095871 13381 }
9987f0c1 13382 return ret;
8b095871 13383 }
8b095871 13384
9987f0c1
IC
13385 // Primitive types cannot have properties
13386 var primitive = formatPrimitive(ctx, value);
13387 if (primitive) {
13388 return primitive;
8b095871 13389 }
8b095871 13390
9987f0c1
IC
13391 // Look up the keys of the object.
13392 var keys = Object.keys(value);
13393 var visibleKeys = arrayToHash(keys);
8b095871 13394
9987f0c1
IC
13395 if (ctx.showHidden) {
13396 keys = Object.getOwnPropertyNames(value);
8b095871 13397 }
8b095871 13398
9987f0c1
IC
13399 // IE doesn't make error fields non-enumerable
13400 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
13401 if (isError(value)
13402 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
13403 return formatError(value);
8b095871 13404 }
8b095871 13405
9987f0c1
IC
13406 // Some type of object without properties can be shortcutted.
13407 if (keys.length === 0) {
13408 if (isFunction(value)) {
13409 var name = value.name ? ': ' + value.name : '';
13410 return ctx.stylize('[Function' + name + ']', 'special');
8b095871 13411 }
9987f0c1
IC
13412 if (isRegExp(value)) {
13413 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
8b095871 13414 }
9987f0c1
IC
13415 if (isDate(value)) {
13416 return ctx.stylize(Date.prototype.toString.call(value), 'date');
13417 }
13418 if (isError(value)) {
13419 return formatError(value);
8b095871
IC
13420 }
13421 }
13422
9987f0c1 13423 var base = '', array = false, braces = ['{', '}'];
8b095871 13424
9987f0c1
IC
13425 // Make Array say that they are Array
13426 if (isArray(value)) {
13427 array = true;
13428 braces = ['[', ']'];
13429 }
8b095871 13430
9987f0c1
IC
13431 // Make functions say that they are functions
13432 if (isFunction(value)) {
13433 var n = value.name ? ': ' + value.name : '';
13434 base = ' [Function' + n + ']';
13435 }
8b095871 13436
9987f0c1
IC
13437 // Make RegExps say that they are RegExps
13438 if (isRegExp(value)) {
13439 base = ' ' + RegExp.prototype.toString.call(value);
13440 }
8b095871 13441
9987f0c1
IC
13442 // Make dates with properties first say the date
13443 if (isDate(value)) {
13444 base = ' ' + Date.prototype.toUTCString.call(value);
13445 }
8b095871 13446
9987f0c1
IC
13447 // Make error with message first say the error
13448 if (isError(value)) {
13449 base = ' ' + formatError(value);
13450 }
8b095871 13451
9987f0c1
IC
13452 if (keys.length === 0 && (!array || value.length == 0)) {
13453 return braces[0] + base + braces[1];
13454 }
8b095871 13455
9987f0c1
IC
13456 if (recurseTimes < 0) {
13457 if (isRegExp(value)) {
13458 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
8b095871 13459 } else {
9987f0c1
IC
13460 return ctx.stylize('[Object]', 'special');
13461 }
13462 }
8b095871 13463
9987f0c1 13464 ctx.seen.push(value);
8b095871 13465
9987f0c1
IC
13466 var output;
13467 if (array) {
13468 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
13469 } else {
13470 output = keys.map(function(key) {
13471 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
13472 });
8b095871
IC
13473 }
13474
9987f0c1 13475 ctx.seen.pop();
8b095871 13476
9987f0c1
IC
13477 return reduceToSingleString(output, base, braces);
13478}
8b095871 13479
8b095871 13480
9987f0c1
IC
13481function formatPrimitive(ctx, value) {
13482 if (isUndefined(value))
13483 return ctx.stylize('undefined', 'undefined');
13484 if (isString(value)) {
13485 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
13486 .replace(/'/g, "\\'")
13487 .replace(/\\"/g, '"') + '\'';
13488 return ctx.stylize(simple, 'string');
8b095871 13489 }
9987f0c1
IC
13490 if (isNumber(value))
13491 return ctx.stylize('' + value, 'number');
13492 if (isBoolean(value))
13493 return ctx.stylize('' + value, 'boolean');
13494 // For some reason typeof null is "object", so special case here.
13495 if (isNull(value))
13496 return ctx.stylize('null', 'null');
8b095871
IC
13497}
13498
9987f0c1
IC
13499
13500function formatError(value) {
13501 return '[' + Error.prototype.toString.call(value) + ']';
8b095871
IC
13502}
13503
9987f0c1
IC
13504
13505function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
13506 var output = [];
13507 for (var i = 0, l = value.length; i < l; ++i) {
13508 if (hasOwnProperty(value, String(i))) {
13509 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
13510 String(i), true));
13511 } else {
13512 output.push('');
13513 }
8b095871 13514 }
9987f0c1
IC
13515 keys.forEach(function(key) {
13516 if (!key.match(/^\d+$/)) {
13517 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
13518 key, true));
13519 }
13520 });
13521 return output;
8b095871
IC
13522}
13523
8b095871 13524
9987f0c1
IC
13525function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
13526 var name, str, desc;
13527 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
13528 if (desc.get) {
13529 if (desc.set) {
13530 str = ctx.stylize('[Getter/Setter]', 'special');
13531 } else {
13532 str = ctx.stylize('[Getter]', 'special');
13533 }
13534 } else {
13535 if (desc.set) {
13536 str = ctx.stylize('[Setter]', 'special');
13537 }
13538 }
13539 if (!hasOwnProperty(visibleKeys, key)) {
13540 name = '[' + key + ']';
13541 }
13542 if (!str) {
13543 if (ctx.seen.indexOf(desc.value) < 0) {
13544 if (isNull(recurseTimes)) {
13545 str = formatValue(ctx, desc.value, null);
13546 } else {
13547 str = formatValue(ctx, desc.value, recurseTimes - 1);
13548 }
13549 if (str.indexOf('\n') > -1) {
13550 if (array) {
13551 str = str.split('\n').map(function(line) {
13552 return ' ' + line;
13553 }).join('\n').substr(2);
13554 } else {
13555 str = '\n' + str.split('\n').map(function(line) {
13556 return ' ' + line;
13557 }).join('\n');
13558 }
13559 }
13560 } else {
13561 str = ctx.stylize('[Circular]', 'special');
13562 }
13563 }
13564 if (isUndefined(name)) {
13565 if (array && key.match(/^\d+$/)) {
13566 return str;
13567 }
13568 name = JSON.stringify('' + key);
13569 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
13570 name = name.substr(1, name.length - 2);
13571 name = ctx.stylize(name, 'name');
13572 } else {
13573 name = name.replace(/'/g, "\\'")
13574 .replace(/\\"/g, '"')
13575 .replace(/(^"|"$)/g, "'");
13576 name = ctx.stylize(name, 'string');
13577 }
13578 }
8b095871 13579
9987f0c1
IC
13580 return name + ': ' + str;
13581}
8b095871 13582
8b095871 13583
9987f0c1
IC
13584function reduceToSingleString(output, base, braces) {
13585 var numLinesEst = 0;
13586 var length = output.reduce(function(prev, cur) {
13587 numLinesEst++;
13588 if (cur.indexOf('\n') >= 0) numLinesEst++;
13589 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
13590 }, 0);
8b095871 13591
9987f0c1
IC
13592 if (length > 60) {
13593 return braces[0] +
13594 (base === '' ? '' : base + '\n ') +
13595 ' ' +
13596 output.join(',\n ') +
13597 ' ' +
13598 braces[1];
13599 }
8b095871 13600
9987f0c1
IC
13601 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
13602}
8b095871 13603
8b095871 13604
9987f0c1
IC
13605// NOTE: These type checking functions intentionally don't use `instanceof`
13606// because it is fragile and can be easily faked with `Object.create()`.
13607function isArray(ar) {
13608 return Array.isArray(ar);
8b095871 13609}
9987f0c1 13610exports.isArray = isArray;
8b095871 13611
9987f0c1
IC
13612function isBoolean(arg) {
13613 return typeof arg === 'boolean';
13614}
13615exports.isBoolean = isBoolean;
8b095871 13616
9987f0c1
IC
13617function isNull(arg) {
13618 return arg === null;
13619}
13620exports.isNull = isNull;
8b095871 13621
9987f0c1
IC
13622function isNullOrUndefined(arg) {
13623 return arg == null;
13624}
13625exports.isNullOrUndefined = isNullOrUndefined;
8b095871 13626
9987f0c1
IC
13627function isNumber(arg) {
13628 return typeof arg === 'number';
13629}
13630exports.isNumber = isNumber;
8b095871 13631
9987f0c1
IC
13632function isString(arg) {
13633 return typeof arg === 'string';
13634}
13635exports.isString = isString;
8b095871 13636
9987f0c1
IC
13637function isSymbol(arg) {
13638 return typeof arg === 'symbol';
13639}
13640exports.isSymbol = isSymbol;
8b095871 13641
9987f0c1
IC
13642function isUndefined(arg) {
13643 return arg === void 0;
8b095871 13644}
9987f0c1 13645exports.isUndefined = isUndefined;
8b095871 13646
9987f0c1
IC
13647function isRegExp(re) {
13648 return isObject(re) && objectToString(re) === '[object RegExp]';
13649}
13650exports.isRegExp = isRegExp;
8b095871 13651
9987f0c1
IC
13652function isObject(arg) {
13653 return typeof arg === 'object' && arg !== null;
13654}
13655exports.isObject = isObject;
8b095871 13656
9987f0c1
IC
13657function isDate(d) {
13658 return isObject(d) && objectToString(d) === '[object Date]';
13659}
13660exports.isDate = isDate;
8b095871 13661
9987f0c1
IC
13662function isError(e) {
13663 return isObject(e) &&
13664 (objectToString(e) === '[object Error]' || e instanceof Error);
13665}
13666exports.isError = isError;
8b095871 13667
9987f0c1
IC
13668function isFunction(arg) {
13669 return typeof arg === 'function';
13670}
13671exports.isFunction = isFunction;
8b095871 13672
9987f0c1
IC
13673function isPrimitive(arg) {
13674 return arg === null ||
13675 typeof arg === 'boolean' ||
13676 typeof arg === 'number' ||
13677 typeof arg === 'string' ||
13678 typeof arg === 'symbol' || // ES6 symbol
13679 typeof arg === 'undefined';
13680}
13681exports.isPrimitive = isPrimitive;
8b095871 13682
9987f0c1 13683exports.isBuffer = require('./support/isBuffer');
8b095871 13684
9987f0c1
IC
13685function objectToString(o) {
13686 return Object.prototype.toString.call(o);
8b095871
IC
13687}
13688
8b095871 13689
9987f0c1
IC
13690function pad(n) {
13691 return n < 10 ? '0' + n.toString(10) : n.toString(10);
13692}
8b095871 13693
8b095871 13694
9987f0c1
IC
13695var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
13696 'Oct', 'Nov', 'Dec'];
8b095871 13697
9987f0c1
IC
13698// 26 Feb 16:19:34
13699function timestamp() {
13700 var d = new Date();
13701 var time = [pad(d.getHours()),
13702 pad(d.getMinutes()),
13703 pad(d.getSeconds())].join(':');
13704 return [d.getDate(), months[d.getMonth()], time].join(' ');
13705}
13706
13707
13708// log is just a thin wrapper to console.log that prepends a timestamp
13709exports.log = function() {
13710 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
8b095871
IC
13711};
13712
13713
9987f0c1
IC
13714/**
13715 * Inherit the prototype methods from one constructor into another.
13716 *
13717 * The Function.prototype.inherits from lang.js rewritten as a standalone
13718 * function (not on Function.prototype). NOTE: If this file is to be loaded
13719 * during bootstrapping this function needs to be rewritten using some native
13720 * functions as prototype setup using normal JavaScript does not work as
13721 * expected during bootstrapping (see mirror.js in r114903).
13722 *
13723 * @param {function} ctor Constructor function which needs to inherit the
13724 * prototype.
13725 * @param {function} superCtor Constructor function to inherit prototype from.
13726 */
13727exports.inherits = require('inherits');
8b095871 13728
9987f0c1
IC
13729exports._extend = function(origin, add) {
13730 // Don't do anything if add isn't an object
13731 if (!add || !isObject(add)) return origin;
8b095871 13732
9987f0c1
IC
13733 var keys = Object.keys(add);
13734 var i = keys.length;
13735 while (i--) {
13736 origin[keys[i]] = add[keys[i]];
13737 }
13738 return origin;
13739};
8b095871 13740
9987f0c1
IC
13741function hasOwnProperty(obj, prop) {
13742 return Object.prototype.hasOwnProperty.call(obj, prop);
13743}
8b095871 13744
9987f0c1 13745}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
cf6c2044
IC
13746},{"./support/isBuffer":32,"_process":13,"inherits":31}],34:[function(require,module,exports){
13747bitcoin = {
9987f0c1
IC
13748 base58: require('bs58'),
13749 bitcoin: require('bitcoinjs-lib'),
13750 ecurve: require('ecurve'),
cf6c2044
IC
13751 BigInteger: require('bigi'),
13752 Buffer: require('buffer'),
13753 elliptic: require('elliptic'),
13754 bs58check: require('bs58check'),
8b095871
IC
13755}
13756
cf6c2044
IC
13757module.exports = bitcoin;
13758
13759},{"bigi":39,"bitcoinjs-lib":52,"bs58":83,"bs58check":85,"buffer":5,"ecurve":94,"elliptic":97}],35:[function(require,module,exports){
9987f0c1
IC
13760// base-x encoding
13761// Forked from https://github.com/cryptocoinjs/bs58
13762// Originally written by Mike Hearn for BitcoinJ
13763// Copyright (c) 2011 Google Inc
13764// Ported to JavaScript by Stefan Thomas
13765// Merged Buffer refactorings from base58-native by Stephen Pair
13766// Copyright (c) 2013 BitPay Inc
8b095871 13767
9987f0c1 13768var Buffer = require('safe-buffer').Buffer
8b095871 13769
9987f0c1
IC
13770module.exports = function base (ALPHABET) {
13771 var ALPHABET_MAP = {}
13772 var BASE = ALPHABET.length
13773 var LEADER = ALPHABET.charAt(0)
8b095871 13774
9987f0c1
IC
13775 // pre-compute lookup table
13776 for (var z = 0; z < ALPHABET.length; z++) {
13777 var x = ALPHABET.charAt(z)
8b095871 13778
9987f0c1
IC
13779 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13780 ALPHABET_MAP[x] = z
13781 }
8b095871 13782
9987f0c1
IC
13783 function encode (source) {
13784 if (source.length === 0) return ''
8b095871 13785
9987f0c1
IC
13786 var digits = [0]
13787 for (var i = 0; i < source.length; ++i) {
13788 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
13789 carry += digits[j] << 8
13790 digits[j] = carry % BASE
13791 carry = (carry / BASE) | 0
13792 }
8b095871 13793
9987f0c1
IC
13794 while (carry > 0) {
13795 digits.push(carry % BASE)
13796 carry = (carry / BASE) | 0
13797 }
13798 }
8b095871 13799
9987f0c1 13800 var string = ''
8b095871 13801
9987f0c1
IC
13802 // deal with leading zeros
13803 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
13804 // convert digits to a string
13805 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
8b095871 13806
9987f0c1
IC
13807 return string
13808 }
8b095871 13809
9987f0c1
IC
13810 function decodeUnsafe (string) {
13811 if (string.length === 0) return Buffer.allocUnsafe(0)
8b095871 13812
9987f0c1
IC
13813 var bytes = [0]
13814 for (var i = 0; i < string.length; i++) {
13815 var value = ALPHABET_MAP[string[i]]
13816 if (value === undefined) return
8b095871 13817
9987f0c1
IC
13818 for (var j = 0, carry = value; j < bytes.length; ++j) {
13819 carry += bytes[j] * BASE
13820 bytes[j] = carry & 0xff
13821 carry >>= 8
13822 }
8b095871 13823
9987f0c1
IC
13824 while (carry > 0) {
13825 bytes.push(carry & 0xff)
13826 carry >>= 8
13827 }
13828 }
8b095871 13829
9987f0c1
IC
13830 // deal with leading zeros
13831 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
13832 bytes.push(0)
13833 }
8b095871 13834
9987f0c1
IC
13835 return Buffer.from(bytes.reverse())
13836 }
8b095871 13837
9987f0c1
IC
13838 function decode (string) {
13839 var buffer = decodeUnsafe(string)
13840 if (buffer) return buffer
8b095871 13841
9987f0c1
IC
13842 throw new Error('Non-base' + BASE + ' character')
13843 }
8b095871 13844
9987f0c1
IC
13845 return {
13846 encode: encode,
13847 decodeUnsafe: decodeUnsafe,
13848 decode: decode
13849 }
13850}
8b095871 13851
cf6c2044
IC
13852},{"safe-buffer":128}],36:[function(require,module,exports){
13853'use strict'
13854let ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'
13855
13856// pre-compute lookup table
13857let ALPHABET_MAP = {}
13858for (let z = 0; z < ALPHABET.length; z++) {
13859 let x = ALPHABET.charAt(z)
13860
13861 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13862 ALPHABET_MAP[x] = z
13863}
13864
13865function polymodStep (pre) {
13866 let b = pre >> 25
13867 return ((pre & 0x1FFFFFF) << 5) ^
13868 (-((b >> 0) & 1) & 0x3b6a57b2) ^
13869 (-((b >> 1) & 1) & 0x26508e6d) ^
13870 (-((b >> 2) & 1) & 0x1ea119fa) ^
13871 (-((b >> 3) & 1) & 0x3d4233dd) ^
13872 (-((b >> 4) & 1) & 0x2a1462b3)
13873}
13874
13875function prefixChk (prefix) {
13876 let chk = 1
13877 for (let i = 0; i < prefix.length; ++i) {
13878 let c = prefix.charCodeAt(i)
13879 if (c < 33 || c > 126) throw new Error('Invalid prefix (' + prefix + ')')
13880
13881 chk = polymodStep(chk) ^ (c >> 5)
13882 }
13883 chk = polymodStep(chk)
13884
13885 for (let i = 0; i < prefix.length; ++i) {
13886 let v = prefix.charCodeAt(i)
13887 chk = polymodStep(chk) ^ (v & 0x1f)
13888 }
13889 return chk
13890}
13891
13892function encode (prefix, words) {
13893 // too long?
13894 if ((prefix.length + 7 + words.length) > 90) throw new TypeError('Exceeds Bech32 maximum length')
13895 prefix = prefix.toLowerCase()
13896
13897 // determine chk mod
13898 let chk = prefixChk(prefix)
13899 let result = prefix + '1'
13900 for (let i = 0; i < words.length; ++i) {
13901 let x = words[i]
13902 if ((x >> 5) !== 0) throw new Error('Non 5-bit word')
13903
13904 chk = polymodStep(chk) ^ x
13905 result += ALPHABET.charAt(x)
13906 }
13907
13908 for (let i = 0; i < 6; ++i) {
13909 chk = polymodStep(chk)
13910 }
13911 chk ^= 1
13912
13913 for (let i = 0; i < 6; ++i) {
13914 let v = (chk >> ((5 - i) * 5)) & 0x1f
13915 result += ALPHABET.charAt(v)
13916 }
13917
13918 return result
13919}
13920
13921function decode (str) {
13922 if (str.length < 8) throw new TypeError(str + ' too short')
13923 if (str.length > 90) throw new TypeError(str + ' too long')
13924
13925 // don't allow mixed case
13926 let lowered = str.toLowerCase()
13927 let uppered = str.toUpperCase()
13928 if (str !== lowered && str !== uppered) throw new Error('Mixed-case string ' + str)
13929 str = lowered
13930
13931 let split = str.lastIndexOf('1')
13932 if (split === 0) throw new Error('Missing prefix for ' + str)
13933
13934 let prefix = str.slice(0, split)
13935 let wordChars = str.slice(split + 1)
13936 if (wordChars.length < 6) throw new Error('Data too short')
13937
13938 let chk = prefixChk(prefix)
13939 let words = []
13940 for (let i = 0; i < wordChars.length; ++i) {
13941 let c = wordChars.charAt(i)
13942 let v = ALPHABET_MAP[c]
13943 if (v === undefined) throw new Error('Unknown character ' + c)
13944 chk = polymodStep(chk) ^ v
13945
13946 // not in the checksum?
13947 if (i + 6 >= wordChars.length) continue
13948 words.push(v)
13949 }
13950
13951 if (chk !== 1) throw new Error('Invalid checksum for ' + str)
13952 return { prefix, words }
13953}
13954
13955function convert (data, inBits, outBits, pad) {
13956 let value = 0
13957 let bits = 0
13958 let maxV = (1 << outBits) - 1
13959
13960 let result = []
13961 for (let i = 0; i < data.length; ++i) {
13962 value = (value << inBits) | data[i]
13963 bits += inBits
13964
13965 while (bits >= outBits) {
13966 bits -= outBits
13967 result.push((value >> bits) & maxV)
13968 }
13969 }
13970
13971 if (pad) {
13972 if (bits > 0) {
13973 result.push((value << (outBits - bits)) & maxV)
13974 }
13975 } else {
13976 if (bits >= inBits) throw new Error('Excess padding')
13977 if ((value << (outBits - bits)) & maxV) throw new Error('Non-zero padding')
13978 }
13979
13980 return result
13981}
13982
13983function toWords (bytes) {
13984 return convert(bytes, 8, 5, true)
13985}
13986
13987function fromWords (words) {
13988 return convert(words, 5, 8, false)
13989}
13990
13991module.exports = { decode, encode, toWords, fromWords }
13992
13993},{}],37:[function(require,module,exports){
9987f0c1
IC
13994// (public) Constructor
13995function BigInteger(a, b, c) {
13996 if (!(this instanceof BigInteger))
13997 return new BigInteger(a, b, c)
8b095871 13998
9987f0c1
IC
13999 if (a != null) {
14000 if ("number" == typeof a) this.fromNumber(a, b, c)
14001 else if (b == null && "string" != typeof a) this.fromString(a, 256)
14002 else this.fromString(a, b)
14003 }
14004}
8b095871 14005
9987f0c1 14006var proto = BigInteger.prototype
8b095871 14007
9987f0c1
IC
14008// duck-typed isBigInteger
14009proto.__bigi = require('../package.json').version
14010BigInteger.isBigInteger = function (obj, check_ver) {
14011 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
14012}
8b095871 14013
9987f0c1
IC
14014// Bits per digit
14015var dbits
8b095871 14016
9987f0c1
IC
14017// am: Compute w_j += (x*this_i), propagate carries,
14018// c is initial carry, returns final carry.
14019// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
14020// We need to select the fastest one that works in this environment.
8b095871 14021
9987f0c1
IC
14022// am1: use a single mult and divide to get the high bits,
14023// max digit bits should be 26 because
14024// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
14025function am1(i, x, w, j, c, n) {
14026 while (--n >= 0) {
14027 var v = x * this[i++] + w[j] + c
14028 c = Math.floor(v / 0x4000000)
14029 w[j++] = v & 0x3ffffff
14030 }
14031 return c
14032}
14033// am2 avoids a big mult-and-extract completely.
14034// Max digit bits should be <= 30 because we do bitwise ops
14035// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
14036function am2(i, x, w, j, c, n) {
14037 var xl = x & 0x7fff,
14038 xh = x >> 15
14039 while (--n >= 0) {
14040 var l = this[i] & 0x7fff
14041 var h = this[i++] >> 15
14042 var m = xh * l + h * xl
14043 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
14044 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
14045 w[j++] = l & 0x3fffffff
14046 }
14047 return c
14048}
14049// Alternately, set max digit bits to 28 since some
14050// browsers slow down when dealing with 32-bit numbers.
14051function am3(i, x, w, j, c, n) {
14052 var xl = x & 0x3fff,
14053 xh = x >> 14
14054 while (--n >= 0) {
14055 var l = this[i] & 0x3fff
14056 var h = this[i++] >> 14
14057 var m = xh * l + h * xl
14058 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
14059 c = (l >> 28) + (m >> 14) + xh * h
14060 w[j++] = l & 0xfffffff
14061 }
14062 return c
14063}
8b095871 14064
9987f0c1
IC
14065// wtf?
14066BigInteger.prototype.am = am1
14067dbits = 26
8b095871 14068
9987f0c1
IC
14069BigInteger.prototype.DB = dbits
14070BigInteger.prototype.DM = ((1 << dbits) - 1)
14071var DV = BigInteger.prototype.DV = (1 << dbits)
8b095871 14072
9987f0c1
IC
14073var BI_FP = 52
14074BigInteger.prototype.FV = Math.pow(2, BI_FP)
14075BigInteger.prototype.F1 = BI_FP - dbits
14076BigInteger.prototype.F2 = 2 * dbits - BI_FP
8b095871 14077
9987f0c1
IC
14078// Digit conversions
14079var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
14080var BI_RC = new Array()
14081var rr, vv
14082rr = "0".charCodeAt(0)
14083for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
14084rr = "a".charCodeAt(0)
14085for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
14086rr = "A".charCodeAt(0)
14087for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
8b095871 14088
9987f0c1
IC
14089function int2char(n) {
14090 return BI_RM.charAt(n)
14091}
8b095871 14092
9987f0c1
IC
14093function intAt(s, i) {
14094 var c = BI_RC[s.charCodeAt(i)]
14095 return (c == null) ? -1 : c
14096}
8b095871 14097
9987f0c1
IC
14098// (protected) copy this to r
14099function bnpCopyTo(r) {
14100 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
14101 r.t = this.t
14102 r.s = this.s
14103}
8b095871 14104
9987f0c1
IC
14105// (protected) set from integer value x, -DV <= x < DV
14106function bnpFromInt(x) {
14107 this.t = 1
14108 this.s = (x < 0) ? -1 : 0
14109 if (x > 0) this[0] = x
14110 else if (x < -1) this[0] = x + DV
14111 else this.t = 0
14112}
8b095871 14113
9987f0c1
IC
14114// return bigint initialized to value
14115function nbv(i) {
14116 var r = new BigInteger()
14117 r.fromInt(i)
14118 return r
8b095871
IC
14119}
14120
9987f0c1
IC
14121// (protected) set from string and radix
14122function bnpFromString(s, b) {
14123 var self = this
8b095871 14124
9987f0c1
IC
14125 var k
14126 if (b == 16) k = 4
14127 else if (b == 8) k = 3
14128 else if (b == 256) k = 8; // byte array
14129 else if (b == 2) k = 1
14130 else if (b == 32) k = 5
14131 else if (b == 4) k = 2
14132 else {
14133 self.fromRadix(s, b)
14134 return
14135 }
14136 self.t = 0
14137 self.s = 0
14138 var i = s.length,
14139 mi = false,
14140 sh = 0
14141 while (--i >= 0) {
14142 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
14143 if (x < 0) {
14144 if (s.charAt(i) == "-") mi = true
14145 continue
14146 }
14147 mi = false
14148 if (sh == 0)
14149 self[self.t++] = x
14150 else if (sh + k > self.DB) {
14151 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
14152 self[self.t++] = (x >> (self.DB - sh))
14153 } else
14154 self[self.t - 1] |= x << sh
14155 sh += k
14156 if (sh >= self.DB) sh -= self.DB
14157 }
14158 if (k == 8 && (s[0] & 0x80) != 0) {
14159 self.s = -1
14160 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
14161 }
14162 self.clamp()
14163 if (mi) BigInteger.ZERO.subTo(self, self)
14164}
8b095871 14165
9987f0c1
IC
14166// (protected) clamp off excess high words
14167function bnpClamp() {
14168 var c = this.s & this.DM
14169 while (this.t > 0 && this[this.t - 1] == c)--this.t
8b095871
IC
14170}
14171
9987f0c1
IC
14172// (public) return string representation in given radix
14173function bnToString(b) {
14174 var self = this
14175 if (self.s < 0) return "-" + self.negate()
14176 .toString(b)
14177 var k
14178 if (b == 16) k = 4
14179 else if (b == 8) k = 3
14180 else if (b == 2) k = 1
14181 else if (b == 32) k = 5
14182 else if (b == 4) k = 2
14183 else return self.toRadix(b)
14184 var km = (1 << k) - 1,
14185 d, m = false,
14186 r = "",
14187 i = self.t
14188 var p = self.DB - (i * self.DB) % k
14189 if (i-- > 0) {
14190 if (p < self.DB && (d = self[i] >> p) > 0) {
14191 m = true
14192 r = int2char(d)
14193 }
14194 while (i >= 0) {
14195 if (p < k) {
14196 d = (self[i] & ((1 << p) - 1)) << (k - p)
14197 d |= self[--i] >> (p += self.DB - k)
14198 } else {
14199 d = (self[i] >> (p -= k)) & km
14200 if (p <= 0) {
14201 p += self.DB
14202 --i
14203 }
14204 }
14205 if (d > 0) m = true
14206 if (m) r += int2char(d)
14207 }
8b095871 14208 }
9987f0c1 14209 return m ? r : "0"
8b095871
IC
14210}
14211
9987f0c1
IC
14212// (public) -this
14213function bnNegate() {
14214 var r = new BigInteger()
14215 BigInteger.ZERO.subTo(this, r)
14216 return r
14217}
8b095871 14218
9987f0c1
IC
14219// (public) |this|
14220function bnAbs() {
14221 return (this.s < 0) ? this.negate() : this
14222}
8b095871 14223
9987f0c1
IC
14224// (public) return + if this > a, - if this < a, 0 if equal
14225function bnCompareTo(a) {
14226 var r = this.s - a.s
14227 if (r != 0) return r
14228 var i = this.t
14229 r = i - a.t
14230 if (r != 0) return (this.s < 0) ? -r : r
14231 while (--i >= 0)
14232 if ((r = this[i] - a[i]) != 0) return r
14233 return 0
14234}
8b095871 14235
9987f0c1
IC
14236// returns bit length of the integer x
14237function nbits(x) {
14238 var r = 1,
14239 t
14240 if ((t = x >>> 16) != 0) {
14241 x = t
14242 r += 16
14243 }
14244 if ((t = x >> 8) != 0) {
14245 x = t
14246 r += 8
14247 }
14248 if ((t = x >> 4) != 0) {
14249 x = t
14250 r += 4
14251 }
14252 if ((t = x >> 2) != 0) {
14253 x = t
14254 r += 2
14255 }
14256 if ((t = x >> 1) != 0) {
14257 x = t
14258 r += 1
8b095871 14259 }
9987f0c1
IC
14260 return r
14261}
8b095871 14262
9987f0c1
IC
14263// (public) return the number of bits in "this"
14264function bnBitLength() {
14265 if (this.t <= 0) return 0
14266 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
14267}
8b095871 14268
9987f0c1
IC
14269// (public) return the number of bytes in "this"
14270function bnByteLength() {
14271 return this.bitLength() >> 3
14272}
8b095871 14273
9987f0c1
IC
14274// (protected) r = this << n*DB
14275function bnpDLShiftTo(n, r) {
14276 var i
14277 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
14278 for (i = n - 1; i >= 0; --i) r[i] = 0
14279 r.t = this.t + n
14280 r.s = this.s
14281}
8b095871 14282
9987f0c1
IC
14283// (protected) r = this >> n*DB
14284function bnpDRShiftTo(n, r) {
14285 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
14286 r.t = Math.max(this.t - n, 0)
14287 r.s = this.s
14288}
8b095871 14289
9987f0c1
IC
14290// (protected) r = this << n
14291function bnpLShiftTo(n, r) {
14292 var self = this
14293 var bs = n % self.DB
14294 var cbs = self.DB - bs
14295 var bm = (1 << cbs) - 1
14296 var ds = Math.floor(n / self.DB),
14297 c = (self.s << bs) & self.DM,
14298 i
14299 for (i = self.t - 1; i >= 0; --i) {
14300 r[i + ds + 1] = (self[i] >> cbs) | c
14301 c = (self[i] & bm) << bs
14302 }
14303 for (i = ds - 1; i >= 0; --i) r[i] = 0
14304 r[ds] = c
14305 r.t = self.t + ds + 1
14306 r.s = self.s
14307 r.clamp()
14308}
8b095871 14309
9987f0c1
IC
14310// (protected) r = this >> n
14311function bnpRShiftTo(n, r) {
14312 var self = this
14313 r.s = self.s
14314 var ds = Math.floor(n / self.DB)
14315 if (ds >= self.t) {
14316 r.t = 0
14317 return
8b095871 14318 }
9987f0c1
IC
14319 var bs = n % self.DB
14320 var cbs = self.DB - bs
14321 var bm = (1 << bs) - 1
14322 r[0] = self[ds] >> bs
14323 for (var i = ds + 1; i < self.t; ++i) {
14324 r[i - ds - 1] |= (self[i] & bm) << cbs
14325 r[i - ds] = self[i] >> bs
14326 }
14327 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
14328 r.t = self.t - ds
14329 r.clamp()
14330}
8b095871 14331
9987f0c1
IC
14332// (protected) r = this - a
14333function bnpSubTo(a, r) {
14334 var self = this
14335 var i = 0,
14336 c = 0,
14337 m = Math.min(a.t, self.t)
14338 while (i < m) {
14339 c += self[i] - a[i]
14340 r[i++] = c & self.DM
14341 c >>= self.DB
8b095871 14342 }
9987f0c1
IC
14343 if (a.t < self.t) {
14344 c -= a.s
14345 while (i < self.t) {
14346 c += self[i]
14347 r[i++] = c & self.DM
14348 c >>= self.DB
14349 }
14350 c += self.s
14351 } else {
14352 c += self.s
14353 while (i < a.t) {
14354 c -= a[i]
14355 r[i++] = c & self.DM
14356 c >>= self.DB
14357 }
14358 c -= a.s
14359 }
14360 r.s = (c < 0) ? -1 : 0
14361 if (c < -1) r[i++] = self.DV + c
14362 else if (c > 0) r[i++] = c
14363 r.t = i
14364 r.clamp()
8b095871
IC
14365}
14366
9987f0c1
IC
14367// (protected) r = this * a, r != this,a (HAC 14.12)
14368// "this" should be the larger one if appropriate.
14369function bnpMultiplyTo(a, r) {
14370 var x = this.abs(),
14371 y = a.abs()
14372 var i = x.t
14373 r.t = i + y.t
14374 while (--i >= 0) r[i] = 0
14375 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
14376 r.s = 0
14377 r.clamp()
14378 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
14379}
8b095871 14380
9987f0c1
IC
14381// (protected) r = this^2, r != this (HAC 14.16)
14382function bnpSquareTo(r) {
14383 var x = this.abs()
14384 var i = r.t = 2 * x.t
14385 while (--i >= 0) r[i] = 0
14386 for (i = 0; i < x.t - 1; ++i) {
14387 var c = x.am(i, x[i], r, 2 * i, 0, 1)
14388 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
14389 r[i + x.t] -= x.DV
14390 r[i + x.t + 1] = 1
14391 }
14392 }
14393 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
14394 r.s = 0
14395 r.clamp()
14396}
8b095871 14397
9987f0c1
IC
14398// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
14399// r != q, this != m. q or r may be null.
14400function bnpDivRemTo(m, q, r) {
14401 var self = this
14402 var pm = m.abs()
14403 if (pm.t <= 0) return
14404 var pt = self.abs()
14405 if (pt.t < pm.t) {
14406 if (q != null) q.fromInt(0)
14407 if (r != null) self.copyTo(r)
14408 return
14409 }
14410 if (r == null) r = new BigInteger()
14411 var y = new BigInteger(),
14412 ts = self.s,
14413 ms = m.s
14414 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
14415 if (nsh > 0) {
14416 pm.lShiftTo(nsh, y)
14417 pt.lShiftTo(nsh, r)
14418 } else {
14419 pm.copyTo(y)
14420 pt.copyTo(r)
14421 }
14422 var ys = y.t
14423 var y0 = y[ys - 1]
14424 if (y0 == 0) return
14425 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
14426 var d1 = self.FV / yt,
14427 d2 = (1 << self.F1) / yt,
14428 e = 1 << self.F2
14429 var i = r.t,
14430 j = i - ys,
14431 t = (q == null) ? new BigInteger() : q
14432 y.dlShiftTo(j, t)
14433 if (r.compareTo(t) >= 0) {
14434 r[r.t++] = 1
14435 r.subTo(t, r)
14436 }
14437 BigInteger.ONE.dlShiftTo(ys, t)
14438 t.subTo(y, y); // "negative" y so we can replace sub with am later
14439 while (y.t < ys) y[y.t++] = 0
14440 while (--j >= 0) {
14441 // Estimate quotient digit
14442 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
14443 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
14444 y.dlShiftTo(j, t)
14445 r.subTo(t, r)
14446 while (r[i] < --qd) r.subTo(t, r)
14447 }
14448 }
14449 if (q != null) {
14450 r.drShiftTo(ys, q)
14451 if (ts != ms) BigInteger.ZERO.subTo(q, q)
14452 }
14453 r.t = ys
14454 r.clamp()
14455 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
14456 if (ts < 0) BigInteger.ZERO.subTo(r, r)
14457}
8b095871 14458
9987f0c1
IC
14459// (public) this mod a
14460function bnMod(a) {
14461 var r = new BigInteger()
14462 this.abs()
14463 .divRemTo(a, null, r)
14464 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
14465 return r
14466}
8b095871 14467
9987f0c1
IC
14468// Modular reduction using "classic" algorithm
14469function Classic(m) {
14470 this.m = m
8b095871
IC
14471}
14472
9987f0c1
IC
14473function cConvert(x) {
14474 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
14475 else return x
8b095871
IC
14476}
14477
9987f0c1
IC
14478function cRevert(x) {
14479 return x
14480}
8b095871 14481
9987f0c1
IC
14482function cReduce(x) {
14483 x.divRemTo(this.m, null, x)
8b095871
IC
14484}
14485
9987f0c1
IC
14486function cMulTo(x, y, r) {
14487 x.multiplyTo(y, r)
14488 this.reduce(r)
8b095871
IC
14489}
14490
9987f0c1
IC
14491function cSqrTo(x, r) {
14492 x.squareTo(r)
14493 this.reduce(r)
14494}
8b095871 14495
9987f0c1
IC
14496Classic.prototype.convert = cConvert
14497Classic.prototype.revert = cRevert
14498Classic.prototype.reduce = cReduce
14499Classic.prototype.mulTo = cMulTo
14500Classic.prototype.sqrTo = cSqrTo
8b095871 14501
9987f0c1
IC
14502// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
14503// justification:
14504// xy == 1 (mod m)
14505// xy = 1+km
14506// xy(2-xy) = (1+km)(1-km)
14507// x[y(2-xy)] = 1-k^2m^2
14508// x[y(2-xy)] == 1 (mod m^2)
14509// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
14510// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
14511// JS multiply "overflows" differently from C/C++, so care is needed here.
14512function bnpInvDigit() {
14513 if (this.t < 1) return 0
14514 var x = this[0]
14515 if ((x & 1) == 0) return 0
14516 var y = x & 3; // y == 1/x mod 2^2
14517 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
14518 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
14519 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
14520 // last step - calculate inverse mod DV directly
14521 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
14522 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
14523 // we really want the negative inverse, and -DV < y < DV
14524 return (y > 0) ? this.DV - y : -y
14525}
8b095871 14526
9987f0c1
IC
14527// Montgomery reduction
14528function Montgomery(m) {
14529 this.m = m
14530 this.mp = m.invDigit()
14531 this.mpl = this.mp & 0x7fff
14532 this.mph = this.mp >> 15
14533 this.um = (1 << (m.DB - 15)) - 1
14534 this.mt2 = 2 * m.t
14535}
8b095871 14536
9987f0c1
IC
14537// xR mod m
14538function montConvert(x) {
14539 var r = new BigInteger()
14540 x.abs()
14541 .dlShiftTo(this.m.t, r)
14542 r.divRemTo(this.m, null, r)
14543 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
14544 return r
8b095871
IC
14545}
14546
9987f0c1
IC
14547// x/R mod m
14548function montRevert(x) {
14549 var r = new BigInteger()
14550 x.copyTo(r)
14551 this.reduce(r)
14552 return r
8b095871
IC
14553}
14554
9987f0c1
IC
14555// x = x/R mod m (HAC 14.32)
14556function montReduce(x) {
14557 while (x.t <= this.mt2) // pad x so am has enough room later
14558 x[x.t++] = 0
14559 for (var i = 0; i < this.m.t; ++i) {
14560 // faster way of calculating u0 = x[i]*mp mod DV
14561 var j = x[i] & 0x7fff
14562 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
14563 // use am to combine the multiply-shift-add into one call
14564 j = i + this.m.t
14565 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
14566 // propagate carry
14567 while (x[j] >= x.DV) {
14568 x[j] -= x.DV
14569 x[++j]++
14570 }
8b095871 14571 }
9987f0c1
IC
14572 x.clamp()
14573 x.drShiftTo(this.m.t, x)
14574 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
8b095871
IC
14575}
14576
9987f0c1
IC
14577// r = "x^2/R mod m"; x != r
14578function montSqrTo(x, r) {
14579 x.squareTo(r)
14580 this.reduce(r)
14581}
8b095871 14582
9987f0c1
IC
14583// r = "xy/R mod m"; x,y != r
14584function montMulTo(x, y, r) {
14585 x.multiplyTo(y, r)
14586 this.reduce(r)
14587}
8b095871 14588
9987f0c1
IC
14589Montgomery.prototype.convert = montConvert
14590Montgomery.prototype.revert = montRevert
14591Montgomery.prototype.reduce = montReduce
14592Montgomery.prototype.mulTo = montMulTo
14593Montgomery.prototype.sqrTo = montSqrTo
8b095871 14594
9987f0c1
IC
14595// (protected) true iff this is even
14596function bnpIsEven() {
14597 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
14598}
8b095871 14599
9987f0c1
IC
14600// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
14601function bnpExp(e, z) {
14602 if (e > 0xffffffff || e < 1) return BigInteger.ONE
14603 var r = new BigInteger(),
14604 r2 = new BigInteger(),
14605 g = z.convert(this),
14606 i = nbits(e) - 1
14607 g.copyTo(r)
14608 while (--i >= 0) {
14609 z.sqrTo(r, r2)
14610 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
14611 else {
14612 var t = r
14613 r = r2
14614 r2 = t
8b095871 14615 }
8b095871 14616 }
9987f0c1 14617 return z.revert(r)
8b095871
IC
14618}
14619
9987f0c1
IC
14620// (public) this^e % m, 0 <= e < 2^32
14621function bnModPowInt(e, m) {
14622 var z
14623 if (e < 256 || m.isEven()) z = new Classic(m)
14624 else z = new Montgomery(m)
14625 return this.exp(e, z)
14626}
8b095871 14627
9987f0c1
IC
14628// protected
14629proto.copyTo = bnpCopyTo
14630proto.fromInt = bnpFromInt
14631proto.fromString = bnpFromString
14632proto.clamp = bnpClamp
14633proto.dlShiftTo = bnpDLShiftTo
14634proto.drShiftTo = bnpDRShiftTo
14635proto.lShiftTo = bnpLShiftTo
14636proto.rShiftTo = bnpRShiftTo
14637proto.subTo = bnpSubTo
14638proto.multiplyTo = bnpMultiplyTo
14639proto.squareTo = bnpSquareTo
14640proto.divRemTo = bnpDivRemTo
14641proto.invDigit = bnpInvDigit
14642proto.isEven = bnpIsEven
14643proto.exp = bnpExp
8b095871 14644
9987f0c1
IC
14645// public
14646proto.toString = bnToString
14647proto.negate = bnNegate
14648proto.abs = bnAbs
14649proto.compareTo = bnCompareTo
14650proto.bitLength = bnBitLength
14651proto.byteLength = bnByteLength
14652proto.mod = bnMod
14653proto.modPowInt = bnModPowInt
8b095871 14654
9987f0c1
IC
14655// (public)
14656function bnClone() {
14657 var r = new BigInteger()
14658 this.copyTo(r)
14659 return r
14660}
8b095871 14661
9987f0c1
IC
14662// (public) return value as integer
14663function bnIntValue() {
14664 if (this.s < 0) {
14665 if (this.t == 1) return this[0] - this.DV
14666 else if (this.t == 0) return -1
14667 } else if (this.t == 1) return this[0]
14668 else if (this.t == 0) return 0
14669 // assumes 16 < DB < 32
14670 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
14671}
8b095871 14672
9987f0c1
IC
14673// (public) return value as byte
14674function bnByteValue() {
14675 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
14676}
8b095871 14677
9987f0c1
IC
14678// (public) return value as short (assumes DB>=16)
14679function bnShortValue() {
14680 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
14681}
8b095871 14682
9987f0c1
IC
14683// (protected) return x s.t. r^x < DV
14684function bnpChunkSize(r) {
14685 return Math.floor(Math.LN2 * this.DB / Math.log(r))
8b095871
IC
14686}
14687
9987f0c1
IC
14688// (public) 0 if this == 0, 1 if this > 0
14689function bnSigNum() {
14690 if (this.s < 0) return -1
14691 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
14692 else return 1
8b095871
IC
14693}
14694
9987f0c1
IC
14695// (protected) convert to radix string
14696function bnpToRadix(b) {
14697 if (b == null) b = 10
14698 if (this.signum() == 0 || b < 2 || b > 36) return "0"
14699 var cs = this.chunkSize(b)
14700 var a = Math.pow(b, cs)
14701 var d = nbv(a),
14702 y = new BigInteger(),
14703 z = new BigInteger(),
14704 r = ""
14705 this.divRemTo(d, y, z)
14706 while (y.signum() > 0) {
14707 r = (a + z.intValue())
14708 .toString(b)
14709 .substr(1) + r
14710 y.divRemTo(d, y, z)
8b095871 14711 }
9987f0c1
IC
14712 return z.intValue()
14713 .toString(b) + r
8b095871
IC
14714}
14715
9987f0c1
IC
14716// (protected) convert from radix string
14717function bnpFromRadix(s, b) {
14718 var self = this
14719 self.fromInt(0)
14720 if (b == null) b = 10
14721 var cs = self.chunkSize(b)
14722 var d = Math.pow(b, cs),
14723 mi = false,
14724 j = 0,
14725 w = 0
14726 for (var i = 0; i < s.length; ++i) {
14727 var x = intAt(s, i)
14728 if (x < 0) {
14729 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
14730 continue
14731 }
14732 w = b * w + x
14733 if (++j >= cs) {
14734 self.dMultiply(d)
14735 self.dAddOffset(w, 0)
14736 j = 0
14737 w = 0
14738 }
8b095871 14739 }
9987f0c1
IC
14740 if (j > 0) {
14741 self.dMultiply(Math.pow(b, j))
14742 self.dAddOffset(w, 0)
14743 }
14744 if (mi) BigInteger.ZERO.subTo(self, self)
8b095871
IC
14745}
14746
9987f0c1
IC
14747// (protected) alternate constructor
14748function bnpFromNumber(a, b, c) {
14749 var self = this
14750 if ("number" == typeof b) {
14751 // new BigInteger(int,int,RNG)
14752 if (a < 2) self.fromInt(1)
14753 else {
14754 self.fromNumber(a, c)
14755 if (!self.testBit(a - 1)) // force MSB set
14756 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
14757 if (self.isEven()) self.dAddOffset(1, 0); // force odd
14758 while (!self.isProbablePrime(b)) {
14759 self.dAddOffset(2, 0)
14760 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
14761 }
14762 }
14763 } else {
14764 // new BigInteger(int,RNG)
14765 var x = new Array(),
14766 t = a & 7
14767 x.length = (a >> 3) + 1
14768 b.nextBytes(x)
14769 if (t > 0) x[0] &= ((1 << t) - 1)
14770 else x[0] = 0
14771 self.fromString(x, 256)
14772 }
8b095871 14773}
8b095871 14774
9987f0c1
IC
14775// (public) convert to bigendian byte array
14776function bnToByteArray() {
14777 var self = this
14778 var i = self.t,
14779 r = new Array()
14780 r[0] = self.s
14781 var p = self.DB - (i * self.DB) % 8,
14782 d, k = 0
14783 if (i-- > 0) {
14784 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
14785 r[k++] = d | (self.s << (self.DB - p))
14786 while (i >= 0) {
14787 if (p < 8) {
14788 d = (self[i] & ((1 << p) - 1)) << (8 - p)
14789 d |= self[--i] >> (p += self.DB - 8)
14790 } else {
14791 d = (self[i] >> (p -= 8)) & 0xff
14792 if (p <= 0) {
14793 p += self.DB
14794 --i
14795 }
14796 }
14797 if ((d & 0x80) != 0) d |= -256
14798 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
14799 if (k > 0 || d != self.s) r[k++] = d
14800 }
14801 }
14802 return r
8b095871 14803}
8b095871 14804
9987f0c1
IC
14805function bnEquals(a) {
14806 return (this.compareTo(a) == 0)
8b095871 14807}
8b095871 14808
9987f0c1
IC
14809function bnMin(a) {
14810 return (this.compareTo(a) < 0) ? this : a
8b095871 14811}
8b095871 14812
9987f0c1
IC
14813function bnMax(a) {
14814 return (this.compareTo(a) > 0) ? this : a
8b095871 14815}
8b095871 14816
9987f0c1
IC
14817// (protected) r = this op a (bitwise)
14818function bnpBitwiseTo(a, op, r) {
14819 var self = this
14820 var i, f, m = Math.min(a.t, self.t)
14821 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
14822 if (a.t < self.t) {
14823 f = a.s & self.DM
14824 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
14825 r.t = self.t
14826 } else {
14827 f = self.s & self.DM
14828 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
14829 r.t = a.t
14830 }
14831 r.s = op(self.s, a.s)
14832 r.clamp()
8b095871 14833}
8b095871 14834
9987f0c1
IC
14835// (public) this & a
14836function op_and(x, y) {
14837 return x & y
8b095871 14838}
8b095871 14839
9987f0c1
IC
14840function bnAnd(a) {
14841 var r = new BigInteger()
14842 this.bitwiseTo(a, op_and, r)
14843 return r
8b095871 14844}
8b095871 14845
9987f0c1
IC
14846// (public) this | a
14847function op_or(x, y) {
14848 return x | y
8b095871 14849}
8b095871 14850
9987f0c1
IC
14851function bnOr(a) {
14852 var r = new BigInteger()
14853 this.bitwiseTo(a, op_or, r)
14854 return r
8b095871 14855}
8b095871 14856
9987f0c1
IC
14857// (public) this ^ a
14858function op_xor(x, y) {
14859 return x ^ y
8b095871 14860}
8b095871 14861
9987f0c1
IC
14862function bnXor(a) {
14863 var r = new BigInteger()
14864 this.bitwiseTo(a, op_xor, r)
14865 return r
8b095871 14866}
8b095871 14867
9987f0c1
IC
14868// (public) this & ~a
14869function op_andnot(x, y) {
14870 return x & ~y
8b095871 14871}
8b095871 14872
9987f0c1
IC
14873function bnAndNot(a) {
14874 var r = new BigInteger()
14875 this.bitwiseTo(a, op_andnot, r)
14876 return r
8b095871 14877}
8b095871 14878
9987f0c1
IC
14879// (public) ~this
14880function bnNot() {
14881 var r = new BigInteger()
14882 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
14883 r.t = this.t
14884 r.s = ~this.s
14885 return r
8b095871 14886}
8b095871 14887
9987f0c1
IC
14888// (public) this << n
14889function bnShiftLeft(n) {
14890 var r = new BigInteger()
14891 if (n < 0) this.rShiftTo(-n, r)
14892 else this.lShiftTo(n, r)
14893 return r
8b095871 14894}
8b095871 14895
9987f0c1
IC
14896// (public) this >> n
14897function bnShiftRight(n) {
14898 var r = new BigInteger()
14899 if (n < 0) this.lShiftTo(-n, r)
14900 else this.rShiftTo(n, r)
14901 return r
8b095871
IC
14902}
14903
9987f0c1
IC
14904// return index of lowest 1-bit in x, x < 2^31
14905function lbit(x) {
14906 if (x == 0) return -1
14907 var r = 0
14908 if ((x & 0xffff) == 0) {
14909 x >>= 16
14910 r += 16
8b095871 14911 }
9987f0c1
IC
14912 if ((x & 0xff) == 0) {
14913 x >>= 8
14914 r += 8
8b095871 14915 }
9987f0c1
IC
14916 if ((x & 0xf) == 0) {
14917 x >>= 4
14918 r += 4
8b095871 14919 }
9987f0c1
IC
14920 if ((x & 3) == 0) {
14921 x >>= 2
14922 r += 2
14923 }
14924 if ((x & 1) == 0)++r
14925 return r
14926}
8b095871 14927
9987f0c1
IC
14928// (public) returns index of lowest 1-bit (or -1 if none)
14929function bnGetLowestSetBit() {
14930 for (var i = 0; i < this.t; ++i)
14931 if (this[i] != 0) return i * this.DB + lbit(this[i])
14932 if (this.s < 0) return this.t * this.DB
14933 return -1
14934}
8b095871 14935
9987f0c1
IC
14936// return number of 1 bits in x
14937function cbit(x) {
14938 var r = 0
14939 while (x != 0) {
14940 x &= x - 1
14941 ++r
8b095871 14942 }
9987f0c1
IC
14943 return r
14944}
8b095871 14945
9987f0c1
IC
14946// (public) return number of set bits
14947function bnBitCount() {
14948 var r = 0,
14949 x = this.s & this.DM
14950 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
14951 return r
14952}
8b095871 14953
9987f0c1
IC
14954// (public) true iff nth bit is set
14955function bnTestBit(n) {
14956 var j = Math.floor(n / this.DB)
14957 if (j >= this.t) return (this.s != 0)
14958 return ((this[j] & (1 << (n % this.DB))) != 0)
14959}
8b095871 14960
9987f0c1
IC
14961// (protected) this op (1<<n)
14962function bnpChangeBit(n, op) {
14963 var r = BigInteger.ONE.shiftLeft(n)
14964 this.bitwiseTo(r, op, r)
14965 return r
14966}
8b095871 14967
9987f0c1
IC
14968// (public) this | (1<<n)
14969function bnSetBit(n) {
14970 return this.changeBit(n, op_or)
14971}
8b095871 14972
9987f0c1
IC
14973// (public) this & ~(1<<n)
14974function bnClearBit(n) {
14975 return this.changeBit(n, op_andnot)
14976}
8b095871 14977
9987f0c1
IC
14978// (public) this ^ (1<<n)
14979function bnFlipBit(n) {
14980 return this.changeBit(n, op_xor)
14981}
8b095871 14982
9987f0c1
IC
14983// (protected) r = this + a
14984function bnpAddTo(a, r) {
14985 var self = this
8b095871 14986
9987f0c1
IC
14987 var i = 0,
14988 c = 0,
14989 m = Math.min(a.t, self.t)
14990 while (i < m) {
14991 c += self[i] + a[i]
14992 r[i++] = c & self.DM
14993 c >>= self.DB
14994 }
14995 if (a.t < self.t) {
14996 c += a.s
14997 while (i < self.t) {
14998 c += self[i]
14999 r[i++] = c & self.DM
15000 c >>= self.DB
15001 }
15002 c += self.s
15003 } else {
15004 c += self.s
15005 while (i < a.t) {
15006 c += a[i]
15007 r[i++] = c & self.DM
15008 c >>= self.DB
15009 }
15010 c += a.s
15011 }
15012 r.s = (c < 0) ? -1 : 0
15013 if (c > 0) r[i++] = c
15014 else if (c < -1) r[i++] = self.DV + c
15015 r.t = i
15016 r.clamp()
15017}
8b095871 15018
9987f0c1
IC
15019// (public) this + a
15020function bnAdd(a) {
15021 var r = new BigInteger()
15022 this.addTo(a, r)
15023 return r
15024}
8b095871 15025
9987f0c1
IC
15026// (public) this - a
15027function bnSubtract(a) {
15028 var r = new BigInteger()
15029 this.subTo(a, r)
15030 return r
15031}
8b095871 15032
9987f0c1
IC
15033// (public) this * a
15034function bnMultiply(a) {
15035 var r = new BigInteger()
15036 this.multiplyTo(a, r)
15037 return r
15038}
8b095871 15039
9987f0c1
IC
15040// (public) this^2
15041function bnSquare() {
15042 var r = new BigInteger()
15043 this.squareTo(r)
15044 return r
15045}
8b095871 15046
9987f0c1
IC
15047// (public) this / a
15048function bnDivide(a) {
15049 var r = new BigInteger()
15050 this.divRemTo(a, r, null)
15051 return r
15052}
8b095871 15053
9987f0c1
IC
15054// (public) this % a
15055function bnRemainder(a) {
15056 var r = new BigInteger()
15057 this.divRemTo(a, null, r)
15058 return r
15059}
8b095871 15060
9987f0c1
IC
15061// (public) [this/a,this%a]
15062function bnDivideAndRemainder(a) {
15063 var q = new BigInteger(),
15064 r = new BigInteger()
15065 this.divRemTo(a, q, r)
15066 return new Array(q, r)
15067}
8b095871 15068
9987f0c1
IC
15069// (protected) this *= n, this >= 0, 1 < n < DV
15070function bnpDMultiply(n) {
15071 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
15072 ++this.t
15073 this.clamp()
8b095871
IC
15074}
15075
9987f0c1
IC
15076// (protected) this += n << w words, this >= 0
15077function bnpDAddOffset(n, w) {
15078 if (n == 0) return
15079 while (this.t <= w) this[this.t++] = 0
15080 this[w] += n
15081 while (this[w] >= this.DV) {
15082 this[w] -= this.DV
15083 if (++w >= this.t) this[this.t++] = 0
15084 ++this[w]
8b095871 15085 }
9987f0c1 15086}
8b095871 15087
9987f0c1
IC
15088// A "null" reducer
15089function NullExp() {}
8b095871 15090
9987f0c1
IC
15091function nNop(x) {
15092 return x
15093}
8b095871 15094
9987f0c1
IC
15095function nMulTo(x, y, r) {
15096 x.multiplyTo(y, r)
15097}
8b095871 15098
9987f0c1
IC
15099function nSqrTo(x, r) {
15100 x.squareTo(r)
15101}
8b095871 15102
9987f0c1
IC
15103NullExp.prototype.convert = nNop
15104NullExp.prototype.revert = nNop
15105NullExp.prototype.mulTo = nMulTo
15106NullExp.prototype.sqrTo = nSqrTo
8b095871 15107
9987f0c1
IC
15108// (public) this^e
15109function bnPow(e) {
15110 return this.exp(e, new NullExp())
15111}
8b095871 15112
9987f0c1
IC
15113// (protected) r = lower n words of "this * a", a.t <= n
15114// "this" should be the larger one if appropriate.
15115function bnpMultiplyLowerTo(a, n, r) {
15116 var i = Math.min(this.t + a.t, n)
15117 r.s = 0; // assumes a,this >= 0
15118 r.t = i
15119 while (i > 0) r[--i] = 0
15120 var j
15121 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
15122 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
15123 r.clamp()
15124}
8b095871 15125
9987f0c1
IC
15126// (protected) r = "this * a" without lower n words, n > 0
15127// "this" should be the larger one if appropriate.
15128function bnpMultiplyUpperTo(a, n, r) {
15129 --n
15130 var i = r.t = this.t + a.t - n
15131 r.s = 0; // assumes a,this >= 0
15132 while (--i >= 0) r[i] = 0
15133 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
15134 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
15135 r.clamp()
15136 r.drShiftTo(1, r)
15137}
8b095871 15138
9987f0c1
IC
15139// Barrett modular reduction
15140function Barrett(m) {
15141 // setup Barrett
15142 this.r2 = new BigInteger()
15143 this.q3 = new BigInteger()
15144 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
15145 this.mu = this.r2.divide(m)
15146 this.m = m
15147}
8b095871 15148
9987f0c1
IC
15149function barrettConvert(x) {
15150 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
15151 else if (x.compareTo(this.m) < 0) return x
15152 else {
15153 var r = new BigInteger()
15154 x.copyTo(r)
15155 this.reduce(r)
15156 return r
8b095871 15157 }
9987f0c1 15158}
8b095871 15159
9987f0c1
IC
15160function barrettRevert(x) {
15161 return x
15162}
8b095871 15163
9987f0c1
IC
15164// x = x mod m (HAC 14.42)
15165function barrettReduce(x) {
15166 var self = this
15167 x.drShiftTo(self.m.t - 1, self.r2)
15168 if (x.t > self.m.t + 1) {
15169 x.t = self.m.t + 1
15170 x.clamp()
8b095871 15171 }
9987f0c1
IC
15172 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
15173 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
15174 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
15175 x.subTo(self.r2, x)
15176 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
15177}
8b095871 15178
9987f0c1
IC
15179// r = x^2 mod m; x != r
15180function barrettSqrTo(x, r) {
15181 x.squareTo(r)
15182 this.reduce(r)
15183}
8b095871 15184
9987f0c1
IC
15185// r = x*y mod m; x,y != r
15186function barrettMulTo(x, y, r) {
15187 x.multiplyTo(y, r)
15188 this.reduce(r)
15189}
8b095871 15190
9987f0c1
IC
15191Barrett.prototype.convert = barrettConvert
15192Barrett.prototype.revert = barrettRevert
15193Barrett.prototype.reduce = barrettReduce
15194Barrett.prototype.mulTo = barrettMulTo
15195Barrett.prototype.sqrTo = barrettSqrTo
8b095871 15196
9987f0c1
IC
15197// (public) this^e % m (HAC 14.85)
15198function bnModPow(e, m) {
15199 var i = e.bitLength(),
15200 k, r = nbv(1),
15201 z
15202 if (i <= 0) return r
15203 else if (i < 18) k = 1
15204 else if (i < 48) k = 3
15205 else if (i < 144) k = 4
15206 else if (i < 768) k = 5
15207 else k = 6
15208 if (i < 8)
15209 z = new Classic(m)
15210 else if (m.isEven())
15211 z = new Barrett(m)
15212 else
15213 z = new Montgomery(m)
8b095871 15214
9987f0c1
IC
15215 // precomputation
15216 var g = new Array(),
15217 n = 3,
15218 k1 = k - 1,
15219 km = (1 << k) - 1
15220 g[1] = z.convert(this)
15221 if (k > 1) {
15222 var g2 = new BigInteger()
15223 z.sqrTo(g[1], g2)
15224 while (n <= km) {
15225 g[n] = new BigInteger()
15226 z.mulTo(g2, g[n - 2], g[n])
15227 n += 2
8b095871 15228 }
9987f0c1 15229 }
8b095871 15230
9987f0c1
IC
15231 var j = e.t - 1,
15232 w, is1 = true,
15233 r2 = new BigInteger(),
15234 t
15235 i = nbits(e[j]) - 1
15236 while (j >= 0) {
15237 if (i >= k1) w = (e[j] >> (i - k1)) & km
15238 else {
15239 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
15240 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
8b095871
IC
15241 }
15242
9987f0c1
IC
15243 n = k
15244 while ((w & 1) == 0) {
15245 w >>= 1
15246 --n
15247 }
15248 if ((i -= n) < 0) {
15249 i += this.DB
15250 --j
15251 }
15252 if (is1) { // ret == 1, don't bother squaring or multiplying it
15253 g[w].copyTo(r)
15254 is1 = false
15255 } else {
15256 while (n > 1) {
15257 z.sqrTo(r, r2)
15258 z.sqrTo(r2, r)
15259 n -= 2
15260 }
15261 if (n > 0) z.sqrTo(r, r2)
15262 else {
15263 t = r
15264 r = r2
15265 r2 = t
15266 }
15267 z.mulTo(r2, g[w], r)
8b095871 15268 }
8b095871 15269
9987f0c1
IC
15270 while (j >= 0 && (e[j] & (1 << i)) == 0) {
15271 z.sqrTo(r, r2)
15272 t = r
15273 r = r2
15274 r2 = t
15275 if (--i < 0) {
15276 i = this.DB - 1
15277 --j
15278 }
15279 }
15280 }
15281 return z.revert(r)
8b095871
IC
15282}
15283
9987f0c1
IC
15284// (public) gcd(this,a) (HAC 14.54)
15285function bnGCD(a) {
15286 var x = (this.s < 0) ? this.negate() : this.clone()
15287 var y = (a.s < 0) ? a.negate() : a.clone()
15288 if (x.compareTo(y) < 0) {
15289 var t = x
15290 x = y
15291 y = t
15292 }
15293 var i = x.getLowestSetBit(),
15294 g = y.getLowestSetBit()
15295 if (g < 0) return x
15296 if (i < g) g = i
15297 if (g > 0) {
15298 x.rShiftTo(g, x)
15299 y.rShiftTo(g, y)
15300 }
15301 while (x.signum() > 0) {
15302 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
15303 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
15304 if (x.compareTo(y) >= 0) {
15305 x.subTo(y, x)
15306 x.rShiftTo(1, x)
15307 } else {
15308 y.subTo(x, y)
15309 y.rShiftTo(1, y)
15310 }
15311 }
15312 if (g > 0) y.lShiftTo(g, y)
15313 return y
8b095871
IC
15314}
15315
9987f0c1
IC
15316// (protected) this % n, n < 2^26
15317function bnpModInt(n) {
15318 if (n <= 0) return 0
15319 var d = this.DV % n,
15320 r = (this.s < 0) ? n - 1 : 0
15321 if (this.t > 0)
15322 if (d == 0) r = this[0] % n
15323 else
15324 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
15325 return r
8b095871 15326}
8b095871 15327
9987f0c1
IC
15328// (public) 1/this % m (HAC 14.61)
15329function bnModInverse(m) {
15330 var ac = m.isEven()
15331 if (this.signum() === 0) throw new Error('division by zero')
15332 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
15333 var u = m.clone(),
15334 v = this.clone()
15335 var a = nbv(1),
15336 b = nbv(0),
15337 c = nbv(0),
15338 d = nbv(1)
15339 while (u.signum() != 0) {
15340 while (u.isEven()) {
15341 u.rShiftTo(1, u)
15342 if (ac) {
15343 if (!a.isEven() || !b.isEven()) {
15344 a.addTo(this, a)
15345 b.subTo(m, b)
15346 }
15347 a.rShiftTo(1, a)
15348 } else if (!b.isEven()) b.subTo(m, b)
15349 b.rShiftTo(1, b)
8b095871 15350 }
9987f0c1
IC
15351 while (v.isEven()) {
15352 v.rShiftTo(1, v)
15353 if (ac) {
15354 if (!c.isEven() || !d.isEven()) {
15355 c.addTo(this, c)
15356 d.subTo(m, d)
8b095871 15357 }
9987f0c1
IC
15358 c.rShiftTo(1, c)
15359 } else if (!d.isEven()) d.subTo(m, d)
15360 d.rShiftTo(1, d)
8b095871 15361 }
9987f0c1
IC
15362 if (u.compareTo(v) >= 0) {
15363 u.subTo(v, u)
15364 if (ac) a.subTo(c, a)
15365 b.subTo(d, b)
8b095871 15366 } else {
9987f0c1
IC
15367 v.subTo(u, v)
15368 if (ac) c.subTo(a, c)
15369 d.subTo(b, d)
8b095871
IC
15370 }
15371 }
9987f0c1
IC
15372 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
15373 while (d.compareTo(m) >= 0) d.subTo(m, d)
15374 while (d.signum() < 0) d.addTo(m, d)
15375 return d
15376}
8b095871 15377
9987f0c1
IC
15378var lowprimes = [
15379 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
15380 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
15381 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
15382 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
15383 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
15384 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
15385 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
15386 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
15387 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
15388 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
15389 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
15390]
8b095871 15391
9987f0c1 15392var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
8b095871 15393
9987f0c1
IC
15394// (public) test primality with certainty >= 1-.5^t
15395function bnIsProbablePrime(t) {
15396 var i, x = this.abs()
15397 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
15398 for (i = 0; i < lowprimes.length; ++i)
15399 if (x[0] == lowprimes[i]) return true
15400 return false
8b095871 15401 }
9987f0c1
IC
15402 if (x.isEven()) return false
15403 i = 1
15404 while (i < lowprimes.length) {
15405 var m = lowprimes[i],
15406 j = i + 1
15407 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
15408 m = x.modInt(m)
15409 while (i < j) if (m % lowprimes[i++] == 0) return false
15410 }
15411 return x.millerRabin(t)
15412}
8b095871 15413
9987f0c1
IC
15414// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
15415function bnpMillerRabin(t) {
15416 var n1 = this.subtract(BigInteger.ONE)
15417 var k = n1.getLowestSetBit()
15418 if (k <= 0) return false
15419 var r = n1.shiftRight(k)
15420 t = (t + 1) >> 1
15421 if (t > lowprimes.length) t = lowprimes.length
15422 var a = new BigInteger(null)
15423 var j, bases = []
15424 for (var i = 0; i < t; ++i) {
15425 for (;;) {
15426 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
15427 if (bases.indexOf(j) == -1) break
15428 }
15429 bases.push(j)
15430 a.fromInt(j)
15431 var y = a.modPow(r, this)
15432 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
15433 var j = 1
15434 while (j++ < k && y.compareTo(n1) != 0) {
15435 y = y.modPowInt(2, this)
15436 if (y.compareTo(BigInteger.ONE) == 0) return false
8b095871 15437 }
9987f0c1 15438 if (y.compareTo(n1) != 0) return false
8b095871 15439 }
8b095871 15440 }
9987f0c1
IC
15441 return true
15442}
8b095871 15443
9987f0c1
IC
15444// protected
15445proto.chunkSize = bnpChunkSize
15446proto.toRadix = bnpToRadix
15447proto.fromRadix = bnpFromRadix
15448proto.fromNumber = bnpFromNumber
15449proto.bitwiseTo = bnpBitwiseTo
15450proto.changeBit = bnpChangeBit
15451proto.addTo = bnpAddTo
15452proto.dMultiply = bnpDMultiply
15453proto.dAddOffset = bnpDAddOffset
15454proto.multiplyLowerTo = bnpMultiplyLowerTo
15455proto.multiplyUpperTo = bnpMultiplyUpperTo
15456proto.modInt = bnpModInt
15457proto.millerRabin = bnpMillerRabin
8b095871 15458
9987f0c1
IC
15459// public
15460proto.clone = bnClone
15461proto.intValue = bnIntValue
15462proto.byteValue = bnByteValue
15463proto.shortValue = bnShortValue
15464proto.signum = bnSigNum
15465proto.toByteArray = bnToByteArray
15466proto.equals = bnEquals
15467proto.min = bnMin
15468proto.max = bnMax
15469proto.and = bnAnd
15470proto.or = bnOr
15471proto.xor = bnXor
15472proto.andNot = bnAndNot
15473proto.not = bnNot
15474proto.shiftLeft = bnShiftLeft
15475proto.shiftRight = bnShiftRight
15476proto.getLowestSetBit = bnGetLowestSetBit
15477proto.bitCount = bnBitCount
15478proto.testBit = bnTestBit
15479proto.setBit = bnSetBit
15480proto.clearBit = bnClearBit
15481proto.flipBit = bnFlipBit
15482proto.add = bnAdd
15483proto.subtract = bnSubtract
15484proto.multiply = bnMultiply
15485proto.divide = bnDivide
15486proto.remainder = bnRemainder
15487proto.divideAndRemainder = bnDivideAndRemainder
15488proto.modPow = bnModPow
15489proto.modInverse = bnModInverse
15490proto.pow = bnPow
15491proto.gcd = bnGCD
15492proto.isProbablePrime = bnIsProbablePrime
8b095871 15493
9987f0c1
IC
15494// JSBN-specific extension
15495proto.square = bnSquare
15496
15497// constants
15498BigInteger.ZERO = nbv(0)
15499BigInteger.ONE = nbv(1)
15500BigInteger.valueOf = nbv
8b095871 15501
9987f0c1
IC
15502module.exports = BigInteger
15503
cf6c2044 15504},{"../package.json":40}],38:[function(require,module,exports){
9987f0c1
IC
15505(function (Buffer){
15506// FIXME: Kind of a weird way to throw exceptions, consider removing
15507var assert = require('assert')
15508var BigInteger = require('./bigi')
8b095871
IC
15509
15510/**
9987f0c1 15511 * Turns a byte array into a big integer.
8b095871 15512 *
9987f0c1
IC
15513 * This function will interpret a byte array as a big integer in big
15514 * endian notation.
8b095871 15515 */
9987f0c1
IC
15516BigInteger.fromByteArrayUnsigned = function(byteArray) {
15517 // BigInteger expects a DER integer conformant byte array
15518 if (byteArray[0] & 0x80) {
15519 return new BigInteger([0].concat(byteArray))
8b095871 15520 }
8b095871 15521
9987f0c1
IC
15522 return new BigInteger(byteArray)
15523}
8b095871 15524
9987f0c1
IC
15525/**
15526 * Returns a byte array representation of the big integer.
15527 *
15528 * This returns the absolute of the contained value in big endian
15529 * form. A value of zero results in an empty array.
15530 */
15531BigInteger.prototype.toByteArrayUnsigned = function() {
15532 var byteArray = this.toByteArray()
15533 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
15534}
8b095871 15535
9987f0c1
IC
15536BigInteger.fromDERInteger = function(byteArray) {
15537 return new BigInteger(byteArray)
15538}
8b095871 15539
9987f0c1
IC
15540/*
15541 * Converts BigInteger to a DER integer representation.
15542 *
15543 * The format for this value uses the most significant bit as a sign
15544 * bit. If the most significant bit is already set and the integer is
15545 * positive, a 0x00 is prepended.
15546 *
15547 * Examples:
15548 *
15549 * 0 => 0x00
15550 * 1 => 0x01
15551 * -1 => 0xff
15552 * 127 => 0x7f
15553 * -127 => 0x81
15554 * 128 => 0x0080
15555 * -128 => 0x80
15556 * 255 => 0x00ff
15557 * -255 => 0xff01
15558 * 16300 => 0x3fac
15559 * -16300 => 0xc054
15560 * 62300 => 0x00f35c
15561 * -62300 => 0xff0ca4
15562*/
15563BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
8b095871 15564
9987f0c1
IC
15565BigInteger.fromBuffer = function(buffer) {
15566 // BigInteger expects a DER integer conformant byte array
15567 if (buffer[0] & 0x80) {
15568 var byteArray = Array.prototype.slice.call(buffer)
8b095871 15569
9987f0c1 15570 return new BigInteger([0].concat(byteArray))
8b095871 15571 }
9987f0c1
IC
15572
15573 return new BigInteger(buffer)
8b095871
IC
15574}
15575
9987f0c1
IC
15576BigInteger.fromHex = function(hex) {
15577 if (hex === '') return BigInteger.ZERO
8b095871 15578
9987f0c1
IC
15579 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
15580 assert.equal(hex.length % 2, 0, 'Incomplete hex')
15581 return new BigInteger(hex, 16)
8b095871
IC
15582}
15583
9987f0c1
IC
15584BigInteger.prototype.toBuffer = function(size) {
15585 var byteArray = this.toByteArrayUnsigned()
15586 var zeros = []
8b095871 15587
9987f0c1
IC
15588 var padding = size - byteArray.length
15589 while (zeros.length < padding) zeros.push(0)
8b095871 15590
9987f0c1
IC
15591 return new Buffer(zeros.concat(byteArray))
15592}
8b095871 15593
9987f0c1
IC
15594BigInteger.prototype.toHex = function(size) {
15595 return this.toBuffer(size).toString('hex')
8b095871
IC
15596}
15597
9987f0c1 15598}).call(this,require("buffer").Buffer)
cf6c2044 15599},{"./bigi":37,"assert":1,"buffer":5}],39:[function(require,module,exports){
9987f0c1 15600var BigInteger = require('./bigi')
8b095871 15601
9987f0c1
IC
15602//addons
15603require('./convert')
15604
15605module.exports = BigInteger
cf6c2044 15606},{"./bigi":37,"./convert":38}],40:[function(require,module,exports){
9987f0c1
IC
15607module.exports={
15608 "_args": [
15609 [
15610 "bigi",
15611 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
15612 ]
15613 ],
15614 "_from": "bigi@latest",
15615 "_id": "bigi@1.4.2",
15616 "_inCache": true,
15617 "_installable": true,
15618 "_location": "/bigi",
15619 "_nodeVersion": "6.1.0",
15620 "_npmOperationalInternal": {
15621 "host": "packages-12-west.internal.npmjs.com",
15622 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
15623 },
15624 "_npmUser": {
15625 "email": "jprichardson@gmail.com",
15626 "name": "jprichardson"
15627 },
15628 "_npmVersion": "3.8.6",
15629 "_phantomChildren": {},
15630 "_requested": {
15631 "name": "bigi",
15632 "raw": "bigi",
15633 "rawSpec": "",
15634 "scope": null,
15635 "spec": "latest",
15636 "type": "tag"
15637 },
15638 "_requiredBy": [
15639 "#USER",
15640 "/bitcoinjs-lib",
15641 "/ecurve"
15642 ],
15643 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
15644 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
15645 "_shrinkwrap": null,
15646 "_spec": "bigi",
15647 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
15648 "bugs": {
15649 "url": "https://github.com/cryptocoinjs/bigi/issues"
15650 },
15651 "dependencies": {},
15652 "description": "Big integers.",
15653 "devDependencies": {
15654 "coveralls": "^2.11.2",
15655 "istanbul": "^0.3.5",
15656 "jshint": "^2.5.1",
15657 "mocha": "^2.1.0",
15658 "mochify": "^2.1.0"
15659 },
15660 "directories": {},
15661 "dist": {
15662 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
15663 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
15664 },
15665 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
15666 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
15667 "keywords": [
15668 "cryptography",
15669 "math",
15670 "bitcoin",
15671 "arbitrary",
15672 "precision",
15673 "arithmetic",
15674 "big",
15675 "integer",
15676 "int",
15677 "number",
15678 "biginteger",
15679 "bigint",
15680 "bignumber",
15681 "decimal",
15682 "float"
15683 ],
15684 "main": "./lib/index.js",
15685 "maintainers": [
15686 {
15687 "email": "boydb@midnightdesign.ws",
15688 "name": "midnightlightning"
15689 },
15690 {
15691 "email": "sidazhang89@gmail.com",
15692 "name": "sidazhang"
15693 },
15694 {
15695 "email": "npm@shesek.info",
15696 "name": "nadav"
15697 },
15698 {
15699 "email": "jprichardson@gmail.com",
15700 "name": "jprichardson"
8b095871 15701 }
9987f0c1
IC
15702 ],
15703 "name": "bigi",
15704 "optionalDependencies": {},
15705 "readme": "ERROR: No README data found!",
15706 "repository": {
15707 "type": "git",
15708 "url": "git+https://github.com/cryptocoinjs/bigi.git"
15709 },
15710 "scripts": {
15711 "browser-test": "mochify --wd -R spec",
15712 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
15713 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
15714 "jshint": "jshint --config jshint.json lib/*.js ; true",
15715 "test": "_mocha -- test/*.js",
15716 "unit": "mocha"
15717 },
15718 "testling": {
15719 "browsers": [
15720 "ie/9..latest",
15721 "firefox/latest",
15722 "chrome/latest",
15723 "safari/6.0..latest",
15724 "iphone/6.0..latest",
15725 "android-browser/4.2..latest"
15726 ],
15727 "files": "test/*.js",
15728 "harness": "mocha"
15729 },
15730 "version": "1.4.2"
15731}
8b095871 15732
cf6c2044 15733},{}],41:[function(require,module,exports){
9987f0c1
IC
15734// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
15735// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
15736// NOTE: SIGHASH byte ignored AND restricted, truncate before use
8b095871 15737
9987f0c1 15738var Buffer = require('safe-buffer').Buffer
8b095871 15739
9987f0c1
IC
15740function check (buffer) {
15741 if (buffer.length < 8) return false
15742 if (buffer.length > 72) return false
15743 if (buffer[0] !== 0x30) return false
15744 if (buffer[1] !== buffer.length - 2) return false
15745 if (buffer[2] !== 0x02) return false
8b095871 15746
9987f0c1
IC
15747 var lenR = buffer[3]
15748 if (lenR === 0) return false
15749 if (5 + lenR >= buffer.length) return false
15750 if (buffer[4 + lenR] !== 0x02) return false
8b095871 15751
9987f0c1
IC
15752 var lenS = buffer[5 + lenR]
15753 if (lenS === 0) return false
15754 if ((6 + lenR + lenS) !== buffer.length) return false
8b095871 15755
9987f0c1
IC
15756 if (buffer[4] & 0x80) return false
15757 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
8b095871 15758
9987f0c1
IC
15759 if (buffer[lenR + 6] & 0x80) return false
15760 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
15761 return true
15762}
8b095871 15763
9987f0c1
IC
15764function decode (buffer) {
15765 if (buffer.length < 8) throw new Error('DER sequence length is too short')
15766 if (buffer.length > 72) throw new Error('DER sequence length is too long')
15767 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
15768 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
15769 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
8b095871 15770
9987f0c1
IC
15771 var lenR = buffer[3]
15772 if (lenR === 0) throw new Error('R length is zero')
15773 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
15774 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
8b095871 15775
9987f0c1
IC
15776 var lenS = buffer[5 + lenR]
15777 if (lenS === 0) throw new Error('S length is zero')
15778 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
8b095871 15779
9987f0c1
IC
15780 if (buffer[4] & 0x80) throw new Error('R value is negative')
15781 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
8b095871 15782
9987f0c1
IC
15783 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
15784 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
8b095871 15785
9987f0c1
IC
15786 // non-BIP66 - extract R, S values
15787 return {
15788 r: buffer.slice(4, 4 + lenR),
15789 s: buffer.slice(6 + lenR)
8b095871 15790 }
9987f0c1 15791}
8b095871 15792
9987f0c1
IC
15793/*
15794 * Expects r and s to be positive DER integers.
15795 *
15796 * The DER format uses the most significant bit as a sign bit (& 0x80).
15797 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
15798 *
15799 * Examples:
15800 *
15801 * 0 => 0x00
15802 * 1 => 0x01
15803 * -1 => 0xff
15804 * 127 => 0x7f
15805 * -127 => 0x81
15806 * 128 => 0x0080
15807 * -128 => 0x80
15808 * 255 => 0x00ff
15809 * -255 => 0xff01
15810 * 16300 => 0x3fac
15811 * -16300 => 0xc054
15812 * 62300 => 0x00f35c
15813 * -62300 => 0xff0ca4
15814*/
15815function encode (r, s) {
15816 var lenR = r.length
15817 var lenS = s.length
15818 if (lenR === 0) throw new Error('R length is zero')
15819 if (lenS === 0) throw new Error('S length is zero')
15820 if (lenR > 33) throw new Error('R length is too long')
15821 if (lenS > 33) throw new Error('S length is too long')
15822 if (r[0] & 0x80) throw new Error('R value is negative')
15823 if (s[0] & 0x80) throw new Error('S value is negative')
15824 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
15825 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
8b095871 15826
9987f0c1 15827 var signature = Buffer.allocUnsafe(6 + lenR + lenS)
8b095871 15828
9987f0c1
IC
15829 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
15830 signature[0] = 0x30
15831 signature[1] = signature.length - 2
15832 signature[2] = 0x02
15833 signature[3] = r.length
15834 r.copy(signature, 4)
15835 signature[4 + lenR] = 0x02
15836 signature[5 + lenR] = s.length
15837 s.copy(signature, 6 + lenR)
8b095871 15838
9987f0c1 15839 return signature
8b095871
IC
15840}
15841
9987f0c1
IC
15842module.exports = {
15843 check: check,
15844 decode: decode,
15845 encode: encode
8b095871
IC
15846}
15847
cf6c2044 15848},{"safe-buffer":128}],42:[function(require,module,exports){
9987f0c1
IC
15849module.exports={
15850 "OP_FALSE": 0,
15851 "OP_0": 0,
15852 "OP_PUSHDATA1": 76,
15853 "OP_PUSHDATA2": 77,
15854 "OP_PUSHDATA4": 78,
15855 "OP_1NEGATE": 79,
15856 "OP_RESERVED": 80,
15857 "OP_1": 81,
15858 "OP_TRUE": 81,
15859 "OP_2": 82,
15860 "OP_3": 83,
15861 "OP_4": 84,
15862 "OP_5": 85,
15863 "OP_6": 86,
15864 "OP_7": 87,
15865 "OP_8": 88,
15866 "OP_9": 89,
15867 "OP_10": 90,
15868 "OP_11": 91,
15869 "OP_12": 92,
15870 "OP_13": 93,
15871 "OP_14": 94,
15872 "OP_15": 95,
15873 "OP_16": 96,
15874
15875 "OP_NOP": 97,
15876 "OP_VER": 98,
15877 "OP_IF": 99,
15878 "OP_NOTIF": 100,
15879 "OP_VERIF": 101,
15880 "OP_VERNOTIF": 102,
15881 "OP_ELSE": 103,
15882 "OP_ENDIF": 104,
15883 "OP_VERIFY": 105,
15884 "OP_RETURN": 106,
15885
15886 "OP_TOALTSTACK": 107,
15887 "OP_FROMALTSTACK": 108,
15888 "OP_2DROP": 109,
15889 "OP_2DUP": 110,
15890 "OP_3DUP": 111,
15891 "OP_2OVER": 112,
15892 "OP_2ROT": 113,
15893 "OP_2SWAP": 114,
15894 "OP_IFDUP": 115,
15895 "OP_DEPTH": 116,
15896 "OP_DROP": 117,
15897 "OP_DUP": 118,
15898 "OP_NIP": 119,
15899 "OP_OVER": 120,
15900 "OP_PICK": 121,
15901 "OP_ROLL": 122,
15902 "OP_ROT": 123,
15903 "OP_SWAP": 124,
15904 "OP_TUCK": 125,
15905
15906 "OP_CAT": 126,
15907 "OP_SUBSTR": 127,
15908 "OP_LEFT": 128,
15909 "OP_RIGHT": 129,
15910 "OP_SIZE": 130,
15911
15912 "OP_INVERT": 131,
15913 "OP_AND": 132,
15914 "OP_OR": 133,
15915 "OP_XOR": 134,
15916 "OP_EQUAL": 135,
15917 "OP_EQUALVERIFY": 136,
15918 "OP_RESERVED1": 137,
15919 "OP_RESERVED2": 138,
15920
15921 "OP_1ADD": 139,
15922 "OP_1SUB": 140,
15923 "OP_2MUL": 141,
15924 "OP_2DIV": 142,
15925 "OP_NEGATE": 143,
15926 "OP_ABS": 144,
15927 "OP_NOT": 145,
15928 "OP_0NOTEQUAL": 146,
15929 "OP_ADD": 147,
15930 "OP_SUB": 148,
15931 "OP_MUL": 149,
15932 "OP_DIV": 150,
15933 "OP_MOD": 151,
15934 "OP_LSHIFT": 152,
15935 "OP_RSHIFT": 153,
15936
15937 "OP_BOOLAND": 154,
15938 "OP_BOOLOR": 155,
15939 "OP_NUMEQUAL": 156,
15940 "OP_NUMEQUALVERIFY": 157,
15941 "OP_NUMNOTEQUAL": 158,
15942 "OP_LESSTHAN": 159,
15943 "OP_GREATERTHAN": 160,
15944 "OP_LESSTHANOREQUAL": 161,
15945 "OP_GREATERTHANOREQUAL": 162,
15946 "OP_MIN": 163,
15947 "OP_MAX": 164,
15948
15949 "OP_WITHIN": 165,
15950
15951 "OP_RIPEMD160": 166,
15952 "OP_SHA1": 167,
15953 "OP_SHA256": 168,
15954 "OP_HASH160": 169,
15955 "OP_HASH256": 170,
15956 "OP_CODESEPARATOR": 171,
15957 "OP_CHECKSIG": 172,
15958 "OP_CHECKSIGVERIFY": 173,
15959 "OP_CHECKMULTISIG": 174,
15960 "OP_CHECKMULTISIGVERIFY": 175,
15961
15962 "OP_NOP1": 176,
15963 "OP_NOP2": 177,
15964 "OP_CHECKLOCKTIMEVERIFY": 177,
15965
15966 "OP_NOP3": 178,
15967 "OP_NOP4": 179,
15968 "OP_NOP5": 180,
15969 "OP_NOP6": 181,
15970 "OP_NOP7": 182,
15971 "OP_NOP8": 183,
15972 "OP_NOP9": 184,
15973 "OP_NOP10": 185,
15974
15975 "OP_PUBKEYHASH": 253,
15976 "OP_PUBKEY": 254,
15977 "OP_INVALIDOPCODE": 255
15978}
15979
cf6c2044 15980},{}],43:[function(require,module,exports){
9987f0c1
IC
15981var OPS = require('./index.json')
15982
15983var map = {}
15984for (var op in OPS) {
15985 var code = OPS[op]
15986 map[code] = op
15987}
15988
15989module.exports = map
15990
cf6c2044 15991},{"./index.json":42}],44:[function(require,module,exports){
9987f0c1 15992var Buffer = require('safe-buffer').Buffer
cf6c2044 15993var bech32 = require('bech32')
9987f0c1
IC
15994var bs58check = require('bs58check')
15995var bscript = require('./script')
cf6c2044 15996var btemplates = require('./templates')
9987f0c1
IC
15997var networks = require('./networks')
15998var typeforce = require('typeforce')
15999var types = require('./types')
8b095871 16000
9987f0c1
IC
16001function fromBase58Check (address) {
16002 var payload = bs58check.decode(address)
cf6c2044
IC
16003
16004 // TODO: 4.0.0, move to "toOutputScript"
9987f0c1
IC
16005 if (payload.length < 21) throw new TypeError(address + ' is too short')
16006 if (payload.length > 21) throw new TypeError(address + ' is too long')
8b095871 16007
9987f0c1
IC
16008 var version = payload.readUInt8(0)
16009 var hash = payload.slice(1)
8b095871 16010
cf6c2044
IC
16011 return { version: version, hash: hash }
16012}
16013
16014function fromBech32 (address) {
16015 var result = bech32.decode(address)
16016 var data = bech32.fromWords(result.words.slice(1))
16017
16018 return {
16019 version: result.words[0],
16020 prefix: result.prefix,
16021 data: Buffer.from(data)
16022 }
8b095871
IC
16023}
16024
9987f0c1
IC
16025function toBase58Check (hash, version) {
16026 typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
8b095871 16027
9987f0c1
IC
16028 var payload = Buffer.allocUnsafe(21)
16029 payload.writeUInt8(version, 0)
16030 hash.copy(payload, 1)
8b095871 16031
9987f0c1 16032 return bs58check.encode(payload)
8b095871
IC
16033}
16034
cf6c2044
IC
16035function toBech32 (data, version, prefix) {
16036 var words = bech32.toWords(data)
16037 words.unshift(version)
16038
16039 return bech32.encode(prefix, words)
16040}
16041
9987f0c1
IC
16042function fromOutputScript (outputScript, network) {
16043 network = network || networks.bitcoin
8b095871 16044
cf6c2044
IC
16045 if (btemplates.pubKeyHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(3, 23), network.pubKeyHash)
16046 if (btemplates.scriptHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(2, 22), network.scriptHash)
16047 if (btemplates.witnessPubKeyHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 22), 0, network.bech32)
16048 if (btemplates.witnessScriptHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 34), 0, network.bech32)
8b095871 16049
9987f0c1 16050 throw new Error(bscript.toASM(outputScript) + ' has no matching Address')
8b095871
IC
16051}
16052
9987f0c1
IC
16053function toOutputScript (address, network) {
16054 network = network || networks.bitcoin
8b095871 16055
cf6c2044
IC
16056 var decode
16057 try {
16058 decode = fromBase58Check(address)
16059 } catch (e) {}
16060
16061 if (decode) {
16062 if (decode.version === network.pubKeyHash) return btemplates.pubKeyHash.output.encode(decode.hash)
16063 if (decode.version === network.scriptHash) return btemplates.scriptHash.output.encode(decode.hash)
16064 } else {
16065 try {
16066 decode = fromBech32(address)
16067 } catch (e) {}
16068
16069 if (decode) {
16070 if (decode.prefix !== network.bech32) throw new Error(address + ' has an invalid prefix')
16071 if (decode.version === 0) {
16072 if (decode.data.length === 20) return btemplates.witnessPubKeyHash.output.encode(decode.data)
16073 if (decode.data.length === 32) return btemplates.witnessScriptHash.output.encode(decode.data)
16074 }
16075 }
16076 }
8b095871 16077
9987f0c1 16078 throw new Error(address + ' has no matching Script')
8b095871 16079}
8b095871 16080
9987f0c1
IC
16081module.exports = {
16082 fromBase58Check: fromBase58Check,
cf6c2044 16083 fromBech32: fromBech32,
9987f0c1
IC
16084 fromOutputScript: fromOutputScript,
16085 toBase58Check: toBase58Check,
cf6c2044 16086 toBech32: toBech32,
9987f0c1 16087 toOutputScript: toOutputScript
8b095871 16088}
8b095871 16089
cf6c2044 16090},{"./networks":53,"./script":54,"./templates":56,"./types":80,"bech32":36,"bs58check":85,"safe-buffer":128,"typeforce":139}],45:[function(require,module,exports){
9987f0c1
IC
16091var Buffer = require('safe-buffer').Buffer
16092var bcrypto = require('./crypto')
16093var fastMerkleRoot = require('merkle-lib/fastRoot')
16094var typeforce = require('typeforce')
16095var types = require('./types')
16096var varuint = require('varuint-bitcoin')
8b095871 16097
9987f0c1 16098var Transaction = require('./transaction')
8b095871 16099
9987f0c1
IC
16100function Block () {
16101 this.version = 1
16102 this.prevHash = null
16103 this.merkleRoot = null
16104 this.timestamp = 0
16105 this.bits = 0
16106 this.nonce = 0
8b095871 16107}
8b095871 16108
9987f0c1
IC
16109Block.fromBuffer = function (buffer) {
16110 if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)')
8b095871 16111
9987f0c1
IC
16112 var offset = 0
16113 function readSlice (n) {
16114 offset += n
16115 return buffer.slice(offset - n, offset)
16116 }
8b095871 16117
9987f0c1
IC
16118 function readUInt32 () {
16119 var i = buffer.readUInt32LE(offset)
16120 offset += 4
16121 return i
16122 }
8b095871 16123
9987f0c1
IC
16124 function readInt32 () {
16125 var i = buffer.readInt32LE(offset)
16126 offset += 4
16127 return i
16128 }
8b095871 16129
9987f0c1
IC
16130 var block = new Block()
16131 block.version = readInt32()
16132 block.prevHash = readSlice(32)
16133 block.merkleRoot = readSlice(32)
16134 block.timestamp = readUInt32()
16135 block.bits = readUInt32()
16136 block.nonce = readUInt32()
8b095871 16137
9987f0c1 16138 if (buffer.length === 80) return block
8b095871 16139
9987f0c1
IC
16140 function readVarInt () {
16141 var vi = varuint.decode(buffer, offset)
16142 offset += varuint.decode.bytes
16143 return vi
16144 }
8b095871 16145
9987f0c1
IC
16146 function readTransaction () {
16147 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
16148 offset += tx.byteLength()
16149 return tx
16150 }
8b095871 16151
9987f0c1
IC
16152 var nTransactions = readVarInt()
16153 block.transactions = []
8b095871 16154
9987f0c1
IC
16155 for (var i = 0; i < nTransactions; ++i) {
16156 var tx = readTransaction()
16157 block.transactions.push(tx)
16158 }
8b095871 16159
9987f0c1 16160 return block
8b095871
IC
16161}
16162
9987f0c1
IC
16163Block.prototype.byteLength = function (headersOnly) {
16164 if (headersOnly || !this.transactions) return 80
8b095871 16165
9987f0c1
IC
16166 return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) {
16167 return a + x.byteLength()
16168 }, 0)
8b095871
IC
16169}
16170
9987f0c1
IC
16171Block.fromHex = function (hex) {
16172 return Block.fromBuffer(Buffer.from(hex, 'hex'))
16173}
8b095871 16174
9987f0c1
IC
16175Block.prototype.getHash = function () {
16176 return bcrypto.hash256(this.toBuffer(true))
16177}
8b095871 16178
9987f0c1
IC
16179Block.prototype.getId = function () {
16180 return this.getHash().reverse().toString('hex')
8b095871
IC
16181}
16182
9987f0c1
IC
16183Block.prototype.getUTCDate = function () {
16184 var date = new Date(0) // epoch
16185 date.setUTCSeconds(this.timestamp)
8b095871 16186
9987f0c1 16187 return date
8b095871 16188}
8b095871 16189
9987f0c1
IC
16190// TODO: buffer, offset compatibility
16191Block.prototype.toBuffer = function (headersOnly) {
16192 var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly))
16193
16194 var offset = 0
16195 function writeSlice (slice) {
16196 slice.copy(buffer, offset)
16197 offset += slice.length
16198 }
8b095871 16199
9987f0c1
IC
16200 function writeInt32 (i) {
16201 buffer.writeInt32LE(i, offset)
16202 offset += 4
16203 }
16204 function writeUInt32 (i) {
16205 buffer.writeUInt32LE(i, offset)
16206 offset += 4
16207 }
8b095871 16208
9987f0c1
IC
16209 writeInt32(this.version)
16210 writeSlice(this.prevHash)
16211 writeSlice(this.merkleRoot)
16212 writeUInt32(this.timestamp)
16213 writeUInt32(this.bits)
16214 writeUInt32(this.nonce)
8b095871 16215
9987f0c1 16216 if (headersOnly || !this.transactions) return buffer
8b095871 16217
9987f0c1
IC
16218 varuint.encode(this.transactions.length, buffer, offset)
16219 offset += varuint.encode.bytes
8b095871 16220
9987f0c1
IC
16221 this.transactions.forEach(function (tx) {
16222 var txSize = tx.byteLength() // TODO: extract from toBuffer?
16223 tx.toBuffer(buffer, offset)
16224 offset += txSize
16225 })
8b095871 16226
9987f0c1
IC
16227 return buffer
16228}
8b095871 16229
9987f0c1
IC
16230Block.prototype.toHex = function (headersOnly) {
16231 return this.toBuffer(headersOnly).toString('hex')
16232}
8b095871 16233
9987f0c1
IC
16234Block.calculateTarget = function (bits) {
16235 var exponent = ((bits & 0xff000000) >> 24) - 3
16236 var mantissa = bits & 0x007fffff
16237 var target = Buffer.alloc(32, 0)
16238 target.writeUInt32BE(mantissa, 28 - exponent)
16239 return target
8b095871
IC
16240}
16241
9987f0c1
IC
16242Block.calculateMerkleRoot = function (transactions) {
16243 typeforce([{ getHash: types.Function }], transactions)
16244 if (transactions.length === 0) throw TypeError('Cannot compute merkle root for zero transactions')
8b095871 16245
9987f0c1
IC
16246 var hashes = transactions.map(function (transaction) {
16247 return transaction.getHash()
16248 })
8b095871 16249
9987f0c1
IC
16250 return fastMerkleRoot(hashes, bcrypto.hash256)
16251}
8b095871 16252
9987f0c1
IC
16253Block.prototype.checkMerkleRoot = function () {
16254 if (!this.transactions) return false
8b095871 16255
9987f0c1
IC
16256 var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions)
16257 return this.merkleRoot.compare(actualMerkleRoot) === 0
16258}
8b095871 16259
9987f0c1
IC
16260Block.prototype.checkProofOfWork = function () {
16261 var hash = this.getHash().reverse()
16262 var target = Block.calculateTarget(this.bits)
8b095871 16263
9987f0c1
IC
16264 return hash.compare(target) <= 0
16265}
8b095871 16266
9987f0c1 16267module.exports = Block
8b095871 16268
cf6c2044 16269},{"./crypto":47,"./transaction":78,"./types":80,"merkle-lib/fastRoot":122,"safe-buffer":128,"typeforce":139,"varuint-bitcoin":141}],46:[function(require,module,exports){
9987f0c1
IC
16270var pushdata = require('pushdata-bitcoin')
16271var varuint = require('varuint-bitcoin')
8b095871 16272
9987f0c1
IC
16273// https://github.com/feross/buffer/blob/master/index.js#L1127
16274function verifuint (value, max) {
16275 if (typeof value !== 'number') throw new Error('cannot write a non-number as a number')
16276 if (value < 0) throw new Error('specified a negative value for writing an unsigned value')
16277 if (value > max) throw new Error('RangeError: value out of range')
16278 if (Math.floor(value) !== value) throw new Error('value has a fractional component')
8b095871
IC
16279}
16280
9987f0c1
IC
16281function readUInt64LE (buffer, offset) {
16282 var a = buffer.readUInt32LE(offset)
16283 var b = buffer.readUInt32LE(offset + 4)
16284 b *= 0x100000000
8b095871 16285
9987f0c1 16286 verifuint(b + a, 0x001fffffffffffff)
8b095871 16287
9987f0c1 16288 return b + a
8b095871
IC
16289}
16290
9987f0c1
IC
16291function writeUInt64LE (buffer, value, offset) {
16292 verifuint(value, 0x001fffffffffffff)
8b095871 16293
9987f0c1
IC
16294 buffer.writeInt32LE(value & -1, offset)
16295 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
16296 return offset + 8
8b095871
IC
16297}
16298
9987f0c1
IC
16299// TODO: remove in 4.0.0?
16300function readVarInt (buffer, offset) {
16301 var result = varuint.decode(buffer, offset)
8b095871 16302
9987f0c1
IC
16303 return {
16304 number: result,
16305 size: varuint.decode.bytes
8b095871 16306 }
9987f0c1 16307}
8b095871 16308
9987f0c1
IC
16309// TODO: remove in 4.0.0?
16310function writeVarInt (buffer, number, offset) {
16311 varuint.encode(number, buffer, offset)
16312 return varuint.encode.bytes
8b095871
IC
16313}
16314
16315module.exports = {
9987f0c1
IC
16316 pushDataSize: pushdata.encodingLength,
16317 readPushDataInt: pushdata.decode,
16318 readUInt64LE: readUInt64LE,
16319 readVarInt: readVarInt,
16320 varIntBuffer: varuint.encode,
16321 varIntSize: varuint.encodingLength,
16322 writePushDataInt: pushdata.encode,
16323 writeUInt64LE: writeUInt64LE,
16324 writeVarInt: writeVarInt
8b095871
IC
16325}
16326
cf6c2044 16327},{"pushdata-bitcoin":125,"varuint-bitcoin":141}],47:[function(require,module,exports){
9987f0c1 16328var createHash = require('create-hash')
8b095871 16329
9987f0c1
IC
16330function ripemd160 (buffer) {
16331 return createHash('rmd160').update(buffer).digest()
16332}
8b095871 16333
9987f0c1
IC
16334function sha1 (buffer) {
16335 return createHash('sha1').update(buffer).digest()
8b095871
IC
16336}
16337
9987f0c1
IC
16338function sha256 (buffer) {
16339 return createHash('sha256').update(buffer).digest()
16340}
8b095871 16341
9987f0c1
IC
16342function hash160 (buffer) {
16343 return ripemd160(sha256(buffer))
16344}
8b095871 16345
9987f0c1
IC
16346function hash256 (buffer) {
16347 return sha256(sha256(buffer))
8b095871
IC
16348}
16349
9987f0c1
IC
16350module.exports = {
16351 hash160: hash160,
16352 hash256: hash256,
16353 ripemd160: ripemd160,
16354 sha1: sha1,
16355 sha256: sha256
8b095871
IC
16356}
16357
cf6c2044 16358},{"create-hash":87}],48:[function(require,module,exports){
9987f0c1
IC
16359var Buffer = require('safe-buffer').Buffer
16360var createHmac = require('create-hmac')
16361var typeforce = require('typeforce')
16362var types = require('./types')
8b095871 16363
9987f0c1
IC
16364var BigInteger = require('bigi')
16365var ECSignature = require('./ecsignature')
8b095871 16366
9987f0c1
IC
16367var ZERO = Buffer.alloc(1, 0)
16368var ONE = Buffer.alloc(1, 1)
8b095871 16369
9987f0c1
IC
16370var ecurve = require('ecurve')
16371var secp256k1 = ecurve.getCurveByName('secp256k1')
8b095871 16372
9987f0c1
IC
16373// https://tools.ietf.org/html/rfc6979#section-3.2
16374function deterministicGenerateK (hash, x, checkSig) {
16375 typeforce(types.tuple(
16376 types.Hash256bit,
16377 types.Buffer256bit,
16378 types.Function
16379 ), arguments)
8b095871 16380
9987f0c1
IC
16381 // Step A, ignored as hash already provided
16382 // Step B
16383 // Step C
16384 var k = Buffer.alloc(32, 0)
16385 var v = Buffer.alloc(32, 1)
8b095871 16386
9987f0c1
IC
16387 // Step D
16388 k = createHmac('sha256', k)
16389 .update(v)
16390 .update(ZERO)
16391 .update(x)
16392 .update(hash)
16393 .digest()
8b095871 16394
9987f0c1
IC
16395 // Step E
16396 v = createHmac('sha256', k).update(v).digest()
8b095871 16397
9987f0c1
IC
16398 // Step F
16399 k = createHmac('sha256', k)
16400 .update(v)
16401 .update(ONE)
16402 .update(x)
16403 .update(hash)
16404 .digest()
8b095871 16405
9987f0c1
IC
16406 // Step G
16407 v = createHmac('sha256', k).update(v).digest()
8b095871 16408
9987f0c1
IC
16409 // Step H1/H2a, ignored as tlen === qlen (256 bit)
16410 // Step H2b
16411 v = createHmac('sha256', k).update(v).digest()
8b095871 16412
9987f0c1 16413 var T = BigInteger.fromBuffer(v)
8b095871 16414
9987f0c1
IC
16415 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
16416 while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) {
16417 k = createHmac('sha256', k)
16418 .update(v)
16419 .update(ZERO)
16420 .digest()
16421
16422 v = createHmac('sha256', k).update(v).digest()
16423
16424 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
16425 // Step H2b again
16426 v = createHmac('sha256', k).update(v).digest()
16427 T = BigInteger.fromBuffer(v)
8b095871
IC
16428 }
16429
9987f0c1 16430 return T
8b095871
IC
16431}
16432
9987f0c1 16433var N_OVER_TWO = secp256k1.n.shiftRight(1)
8b095871 16434
9987f0c1
IC
16435function sign (hash, d) {
16436 typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments)
8b095871 16437
9987f0c1
IC
16438 var x = d.toBuffer(32)
16439 var e = BigInteger.fromBuffer(hash)
16440 var n = secp256k1.n
16441 var G = secp256k1.G
8b095871 16442
9987f0c1
IC
16443 var r, s
16444 deterministicGenerateK(hash, x, function (k) {
16445 var Q = G.multiply(k)
8b095871 16446
9987f0c1 16447 if (secp256k1.isInfinity(Q)) return false
8b095871 16448
9987f0c1
IC
16449 r = Q.affineX.mod(n)
16450 if (r.signum() === 0) return false
8b095871 16451
9987f0c1
IC
16452 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
16453 if (s.signum() === 0) return false
8b095871 16454
9987f0c1
IC
16455 return true
16456 })
16457
16458 // enforce low S values, see bip62: 'low s values in signatures'
16459 if (s.compareTo(N_OVER_TWO) > 0) {
16460 s = n.subtract(s)
8b095871 16461 }
8b095871 16462
9987f0c1 16463 return new ECSignature(r, s)
8b095871 16464}
8b095871 16465
9987f0c1
IC
16466function verify (hash, signature, Q) {
16467 typeforce(types.tuple(
16468 types.Hash256bit,
16469 types.ECSignature,
16470 types.ECPoint
16471 ), arguments)
8b095871 16472
9987f0c1
IC
16473 var n = secp256k1.n
16474 var G = secp256k1.G
8b095871 16475
9987f0c1
IC
16476 var r = signature.r
16477 var s = signature.s
8b095871 16478
9987f0c1
IC
16479 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
16480 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
16481 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
8b095871 16482
9987f0c1
IC
16483 // 1.4.2 H = Hash(M), already done by the user
16484 // 1.4.3 e = H
16485 var e = BigInteger.fromBuffer(hash)
8b095871 16486
9987f0c1
IC
16487 // Compute s^-1
16488 var sInv = s.modInverse(n)
8b095871 16489
9987f0c1
IC
16490 // 1.4.4 Compute u1 = es^−1 mod n
16491 // u2 = rs^−1 mod n
16492 var u1 = e.multiply(sInv).mod(n)
16493 var u2 = r.multiply(sInv).mod(n)
8b095871 16494
9987f0c1
IC
16495 // 1.4.5 Compute R = (xR, yR)
16496 // R = u1G + u2Q
16497 var R = G.multiplyTwo(u1, Q, u2)
8b095871 16498
9987f0c1
IC
16499 // 1.4.5 (cont.) Enforce R is not at infinity
16500 if (secp256k1.isInfinity(R)) return false
8b095871 16501
9987f0c1
IC
16502 // 1.4.6 Convert the field element R.x to an integer
16503 var xR = R.affineX
8b095871 16504
9987f0c1
IC
16505 // 1.4.7 Set v = xR mod n
16506 var v = xR.mod(n)
8b095871 16507
9987f0c1
IC
16508 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
16509 return v.equals(r)
8b095871
IC
16510}
16511
9987f0c1
IC
16512module.exports = {
16513 deterministicGenerateK: deterministicGenerateK,
16514 sign: sign,
16515 verify: verify,
8b095871 16516
9987f0c1
IC
16517 // TODO: remove
16518 __curve: secp256k1
16519}
8b095871 16520
cf6c2044 16521},{"./ecsignature":50,"./types":80,"bigi":39,"create-hmac":90,"ecurve":94,"safe-buffer":128,"typeforce":139}],49:[function(require,module,exports){
9987f0c1
IC
16522var baddress = require('./address')
16523var bcrypto = require('./crypto')
16524var ecdsa = require('./ecdsa')
16525var randomBytes = require('randombytes')
16526var typeforce = require('typeforce')
16527var types = require('./types')
16528var wif = require('wif')
8b095871 16529
9987f0c1
IC
16530var NETWORKS = require('./networks')
16531var BigInteger = require('bigi')
8b095871 16532
9987f0c1
IC
16533var ecurve = require('ecurve')
16534var secp256k1 = ecdsa.__curve
8b095871 16535
9987f0c1
IC
16536function ECPair (d, Q, options) {
16537 if (options) {
16538 typeforce({
16539 compressed: types.maybe(types.Boolean),
16540 network: types.maybe(types.Network)
16541 }, options)
16542 }
8b095871 16543
9987f0c1 16544 options = options || {}
8b095871 16545
9987f0c1
IC
16546 if (d) {
16547 if (d.signum() <= 0) throw new Error('Private key must be greater than 0')
16548 if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order')
16549 if (Q) throw new TypeError('Unexpected publicKey parameter')
8b095871 16550
9987f0c1
IC
16551 this.d = d
16552 } else {
16553 typeforce(types.ECPoint, Q)
8b095871 16554
9987f0c1 16555 this.__Q = Q
8b095871 16556 }
8b095871 16557
9987f0c1
IC
16558 this.compressed = options.compressed === undefined ? true : options.compressed
16559 this.network = options.network || NETWORKS.bitcoin
8b095871
IC
16560}
16561
9987f0c1
IC
16562Object.defineProperty(ECPair.prototype, 'Q', {
16563 get: function () {
16564 if (!this.__Q && this.d) {
16565 this.__Q = secp256k1.G.multiply(this.d)
16566 }
8b095871 16567
9987f0c1 16568 return this.__Q
8b095871 16569 }
9987f0c1 16570})
8b095871 16571
9987f0c1
IC
16572ECPair.fromPublicKeyBuffer = function (buffer, network) {
16573 var Q = ecurve.Point.decodeFrom(secp256k1, buffer)
8b095871 16574
9987f0c1
IC
16575 return new ECPair(null, Q, {
16576 compressed: Q.compressed,
16577 network: network
16578 })
16579}
8b095871 16580
9987f0c1
IC
16581ECPair.fromWIF = function (string, network) {
16582 var decoded = wif.decode(string)
16583 var version = decoded.version
8b095871 16584
9987f0c1
IC
16585 // list of networks?
16586 if (types.Array(network)) {
16587 network = network.filter(function (x) {
16588 return version === x.wif
16589 }).pop()
16590
16591 if (!network) throw new Error('Unknown network version')
16592
16593 // otherwise, assume a network object (or default to bitcoin)
16594 } else {
16595 network = network || NETWORKS.bitcoin
16596
16597 if (version !== network.wif) throw new Error('Invalid network version')
8b095871
IC
16598 }
16599
9987f0c1
IC
16600 var d = BigInteger.fromBuffer(decoded.privateKey)
16601
16602 return new ECPair(d, null, {
16603 compressed: decoded.compressed,
16604 network: network
16605 })
8b095871
IC
16606}
16607
9987f0c1
IC
16608ECPair.makeRandom = function (options) {
16609 options = options || {}
16610
16611 var rng = options.rng || randomBytes
16612
16613 var d
16614 do {
16615 var buffer = rng(32)
16616 typeforce(types.Buffer256bit, buffer)
16617
16618 d = BigInteger.fromBuffer(buffer)
16619 } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0)
16620
16621 return new ECPair(d, null, options)
8b095871
IC
16622}
16623
9987f0c1
IC
16624ECPair.prototype.getAddress = function () {
16625 return baddress.toBase58Check(bcrypto.hash160(this.getPublicKeyBuffer()), this.getNetwork().pubKeyHash)
8b095871
IC
16626}
16627
9987f0c1
IC
16628ECPair.prototype.getNetwork = function () {
16629 return this.network
8b095871
IC
16630}
16631
9987f0c1
IC
16632ECPair.prototype.getPublicKeyBuffer = function () {
16633 return this.Q.getEncoded(this.compressed)
8b095871
IC
16634}
16635
9987f0c1
IC
16636ECPair.prototype.sign = function (hash) {
16637 if (!this.d) throw new Error('Missing private key')
16638
16639 return ecdsa.sign(hash, this.d)
8b095871
IC
16640}
16641
9987f0c1
IC
16642ECPair.prototype.toWIF = function () {
16643 if (!this.d) throw new Error('Missing private key')
16644
16645 return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed)
8b095871
IC
16646}
16647
9987f0c1
IC
16648ECPair.prototype.verify = function (hash, signature) {
16649 return ecdsa.verify(hash, signature, this.Q)
16650}
8b095871 16651
9987f0c1 16652module.exports = ECPair
8b095871 16653
cf6c2044 16654},{"./address":44,"./crypto":47,"./ecdsa":48,"./networks":53,"./types":80,"bigi":39,"ecurve":94,"randombytes":126,"typeforce":139,"wif":142}],50:[function(require,module,exports){
9987f0c1
IC
16655(function (Buffer){
16656var bip66 = require('bip66')
16657var typeforce = require('typeforce')
16658var types = require('./types')
8b095871 16659
9987f0c1 16660var BigInteger = require('bigi')
8b095871 16661
9987f0c1
IC
16662function ECSignature (r, s) {
16663 typeforce(types.tuple(types.BigInt, types.BigInt), arguments)
8b095871 16664
9987f0c1
IC
16665 this.r = r
16666 this.s = s
16667}
16668
16669ECSignature.parseCompact = function (buffer) {
cf6c2044 16670 typeforce(types.BufferN(65), buffer)
9987f0c1
IC
16671
16672 var flagByte = buffer.readUInt8(0) - 27
16673 if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter')
16674
16675 var compressed = !!(flagByte & 4)
16676 var recoveryParam = flagByte & 3
cf6c2044 16677 var signature = ECSignature.fromRSBuffer(buffer.slice(1))
9987f0c1
IC
16678
16679 return {
16680 compressed: compressed,
16681 i: recoveryParam,
cf6c2044 16682 signature: signature
8b095871 16683 }
9987f0c1 16684}
8b095871 16685
cf6c2044
IC
16686ECSignature.fromRSBuffer = function (buffer) {
16687 typeforce(types.BufferN(64), buffer)
16688
16689 var r = BigInteger.fromBuffer(buffer.slice(0, 32))
16690 var s = BigInteger.fromBuffer(buffer.slice(32, 64))
16691 return new ECSignature(r, s)
16692}
16693
9987f0c1
IC
16694ECSignature.fromDER = function (buffer) {
16695 var decode = bip66.decode(buffer)
16696 var r = BigInteger.fromDERInteger(decode.r)
16697 var s = BigInteger.fromDERInteger(decode.s)
8b095871 16698
9987f0c1
IC
16699 return new ECSignature(r, s)
16700}
16701
16702// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
16703ECSignature.parseScriptSignature = function (buffer) {
16704 var hashType = buffer.readUInt8(buffer.length - 1)
16705 var hashTypeMod = hashType & ~0x80
16706
16707 if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType)
16708
16709 return {
16710 signature: ECSignature.fromDER(buffer.slice(0, -1)),
16711 hashType: hashType
8b095871 16712 }
9987f0c1 16713}
8b095871 16714
9987f0c1
IC
16715ECSignature.prototype.toCompact = function (i, compressed) {
16716 if (compressed) {
16717 i += 4
16718 }
16719
16720 i += 27
16721
16722 var buffer = Buffer.alloc(65)
16723 buffer.writeUInt8(i, 0)
cf6c2044 16724 this.toRSBuffer(buffer, 1)
9987f0c1 16725 return buffer
8b095871
IC
16726}
16727
9987f0c1
IC
16728ECSignature.prototype.toDER = function () {
16729 var r = Buffer.from(this.r.toDERInteger())
16730 var s = Buffer.from(this.s.toDERInteger())
16731
16732 return bip66.encode(r, s)
16733}
16734
cf6c2044
IC
16735ECSignature.prototype.toRSBuffer = function (buffer, offset) {
16736 buffer = buffer || Buffer.alloc(64)
16737 this.r.toBuffer(32).copy(buffer, offset)
16738 this.s.toBuffer(32).copy(buffer, offset + 32)
16739 return buffer
16740}
16741
9987f0c1
IC
16742ECSignature.prototype.toScriptSignature = function (hashType) {
16743 var hashTypeMod = hashType & ~0x80
16744 if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType)
16745
16746 var hashTypeBuffer = Buffer.alloc(1)
16747 hashTypeBuffer.writeUInt8(hashType, 0)
16748
16749 return Buffer.concat([this.toDER(), hashTypeBuffer])
16750}
16751
16752module.exports = ECSignature
8b095871
IC
16753
16754}).call(this,require("buffer").Buffer)
cf6c2044 16755},{"./types":80,"bigi":39,"bip66":41,"buffer":5,"typeforce":139}],51:[function(require,module,exports){
9987f0c1
IC
16756var Buffer = require('safe-buffer').Buffer
16757var base58check = require('bs58check')
16758var bcrypto = require('./crypto')
16759var createHmac = require('create-hmac')
16760var typeforce = require('typeforce')
16761var types = require('./types')
16762var NETWORKS = require('./networks')
16763
16764var BigInteger = require('bigi')
16765var ECPair = require('./ecpair')
16766
16767var ecurve = require('ecurve')
16768var curve = ecurve.getCurveByName('secp256k1')
16769
16770function HDNode (keyPair, chainCode) {
16771 typeforce(types.tuple('ECPair', types.Buffer256bit), arguments)
16772
16773 if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs')
16774
16775 this.keyPair = keyPair
16776 this.chainCode = chainCode
16777 this.depth = 0
16778 this.index = 0
16779 this.parentFingerprint = 0x00000000
8b095871
IC
16780}
16781
9987f0c1
IC
16782HDNode.HIGHEST_BIT = 0x80000000
16783HDNode.LENGTH = 78
16784HDNode.MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')
8b095871 16785
9987f0c1
IC
16786HDNode.fromSeedBuffer = function (seed, network) {
16787 typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments)
8b095871 16788
9987f0c1
IC
16789 if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits')
16790 if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits')
8b095871 16791
9987f0c1
IC
16792 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
16793 var IL = I.slice(0, 32)
16794 var IR = I.slice(32)
8b095871 16795
9987f0c1
IC
16796 // In case IL is 0 or >= n, the master key is invalid
16797 // This is handled by the ECPair constructor
16798 var pIL = BigInteger.fromBuffer(IL)
16799 var keyPair = new ECPair(pIL, null, {
16800 network: network
16801 })
8b095871 16802
9987f0c1
IC
16803 return new HDNode(keyPair, IR)
16804}
8b095871 16805
9987f0c1
IC
16806HDNode.fromSeedHex = function (hex, network) {
16807 return HDNode.fromSeedBuffer(Buffer.from(hex, 'hex'), network)
8b095871
IC
16808}
16809
9987f0c1
IC
16810HDNode.fromBase58 = function (string, networks) {
16811 var buffer = base58check.decode(string)
16812 if (buffer.length !== 78) throw new Error('Invalid buffer length')
8b095871 16813
9987f0c1
IC
16814 // 4 bytes: version bytes
16815 var version = buffer.readUInt32BE(0)
16816 var network
8b095871 16817
9987f0c1
IC
16818 // list of networks?
16819 if (Array.isArray(networks)) {
16820 network = networks.filter(function (x) {
16821 return version === x.bip32.private ||
16822 version === x.bip32.public
16823 }).pop()
8b095871 16824
9987f0c1
IC
16825 if (!network) throw new Error('Unknown network version')
16826
16827 // otherwise, assume a network object (or default to bitcoin)
16828 } else {
16829 network = networks || NETWORKS.bitcoin
8b095871
IC
16830 }
16831
9987f0c1
IC
16832 if (version !== network.bip32.private &&
16833 version !== network.bip32.public) throw new Error('Invalid network version')
8b095871 16834
9987f0c1
IC
16835 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
16836 var depth = buffer[4]
8b095871 16837
9987f0c1
IC
16838 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16839 var parentFingerprint = buffer.readUInt32BE(5)
16840 if (depth === 0) {
16841 if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint')
16842 }
8b095871 16843
9987f0c1
IC
16844 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16845 // This is encoded in MSB order. (0x00000000 if master key)
16846 var index = buffer.readUInt32BE(9)
16847 if (depth === 0 && index !== 0) throw new Error('Invalid index')
16848
16849 // 32 bytes: the chain code
16850 var chainCode = buffer.slice(13, 45)
16851 var keyPair
16852
16853 // 33 bytes: private key data (0x00 + k)
16854 if (version === network.bip32.private) {
16855 if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key')
16856
16857 var d = BigInteger.fromBuffer(buffer.slice(46, 78))
16858 keyPair = new ECPair(d, null, { network: network })
16859
16860 // 33 bytes: public key data (0x02 + X or 0x03 + X)
16861 } else {
16862 var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78))
16863 // Q.compressed is assumed, if somehow this assumption is broken, `new HDNode` will throw
16864
16865 // Verify that the X coordinate in the public point corresponds to a point on the curve.
16866 // If not, the extended public key is invalid.
16867 curve.validate(Q)
16868
16869 keyPair = new ECPair(null, Q, { network: network })
16870 }
16871
16872 var hd = new HDNode(keyPair, chainCode)
16873 hd.depth = depth
16874 hd.index = index
16875 hd.parentFingerprint = parentFingerprint
16876
16877 return hd
8b095871
IC
16878}
16879
9987f0c1
IC
16880HDNode.prototype.getAddress = function () {
16881 return this.keyPair.getAddress()
16882}
8b095871 16883
9987f0c1
IC
16884HDNode.prototype.getIdentifier = function () {
16885 return bcrypto.hash160(this.keyPair.getPublicKeyBuffer())
16886}
8b095871 16887
9987f0c1
IC
16888HDNode.prototype.getFingerprint = function () {
16889 return this.getIdentifier().slice(0, 4)
16890}
8b095871 16891
9987f0c1
IC
16892HDNode.prototype.getNetwork = function () {
16893 return this.keyPair.getNetwork()
8b095871
IC
16894}
16895
9987f0c1
IC
16896HDNode.prototype.getPublicKeyBuffer = function () {
16897 return this.keyPair.getPublicKeyBuffer()
16898}
8b095871 16899
9987f0c1
IC
16900HDNode.prototype.neutered = function () {
16901 var neuteredKeyPair = new ECPair(null, this.keyPair.Q, {
16902 network: this.keyPair.network
16903 })
8b095871 16904
9987f0c1
IC
16905 var neutered = new HDNode(neuteredKeyPair, this.chainCode)
16906 neutered.depth = this.depth
16907 neutered.index = this.index
16908 neutered.parentFingerprint = this.parentFingerprint
8b095871 16909
9987f0c1
IC
16910 return neutered
16911}
8b095871 16912
9987f0c1
IC
16913HDNode.prototype.sign = function (hash) {
16914 return this.keyPair.sign(hash)
16915}
8b095871 16916
9987f0c1
IC
16917HDNode.prototype.verify = function (hash, signature) {
16918 return this.keyPair.verify(hash, signature)
8b095871
IC
16919}
16920
9987f0c1
IC
16921HDNode.prototype.toBase58 = function (__isPrivate) {
16922 if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0')
8b095871 16923
9987f0c1
IC
16924 // Version
16925 var network = this.keyPair.network
16926 var version = (!this.isNeutered()) ? network.bip32.private : network.bip32.public
16927 var buffer = Buffer.allocUnsafe(78)
8b095871 16928
9987f0c1
IC
16929 // 4 bytes: version bytes
16930 buffer.writeUInt32BE(version, 0)
8b095871 16931
9987f0c1
IC
16932 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
16933 buffer.writeUInt8(this.depth, 4)
16934
16935 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16936 buffer.writeUInt32BE(this.parentFingerprint, 5)
16937
16938 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16939 // This is encoded in big endian. (0x00000000 if master key)
16940 buffer.writeUInt32BE(this.index, 9)
16941
16942 // 32 bytes: the chain code
16943 this.chainCode.copy(buffer, 13)
16944
16945 // 33 bytes: the public key or private key data
16946 if (!this.isNeutered()) {
16947 // 0x00 + k for private keys
16948 buffer.writeUInt8(0, 45)
16949 this.keyPair.d.toBuffer(32).copy(buffer, 46)
16950
16951 // 33 bytes: the public key
16952 } else {
16953 // X9.62 encoding for public keys
16954 this.keyPair.getPublicKeyBuffer().copy(buffer, 45)
16955 }
16956
16957 return base58check.encode(buffer)
8b095871
IC
16958}
16959
9987f0c1
IC
16960// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
16961HDNode.prototype.derive = function (index) {
16962 typeforce(types.UInt32, index)
16963
16964 var isHardened = index >= HDNode.HIGHEST_BIT
16965 var data = Buffer.allocUnsafe(37)
16966
16967 // Hardened child
16968 if (isHardened) {
16969 if (this.isNeutered()) throw new TypeError('Could not derive hardened child key')
8b095871 16970
9987f0c1
IC
16971 // data = 0x00 || ser256(kpar) || ser32(index)
16972 data[0] = 0x00
16973 this.keyPair.d.toBuffer(32).copy(data, 1)
16974 data.writeUInt32BE(index, 33)
8b095871 16975
9987f0c1
IC
16976 // Normal child
16977 } else {
16978 // data = serP(point(kpar)) || ser32(index)
16979 // = serP(Kpar) || ser32(index)
16980 this.keyPair.getPublicKeyBuffer().copy(data, 0)
16981 data.writeUInt32BE(index, 33)
16982 }
8b095871 16983
9987f0c1
IC
16984 var I = createHmac('sha512', this.chainCode).update(data).digest()
16985 var IL = I.slice(0, 32)
16986 var IR = I.slice(32)
8b095871 16987
9987f0c1 16988 var pIL = BigInteger.fromBuffer(IL)
8b095871 16989
9987f0c1
IC
16990 // In case parse256(IL) >= n, proceed with the next value for i
16991 if (pIL.compareTo(curve.n) >= 0) {
16992 return this.derive(index + 1)
8b095871
IC
16993 }
16994
9987f0c1
IC
16995 // Private parent key -> private child key
16996 var derivedKeyPair
16997 if (!this.isNeutered()) {
16998 // ki = parse256(IL) + kpar (mod n)
16999 var ki = pIL.add(this.keyPair.d).mod(curve.n)
8b095871 17000
9987f0c1
IC
17001 // In case ki == 0, proceed with the next value for i
17002 if (ki.signum() === 0) {
17003 return this.derive(index + 1)
17004 }
17005
17006 derivedKeyPair = new ECPair(ki, null, {
17007 network: this.keyPair.network
17008 })
17009
17010 // Public parent key -> public child key
17011 } else {
17012 // Ki = point(parse256(IL)) + Kpar
17013 // = G*IL + Kpar
17014 var Ki = curve.G.multiply(pIL).add(this.keyPair.Q)
17015
17016 // In case Ki is the point at infinity, proceed with the next value for i
17017 if (curve.isInfinity(Ki)) {
17018 return this.derive(index + 1)
17019 }
17020
17021 derivedKeyPair = new ECPair(null, Ki, {
17022 network: this.keyPair.network
17023 })
17024 }
17025
17026 var hd = new HDNode(derivedKeyPair, IR)
17027 hd.depth = this.depth + 1
17028 hd.index = index
17029 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
17030
17031 return hd
8b095871
IC
17032}
17033
9987f0c1
IC
17034HDNode.prototype.deriveHardened = function (index) {
17035 typeforce(types.UInt31, index)
8b095871 17036
9987f0c1
IC
17037 // Only derives hardened private keys by default
17038 return this.derive(index + HDNode.HIGHEST_BIT)
17039}
8b095871 17040
9987f0c1
IC
17041// Private === not neutered
17042// Public === neutered
17043HDNode.prototype.isNeutered = function () {
17044 return !(this.keyPair.d)
8b095871
IC
17045}
17046
9987f0c1
IC
17047HDNode.prototype.derivePath = function (path) {
17048 typeforce(types.BIP32Path, path)
8b095871 17049
9987f0c1
IC
17050 var splitPath = path.split('/')
17051 if (splitPath[0] === 'm') {
17052 if (this.parentFingerprint) {
17053 throw new Error('Not a master node')
17054 }
8b095871 17055
9987f0c1
IC
17056 splitPath = splitPath.slice(1)
17057 }
8b095871 17058
9987f0c1
IC
17059 return splitPath.reduce(function (prevHd, indexStr) {
17060 var index
17061 if (indexStr.slice(-1) === "'") {
17062 index = parseInt(indexStr.slice(0, -1), 10)
17063 return prevHd.deriveHardened(index)
17064 } else {
17065 index = parseInt(indexStr, 10)
17066 return prevHd.derive(index)
17067 }
17068 }, this)
17069}
8b095871 17070
9987f0c1 17071module.exports = HDNode
8b095871 17072
cf6c2044
IC
17073},{"./crypto":47,"./ecpair":49,"./networks":53,"./types":80,"bigi":39,"bs58check":85,"create-hmac":90,"ecurve":94,"safe-buffer":128,"typeforce":139}],52:[function(require,module,exports){
17074var script = require('./script')
17075
17076var templates = require('./templates')
17077for (var key in templates) {
17078 script[key] = templates[key]
17079}
17080
9987f0c1 17081module.exports = {
cf6c2044
IC
17082 bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0
17083
9987f0c1
IC
17084 Block: require('./block'),
17085 ECPair: require('./ecpair'),
17086 ECSignature: require('./ecsignature'),
17087 HDNode: require('./hdnode'),
17088 Transaction: require('./transaction'),
17089 TransactionBuilder: require('./transaction_builder'),
8b095871 17090
9987f0c1 17091 address: require('./address'),
9987f0c1
IC
17092 crypto: require('./crypto'),
17093 networks: require('./networks'),
17094 opcodes: require('bitcoin-ops'),
cf6c2044 17095 script: script
8b095871
IC
17096}
17097
cf6c2044 17098},{"./address":44,"./block":45,"./bufferutils":46,"./crypto":47,"./ecpair":49,"./ecsignature":50,"./hdnode":51,"./networks":53,"./script":54,"./templates":56,"./transaction":78,"./transaction_builder":79,"bitcoin-ops":42}],53:[function(require,module,exports){
9987f0c1
IC
17099// https://en.bitcoin.it/wiki/List_of_address_prefixes
17100// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
8b095871 17101
9987f0c1
IC
17102module.exports = {
17103 bitcoin: {
17104 messagePrefix: '\x18Bitcoin Signed Message:\n',
cf6c2044 17105 bech32: 'bc',
9987f0c1
IC
17106 bip32: {
17107 public: 0x0488b21e,
17108 private: 0x0488ade4
17109 },
17110 pubKeyHash: 0x00,
17111 scriptHash: 0x05,
17112 wif: 0x80
17113 },
17114 testnet: {
17115 messagePrefix: '\x18Bitcoin Signed Message:\n',
cf6c2044 17116 bech32: 'tb',
9987f0c1
IC
17117 bip32: {
17118 public: 0x043587cf,
17119 private: 0x04358394
17120 },
17121 pubKeyHash: 0x6f,
17122 scriptHash: 0xc4,
17123 wif: 0xef
17124 },
17125 litecoin: {
17126 messagePrefix: '\x19Litecoin Signed Message:\n',
17127 bip32: {
17128 public: 0x019da462,
17129 private: 0x019d9cfe
17130 },
17131 pubKeyHash: 0x30,
17132 scriptHash: 0x32,
17133 wif: 0xb0
17134 }
17135}
8b095871 17136
cf6c2044 17137},{}],54:[function(require,module,exports){
9987f0c1
IC
17138var Buffer = require('safe-buffer').Buffer
17139var bip66 = require('bip66')
17140var pushdata = require('pushdata-bitcoin')
17141var typeforce = require('typeforce')
17142var types = require('./types')
17143var scriptNumber = require('./script_number')
17144
17145var OPS = require('bitcoin-ops')
17146var REVERSE_OPS = require('bitcoin-ops/map')
17147var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
17148
17149function isOPInt (value) {
17150 return types.Number(value) &&
17151 ((value === OPS.OP_0) ||
17152 (value >= OPS.OP_1 && value <= OPS.OP_16) ||
17153 (value === OPS.OP_1NEGATE))
8b095871
IC
17154}
17155
9987f0c1
IC
17156function isPushOnlyChunk (value) {
17157 return types.Buffer(value) || isOPInt(value)
8b095871
IC
17158}
17159
9987f0c1
IC
17160function isPushOnly (value) {
17161 return types.Array(value) && value.every(isPushOnlyChunk)
17162}
8b095871 17163
cf6c2044
IC
17164function asMinimalOP (buffer) {
17165 if (buffer.length === 0) return OPS.OP_0
17166 if (buffer.length !== 1) return
17167 if (buffer[0] >= 1 && buffer[0] <= 16) return OP_INT_BASE + buffer[0]
17168 if (buffer[0] === 0x81) return OPS.OP_1NEGATE
17169}
17170
9987f0c1
IC
17171function compile (chunks) {
17172 // TODO: remove me
17173 if (Buffer.isBuffer(chunks)) return chunks
8b095871 17174
9987f0c1 17175 typeforce(types.Array, chunks)
8b095871 17176
9987f0c1
IC
17177 var bufferSize = chunks.reduce(function (accum, chunk) {
17178 // data chunk
17179 if (Buffer.isBuffer(chunk)) {
17180 // adhere to BIP62.3, minimal push policy
cf6c2044 17181 if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) {
9987f0c1
IC
17182 return accum + 1
17183 }
8b095871 17184
9987f0c1
IC
17185 return accum + pushdata.encodingLength(chunk.length) + chunk.length
17186 }
8b095871 17187
9987f0c1
IC
17188 // opcode
17189 return accum + 1
17190 }, 0.0)
8b095871 17191
9987f0c1
IC
17192 var buffer = Buffer.allocUnsafe(bufferSize)
17193 var offset = 0
8b095871 17194
9987f0c1
IC
17195 chunks.forEach(function (chunk) {
17196 // data chunk
17197 if (Buffer.isBuffer(chunk)) {
17198 // adhere to BIP62.3, minimal push policy
cf6c2044
IC
17199 var opcode = asMinimalOP(chunk)
17200 if (opcode !== undefined) {
9987f0c1
IC
17201 buffer.writeUInt8(opcode, offset)
17202 offset += 1
17203 return
17204 }
8b095871 17205
9987f0c1 17206 offset += pushdata.encode(buffer, chunk.length, offset)
9987f0c1
IC
17207 chunk.copy(buffer, offset)
17208 offset += chunk.length
8b095871 17209
9987f0c1
IC
17210 // opcode
17211 } else {
17212 buffer.writeUInt8(chunk, offset)
17213 offset += 1
17214 }
17215 })
8b095871 17216
9987f0c1
IC
17217 if (offset !== buffer.length) throw new Error('Could not decode chunks')
17218 return buffer
17219}
8b095871 17220
9987f0c1
IC
17221function decompile (buffer) {
17222 // TODO: remove me
17223 if (types.Array(buffer)) return buffer
8b095871 17224
9987f0c1 17225 typeforce(types.Buffer, buffer)
8b095871 17226
9987f0c1
IC
17227 var chunks = []
17228 var i = 0
8b095871 17229
9987f0c1
IC
17230 while (i < buffer.length) {
17231 var opcode = buffer[i]
8b095871 17232
9987f0c1
IC
17233 // data chunk
17234 if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) {
17235 var d = pushdata.decode(buffer, i)
8b095871 17236
9987f0c1
IC
17237 // did reading a pushDataInt fail? empty script
17238 if (d === null) return []
17239 i += d.size
8b095871 17240
9987f0c1
IC
17241 // attempt to read too much data? empty script
17242 if (i + d.number > buffer.length) return []
8b095871 17243
9987f0c1
IC
17244 var data = buffer.slice(i, i + d.number)
17245 i += d.number
8b095871 17246
cf6c2044
IC
17247 // decompile minimally
17248 var op = asMinimalOP(data)
17249 if (op !== undefined) {
17250 chunks.push(op)
17251 } else {
17252 chunks.push(data)
17253 }
8b095871 17254
9987f0c1
IC
17255 // opcode
17256 } else {
17257 chunks.push(opcode)
8b095871 17258
9987f0c1
IC
17259 i += 1
17260 }
17261 }
17262
17263 return chunks
8b095871
IC
17264}
17265
9987f0c1
IC
17266function toASM (chunks) {
17267 if (Buffer.isBuffer(chunks)) {
17268 chunks = decompile(chunks)
17269 }
8b095871 17270
9987f0c1
IC
17271 return chunks.map(function (chunk) {
17272 // data?
cf6c2044
IC
17273 if (Buffer.isBuffer(chunk)) {
17274 var op = asMinimalOP(chunk)
17275 if (op === undefined) return chunk.toString('hex')
17276 chunk = op
17277 }
8b095871 17278
9987f0c1
IC
17279 // opcode!
17280 return REVERSE_OPS[chunk]
17281 }).join(' ')
17282}
8b095871 17283
9987f0c1
IC
17284function fromASM (asm) {
17285 typeforce(types.String, asm)
8b095871 17286
9987f0c1
IC
17287 return compile(asm.split(' ').map(function (chunkStr) {
17288 // opcode?
17289 if (OPS[chunkStr] !== undefined) return OPS[chunkStr]
17290 typeforce(types.Hex, chunkStr)
8b095871 17291
9987f0c1
IC
17292 // data!
17293 return Buffer.from(chunkStr, 'hex')
17294 }))
17295}
8b095871 17296
9987f0c1
IC
17297function toStack (chunks) {
17298 chunks = decompile(chunks)
17299 typeforce(isPushOnly, chunks)
8b095871 17300
9987f0c1
IC
17301 return chunks.map(function (op) {
17302 if (Buffer.isBuffer(op)) return op
17303 if (op === OPS.OP_0) return Buffer.allocUnsafe(0)
17304
17305 return scriptNumber.encode(op - OP_INT_BASE)
17306 })
8b095871
IC
17307}
17308
9987f0c1
IC
17309function isCanonicalPubKey (buffer) {
17310 if (!Buffer.isBuffer(buffer)) return false
17311 if (buffer.length < 33) return false
8b095871 17312
9987f0c1
IC
17313 switch (buffer[0]) {
17314 case 0x02:
17315 case 0x03:
17316 return buffer.length === 33
17317 case 0x04:
17318 return buffer.length === 65
17319 }
8b095871 17320
9987f0c1 17321 return false
8b095871
IC
17322}
17323
9987f0c1
IC
17324function isDefinedHashType (hashType) {
17325 var hashTypeMod = hashType & ~0x80
8b095871 17326
9987f0c1
IC
17327// return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE
17328 return hashTypeMod > 0x00 && hashTypeMod < 0x04
8b095871
IC
17329}
17330
9987f0c1
IC
17331function isCanonicalSignature (buffer) {
17332 if (!Buffer.isBuffer(buffer)) return false
17333 if (!isDefinedHashType(buffer[buffer.length - 1])) return false
8b095871 17334
9987f0c1 17335 return bip66.check(buffer.slice(0, -1))
8b095871
IC
17336}
17337
9987f0c1
IC
17338module.exports = {
17339 compile: compile,
17340 decompile: decompile,
17341 fromASM: fromASM,
17342 toASM: toASM,
17343 toStack: toStack,
8b095871 17344
9987f0c1 17345 number: require('./script_number'),
8b095871 17346
9987f0c1
IC
17347 isCanonicalPubKey: isCanonicalPubKey,
17348 isCanonicalSignature: isCanonicalSignature,
17349 isPushOnly: isPushOnly,
17350 isDefinedHashType: isDefinedHashType
8b095871
IC
17351}
17352
cf6c2044 17353},{"./script_number":55,"./types":80,"bip66":41,"bitcoin-ops":42,"bitcoin-ops/map":43,"pushdata-bitcoin":125,"safe-buffer":128,"typeforce":139}],55:[function(require,module,exports){
9987f0c1 17354var Buffer = require('safe-buffer').Buffer
8b095871 17355
9987f0c1
IC
17356function decode (buffer, maxLength, minimal) {
17357 maxLength = maxLength || 4
17358 minimal = minimal === undefined ? true : minimal
8b095871 17359
9987f0c1
IC
17360 var length = buffer.length
17361 if (length === 0) return 0
17362 if (length > maxLength) throw new TypeError('Script number overflow')
17363 if (minimal) {
17364 if ((buffer[length - 1] & 0x7f) === 0) {
17365 if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number')
17366 }
17367 }
8b095871 17368
9987f0c1
IC
17369 // 40-bit
17370 if (length === 5) {
17371 var a = buffer.readUInt32LE(0)
17372 var b = buffer.readUInt8(4)
8b095871 17373
9987f0c1
IC
17374 if (b & 0x80) return -(((b & ~0x80) * 0x100000000) + a)
17375 return (b * 0x100000000) + a
17376 }
8b095871 17377
9987f0c1 17378 var result = 0
8b095871 17379
9987f0c1
IC
17380 // 32-bit / 24-bit / 16-bit / 8-bit
17381 for (var i = 0; i < length; ++i) {
17382 result |= buffer[i] << (8 * i)
8b095871
IC
17383 }
17384
9987f0c1
IC
17385 if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << (8 * (length - 1))))
17386 return result
17387}
8b095871 17388
9987f0c1
IC
17389function scriptNumSize (i) {
17390 return i > 0x7fffffff ? 5
17391 : i > 0x7fffff ? 4
17392 : i > 0x7fff ? 3
17393 : i > 0x7f ? 2
17394 : i > 0x00 ? 1
17395 : 0
8b095871
IC
17396}
17397
9987f0c1
IC
17398function encode (number) {
17399 var value = Math.abs(number)
17400 var size = scriptNumSize(value)
17401 var buffer = Buffer.allocUnsafe(size)
17402 var negative = number < 0
8b095871 17403
9987f0c1
IC
17404 for (var i = 0; i < size; ++i) {
17405 buffer.writeUInt8(value & 0xff, i)
17406 value >>= 8
17407 }
8b095871 17408
9987f0c1
IC
17409 if (buffer[size - 1] & 0x80) {
17410 buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1)
17411 } else if (negative) {
17412 buffer[size - 1] |= 0x80
17413 }
17414
17415 return buffer
8b095871
IC
17416}
17417
9987f0c1
IC
17418module.exports = {
17419 decode: decode,
17420 encode: encode
17421}
8b095871 17422
cf6c2044 17423},{"safe-buffer":128}],56:[function(require,module,exports){
9987f0c1
IC
17424var decompile = require('../script').decompile
17425var multisig = require('./multisig')
17426var nullData = require('./nulldata')
17427var pubKey = require('./pubkey')
17428var pubKeyHash = require('./pubkeyhash')
17429var scriptHash = require('./scripthash')
17430var witnessPubKeyHash = require('./witnesspubkeyhash')
17431var witnessScriptHash = require('./witnessscripthash')
17432var witnessCommitment = require('./witnesscommitment')
17433
17434var types = {
17435 MULTISIG: 'multisig',
17436 NONSTANDARD: 'nonstandard',
17437 NULLDATA: 'nulldata',
17438 P2PK: 'pubkey',
17439 P2PKH: 'pubkeyhash',
17440 P2SH: 'scripthash',
17441 P2WPKH: 'witnesspubkeyhash',
17442 P2WSH: 'witnessscripthash',
17443 WITNESS_COMMITMENT: 'witnesscommitment'
17444}
8b095871 17445
9987f0c1
IC
17446function classifyOutput (script) {
17447 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH
17448 if (witnessScriptHash.output.check(script)) return types.P2WSH
17449 if (pubKeyHash.output.check(script)) return types.P2PKH
17450 if (scriptHash.output.check(script)) return types.P2SH
8b095871 17451
9987f0c1
IC
17452 // XXX: optimization, below functions .decompile before use
17453 var chunks = decompile(script)
17454 if (multisig.output.check(chunks)) return types.MULTISIG
17455 if (pubKey.output.check(chunks)) return types.P2PK
17456 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT
17457 if (nullData.output.check(chunks)) return types.NULLDATA
8b095871 17458
9987f0c1 17459 return types.NONSTANDARD
8b095871
IC
17460}
17461
9987f0c1
IC
17462function classifyInput (script, allowIncomplete) {
17463 // XXX: optimization, below functions .decompile before use
17464 var chunks = decompile(script)
8b095871 17465
9987f0c1
IC
17466 if (pubKeyHash.input.check(chunks)) return types.P2PKH
17467 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH
17468 if (multisig.input.check(chunks, allowIncomplete)) return types.MULTISIG
17469 if (pubKey.input.check(chunks)) return types.P2PK
8b095871 17470
9987f0c1 17471 return types.NONSTANDARD
8b095871
IC
17472}
17473
9987f0c1
IC
17474function classifyWitness (script, allowIncomplete) {
17475 // XXX: optimization, below functions .decompile before use
17476 var chunks = decompile(script)
8b095871 17477
9987f0c1
IC
17478 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
17479 if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH
8b095871 17480
9987f0c1
IC
17481 return types.NONSTANDARD
17482}
8b095871 17483
9987f0c1
IC
17484module.exports = {
17485 classifyInput: classifyInput,
17486 classifyOutput: classifyOutput,
17487 classifyWitness: classifyWitness,
17488 multisig: multisig,
17489 nullData: nullData,
17490 pubKey: pubKey,
17491 pubKeyHash: pubKeyHash,
17492 scriptHash: scriptHash,
17493 witnessPubKeyHash: witnessPubKeyHash,
17494 witnessScriptHash: witnessScriptHash,
17495 witnessCommitment: witnessCommitment,
17496 types: types
17497}
17498
cf6c2044 17499},{"../script":54,"./multisig":57,"./nulldata":60,"./pubkey":61,"./pubkeyhash":64,"./scripthash":67,"./witnesscommitment":70,"./witnesspubkeyhash":72,"./witnessscripthash":75}],57:[function(require,module,exports){
9987f0c1
IC
17500module.exports = {
17501 input: require('./input'),
17502 output: require('./output')
8b095871
IC
17503}
17504
cf6c2044 17505},{"./input":58,"./output":59}],58:[function(require,module,exports){
9987f0c1 17506// OP_0 [signatures ...]
8b095871 17507
9987f0c1
IC
17508var Buffer = require('safe-buffer').Buffer
17509var bscript = require('../../script')
cf6c2044 17510var p2mso = require('./output')
9987f0c1
IC
17511var typeforce = require('typeforce')
17512var OPS = require('bitcoin-ops')
8b095871 17513
9987f0c1
IC
17514function partialSignature (value) {
17515 return value === OPS.OP_0 || bscript.isCanonicalSignature(value)
17516}
8b095871 17517
9987f0c1
IC
17518function check (script, allowIncomplete) {
17519 var chunks = bscript.decompile(script)
17520 if (chunks.length < 2) return false
17521 if (chunks[0] !== OPS.OP_0) return false
8b095871 17522
9987f0c1
IC
17523 if (allowIncomplete) {
17524 return chunks.slice(1).every(partialSignature)
17525 }
8b095871 17526
9987f0c1 17527 return chunks.slice(1).every(bscript.isCanonicalSignature)
8b095871 17528}
9987f0c1 17529check.toJSON = function () { return 'multisig input' }
8b095871 17530
9987f0c1 17531var EMPTY_BUFFER = Buffer.allocUnsafe(0)
8b095871 17532
9987f0c1
IC
17533function encodeStack (signatures, scriptPubKey) {
17534 typeforce([partialSignature], signatures)
8b095871 17535
9987f0c1 17536 if (scriptPubKey) {
cf6c2044 17537 var scriptData = p2mso.decode(scriptPubKey)
9987f0c1
IC
17538
17539 if (signatures.length < scriptData.m) {
17540 throw new TypeError('Not enough signatures provided')
17541 }
8b095871 17542
9987f0c1
IC
17543 if (signatures.length > scriptData.pubKeys.length) {
17544 throw new TypeError('Too many signatures provided')
17545 }
17546 }
17547
cf6c2044
IC
17548 return [].concat(EMPTY_BUFFER, signatures.map(function (sig) {
17549 if (sig === OPS.OP_0) {
17550 return EMPTY_BUFFER
17551 }
17552 return sig
17553 }))
8b095871
IC
17554}
17555
9987f0c1
IC
17556function encode (signatures, scriptPubKey) {
17557 return bscript.compile(encodeStack(signatures, scriptPubKey))
8b095871
IC
17558}
17559
9987f0c1
IC
17560function decodeStack (stack, allowIncomplete) {
17561 typeforce(check, stack, allowIncomplete)
17562 return stack.slice(1)
8b095871
IC
17563}
17564
9987f0c1
IC
17565function decode (buffer, allowIncomplete) {
17566 var stack = bscript.decompile(buffer)
17567 return decodeStack(stack, allowIncomplete)
17568}
8b095871 17569
9987f0c1
IC
17570module.exports = {
17571 check: check,
17572 decode: decode,
17573 decodeStack: decodeStack,
17574 encode: encode,
17575 encodeStack: encodeStack
17576}
8b095871 17577
cf6c2044 17578},{"../../script":54,"./output":59,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],59:[function(require,module,exports){
9987f0c1 17579// m [pubKeys ...] n OP_CHECKMULTISIG
8b095871 17580
9987f0c1
IC
17581var bscript = require('../../script')
17582var types = require('../../types')
17583var typeforce = require('typeforce')
17584var OPS = require('bitcoin-ops')
17585var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
17586
17587function check (script, allowIncomplete) {
17588 var chunks = bscript.decompile(script)
17589
17590 if (chunks.length < 4) return false
17591 if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false
17592 if (!types.Number(chunks[0])) return false
17593 if (!types.Number(chunks[chunks.length - 2])) return false
17594 var m = chunks[0] - OP_INT_BASE
17595 var n = chunks[chunks.length - 2] - OP_INT_BASE
17596
17597 if (m <= 0) return false
17598 if (n > 16) return false
17599 if (m > n) return false
17600 if (n !== chunks.length - 3) return false
17601 if (allowIncomplete) return true
17602
17603 var keys = chunks.slice(1, -2)
17604 return keys.every(bscript.isCanonicalPubKey)
17605}
17606check.toJSON = function () { return 'multi-sig output' }
17607
17608function encode (m, pubKeys) {
17609 typeforce({
17610 m: types.Number,
17611 pubKeys: [bscript.isCanonicalPubKey]
17612 }, {
17613 m: m,
17614 pubKeys: pubKeys
17615 })
8b095871 17616
9987f0c1
IC
17617 var n = pubKeys.length
17618 if (n < m) throw new TypeError('Not enough pubKeys provided')
8b095871 17619
9987f0c1
IC
17620 return bscript.compile([].concat(
17621 OP_INT_BASE + m,
17622 pubKeys,
17623 OP_INT_BASE + n,
17624 OPS.OP_CHECKMULTISIG
17625 ))
17626}
8b095871 17627
9987f0c1
IC
17628function decode (buffer, allowIncomplete) {
17629 var chunks = bscript.decompile(buffer)
17630 typeforce(check, chunks, allowIncomplete)
8b095871 17631
9987f0c1
IC
17632 return {
17633 m: chunks[0] - OP_INT_BASE,
17634 pubKeys: chunks.slice(1, -2)
8b095871 17635 }
9987f0c1 17636}
8b095871 17637
9987f0c1
IC
17638module.exports = {
17639 check: check,
17640 decode: decode,
17641 encode: encode
17642}
8b095871 17643
cf6c2044 17644},{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],60:[function(require,module,exports){
9987f0c1 17645// OP_RETURN {data}
8b095871 17646
9987f0c1
IC
17647var bscript = require('../script')
17648var types = require('../types')
17649var typeforce = require('typeforce')
17650var OPS = require('bitcoin-ops')
8b095871 17651
9987f0c1
IC
17652function check (script) {
17653 var buffer = bscript.compile(script)
8b095871 17654
9987f0c1
IC
17655 return buffer.length > 1 &&
17656 buffer[0] === OPS.OP_RETURN
17657}
17658check.toJSON = function () { return 'null data output' }
8b095871 17659
9987f0c1
IC
17660function encode (data) {
17661 typeforce(types.Buffer, data)
8b095871 17662
9987f0c1
IC
17663 return bscript.compile([OPS.OP_RETURN, data])
17664}
8b095871 17665
9987f0c1
IC
17666function decode (buffer) {
17667 typeforce(check, buffer)
17668
17669 return buffer.slice(2)
17670}
8b095871 17671
9987f0c1
IC
17672module.exports = {
17673 output: {
17674 check: check,
17675 decode: decode,
17676 encode: encode
8b095871 17677 }
9987f0c1 17678}
8b095871 17679
cf6c2044
IC
17680},{"../script":54,"../types":80,"bitcoin-ops":42,"typeforce":139}],61:[function(require,module,exports){
17681arguments[4][57][0].apply(exports,arguments)
17682},{"./input":62,"./output":63,"dup":57}],62:[function(require,module,exports){
9987f0c1 17683// {signature}
8b095871 17684
9987f0c1 17685var bscript = require('../../script')
9987f0c1 17686var typeforce = require('typeforce')
8b095871 17687
9987f0c1
IC
17688function check (script) {
17689 var chunks = bscript.decompile(script)
8b095871 17690
9987f0c1
IC
17691 return chunks.length === 1 &&
17692 bscript.isCanonicalSignature(chunks[0])
17693}
17694check.toJSON = function () { return 'pubKey input' }
8b095871 17695
9987f0c1 17696function encodeStack (signature) {
cf6c2044 17697 typeforce(bscript.isCanonicalSignature, signature)
9987f0c1 17698 return [signature]
8b095871
IC
17699}
17700
9987f0c1
IC
17701function encode (signature) {
17702 return bscript.compile(encodeStack(signature))
17703}
8b095871 17704
9987f0c1
IC
17705function decodeStack (stack) {
17706 typeforce(check, stack)
17707 return stack[0]
17708}
8b095871 17709
9987f0c1
IC
17710function decode (buffer) {
17711 var stack = bscript.decompile(buffer)
17712 return decodeStack(stack)
17713}
8b095871 17714
9987f0c1
IC
17715module.exports = {
17716 check: check,
17717 decode: decode,
17718 decodeStack: decodeStack,
17719 encode: encode,
17720 encodeStack: encodeStack
8b095871
IC
17721}
17722
cf6c2044 17723},{"../../script":54,"typeforce":139}],63:[function(require,module,exports){
9987f0c1 17724// {pubKey} OP_CHECKSIG
8b095871 17725
9987f0c1
IC
17726var bscript = require('../../script')
17727var typeforce = require('typeforce')
17728var OPS = require('bitcoin-ops')
8b095871 17729
9987f0c1
IC
17730function check (script) {
17731 var chunks = bscript.decompile(script)
8b095871 17732
9987f0c1
IC
17733 return chunks.length === 2 &&
17734 bscript.isCanonicalPubKey(chunks[0]) &&
17735 chunks[1] === OPS.OP_CHECKSIG
17736}
17737check.toJSON = function () { return 'pubKey output' }
8b095871 17738
9987f0c1
IC
17739function encode (pubKey) {
17740 typeforce(bscript.isCanonicalPubKey, pubKey)
8b095871 17741
9987f0c1
IC
17742 return bscript.compile([pubKey, OPS.OP_CHECKSIG])
17743}
8b095871 17744
9987f0c1
IC
17745function decode (buffer) {
17746 var chunks = bscript.decompile(buffer)
17747 typeforce(check, chunks)
8b095871 17748
9987f0c1
IC
17749 return chunks[0]
17750}
8b095871 17751
9987f0c1
IC
17752module.exports = {
17753 check: check,
17754 decode: decode,
17755 encode: encode
17756}
8b095871 17757
cf6c2044
IC
17758},{"../../script":54,"bitcoin-ops":42,"typeforce":139}],64:[function(require,module,exports){
17759arguments[4][57][0].apply(exports,arguments)
17760},{"./input":65,"./output":66,"dup":57}],65:[function(require,module,exports){
9987f0c1 17761// {signature} {pubKey}
8b095871 17762
9987f0c1 17763var bscript = require('../../script')
9987f0c1 17764var typeforce = require('typeforce')
8b095871 17765
9987f0c1
IC
17766function check (script) {
17767 var chunks = bscript.decompile(script)
8b095871 17768
9987f0c1
IC
17769 return chunks.length === 2 &&
17770 bscript.isCanonicalSignature(chunks[0]) &&
17771 bscript.isCanonicalPubKey(chunks[1])
8b095871 17772}
9987f0c1 17773check.toJSON = function () { return 'pubKeyHash input' }
8b095871 17774
9987f0c1
IC
17775function encodeStack (signature, pubKey) {
17776 typeforce({
cf6c2044
IC
17777 signature: bscript.isCanonicalSignature,
17778 pubKey: bscript.isCanonicalPubKey
9987f0c1 17779 }, {
cf6c2044
IC
17780 signature: signature,
17781 pubKey: pubKey
9987f0c1 17782 })
8b095871 17783
9987f0c1 17784 return [signature, pubKey]
8b095871
IC
17785}
17786
9987f0c1
IC
17787function encode (signature, pubKey) {
17788 return bscript.compile(encodeStack(signature, pubKey))
8b095871
IC
17789}
17790
9987f0c1
IC
17791function decodeStack (stack) {
17792 typeforce(check, stack)
8b095871 17793
9987f0c1
IC
17794 return {
17795 signature: stack[0],
17796 pubKey: stack[1]
17797 }
8b095871
IC
17798}
17799
9987f0c1
IC
17800function decode (buffer) {
17801 var stack = bscript.decompile(buffer)
17802 return decodeStack(stack)
8b095871
IC
17803}
17804
9987f0c1
IC
17805module.exports = {
17806 check: check,
17807 decode: decode,
17808 decodeStack: decodeStack,
17809 encode: encode,
17810 encodeStack: encodeStack
8b095871
IC
17811}
17812
cf6c2044 17813},{"../../script":54,"typeforce":139}],66:[function(require,module,exports){
9987f0c1 17814// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
8b095871 17815
9987f0c1
IC
17816var bscript = require('../../script')
17817var types = require('../../types')
17818var typeforce = require('typeforce')
17819var OPS = require('bitcoin-ops')
8b095871 17820
9987f0c1
IC
17821function check (script) {
17822 var buffer = bscript.compile(script)
8b095871 17823
9987f0c1
IC
17824 return buffer.length === 25 &&
17825 buffer[0] === OPS.OP_DUP &&
17826 buffer[1] === OPS.OP_HASH160 &&
17827 buffer[2] === 0x14 &&
17828 buffer[23] === OPS.OP_EQUALVERIFY &&
17829 buffer[24] === OPS.OP_CHECKSIG
8b095871 17830}
9987f0c1 17831check.toJSON = function () { return 'pubKeyHash output' }
8b095871 17832
9987f0c1
IC
17833function encode (pubKeyHash) {
17834 typeforce(types.Hash160bit, pubKeyHash)
8b095871 17835
9987f0c1
IC
17836 return bscript.compile([
17837 OPS.OP_DUP,
17838 OPS.OP_HASH160,
17839 pubKeyHash,
17840 OPS.OP_EQUALVERIFY,
17841 OPS.OP_CHECKSIG
17842 ])
8b095871
IC
17843}
17844
9987f0c1
IC
17845function decode (buffer) {
17846 typeforce(check, buffer)
8b095871 17847
9987f0c1 17848 return buffer.slice(3, 23)
8b095871
IC
17849}
17850
9987f0c1
IC
17851module.exports = {
17852 check: check,
17853 decode: decode,
17854 encode: encode
8b095871
IC
17855}
17856
cf6c2044
IC
17857},{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],67:[function(require,module,exports){
17858arguments[4][57][0].apply(exports,arguments)
17859},{"./input":68,"./output":69,"dup":57}],68:[function(require,module,exports){
9987f0c1 17860// <scriptSig> {serialized scriptPubKey script}
8b095871 17861
9987f0c1
IC
17862var Buffer = require('safe-buffer').Buffer
17863var bscript = require('../../script')
17864var typeforce = require('typeforce')
8b095871 17865
cf6c2044
IC
17866var p2ms = require('../multisig/')
17867var p2pk = require('../pubkey/')
17868var p2pkh = require('../pubkeyhash/')
17869var p2wpkho = require('../witnesspubkeyhash/output')
17870var p2wsho = require('../witnessscripthash/output')
17871
9987f0c1
IC
17872function check (script, allowIncomplete) {
17873 var chunks = bscript.decompile(script)
17874 if (chunks.length < 1) return false
8b095871 17875
9987f0c1
IC
17876 var lastChunk = chunks[chunks.length - 1]
17877 if (!Buffer.isBuffer(lastChunk)) return false
8b095871 17878
9987f0c1
IC
17879 var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
17880 var redeemScriptChunks = bscript.decompile(lastChunk)
8b095871 17881
9987f0c1
IC
17882 // is redeemScript a valid script?
17883 if (redeemScriptChunks.length === 0) return false
17884
17885 // is redeemScriptSig push only?
17886 if (!bscript.isPushOnly(scriptSigChunks)) return false
17887
cf6c2044 17888 // is witness?
9987f0c1 17889 if (chunks.length === 1) {
cf6c2044
IC
17890 return p2wsho.check(redeemScriptChunks) ||
17891 p2wpkho.check(redeemScriptChunks)
9987f0c1 17892 }
cf6c2044
IC
17893
17894 // match types
17895 if (p2pkh.input.check(scriptSigChunks) &&
17896 p2pkh.output.check(redeemScriptChunks)) return true
17897
17898 if (p2ms.input.check(scriptSigChunks, allowIncomplete) &&
17899 p2ms.output.check(redeemScriptChunks)) return true
17900
17901 if (p2pk.input.check(scriptSigChunks) &&
17902 p2pk.output.check(redeemScriptChunks)) return true
17903
17904 return false
8b095871 17905}
9987f0c1 17906check.toJSON = function () { return 'scriptHash input' }
8b095871 17907
9987f0c1
IC
17908function encodeStack (redeemScriptStack, redeemScript) {
17909 var serializedScriptPubKey = bscript.compile(redeemScript)
8b095871 17910
9987f0c1
IC
17911 return [].concat(redeemScriptStack, serializedScriptPubKey)
17912}
8b095871 17913
9987f0c1
IC
17914function encode (redeemScriptSig, redeemScript) {
17915 var redeemScriptStack = bscript.decompile(redeemScriptSig)
8b095871 17916
9987f0c1
IC
17917 return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
17918}
8b095871 17919
9987f0c1
IC
17920function decodeStack (stack) {
17921 typeforce(check, stack)
17922
17923 return {
17924 redeemScriptStack: stack.slice(0, -1),
17925 redeemScript: stack[stack.length - 1]
17926 }
8b095871
IC
17927}
17928
9987f0c1
IC
17929function decode (buffer) {
17930 var stack = bscript.decompile(buffer)
17931 var result = decodeStack(stack)
17932 result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
17933 delete result.redeemScriptStack
17934 return result
17935}
8b095871 17936
9987f0c1
IC
17937module.exports = {
17938 check: check,
17939 decode: decode,
17940 decodeStack: decodeStack,
17941 encode: encode,
17942 encodeStack: encodeStack
17943}
8b095871 17944
cf6c2044 17945},{"../../script":54,"../multisig/":57,"../pubkey/":61,"../pubkeyhash/":64,"../witnesspubkeyhash/output":74,"../witnessscripthash/output":77,"safe-buffer":128,"typeforce":139}],69:[function(require,module,exports){
9987f0c1 17946// OP_HASH160 {scriptHash} OP_EQUAL
8b095871 17947
9987f0c1
IC
17948var bscript = require('../../script')
17949var types = require('../../types')
17950var typeforce = require('typeforce')
17951var OPS = require('bitcoin-ops')
8b095871 17952
9987f0c1
IC
17953function check (script) {
17954 var buffer = bscript.compile(script)
8b095871 17955
9987f0c1
IC
17956 return buffer.length === 23 &&
17957 buffer[0] === OPS.OP_HASH160 &&
17958 buffer[1] === 0x14 &&
17959 buffer[22] === OPS.OP_EQUAL
8b095871 17960}
9987f0c1 17961check.toJSON = function () { return 'scriptHash output' }
8b095871 17962
9987f0c1
IC
17963function encode (scriptHash) {
17964 typeforce(types.Hash160bit, scriptHash)
8b095871 17965
9987f0c1
IC
17966 return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
17967}
8b095871 17968
9987f0c1
IC
17969function decode (buffer) {
17970 typeforce(check, buffer)
8b095871 17971
9987f0c1
IC
17972 return buffer.slice(2, 22)
17973}
8b095871 17974
9987f0c1
IC
17975module.exports = {
17976 check: check,
17977 decode: decode,
17978 encode: encode
8b095871
IC
17979}
17980
cf6c2044 17981},{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],70:[function(require,module,exports){
9987f0c1
IC
17982module.exports = {
17983 output: require('./output')
17984}
8b095871 17985
cf6c2044 17986},{"./output":71}],71:[function(require,module,exports){
9987f0c1 17987// OP_RETURN {aa21a9ed} {commitment}
8b095871 17988
9987f0c1
IC
17989var Buffer = require('safe-buffer').Buffer
17990var bscript = require('../../script')
17991var types = require('../../types')
17992var typeforce = require('typeforce')
17993var OPS = require('bitcoin-ops')
8b095871 17994
9987f0c1 17995var HEADER = Buffer.from('aa21a9ed', 'hex')
8b095871 17996
9987f0c1
IC
17997function check (script) {
17998 var buffer = bscript.compile(script)
17999
18000 return buffer.length > 37 &&
18001 buffer[0] === OPS.OP_RETURN &&
18002 buffer[1] === 0x24 &&
18003 buffer.slice(2, 6).equals(HEADER)
8b095871
IC
18004}
18005
9987f0c1 18006check.toJSON = function () { return 'Witness commitment output' }
8b095871 18007
9987f0c1
IC
18008function encode (commitment) {
18009 typeforce(types.Hash256bit, commitment)
8b095871 18010
9987f0c1
IC
18011 var buffer = Buffer.allocUnsafe(36)
18012 HEADER.copy(buffer, 0)
18013 commitment.copy(buffer, 4)
8b095871 18014
9987f0c1
IC
18015 return bscript.compile([OPS.OP_RETURN, buffer])
18016}
8b095871 18017
9987f0c1
IC
18018function decode (buffer) {
18019 typeforce(check, buffer)
8b095871 18020
9987f0c1
IC
18021 return bscript.decompile(buffer)[1].slice(4, 36)
18022}
8b095871 18023
9987f0c1
IC
18024module.exports = {
18025 check: check,
18026 decode: decode,
18027 encode: encode
18028}
8b095871 18029
cf6c2044
IC
18030},{"../../script":54,"../../types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],72:[function(require,module,exports){
18031arguments[4][57][0].apply(exports,arguments)
18032},{"./input":73,"./output":74,"dup":57}],73:[function(require,module,exports){
9987f0c1 18033// {signature} {pubKey}
8b095871 18034
cf6c2044
IC
18035var bscript = require('../../script')
18036var typeforce = require('typeforce')
18037
18038function isCompressedCanonicalPubKey (pubKey) {
18039 return bscript.isCanonicalPubKey(pubKey) && pubKey.length === 33
18040}
18041
18042function check (script) {
18043 var chunks = bscript.decompile(script)
18044
18045 return chunks.length === 2 &&
18046 bscript.isCanonicalSignature(chunks[0]) &&
18047 isCompressedCanonicalPubKey(chunks[1])
18048}
18049check.toJSON = function () { return 'witnessPubKeyHash input' }
18050
18051function encodeStack (signature, pubKey) {
18052 typeforce({
18053 signature: bscript.isCanonicalSignature,
18054 pubKey: isCompressedCanonicalPubKey
18055 }, {
18056 signature: signature,
18057 pubKey: pubKey
18058 })
18059
18060 return [signature, pubKey]
18061}
18062
18063function decodeStack (stack) {
18064 typeforce(check, stack)
18065
18066 return {
18067 signature: stack[0],
18068 pubKey: stack[1]
18069 }
18070}
8b095871 18071
9987f0c1 18072module.exports = {
cf6c2044
IC
18073 check: check,
18074 decodeStack: decodeStack,
18075 encodeStack: encodeStack
8b095871
IC
18076}
18077
cf6c2044 18078},{"../../script":54,"typeforce":139}],74:[function(require,module,exports){
9987f0c1 18079// OP_0 {pubKeyHash}
8b095871 18080
9987f0c1
IC
18081var bscript = require('../../script')
18082var types = require('../../types')
18083var typeforce = require('typeforce')
18084var OPS = require('bitcoin-ops')
8b095871 18085
9987f0c1
IC
18086function check (script) {
18087 var buffer = bscript.compile(script)
8b095871 18088
9987f0c1
IC
18089 return buffer.length === 22 &&
18090 buffer[0] === OPS.OP_0 &&
18091 buffer[1] === 0x14
18092}
18093check.toJSON = function () { return 'Witness pubKeyHash output' }
8b095871 18094
9987f0c1
IC
18095function encode (pubKeyHash) {
18096 typeforce(types.Hash160bit, pubKeyHash)
8b095871 18097
9987f0c1
IC
18098 return bscript.compile([OPS.OP_0, pubKeyHash])
18099}
8b095871 18100
9987f0c1
IC
18101function decode (buffer) {
18102 typeforce(check, buffer)
18103
18104 return buffer.slice(2)
8b095871
IC
18105}
18106
9987f0c1
IC
18107module.exports = {
18108 check: check,
18109 decode: decode,
18110 encode: encode
18111}
8b095871 18112
cf6c2044
IC
18113},{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],75:[function(require,module,exports){
18114arguments[4][57][0].apply(exports,arguments)
18115},{"./input":76,"./output":77,"dup":57}],76:[function(require,module,exports){
18116(function (Buffer){
18117// <scriptSig> {serialized scriptPubKey script}
18118
18119var bscript = require('../../script')
18120var types = require('../../types')
18121var typeforce = require('typeforce')
18122
18123var p2ms = require('../multisig/')
18124var p2pk = require('../pubkey/')
18125var p2pkh = require('../pubkeyhash/')
18126
18127function check (chunks, allowIncomplete) {
18128 typeforce(types.Array, chunks)
18129 if (chunks.length < 1) return false
18130
18131 var witnessScript = chunks[chunks.length - 1]
18132 if (!Buffer.isBuffer(witnessScript)) return false
18133
18134 var witnessScriptChunks = bscript.decompile(witnessScript)
18135
18136 // is witnessScript a valid script?
18137 if (witnessScriptChunks.length === 0) return false
18138
18139 var witnessRawScriptSig = bscript.compile(chunks.slice(0, -1))
18140
18141 // match types
18142 if (p2pkh.input.check(witnessRawScriptSig) &&
18143 p2pkh.output.check(witnessScriptChunks)) return true
18144
18145 if (p2ms.input.check(witnessRawScriptSig, allowIncomplete) &&
18146 p2ms.output.check(witnessScriptChunks)) return true
18147
18148 if (p2pk.input.check(witnessRawScriptSig) &&
18149 p2pk.output.check(witnessScriptChunks)) return true
18150
18151 return false
18152}
18153check.toJSON = function () { return 'witnessScriptHash input' }
18154
18155function encodeStack (witnessData, witnessScript) {
18156 typeforce({
18157 witnessData: [types.Buffer],
18158 witnessScript: types.Buffer
18159 }, {
18160 witnessData: witnessData,
18161 witnessScript: witnessScript
18162 })
18163
18164 return [].concat(witnessData, witnessScript)
18165}
8b095871 18166
cf6c2044
IC
18167function decodeStack (chunks) {
18168 typeforce(check, chunks)
18169 return {
18170 witnessData: chunks.slice(0, -1),
18171 witnessScript: chunks[chunks.length - 1]
18172 }
18173}
8b095871 18174
9987f0c1 18175module.exports = {
cf6c2044
IC
18176 check: check,
18177 decodeStack: decodeStack,
18178 encodeStack: encodeStack
9987f0c1 18179}
8b095871 18180
cf6c2044
IC
18181}).call(this,{"isBuffer":require("../../../../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
18182},{"../../../../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10,"../../script":54,"../../types":80,"../multisig/":57,"../pubkey/":61,"../pubkeyhash/":64,"typeforce":139}],77:[function(require,module,exports){
9987f0c1 18183// OP_0 {scriptHash}
8b095871 18184
9987f0c1
IC
18185var bscript = require('../../script')
18186var types = require('../../types')
18187var typeforce = require('typeforce')
18188var OPS = require('bitcoin-ops')
8b095871 18189
9987f0c1
IC
18190function check (script) {
18191 var buffer = bscript.compile(script)
18192
18193 return buffer.length === 34 &&
18194 buffer[0] === OPS.OP_0 &&
18195 buffer[1] === 0x20
8b095871 18196}
9987f0c1 18197check.toJSON = function () { return 'Witness scriptHash output' }
8b095871 18198
9987f0c1
IC
18199function encode (scriptHash) {
18200 typeforce(types.Hash256bit, scriptHash)
8b095871 18201
9987f0c1
IC
18202 return bscript.compile([OPS.OP_0, scriptHash])
18203}
8b095871 18204
9987f0c1
IC
18205function decode (buffer) {
18206 typeforce(check, buffer)
8b095871 18207
9987f0c1
IC
18208 return buffer.slice(2)
18209}
8b095871 18210
9987f0c1
IC
18211module.exports = {
18212 check: check,
18213 decode: decode,
18214 encode: encode
18215}
8b095871 18216
cf6c2044 18217},{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],78:[function(require,module,exports){
9987f0c1
IC
18218var Buffer = require('safe-buffer').Buffer
18219var bcrypto = require('./crypto')
18220var bscript = require('./script')
18221var bufferutils = require('./bufferutils')
18222var opcodes = require('bitcoin-ops')
18223var typeforce = require('typeforce')
18224var types = require('./types')
18225var varuint = require('varuint-bitcoin')
8b095871 18226
9987f0c1
IC
18227function varSliceSize (someScript) {
18228 var length = someScript.length
8b095871 18229
9987f0c1
IC
18230 return varuint.encodingLength(length) + length
18231}
8b095871 18232
9987f0c1
IC
18233function vectorSize (someVector) {
18234 var length = someVector.length
18235
18236 return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
18237 return sum + varSliceSize(witness)
18238 }, 0)
8b095871
IC
18239}
18240
9987f0c1
IC
18241function Transaction () {
18242 this.version = 1
18243 this.locktime = 0
18244 this.ins = []
18245 this.outs = []
18246}
8b095871 18247
9987f0c1
IC
18248Transaction.DEFAULT_SEQUENCE = 0xffffffff
18249Transaction.SIGHASH_ALL = 0x01
18250Transaction.SIGHASH_NONE = 0x02
18251Transaction.SIGHASH_SINGLE = 0x03
18252Transaction.SIGHASH_ANYONECANPAY = 0x80
18253Transaction.ADVANCED_TRANSACTION_MARKER = 0x00
18254Transaction.ADVANCED_TRANSACTION_FLAG = 0x01
8b095871 18255
9987f0c1
IC
18256var EMPTY_SCRIPT = Buffer.allocUnsafe(0)
18257var EMPTY_WITNESS = []
18258var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
18259var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
18260var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex')
18261var BLANK_OUTPUT = {
18262 script: EMPTY_SCRIPT,
18263 valueBuffer: VALUE_UINT64_MAX
18264}
8b095871 18265
9987f0c1
IC
18266Transaction.fromBuffer = function (buffer, __noStrict) {
18267 var offset = 0
18268 function readSlice (n) {
18269 offset += n
18270 return buffer.slice(offset - n, offset)
18271 }
8b095871 18272
9987f0c1
IC
18273 function readUInt32 () {
18274 var i = buffer.readUInt32LE(offset)
18275 offset += 4
18276 return i
18277 }
8b095871 18278
9987f0c1
IC
18279 function readInt32 () {
18280 var i = buffer.readInt32LE(offset)
18281 offset += 4
18282 return i
18283 }
8b095871 18284
9987f0c1
IC
18285 function readUInt64 () {
18286 var i = bufferutils.readUInt64LE(buffer, offset)
18287 offset += 8
18288 return i
8b095871
IC
18289 }
18290
9987f0c1
IC
18291 function readVarInt () {
18292 var vi = varuint.decode(buffer, offset)
18293 offset += varuint.decode.bytes
18294 return vi
18295 }
8b095871 18296
9987f0c1
IC
18297 function readVarSlice () {
18298 return readSlice(readVarInt())
18299 }
8b095871 18300
9987f0c1
IC
18301 function readVector () {
18302 var count = readVarInt()
18303 var vector = []
18304 for (var i = 0; i < count; i++) vector.push(readVarSlice())
18305 return vector
18306 }
8b095871 18307
9987f0c1
IC
18308 var tx = new Transaction()
18309 tx.version = readInt32()
8b095871 18310
9987f0c1
IC
18311 var marker = buffer.readUInt8(offset)
18312 var flag = buffer.readUInt8(offset + 1)
8b095871 18313
9987f0c1
IC
18314 var hasWitnesses = false
18315 if (marker === Transaction.ADVANCED_TRANSACTION_MARKER &&
18316 flag === Transaction.ADVANCED_TRANSACTION_FLAG) {
18317 offset += 2
18318 hasWitnesses = true
18319 }
8b095871 18320
9987f0c1
IC
18321 var vinLen = readVarInt()
18322 for (var i = 0; i < vinLen; ++i) {
18323 tx.ins.push({
18324 hash: readSlice(32),
18325 index: readUInt32(),
18326 script: readVarSlice(),
18327 sequence: readUInt32(),
18328 witness: EMPTY_WITNESS
18329 })
18330 }
8b095871 18331
9987f0c1
IC
18332 var voutLen = readVarInt()
18333 for (i = 0; i < voutLen; ++i) {
18334 tx.outs.push({
18335 value: readUInt64(),
18336 script: readVarSlice()
18337 })
8b095871
IC
18338 }
18339
9987f0c1
IC
18340 if (hasWitnesses) {
18341 for (i = 0; i < vinLen; ++i) {
18342 tx.ins[i].witness = readVector()
18343 }
8b095871 18344
9987f0c1
IC
18345 // was this pointless?
18346 if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data')
18347 }
8b095871 18348
9987f0c1 18349 tx.locktime = readUInt32()
8b095871 18350
9987f0c1
IC
18351 if (__noStrict) return tx
18352 if (offset !== buffer.length) throw new Error('Transaction has unexpected data')
8b095871 18353
9987f0c1
IC
18354 return tx
18355}
8b095871 18356
9987f0c1
IC
18357Transaction.fromHex = function (hex) {
18358 return Transaction.fromBuffer(Buffer.from(hex, 'hex'))
8b095871 18359}
8b095871 18360
9987f0c1
IC
18361Transaction.isCoinbaseHash = function (buffer) {
18362 typeforce(types.Hash256bit, buffer)
18363 for (var i = 0; i < 32; ++i) {
18364 if (buffer[i] !== 0) return false
8b095871 18365 }
9987f0c1 18366 return true
8b095871 18367}
9987f0c1
IC
18368
18369Transaction.prototype.isCoinbase = function () {
18370 return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)
8b095871
IC
18371}
18372
9987f0c1
IC
18373Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) {
18374 typeforce(types.tuple(
18375 types.Hash256bit,
18376 types.UInt32,
18377 types.maybe(types.UInt32),
18378 types.maybe(types.Buffer)
18379 ), arguments)
8b095871 18380
9987f0c1
IC
18381 if (types.Null(sequence)) {
18382 sequence = Transaction.DEFAULT_SEQUENCE
18383 }
18384
18385 // Add the input and return the input's index
18386 return (this.ins.push({
18387 hash: hash,
18388 index: index,
18389 script: scriptSig || EMPTY_SCRIPT,
18390 sequence: sequence,
18391 witness: EMPTY_WITNESS
18392 }) - 1)
8b095871
IC
18393}
18394
9987f0c1
IC
18395Transaction.prototype.addOutput = function (scriptPubKey, value) {
18396 typeforce(types.tuple(types.Buffer, types.Satoshi), arguments)
8b095871 18397
9987f0c1
IC
18398 // Add the output and return the output's index
18399 return (this.outs.push({
18400 script: scriptPubKey,
18401 value: value
18402 }) - 1)
8b095871
IC
18403}
18404
9987f0c1
IC
18405Transaction.prototype.hasWitnesses = function () {
18406 return this.ins.some(function (x) {
18407 return x.witness.length !== 0
18408 })
18409}
8b095871 18410
9987f0c1
IC
18411Transaction.prototype.weight = function () {
18412 var base = this.__byteLength(false)
18413 var total = this.__byteLength(true)
18414 return base * 3 + total
8b095871
IC
18415}
18416
9987f0c1
IC
18417Transaction.prototype.virtualSize = function () {
18418 return Math.ceil(this.weight() / 4)
18419}
8b095871 18420
9987f0c1
IC
18421Transaction.prototype.byteLength = function () {
18422 return this.__byteLength(true)
8b095871
IC
18423}
18424
9987f0c1
IC
18425Transaction.prototype.__byteLength = function (__allowWitness) {
18426 var hasWitnesses = __allowWitness && this.hasWitnesses()
18427
18428 return (
18429 (hasWitnesses ? 10 : 8) +
18430 varuint.encodingLength(this.ins.length) +
18431 varuint.encodingLength(this.outs.length) +
18432 this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
18433 this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
18434 (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
18435 )
8b095871
IC
18436}
18437
9987f0c1
IC
18438Transaction.prototype.clone = function () {
18439 var newTx = new Transaction()
18440 newTx.version = this.version
18441 newTx.locktime = this.locktime
18442
18443 newTx.ins = this.ins.map(function (txIn) {
18444 return {
18445 hash: txIn.hash,
18446 index: txIn.index,
18447 script: txIn.script,
18448 sequence: txIn.sequence,
18449 witness: txIn.witness
8b095871 18450 }
9987f0c1 18451 })
8b095871 18452
9987f0c1
IC
18453 newTx.outs = this.outs.map(function (txOut) {
18454 return {
18455 script: txOut.script,
18456 value: txOut.value
18457 }
18458 })
8b095871 18459
9987f0c1
IC
18460 return newTx
18461}
18462
18463/**
18464 * Hash transaction for signing a specific input.
18465 *
18466 * Bitcoin uses a different hash for each signed transaction input.
18467 * This method copies the transaction, makes the necessary changes based on the
18468 * hashType, and then hashes the result.
18469 * This hash can then be used to sign the provided transaction input.
18470 */
18471Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
18472 typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments)
18473
18474 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29
18475 if (inIndex >= this.ins.length) return ONE
18476
18477 // ignore OP_CODESEPARATOR
18478 var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) {
18479 return x !== opcodes.OP_CODESEPARATOR
18480 }))
18481
18482 var txTmp = this.clone()
18483
18484 // SIGHASH_NONE: ignore all outputs? (wildcard payee)
18485 if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {
18486 txTmp.outs = []
18487
18488 // ignore sequence numbers (except at inIndex)
18489 txTmp.ins.forEach(function (input, i) {
18490 if (i === inIndex) return
18491
18492 input.sequence = 0
18493 })
18494
18495 // SIGHASH_SINGLE: ignore all outputs, except at the same index?
18496 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {
18497 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60
18498 if (inIndex >= this.outs.length) return ONE
18499
18500 // truncate outputs after
18501 txTmp.outs.length = inIndex + 1
18502
18503 // "blank" outputs before
18504 for (var i = 0; i < inIndex; i++) {
18505 txTmp.outs[i] = BLANK_OUTPUT
8b095871
IC
18506 }
18507
9987f0c1
IC
18508 // ignore sequence numbers (except at inIndex)
18509 txTmp.ins.forEach(function (input, y) {
18510 if (y === inIndex) return
8b095871 18511
9987f0c1
IC
18512 input.sequence = 0
18513 })
8b095871 18514 }
8b095871 18515
9987f0c1
IC
18516 // SIGHASH_ANYONECANPAY: ignore inputs entirely?
18517 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
18518 txTmp.ins = [txTmp.ins[inIndex]]
18519 txTmp.ins[0].script = ourScript
18520
18521 // SIGHASH_ALL: only ignore input scripts
18522 } else {
18523 // "blank" others input scripts
18524 txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT })
18525 txTmp.ins[inIndex].script = ourScript
18526 }
18527
18528 // serialize and hash
18529 var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4)
18530 buffer.writeInt32LE(hashType, buffer.length - 4)
18531 txTmp.__toBuffer(buffer, 0, false)
18532
18533 return bcrypto.hash256(buffer)
8b095871
IC
18534}
18535
9987f0c1
IC
18536Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value, hashType) {
18537 typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments)
18538
18539 var tbuffer, toffset
18540 function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) }
18541 function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) }
18542 function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) }
18543 function writeVarInt (i) {
18544 varuint.encode(i, tbuffer, toffset)
18545 toffset += varuint.encode.bytes
18546 }
18547 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
18548
18549 var hashOutputs = ZERO
18550 var hashPrevouts = ZERO
18551 var hashSequence = ZERO
18552
18553 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {
18554 tbuffer = Buffer.allocUnsafe(36 * this.ins.length)
18555 toffset = 0
18556
18557 this.ins.forEach(function (txIn) {
18558 writeSlice(txIn.hash)
18559 writeUInt32(txIn.index)
18560 })
18561
18562 hashPrevouts = bcrypto.hash256(tbuffer)
18563 }
18564
18565 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) &&
18566 (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
18567 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
18568 tbuffer = Buffer.allocUnsafe(4 * this.ins.length)
18569 toffset = 0
18570
18571 this.ins.forEach(function (txIn) {
18572 writeUInt32(txIn.sequence)
18573 })
18574
18575 hashSequence = bcrypto.hash256(tbuffer)
18576 }
18577
18578 if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
18579 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
18580 var txOutsSize = this.outs.reduce(function (sum, output) {
18581 return sum + 8 + varSliceSize(output.script)
18582 }, 0)
18583
18584 tbuffer = Buffer.allocUnsafe(txOutsSize)
18585 toffset = 0
18586
18587 this.outs.forEach(function (out) {
18588 writeUInt64(out.value)
18589 writeVarSlice(out.script)
18590 })
18591
18592 hashOutputs = bcrypto.hash256(tbuffer)
18593 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) {
18594 var output = this.outs[inIndex]
18595
18596 tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script))
18597 toffset = 0
18598 writeUInt64(output.value)
18599 writeVarSlice(output.script)
18600
18601 hashOutputs = bcrypto.hash256(tbuffer)
18602 }
18603
18604 tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript))
18605 toffset = 0
18606
18607 var input = this.ins[inIndex]
18608 writeUInt32(this.version)
18609 writeSlice(hashPrevouts)
18610 writeSlice(hashSequence)
18611 writeSlice(input.hash)
18612 writeUInt32(input.index)
18613 writeVarSlice(prevOutScript)
18614 writeUInt64(value)
18615 writeUInt32(input.sequence)
18616 writeSlice(hashOutputs)
18617 writeUInt32(this.locktime)
18618 writeUInt32(hashType)
18619 return bcrypto.hash256(tbuffer)
8b095871
IC
18620}
18621
9987f0c1
IC
18622Transaction.prototype.getHash = function () {
18623 return bcrypto.hash256(this.__toBuffer(undefined, undefined, false))
18624}
8b095871 18625
9987f0c1
IC
18626Transaction.prototype.getId = function () {
18627 // transaction hash's are displayed in reverse order
18628 return this.getHash().reverse().toString('hex')
18629}
8b095871 18630
9987f0c1
IC
18631Transaction.prototype.toBuffer = function (buffer, initialOffset) {
18632 return this.__toBuffer(buffer, initialOffset, true)
18633}
8b095871 18634
9987f0c1
IC
18635Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitness) {
18636 if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(__allowWitness))
8b095871 18637
9987f0c1
IC
18638 var offset = initialOffset || 0
18639 function writeSlice (slice) { offset += slice.copy(buffer, offset) }
18640 function writeUInt8 (i) { offset = buffer.writeUInt8(i, offset) }
18641 function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) }
18642 function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) }
18643 function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) }
18644 function writeVarInt (i) {
18645 varuint.encode(i, buffer, offset)
18646 offset += varuint.encode.bytes
18647 }
18648 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
18649 function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }
8b095871 18650
9987f0c1 18651 writeInt32(this.version)
8b095871 18652
9987f0c1 18653 var hasWitnesses = __allowWitness && this.hasWitnesses()
8b095871 18654
9987f0c1
IC
18655 if (hasWitnesses) {
18656 writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER)
18657 writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG)
18658 }
8b095871 18659
9987f0c1 18660 writeVarInt(this.ins.length)
8b095871 18661
9987f0c1
IC
18662 this.ins.forEach(function (txIn) {
18663 writeSlice(txIn.hash)
18664 writeUInt32(txIn.index)
18665 writeVarSlice(txIn.script)
18666 writeUInt32(txIn.sequence)
18667 })
8b095871 18668
9987f0c1
IC
18669 writeVarInt(this.outs.length)
18670 this.outs.forEach(function (txOut) {
18671 if (!txOut.valueBuffer) {
18672 writeUInt64(txOut.value)
18673 } else {
18674 writeSlice(txOut.valueBuffer)
8b095871 18675 }
8b095871 18676
9987f0c1
IC
18677 writeVarSlice(txOut.script)
18678 })
8b095871 18679
9987f0c1
IC
18680 if (hasWitnesses) {
18681 this.ins.forEach(function (input) {
18682 writeVector(input.witness)
18683 })
18684 }
8b095871 18685
9987f0c1 18686 writeUInt32(this.locktime)
8b095871 18687
9987f0c1
IC
18688 // avoid slicing unless necessary
18689 if (initialOffset !== undefined) return buffer.slice(initialOffset, offset)
18690 return buffer
18691}
8b095871 18692
9987f0c1
IC
18693Transaction.prototype.toHex = function () {
18694 return this.toBuffer().toString('hex')
18695}
8b095871 18696
9987f0c1
IC
18697Transaction.prototype.setInputScript = function (index, scriptSig) {
18698 typeforce(types.tuple(types.Number, types.Buffer), arguments)
8b095871 18699
9987f0c1
IC
18700 this.ins[index].script = scriptSig
18701}
8b095871 18702
9987f0c1
IC
18703Transaction.prototype.setWitness = function (index, witness) {
18704 typeforce(types.tuple(types.Number, [types.Buffer]), arguments)
18705
18706 this.ins[index].witness = witness
18707}
18708
18709module.exports = Transaction
18710
cf6c2044 18711},{"./bufferutils":46,"./crypto":47,"./script":54,"./types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139,"varuint-bitcoin":141}],79:[function(require,module,exports){
9987f0c1
IC
18712var Buffer = require('safe-buffer').Buffer
18713var baddress = require('./address')
18714var bcrypto = require('./crypto')
18715var bscript = require('./script')
cf6c2044 18716var btemplates = require('./templates')
9987f0c1
IC
18717var networks = require('./networks')
18718var ops = require('bitcoin-ops')
18719var typeforce = require('typeforce')
18720var types = require('./types')
cf6c2044
IC
18721var scriptTypes = btemplates.types
18722var SIGNABLE = [btemplates.types.P2PKH, btemplates.types.P2PK, btemplates.types.MULTISIG]
18723var P2SH = SIGNABLE.concat([btemplates.types.P2WPKH, btemplates.types.P2WSH])
9987f0c1
IC
18724
18725var ECPair = require('./ecpair')
18726var ECSignature = require('./ecsignature')
18727var Transaction = require('./transaction')
18728
cf6c2044
IC
18729function supportedType (type) {
18730 return SIGNABLE.indexOf(type) !== -1
18731}
18732
18733function supportedP2SHType (type) {
18734 return P2SH.indexOf(type) !== -1
18735}
18736
9987f0c1
IC
18737function extractChunks (type, chunks, script) {
18738 var pubKeys = []
18739 var signatures = []
18740 switch (type) {
18741 case scriptTypes.P2PKH:
18742 // if (redeemScript) throw new Error('Nonstandard... P2SH(P2PKH)')
18743 pubKeys = chunks.slice(1)
18744 signatures = chunks.slice(0, 1)
18745 break
18746
18747 case scriptTypes.P2PK:
cf6c2044 18748 pubKeys[0] = script ? btemplates.pubKey.output.decode(script) : undefined
9987f0c1
IC
18749 signatures = chunks.slice(0, 1)
18750 break
18751
18752 case scriptTypes.MULTISIG:
18753 if (script) {
cf6c2044 18754 var multisig = btemplates.multisig.output.decode(script)
9987f0c1
IC
18755 pubKeys = multisig.pubKeys
18756 }
18757
18758 signatures = chunks.slice(1).map(function (chunk) {
18759 return chunk.length === 0 ? undefined : chunk
18760 })
18761 break
18762 }
18763
18764 return {
18765 pubKeys: pubKeys,
18766 signatures: signatures
18767 }
18768}
18769function expandInput (scriptSig, witnessStack) {
18770 if (scriptSig.length === 0 && witnessStack.length === 0) return {}
18771
18772 var prevOutScript
18773 var prevOutType
18774 var scriptType
18775 var script
18776 var redeemScript
18777 var witnessScript
18778 var witnessScriptType
18779 var redeemScriptType
18780 var witness = false
18781 var p2wsh = false
18782 var p2sh = false
18783 var witnessProgram
18784 var chunks
18785
18786 var scriptSigChunks = bscript.decompile(scriptSig)
cf6c2044 18787 var sigType = btemplates.classifyInput(scriptSigChunks, true)
9987f0c1
IC
18788 if (sigType === scriptTypes.P2SH) {
18789 p2sh = true
18790 redeemScript = scriptSigChunks[scriptSigChunks.length - 1]
cf6c2044
IC
18791 redeemScriptType = btemplates.classifyOutput(redeemScript)
18792 prevOutScript = btemplates.scriptHash.output.encode(bcrypto.hash160(redeemScript))
9987f0c1
IC
18793 prevOutType = scriptTypes.P2SH
18794 script = redeemScript
18795 }
18796
cf6c2044 18797 var classifyWitness = btemplates.classifyWitness(witnessStack, true)
9987f0c1
IC
18798 if (classifyWitness === scriptTypes.P2WSH) {
18799 witnessScript = witnessStack[witnessStack.length - 1]
cf6c2044 18800 witnessScriptType = btemplates.classifyOutput(witnessScript)
9987f0c1 18801 p2wsh = true
cf6c2044 18802 witness = true
9987f0c1 18803 if (scriptSig.length === 0) {
cf6c2044 18804 prevOutScript = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
9987f0c1 18805 prevOutType = scriptTypes.P2WSH
cf6c2044 18806 if (redeemScript !== undefined) {
9987f0c1
IC
18807 throw new Error('Redeem script given when unnecessary')
18808 }
18809 // bare witness
18810 } else {
18811 if (!redeemScript) {
18812 throw new Error('No redeemScript provided for P2WSH, but scriptSig non-empty')
18813 }
cf6c2044 18814 witnessProgram = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
9987f0c1
IC
18815 if (!redeemScript.equals(witnessProgram)) {
18816 throw new Error('Redeem script didn\'t match witnessScript')
18817 }
8b095871 18818 }
8b095871 18819
cf6c2044 18820 if (!supportedType(btemplates.classifyOutput(witnessScript))) {
9987f0c1
IC
18821 throw new Error('unsupported witness script')
18822 }
cf6c2044 18823
9987f0c1
IC
18824 script = witnessScript
18825 scriptType = witnessScriptType
18826 chunks = witnessStack.slice(0, -1)
18827 } else if (classifyWitness === scriptTypes.P2WPKH) {
cf6c2044 18828 witness = true
9987f0c1
IC
18829 var key = witnessStack[witnessStack.length - 1]
18830 var keyHash = bcrypto.hash160(key)
18831 if (scriptSig.length === 0) {
cf6c2044 18832 prevOutScript = btemplates.witnessPubKeyHash.output.encode(keyHash)
9987f0c1
IC
18833 prevOutType = scriptTypes.P2WPKH
18834 if (typeof redeemScript !== 'undefined') {
18835 throw new Error('Redeem script given when unnecessary')
18836 }
18837 } else {
18838 if (!redeemScript) {
18839 throw new Error('No redeemScript provided for P2WPKH, but scriptSig wasn\'t empty')
18840 }
cf6c2044 18841 witnessProgram = btemplates.witnessPubKeyHash.output.encode(keyHash)
9987f0c1
IC
18842 if (!redeemScript.equals(witnessProgram)) {
18843 throw new Error('Redeem script did not have the right witness program')
18844 }
18845 }
8b095871 18846
9987f0c1
IC
18847 scriptType = scriptTypes.P2PKH
18848 chunks = witnessStack
18849 } else if (redeemScript) {
cf6c2044 18850 if (!supportedP2SHType(redeemScriptType)) {
9987f0c1 18851 throw new Error('Bad redeemscript!')
8b095871 18852 }
8b095871 18853
9987f0c1
IC
18854 script = redeemScript
18855 scriptType = redeemScriptType
18856 chunks = scriptSigChunks.slice(0, -1)
18857 } else {
cf6c2044 18858 prevOutType = scriptType = btemplates.classifyInput(scriptSig)
9987f0c1 18859 chunks = scriptSigChunks
8b095871 18860 }
8b095871 18861
9987f0c1 18862 var expanded = extractChunks(scriptType, chunks, script)
8b095871 18863
9987f0c1
IC
18864 var result = {
18865 pubKeys: expanded.pubKeys,
18866 signatures: expanded.signatures,
18867 prevOutScript: prevOutScript,
18868 prevOutType: prevOutType,
18869 signType: scriptType,
18870 signScript: script,
18871 witness: Boolean(witness)
18872 }
8b095871 18873
9987f0c1
IC
18874 if (p2sh) {
18875 result.redeemScript = redeemScript
18876 result.redeemScriptType = redeemScriptType
18877 }
8b095871 18878
9987f0c1
IC
18879 if (p2wsh) {
18880 result.witnessScript = witnessScript
18881 result.witnessScriptType = witnessScriptType
8b095871
IC
18882 }
18883
9987f0c1 18884 return result
8b095871
IC
18885}
18886
9987f0c1
IC
18887// could be done in expandInput, but requires the original Transaction for hashForSignature
18888function fixMultisigOrder (input, transaction, vin) {
18889 if (input.redeemScriptType !== scriptTypes.MULTISIG || !input.redeemScript) return
18890 if (input.pubKeys.length === input.signatures.length) return
8b095871 18891
9987f0c1 18892 var unmatched = input.signatures.concat()
8b095871 18893
9987f0c1
IC
18894 input.signatures = input.pubKeys.map(function (pubKey) {
18895 var keyPair = ECPair.fromPublicKeyBuffer(pubKey)
18896 var match
8b095871 18897
9987f0c1
IC
18898 // check for a signature
18899 unmatched.some(function (signature, i) {
18900 // skip if undefined || OP_0
18901 if (!signature) return false
8b095871 18902
9987f0c1
IC
18903 // TODO: avoid O(n) hashForSignature
18904 var parsed = ECSignature.parseScriptSignature(signature)
18905 var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType)
8b095871 18906
9987f0c1
IC
18907 // skip if signature does not match pubKey
18908 if (!keyPair.verify(hash, parsed.signature)) return false
8b095871 18909
9987f0c1
IC
18910 // remove matched signature from unmatched
18911 unmatched[i] = undefined
18912 match = signature
8b095871 18913
9987f0c1
IC
18914 return true
18915 })
8b095871 18916
9987f0c1
IC
18917 return match
18918 })
18919}
8b095871 18920
9987f0c1
IC
18921function expandOutput (script, scriptType, ourPubKey) {
18922 typeforce(types.Buffer, script)
8b095871 18923
9987f0c1
IC
18924 var scriptChunks = bscript.decompile(script)
18925 if (!scriptType) {
cf6c2044 18926 scriptType = btemplates.classifyOutput(script)
8b095871 18927 }
8b095871 18928
9987f0c1 18929 var pubKeys = []
8b095871 18930
9987f0c1
IC
18931 switch (scriptType) {
18932 // does our hash160(pubKey) match the output scripts?
18933 case scriptTypes.P2PKH:
18934 if (!ourPubKey) break
8b095871 18935
9987f0c1
IC
18936 var pkh1 = scriptChunks[2]
18937 var pkh2 = bcrypto.hash160(ourPubKey)
18938 if (pkh1.equals(pkh2)) pubKeys = [ourPubKey]
18939 break
8b095871 18940
9987f0c1
IC
18941 // does our hash160(pubKey) match the output scripts?
18942 case scriptTypes.P2WPKH:
18943 if (!ourPubKey) break
8b095871 18944
9987f0c1
IC
18945 var wpkh1 = scriptChunks[1]
18946 var wpkh2 = bcrypto.hash160(ourPubKey)
18947 if (wpkh1.equals(wpkh2)) pubKeys = [ourPubKey]
18948 break
8b095871 18949
9987f0c1
IC
18950 case scriptTypes.P2PK:
18951 pubKeys = scriptChunks.slice(0, 1)
18952 break
18953
18954 case scriptTypes.MULTISIG:
18955 pubKeys = scriptChunks.slice(1, -2)
18956 break
8b095871 18957
9987f0c1
IC
18958 default: return { scriptType: scriptType }
18959 }
8b095871 18960
9987f0c1
IC
18961 return {
18962 pubKeys: pubKeys,
18963 scriptType: scriptType,
18964 signatures: pubKeys.map(function () { return undefined })
18965 }
8b095871
IC
18966}
18967
cf6c2044 18968function checkP2SHInput (input, redeemScriptHash) {
9987f0c1
IC
18969 if (input.prevOutType) {
18970 if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH')
8b095871 18971
9987f0c1
IC
18972 var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1]
18973 if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)')
18974 }
8b095871
IC
18975}
18976
9987f0c1
IC
18977function checkP2WSHInput (input, witnessScriptHash) {
18978 if (input.prevOutType) {
18979 if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH')
8b095871 18980
9987f0c1
IC
18981 var scriptHash = bscript.decompile(input.prevOutScript)[1]
18982 if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)')
18983 }
8b095871
IC
18984}
18985
9987f0c1
IC
18986function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScript) {
18987 var expanded
18988 var prevOutType
18989 var prevOutScript
8b095871 18990
9987f0c1
IC
18991 var p2sh = false
18992 var p2shType
18993 var redeemScriptHash
18994
18995 var witness = false
18996 var p2wsh = false
18997 var witnessType
18998 var witnessScriptHash
18999
19000 var signType
19001 var signScript
19002
19003 if (redeemScript && witnessScript) {
19004 redeemScriptHash = bcrypto.hash160(redeemScript)
19005 witnessScriptHash = bcrypto.sha256(witnessScript)
cf6c2044 19006 checkP2SHInput(input, redeemScriptHash)
9987f0c1 19007
cf6c2044 19008 if (!redeemScript.equals(btemplates.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script')
9987f0c1
IC
19009
19010 expanded = expandOutput(witnessScript, undefined, kpPubKey)
19011 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
cf6c2044
IC
19012
19013 prevOutType = btemplates.types.P2SH
19014 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
9987f0c1 19015 p2sh = witness = p2wsh = true
cf6c2044 19016 p2shType = btemplates.types.P2WSH
9987f0c1
IC
19017 signType = witnessType = expanded.scriptType
19018 signScript = witnessScript
19019 } else if (redeemScript) {
19020 redeemScriptHash = bcrypto.hash160(redeemScript)
cf6c2044 19021 checkP2SHInput(input, redeemScriptHash)
9987f0c1
IC
19022
19023 expanded = expandOutput(redeemScript, undefined, kpPubKey)
19024 if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"')
19025
cf6c2044
IC
19026 prevOutType = btemplates.types.P2SH
19027 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
9987f0c1
IC
19028 p2sh = true
19029 signType = p2shType = expanded.scriptType
19030 signScript = redeemScript
cf6c2044 19031 witness = signType === btemplates.types.P2WPKH
9987f0c1
IC
19032 } else if (witnessScript) {
19033 witnessScriptHash = bcrypto.sha256(witnessScript)
19034 checkP2WSHInput(input, witnessScriptHash)
19035
19036 expanded = expandOutput(witnessScript, undefined, kpPubKey)
19037 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
19038
cf6c2044
IC
19039 prevOutType = btemplates.types.P2WSH
19040 prevOutScript = btemplates.witnessScriptHash.output.encode(witnessScriptHash)
9987f0c1
IC
19041 witness = p2wsh = true
19042 signType = witnessType = expanded.scriptType
19043 signScript = witnessScript
19044 } else if (input.prevOutType) {
19045 // embedded scripts are not possible without a redeemScript
19046 if (input.prevOutType === scriptTypes.P2SH ||
19047 input.prevOutType === scriptTypes.P2WSH) {
19048 throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript')
19049 }
19050
19051 prevOutType = input.prevOutType
19052 prevOutScript = input.prevOutScript
19053 expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey)
19054 if (!expanded.pubKeys) return
19055
19056 witness = (input.prevOutType === scriptTypes.P2WPKH)
19057 signType = prevOutType
19058 signScript = prevOutScript
19059 } else {
cf6c2044 19060 prevOutScript = btemplates.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
9987f0c1 19061 expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
cf6c2044 19062
9987f0c1
IC
19063 prevOutType = scriptTypes.P2PKH
19064 witness = false
19065 signType = prevOutType
19066 signScript = prevOutScript
19067 }
8b095871 19068
9987f0c1 19069 if (signType === scriptTypes.P2WPKH) {
cf6c2044 19070 signScript = btemplates.pubKeyHash.output.encode(btemplates.witnessPubKeyHash.output.decode(signScript))
9987f0c1 19071 }
8b095871 19072
9987f0c1
IC
19073 if (p2sh) {
19074 input.redeemScript = redeemScript
19075 input.redeemScriptType = p2shType
19076 }
8b095871 19077
9987f0c1
IC
19078 if (p2wsh) {
19079 input.witnessScript = witnessScript
19080 input.witnessScriptType = witnessType
19081 }
8b095871 19082
9987f0c1
IC
19083 input.pubKeys = expanded.pubKeys
19084 input.signatures = expanded.signatures
19085 input.signScript = signScript
19086 input.signType = signType
19087 input.prevOutScript = prevOutScript
19088 input.prevOutType = prevOutType
19089 input.witness = witness
8b095871
IC
19090}
19091
9987f0c1
IC
19092function buildStack (type, signatures, pubKeys, allowIncomplete) {
19093 if (type === scriptTypes.P2PKH) {
cf6c2044 19094 if (signatures.length === 1 && Buffer.isBuffer(signatures[0]) && pubKeys.length === 1) return btemplates.pubKeyHash.input.encodeStack(signatures[0], pubKeys[0])
9987f0c1 19095 } else if (type === scriptTypes.P2PK) {
cf6c2044 19096 if (signatures.length === 1 && Buffer.isBuffer(signatures[0])) return btemplates.pubKey.input.encodeStack(signatures[0])
9987f0c1
IC
19097 } else if (type === scriptTypes.MULTISIG) {
19098 if (signatures.length > 0) {
19099 signatures = signatures.map(function (signature) {
19100 return signature || ops.OP_0
19101 })
19102 if (!allowIncomplete) {
19103 // remove blank signatures
19104 signatures = signatures.filter(function (x) { return x !== ops.OP_0 })
19105 }
8b095871 19106
cf6c2044 19107 return btemplates.multisig.input.encodeStack(signatures)
9987f0c1
IC
19108 }
19109 } else {
19110 throw new Error('Not yet supported')
19111 }
8b095871 19112
9987f0c1 19113 if (!allowIncomplete) throw new Error('Not enough signatures provided')
9987f0c1 19114 return []
8b095871
IC
19115}
19116
9987f0c1
IC
19117function buildInput (input, allowIncomplete) {
19118 var scriptType = input.prevOutType
19119 var sig = []
19120 var witness = []
cf6c2044
IC
19121
19122 if (supportedType(scriptType)) {
9987f0c1 19123 sig = buildStack(scriptType, input.signatures, input.pubKeys, allowIncomplete)
8b095871
IC
19124 }
19125
9987f0c1 19126 var p2sh = false
cf6c2044 19127 if (scriptType === btemplates.types.P2SH) {
9987f0c1
IC
19128 // We can remove this error later when we have a guarantee prepareInput
19129 // rejects unsignable scripts - it MUST be signable at this point.
cf6c2044 19130 if (!allowIncomplete && !supportedP2SHType(input.redeemScriptType)) {
9987f0c1
IC
19131 throw new Error('Impossible to sign this type')
19132 }
cf6c2044
IC
19133
19134 if (supportedType(input.redeemScriptType)) {
9987f0c1
IC
19135 sig = buildStack(input.redeemScriptType, input.signatures, input.pubKeys, allowIncomplete)
19136 }
cf6c2044 19137
9987f0c1 19138 // If it wasn't SIGNABLE, it's witness, defer to that
cf6c2044
IC
19139 if (input.redeemScriptType) {
19140 p2sh = true
19141 scriptType = input.redeemScriptType
19142 }
8b095871
IC
19143 }
19144
cf6c2044 19145 switch (scriptType) {
9987f0c1 19146 // P2WPKH is a special case of P2PKH
cf6c2044
IC
19147 case btemplates.types.P2WPKH:
19148 witness = buildStack(btemplates.types.P2PKH, input.signatures, input.pubKeys, allowIncomplete)
19149 break
19150
19151 case btemplates.types.P2WSH:
19152 // We can remove this check later
19153 if (!allowIncomplete && !supportedType(input.witnessScriptType)) {
19154 throw new Error('Impossible to sign this type')
19155 }
19156
19157 if (supportedType(input.witnessScriptType)) {
19158 witness = buildStack(input.witnessScriptType, input.signatures, input.pubKeys, allowIncomplete)
19159 witness.push(input.witnessScript)
19160 scriptType = input.witnessScriptType
19161 }
8b095871 19162
cf6c2044 19163 break
8b095871
IC
19164 }
19165
9987f0c1
IC
19166 // append redeemScript if necessary
19167 if (p2sh) {
19168 sig.push(input.redeemScript)
8b095871
IC
19169 }
19170
9987f0c1
IC
19171 return {
19172 type: scriptType,
19173 script: bscript.compile(sig),
19174 witness: witness
8b095871 19175 }
8b095871
IC
19176}
19177
9987f0c1
IC
19178function TransactionBuilder (network, maximumFeeRate) {
19179 this.prevTxMap = {}
19180 this.network = network || networks.bitcoin
8b095871 19181
9987f0c1
IC
19182 // WARNING: This is __NOT__ to be relied on, its just another potential safety mechanism (safety in-depth)
19183 this.maximumFeeRate = maximumFeeRate || 1000
8b095871 19184
9987f0c1
IC
19185 this.inputs = []
19186 this.tx = new Transaction()
8b095871
IC
19187}
19188
9987f0c1
IC
19189TransactionBuilder.prototype.setLockTime = function (locktime) {
19190 typeforce(types.UInt32, locktime)
8b095871 19191
9987f0c1
IC
19192 // if any signatures exist, throw
19193 if (this.inputs.some(function (input) {
19194 if (!input.signatures) return false
19195
19196 return input.signatures.some(function (s) { return s })
19197 })) {
19198 throw new Error('No, this would invalidate signatures')
19199 }
19200
19201 this.tx.locktime = locktime
8b095871
IC
19202}
19203
9987f0c1
IC
19204TransactionBuilder.prototype.setVersion = function (version) {
19205 typeforce(types.UInt32, version)
8b095871 19206
9987f0c1
IC
19207 // XXX: this might eventually become more complex depending on what the versions represent
19208 this.tx.version = version
19209}
8b095871 19210
9987f0c1
IC
19211TransactionBuilder.fromTransaction = function (transaction, network) {
19212 var txb = new TransactionBuilder(network)
8b095871 19213
9987f0c1
IC
19214 // Copy transaction fields
19215 txb.setVersion(transaction.version)
19216 txb.setLockTime(transaction.locktime)
8b095871 19217
9987f0c1
IC
19218 // Copy outputs (done first to avoid signature invalidation)
19219 transaction.outs.forEach(function (txOut) {
19220 txb.addOutput(txOut.script, txOut.value)
19221 })
8b095871 19222
9987f0c1
IC
19223 // Copy inputs
19224 transaction.ins.forEach(function (txIn) {
19225 txb.__addInputUnsafe(txIn.hash, txIn.index, {
19226 sequence: txIn.sequence,
19227 script: txIn.script,
19228 witness: txIn.witness
19229 })
8b095871
IC
19230 })
19231
9987f0c1
IC
19232 // fix some things not possible through the public API
19233 txb.inputs.forEach(function (input, i) {
19234 fixMultisigOrder(input, transaction, i)
19235 })
8b095871 19236
9987f0c1 19237 return txb
8b095871
IC
19238}
19239
9987f0c1
IC
19240TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) {
19241 if (!this.__canModifyInputs()) {
19242 throw new Error('No, this would invalidate signatures')
19243 }
8b095871 19244
9987f0c1 19245 var value
8b095871 19246
9987f0c1
IC
19247 // is it a hex string?
19248 if (typeof txHash === 'string') {
19249 // transaction hashs's are displayed in reverse order, un-reverse it
19250 txHash = Buffer.from(txHash, 'hex').reverse()
8b095871 19251
9987f0c1
IC
19252 // is it a Transaction object?
19253 } else if (txHash instanceof Transaction) {
19254 var txOut = txHash.outs[vout]
19255 prevOutScript = txOut.script
19256 value = txOut.value
8b095871 19257
9987f0c1
IC
19258 txHash = txHash.getHash()
19259 }
8b095871 19260
9987f0c1
IC
19261 return this.__addInputUnsafe(txHash, vout, {
19262 sequence: sequence,
19263 prevOutScript: prevOutScript,
19264 value: value
19265 })
19266}
8b095871 19267
9987f0c1
IC
19268TransactionBuilder.prototype.__addInputUnsafe = function (txHash, vout, options) {
19269 if (Transaction.isCoinbaseHash(txHash)) {
19270 throw new Error('coinbase inputs not supported')
19271 }
8b095871 19272
9987f0c1
IC
19273 var prevTxOut = txHash.toString('hex') + ':' + vout
19274 if (this.prevTxMap[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut)
8b095871 19275
9987f0c1 19276 var input = {}
8b095871 19277
9987f0c1
IC
19278 // derive what we can from the scriptSig
19279 if (options.script !== undefined) {
19280 input = expandInput(options.script, options.witness || [])
8b095871
IC
19281 }
19282
9987f0c1
IC
19283 // if an input value was given, retain it
19284 if (options.value !== undefined) {
19285 input.value = options.value
8b095871 19286 }
8b095871 19287
9987f0c1
IC
19288 // derive what we can from the previous transactions output script
19289 if (!input.prevOutScript && options.prevOutScript) {
19290 var prevOutType
8b095871 19291
9987f0c1
IC
19292 if (!input.pubKeys && !input.signatures) {
19293 var expanded = expandOutput(options.prevOutScript)
8b095871 19294
9987f0c1
IC
19295 if (expanded.pubKeys) {
19296 input.pubKeys = expanded.pubKeys
19297 input.signatures = expanded.signatures
19298 }
8b095871 19299
9987f0c1
IC
19300 prevOutType = expanded.scriptType
19301 }
8b095871 19302
9987f0c1 19303 input.prevOutScript = options.prevOutScript
cf6c2044 19304 input.prevOutType = prevOutType || btemplates.classifyOutput(options.prevOutScript)
9987f0c1 19305 }
8b095871 19306
9987f0c1
IC
19307 var vin = this.tx.addInput(txHash, vout, options.sequence, options.scriptSig)
19308 this.inputs[vin] = input
19309 this.prevTxMap[prevTxOut] = vin
9987f0c1
IC
19310 return vin
19311}
8b095871 19312
9987f0c1
IC
19313TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
19314 if (!this.__canModifyOutputs()) {
19315 throw new Error('No, this would invalidate signatures')
8b095871
IC
19316 }
19317
9987f0c1
IC
19318 // Attempt to get a script if it's a base58 address string
19319 if (typeof scriptPubKey === 'string') {
19320 scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network)
8b095871 19321 }
8b095871 19322
9987f0c1
IC
19323 return this.tx.addOutput(scriptPubKey, value)
19324}
8b095871 19325
9987f0c1
IC
19326TransactionBuilder.prototype.build = function () {
19327 return this.__build(false)
19328}
19329TransactionBuilder.prototype.buildIncomplete = function () {
19330 return this.__build(true)
19331}
8b095871 19332
9987f0c1
IC
19333TransactionBuilder.prototype.__build = function (allowIncomplete) {
19334 if (!allowIncomplete) {
19335 if (!this.tx.ins.length) throw new Error('Transaction has no inputs')
19336 if (!this.tx.outs.length) throw new Error('Transaction has no outputs')
19337 }
8b095871 19338
9987f0c1
IC
19339 var tx = this.tx.clone()
19340 // Create script signatures from inputs
19341 this.inputs.forEach(function (input, i) {
19342 var scriptType = input.witnessScriptType || input.redeemScriptType || input.prevOutType
19343 if (!scriptType && !allowIncomplete) throw new Error('Transaction is not complete')
19344 var result = buildInput(input, allowIncomplete)
8b095871 19345
9987f0c1
IC
19346 // skip if no result
19347 if (!allowIncomplete) {
cf6c2044 19348 if (!supportedType(result.type) && result.type !== btemplates.types.P2WPKH) {
9987f0c1
IC
19349 throw new Error(result.type + ' not supported')
19350 }
19351 }
8b095871 19352
9987f0c1
IC
19353 tx.setInputScript(i, result.script)
19354 tx.setWitness(i, result.witness)
19355 })
8b095871 19356
9987f0c1
IC
19357 if (!allowIncomplete) {
19358 // do not rely on this, its merely a last resort
cf6c2044 19359 if (this.__overMaximumFees(tx.virtualSize())) {
9987f0c1
IC
19360 throw new Error('Transaction has absurd fees')
19361 }
19362 }
8b095871 19363
9987f0c1 19364 return tx
8b095871
IC
19365}
19366
9987f0c1
IC
19367function canSign (input) {
19368 return input.prevOutScript !== undefined &&
19369 input.signScript !== undefined &&
19370 input.pubKeys !== undefined &&
19371 input.signatures !== undefined &&
19372 input.signatures.length === input.pubKeys.length &&
19373 input.pubKeys.length > 0 &&
cf6c2044
IC
19374 (
19375 input.witness === false ||
19376 (input.witness === true && input.value !== undefined)
19377 )
8b095871
IC
19378}
19379
9987f0c1 19380TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashType, witnessValue, witnessScript) {
cf6c2044
IC
19381 // TODO: remove keyPair.network matching in 4.0.0
19382 if (keyPair.network && keyPair.network !== this.network) throw new TypeError('Inconsistent network')
9987f0c1
IC
19383 if (!this.inputs[vin]) throw new Error('No input at index: ' + vin)
19384 hashType = hashType || Transaction.SIGHASH_ALL
8b095871 19385
9987f0c1 19386 var input = this.inputs[vin]
8b095871 19387
9987f0c1
IC
19388 // if redeemScript was previously provided, enforce consistency
19389 if (input.redeemScript !== undefined &&
19390 redeemScript &&
19391 !input.redeemScript.equals(redeemScript)) {
19392 throw new Error('Inconsistent redeemScript')
19393 }
8b095871 19394
cf6c2044 19395 var kpPubKey = keyPair.publicKey || keyPair.getPublicKeyBuffer()
9987f0c1 19396 if (!canSign(input)) {
cf6c2044
IC
19397 if (witnessValue !== undefined) {
19398 if (input.value !== undefined && input.value !== witnessValue) throw new Error('Input didn\'t match witnessValue')
19399 typeforce(types.Satoshi, witnessValue)
19400 input.value = witnessValue
19401 }
19402
19403 if (!canSign(input)) prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
9987f0c1
IC
19404 if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
19405 }
8b095871 19406
9987f0c1
IC
19407 // ready to sign
19408 var signatureHash
19409 if (input.witness) {
cf6c2044 19410 signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, input.value, hashType)
8b095871 19411 } else {
9987f0c1 19412 signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
8b095871 19413 }
cf6c2044 19414
9987f0c1
IC
19415 // enforce in order signing of public keys
19416 var signed = input.pubKeys.some(function (pubKey, i) {
19417 if (!kpPubKey.equals(pubKey)) return false
19418 if (input.signatures[i]) throw new Error('Signature already exists')
cf6c2044
IC
19419 if (kpPubKey.length !== 33 &&
19420 input.signType === scriptTypes.P2WPKH) throw new Error('BIP143 rejects uncompressed public keys in P2WPKH or P2WSH')
8b095871 19421
cf6c2044
IC
19422 var signature = keyPair.sign(signatureHash)
19423 if (Buffer.isBuffer(signature)) signature = ECSignature.fromRSBuffer(signature)
19424
19425 input.signatures[i] = signature.toScriptSignature(hashType)
9987f0c1
IC
19426 return true
19427 })
8b095871 19428
9987f0c1 19429 if (!signed) throw new Error('Key pair cannot sign for this input')
8b095871
IC
19430}
19431
9987f0c1
IC
19432function signatureHashType (buffer) {
19433 return buffer.readUInt8(buffer.length - 1)
8b095871
IC
19434}
19435
9987f0c1
IC
19436TransactionBuilder.prototype.__canModifyInputs = function () {
19437 return this.inputs.every(function (input) {
19438 // any signatures?
19439 if (input.signatures === undefined) return true
8b095871 19440
9987f0c1
IC
19441 return input.signatures.every(function (signature) {
19442 if (!signature) return true
19443 var hashType = signatureHashType(signature)
8b095871 19444
9987f0c1
IC
19445 // if SIGHASH_ANYONECANPAY is set, signatures would not
19446 // be invalidated by more inputs
19447 return hashType & Transaction.SIGHASH_ANYONECANPAY
19448 })
19449 })
8b095871
IC
19450}
19451
9987f0c1
IC
19452TransactionBuilder.prototype.__canModifyOutputs = function () {
19453 var nInputs = this.tx.ins.length
19454 var nOutputs = this.tx.outs.length
8b095871 19455
9987f0c1
IC
19456 return this.inputs.every(function (input) {
19457 if (input.signatures === undefined) return true
8b095871 19458
9987f0c1
IC
19459 return input.signatures.every(function (signature) {
19460 if (!signature) return true
19461 var hashType = signatureHashType(signature)
8b095871 19462
9987f0c1
IC
19463 var hashTypeMod = hashType & 0x1f
19464 if (hashTypeMod === Transaction.SIGHASH_NONE) return true
19465 if (hashTypeMod === Transaction.SIGHASH_SINGLE) {
19466 // if SIGHASH_SINGLE is set, and nInputs > nOutputs
19467 // some signatures would be invalidated by the addition
19468 // of more outputs
19469 return nInputs <= nOutputs
19470 }
19471 })
19472 })
8b095871
IC
19473}
19474
9987f0c1
IC
19475TransactionBuilder.prototype.__overMaximumFees = function (bytes) {
19476 // not all inputs will have .value defined
19477 var incoming = this.inputs.reduce(function (a, x) { return a + (x.value >>> 0) }, 0)
8b095871 19478
9987f0c1
IC
19479 // but all outputs do, and if we have any input value
19480 // we can immediately determine if the outputs are too small
19481 var outgoing = this.tx.outs.reduce(function (a, x) { return a + x.value }, 0)
19482 var fee = incoming - outgoing
19483 var feeRate = fee / bytes
8b095871 19484
9987f0c1 19485 return feeRate > this.maximumFeeRate
8b095871
IC
19486}
19487
9987f0c1 19488module.exports = TransactionBuilder
8b095871 19489
cf6c2044 19490},{"./address":44,"./crypto":47,"./ecpair":49,"./ecsignature":50,"./networks":53,"./script":54,"./templates":56,"./transaction":78,"./types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],80:[function(require,module,exports){
9987f0c1 19491var typeforce = require('typeforce')
8b095871 19492
9987f0c1
IC
19493var UINT31_MAX = Math.pow(2, 31) - 1
19494function UInt31 (value) {
19495 return typeforce.UInt32(value) && value <= UINT31_MAX
19496}
8b095871 19497
9987f0c1
IC
19498function BIP32Path (value) {
19499 return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/)
19500}
19501BIP32Path.toJSON = function () { return 'BIP32 derivation path' }
8b095871 19502
9987f0c1
IC
19503var SATOSHI_MAX = 21 * 1e14
19504function Satoshi (value) {
19505 return typeforce.UInt53(value) && value <= SATOSHI_MAX
19506}
8b095871 19507
9987f0c1
IC
19508// external dependent types
19509var BigInt = typeforce.quacksLike('BigInteger')
19510var ECPoint = typeforce.quacksLike('Point')
8b095871 19511
9987f0c1
IC
19512// exposed, external API
19513var ECSignature = typeforce.compile({ r: BigInt, s: BigInt })
19514var Network = typeforce.compile({
19515 messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String),
19516 bip32: {
19517 public: typeforce.UInt32,
19518 private: typeforce.UInt32
19519 },
19520 pubKeyHash: typeforce.UInt8,
19521 scriptHash: typeforce.UInt8,
19522 wif: typeforce.UInt8
19523})
8b095871 19524
9987f0c1
IC
19525// extend typeforce types with ours
19526var types = {
19527 BigInt: BigInt,
19528 BIP32Path: BIP32Path,
19529 Buffer256bit: typeforce.BufferN(32),
19530 ECPoint: ECPoint,
19531 ECSignature: ECSignature,
19532 Hash160bit: typeforce.BufferN(20),
19533 Hash256bit: typeforce.BufferN(32),
19534 Network: Network,
19535 Satoshi: Satoshi,
19536 UInt31: UInt31
19537}
8b095871 19538
9987f0c1
IC
19539for (var typeName in typeforce) {
19540 types[typeName] = typeforce[typeName]
19541}
8b095871 19542
9987f0c1 19543module.exports = types
8b095871 19544
cf6c2044
IC
19545},{"typeforce":139}],81:[function(require,module,exports){
19546(function (module, exports) {
19547 'use strict';
8b095871 19548
cf6c2044
IC
19549 // Utils
19550 function assert (val, msg) {
19551 if (!val) throw new Error(msg || 'Assertion failed');
9987f0c1 19552 }
8b095871 19553
cf6c2044
IC
19554 // Could use `inherits` module, but don't want to move from single file
19555 // architecture yet.
19556 function inherits (ctor, superCtor) {
19557 ctor.super_ = superCtor;
19558 var TempCtor = function () {};
19559 TempCtor.prototype = superCtor.prototype;
19560 ctor.prototype = new TempCtor();
19561 ctor.prototype.constructor = ctor;
9987f0c1 19562 }
8b095871 19563
cf6c2044 19564 // BN
8b095871 19565
cf6c2044
IC
19566 function BN (number, base, endian) {
19567 if (BN.isBN(number)) {
19568 return number;
19569 }
8b095871 19570
cf6c2044
IC
19571 this.negative = 0;
19572 this.words = null;
19573 this.length = 0;
8b095871 19574
cf6c2044
IC
19575 // Reduction context
19576 this.red = null;
8b095871 19577
cf6c2044
IC
19578 if (number !== null) {
19579 if (base === 'le' || base === 'be') {
19580 endian = base;
19581 base = 10;
19582 }
8b095871 19583
cf6c2044 19584 this._init(number || 0, base || 10, endian || 'be');
9987f0c1 19585 }
9987f0c1 19586 }
cf6c2044
IC
19587 if (typeof module === 'object') {
19588 module.exports = BN;
19589 } else {
19590 exports.BN = BN;
19591 }
19592
19593 BN.BN = BN;
19594 BN.wordSize = 26;
19595
19596 var Buffer;
9987f0c1 19597 try {
cf6c2044 19598 Buffer = require('buf' + 'fer').Buffer;
9987f0c1 19599 } catch (e) {
8b095871
IC
19600 }
19601
cf6c2044
IC
19602 BN.isBN = function isBN (num) {
19603 if (num instanceof BN) {
19604 return true;
19605 }
8b095871 19606
cf6c2044
IC
19607 return num !== null && typeof num === 'object' &&
19608 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
19609 };
8b095871 19610
cf6c2044
IC
19611 BN.max = function max (left, right) {
19612 if (left.cmp(right) > 0) return left;
19613 return right;
19614 };
8b095871 19615
cf6c2044
IC
19616 BN.min = function min (left, right) {
19617 if (left.cmp(right) < 0) return left;
19618 return right;
19619 };
8b095871 19620
cf6c2044
IC
19621 BN.prototype._init = function init (number, base, endian) {
19622 if (typeof number === 'number') {
19623 return this._initNumber(number, base, endian);
19624 }
8b095871 19625
cf6c2044
IC
19626 if (typeof number === 'object') {
19627 return this._initArray(number, base, endian);
19628 }
8b095871 19629
cf6c2044
IC
19630 if (base === 'hex') {
19631 base = 16;
19632 }
19633 assert(base === (base | 0) && base >= 2 && base <= 36);
8b095871 19634
cf6c2044
IC
19635 number = number.toString().replace(/\s+/g, '');
19636 var start = 0;
19637 if (number[0] === '-') {
19638 start++;
19639 }
9987f0c1 19640
cf6c2044
IC
19641 if (base === 16) {
19642 this._parseHex(number, start);
19643 } else {
19644 this._parseBase(number, base, start);
19645 }
8b095871 19646
cf6c2044
IC
19647 if (number[0] === '-') {
19648 this.negative = 1;
19649 }
8b095871 19650
cf6c2044 19651 this.strip();
8b095871 19652
cf6c2044 19653 if (endian !== 'le') return;
8b095871 19654
cf6c2044
IC
19655 this._initArray(this.toArray(), base, endian);
19656 };
8b095871 19657
cf6c2044
IC
19658 BN.prototype._initNumber = function _initNumber (number, base, endian) {
19659 if (number < 0) {
19660 this.negative = 1;
19661 number = -number;
19662 }
19663 if (number < 0x4000000) {
19664 this.words = [ number & 0x3ffffff ];
19665 this.length = 1;
19666 } else if (number < 0x10000000000000) {
19667 this.words = [
19668 number & 0x3ffffff,
19669 (number / 0x4000000) & 0x3ffffff
19670 ];
19671 this.length = 2;
19672 } else {
19673 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
19674 this.words = [
19675 number & 0x3ffffff,
19676 (number / 0x4000000) & 0x3ffffff,
19677 1
19678 ];
19679 this.length = 3;
19680 }
8b095871 19681
cf6c2044 19682 if (endian !== 'le') return;
8b095871 19683
cf6c2044
IC
19684 // Reverse the bytes
19685 this._initArray(this.toArray(), base, endian);
19686 };
8b095871 19687
cf6c2044
IC
19688 BN.prototype._initArray = function _initArray (number, base, endian) {
19689 // Perhaps a Uint8Array
19690 assert(typeof number.length === 'number');
19691 if (number.length <= 0) {
19692 this.words = [ 0 ];
19693 this.length = 1;
19694 return this;
19695 }
8b095871 19696
cf6c2044
IC
19697 this.length = Math.ceil(number.length / 3);
19698 this.words = new Array(this.length);
19699 for (var i = 0; i < this.length; i++) {
19700 this.words[i] = 0;
19701 }
8b095871 19702
cf6c2044
IC
19703 var j, w;
19704 var off = 0;
19705 if (endian === 'be') {
19706 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
19707 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
19708 this.words[j] |= (w << off) & 0x3ffffff;
19709 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
19710 off += 24;
19711 if (off >= 26) {
19712 off -= 26;
19713 j++;
19714 }
19715 }
19716 } else if (endian === 'le') {
19717 for (i = 0, j = 0; i < number.length; i += 3) {
19718 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
19719 this.words[j] |= (w << off) & 0x3ffffff;
19720 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
19721 off += 24;
19722 if (off >= 26) {
19723 off -= 26;
19724 j++;
19725 }
19726 }
19727 }
19728 return this.strip();
19729 };
8b095871 19730
cf6c2044
IC
19731 function parseHex (str, start, end) {
19732 var r = 0;
19733 var len = Math.min(str.length, end);
19734 for (var i = start; i < len; i++) {
19735 var c = str.charCodeAt(i) - 48;
8b095871 19736
cf6c2044 19737 r <<= 4;
8b095871 19738
cf6c2044
IC
19739 // 'a' - 'f'
19740 if (c >= 49 && c <= 54) {
19741 r |= c - 49 + 0xa;
8b095871 19742
cf6c2044
IC
19743 // 'A' - 'F'
19744 } else if (c >= 17 && c <= 22) {
19745 r |= c - 17 + 0xa;
8b095871 19746
cf6c2044
IC
19747 // '0' - '9'
19748 } else {
19749 r |= c & 0xf;
19750 }
19751 }
19752 return r;
9987f0c1 19753 }
8b095871 19754
cf6c2044
IC
19755 BN.prototype._parseHex = function _parseHex (number, start) {
19756 // Create possibly bigger array to ensure that it fits the number
19757 this.length = Math.ceil((number.length - start) / 6);
19758 this.words = new Array(this.length);
19759 for (var i = 0; i < this.length; i++) {
19760 this.words[i] = 0;
19761 }
8b095871 19762
cf6c2044
IC
19763 var j, w;
19764 // Scan 24-bit chunks and add them to the number
19765 var off = 0;
19766 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
19767 w = parseHex(number, i, i + 6);
19768 this.words[j] |= (w << off) & 0x3ffffff;
19769 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
19770 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
19771 off += 24;
19772 if (off >= 26) {
19773 off -= 26;
19774 j++;
19775 }
19776 }
19777 if (i + 6 !== start) {
19778 w = parseHex(number, start, i + 6);
19779 this.words[j] |= (w << off) & 0x3ffffff;
19780 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
19781 }
19782 this.strip();
19783 };
19784
19785 function parseBase (str, start, end, mul) {
19786 var r = 0;
19787 var len = Math.min(str.length, end);
19788 for (var i = start; i < len; i++) {
19789 var c = str.charCodeAt(i) - 48;
19790
19791 r *= mul;
19792
19793 // 'a'
19794 if (c >= 49) {
19795 r += c - 49 + 0xa;
19796
19797 // 'A'
19798 } else if (c >= 17) {
19799 r += c - 17 + 0xa;
19800
19801 // '0' - '9'
19802 } else {
19803 r += c;
19804 }
19805 }
19806 return r;
19807 }
19808
19809 BN.prototype._parseBase = function _parseBase (number, base, start) {
19810 // Initialize as zero
19811 this.words = [ 0 ];
19812 this.length = 1;
19813
19814 // Find length of limb in base
19815 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
19816 limbLen++;
19817 }
19818 limbLen--;
19819 limbPow = (limbPow / base) | 0;
19820
19821 var total = number.length - start;
19822 var mod = total % limbLen;
19823 var end = Math.min(total, total - mod) + start;
19824
19825 var word = 0;
19826 for (var i = start; i < end; i += limbLen) {
19827 word = parseBase(number, i, i + limbLen, base);
19828
19829 this.imuln(limbPow);
19830 if (this.words[0] + word < 0x4000000) {
19831 this.words[0] += word;
19832 } else {
19833 this._iaddn(word);
19834 }
19835 }
19836
19837 if (mod !== 0) {
19838 var pow = 1;
19839 word = parseBase(number, i, number.length, base);
19840
19841 for (i = 0; i < mod; i++) {
19842 pow *= base;
19843 }
19844
19845 this.imuln(pow);
19846 if (this.words[0] + word < 0x4000000) {
19847 this.words[0] += word;
19848 } else {
19849 this._iaddn(word);
19850 }
19851 }
19852 };
19853
19854 BN.prototype.copy = function copy (dest) {
19855 dest.words = new Array(this.length);
19856 for (var i = 0; i < this.length; i++) {
19857 dest.words[i] = this.words[i];
19858 }
19859 dest.length = this.length;
19860 dest.negative = this.negative;
19861 dest.red = this.red;
19862 };
19863
19864 BN.prototype.clone = function clone () {
19865 var r = new BN(null);
19866 this.copy(r);
19867 return r;
19868 };
19869
19870 BN.prototype._expand = function _expand (size) {
19871 while (this.length < size) {
19872 this.words[this.length++] = 0;
19873 }
19874 return this;
19875 };
19876
19877 // Remove leading `0` from `this`
19878 BN.prototype.strip = function strip () {
19879 while (this.length > 1 && this.words[this.length - 1] === 0) {
19880 this.length--;
19881 }
19882 return this._normSign();
19883 };
19884
19885 BN.prototype._normSign = function _normSign () {
19886 // -0 = 0
19887 if (this.length === 1 && this.words[0] === 0) {
19888 this.negative = 0;
19889 }
19890 return this;
19891 };
19892
19893 BN.prototype.inspect = function inspect () {
19894 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
19895 };
19896
19897 /*
19898
19899 var zeros = [];
19900 var groupSizes = [];
19901 var groupBases = [];
19902
19903 var s = '';
19904 var i = -1;
19905 while (++i < BN.wordSize) {
19906 zeros[i] = s;
19907 s += '0';
19908 }
19909 groupSizes[0] = 0;
19910 groupSizes[1] = 0;
19911 groupBases[0] = 0;
19912 groupBases[1] = 0;
19913 var base = 2 - 1;
19914 while (++base < 36 + 1) {
19915 var groupSize = 0;
19916 var groupBase = 1;
19917 while (groupBase < (1 << BN.wordSize) / base) {
19918 groupBase *= base;
19919 groupSize += 1;
19920 }
19921 groupSizes[base] = groupSize;
19922 groupBases[base] = groupBase;
19923 }
19924
19925 */
19926
19927 var zeros = [
19928 '',
19929 '0',
19930 '00',
19931 '000',
19932 '0000',
19933 '00000',
19934 '000000',
19935 '0000000',
19936 '00000000',
19937 '000000000',
19938 '0000000000',
19939 '00000000000',
19940 '000000000000',
19941 '0000000000000',
19942 '00000000000000',
19943 '000000000000000',
19944 '0000000000000000',
19945 '00000000000000000',
19946 '000000000000000000',
19947 '0000000000000000000',
19948 '00000000000000000000',
19949 '000000000000000000000',
19950 '0000000000000000000000',
19951 '00000000000000000000000',
19952 '000000000000000000000000',
19953 '0000000000000000000000000'
19954 ];
19955
19956 var groupSizes = [
19957 0, 0,
19958 25, 16, 12, 11, 10, 9, 8,
19959 8, 7, 7, 7, 7, 6, 6,
19960 6, 6, 6, 6, 6, 5, 5,
19961 5, 5, 5, 5, 5, 5, 5,
19962 5, 5, 5, 5, 5, 5, 5
19963 ];
19964
19965 var groupBases = [
19966 0, 0,
19967 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
19968 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
19969 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
19970 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
19971 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
19972 ];
19973
19974 BN.prototype.toString = function toString (base, padding) {
19975 base = base || 10;
19976 padding = padding | 0 || 1;
19977
19978 var out;
19979 if (base === 16 || base === 'hex') {
19980 out = '';
19981 var off = 0;
19982 var carry = 0;
19983 for (var i = 0; i < this.length; i++) {
19984 var w = this.words[i];
19985 var word = (((w << off) | carry) & 0xffffff).toString(16);
19986 carry = (w >>> (24 - off)) & 0xffffff;
19987 if (carry !== 0 || i !== this.length - 1) {
19988 out = zeros[6 - word.length] + word + out;
19989 } else {
19990 out = word + out;
19991 }
19992 off += 2;
19993 if (off >= 26) {
19994 off -= 26;
19995 i--;
19996 }
19997 }
19998 if (carry !== 0) {
19999 out = carry.toString(16) + out;
20000 }
20001 while (out.length % padding !== 0) {
20002 out = '0' + out;
20003 }
20004 if (this.negative !== 0) {
20005 out = '-' + out;
20006 }
20007 return out;
20008 }
20009
20010 if (base === (base | 0) && base >= 2 && base <= 36) {
20011 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
20012 var groupSize = groupSizes[base];
20013 // var groupBase = Math.pow(base, groupSize);
20014 var groupBase = groupBases[base];
20015 out = '';
20016 var c = this.clone();
20017 c.negative = 0;
20018 while (!c.isZero()) {
20019 var r = c.modn(groupBase).toString(base);
20020 c = c.idivn(groupBase);
20021
20022 if (!c.isZero()) {
20023 out = zeros[groupSize - r.length] + r + out;
20024 } else {
20025 out = r + out;
20026 }
20027 }
20028 if (this.isZero()) {
20029 out = '0' + out;
20030 }
20031 while (out.length % padding !== 0) {
20032 out = '0' + out;
20033 }
20034 if (this.negative !== 0) {
20035 out = '-' + out;
20036 }
20037 return out;
20038 }
20039
20040 assert(false, 'Base should be between 2 and 36');
20041 };
20042
20043 BN.prototype.toNumber = function toNumber () {
20044 var ret = this.words[0];
20045 if (this.length === 2) {
20046 ret += this.words[1] * 0x4000000;
20047 } else if (this.length === 3 && this.words[2] === 0x01) {
20048 // NOTE: at this stage it is known that the top bit is set
20049 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
20050 } else if (this.length > 2) {
20051 assert(false, 'Number can only safely store up to 53 bits');
20052 }
20053 return (this.negative !== 0) ? -ret : ret;
20054 };
20055
20056 BN.prototype.toJSON = function toJSON () {
20057 return this.toString(16);
20058 };
20059
20060 BN.prototype.toBuffer = function toBuffer (endian, length) {
20061 assert(typeof Buffer !== 'undefined');
20062 return this.toArrayLike(Buffer, endian, length);
20063 };
20064
20065 BN.prototype.toArray = function toArray (endian, length) {
20066 return this.toArrayLike(Array, endian, length);
20067 };
20068
20069 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
20070 var byteLength = this.byteLength();
20071 var reqLength = length || Math.max(1, byteLength);
20072 assert(byteLength <= reqLength, 'byte array longer than desired length');
20073 assert(reqLength > 0, 'Requested array length <= 0');
20074
20075 this.strip();
20076 var littleEndian = endian === 'le';
20077 var res = new ArrayType(reqLength);
20078
20079 var b, i;
20080 var q = this.clone();
20081 if (!littleEndian) {
20082 // Assume big-endian
20083 for (i = 0; i < reqLength - byteLength; i++) {
20084 res[i] = 0;
20085 }
20086
20087 for (i = 0; !q.isZero(); i++) {
20088 b = q.andln(0xff);
20089 q.iushrn(8);
20090
20091 res[reqLength - i - 1] = b;
20092 }
20093 } else {
20094 for (i = 0; !q.isZero(); i++) {
20095 b = q.andln(0xff);
20096 q.iushrn(8);
20097
20098 res[i] = b;
20099 }
20100
20101 for (; i < reqLength; i++) {
20102 res[i] = 0;
20103 }
20104 }
20105
20106 return res;
20107 };
20108
20109 if (Math.clz32) {
20110 BN.prototype._countBits = function _countBits (w) {
20111 return 32 - Math.clz32(w);
20112 };
20113 } else {
20114 BN.prototype._countBits = function _countBits (w) {
20115 var t = w;
20116 var r = 0;
20117 if (t >= 0x1000) {
20118 r += 13;
20119 t >>>= 13;
20120 }
20121 if (t >= 0x40) {
20122 r += 7;
20123 t >>>= 7;
20124 }
20125 if (t >= 0x8) {
20126 r += 4;
20127 t >>>= 4;
20128 }
20129 if (t >= 0x02) {
20130 r += 2;
20131 t >>>= 2;
20132 }
20133 return r + t;
20134 };
20135 }
20136
20137 BN.prototype._zeroBits = function _zeroBits (w) {
20138 // Short-cut
20139 if (w === 0) return 26;
20140
20141 var t = w;
20142 var r = 0;
20143 if ((t & 0x1fff) === 0) {
20144 r += 13;
20145 t >>>= 13;
20146 }
20147 if ((t & 0x7f) === 0) {
20148 r += 7;
20149 t >>>= 7;
20150 }
20151 if ((t & 0xf) === 0) {
20152 r += 4;
20153 t >>>= 4;
20154 }
20155 if ((t & 0x3) === 0) {
20156 r += 2;
20157 t >>>= 2;
20158 }
20159 if ((t & 0x1) === 0) {
20160 r++;
20161 }
20162 return r;
20163 };
20164
20165 // Return number of used bits in a BN
20166 BN.prototype.bitLength = function bitLength () {
20167 var w = this.words[this.length - 1];
20168 var hi = this._countBits(w);
20169 return (this.length - 1) * 26 + hi;
20170 };
20171
20172 function toBitArray (num) {
20173 var w = new Array(num.bitLength());
20174
20175 for (var bit = 0; bit < w.length; bit++) {
20176 var off = (bit / 26) | 0;
20177 var wbit = bit % 26;
20178
20179 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
20180 }
20181
20182 return w;
20183 }
20184
20185 // Number of trailing zero bits
20186 BN.prototype.zeroBits = function zeroBits () {
20187 if (this.isZero()) return 0;
20188
20189 var r = 0;
20190 for (var i = 0; i < this.length; i++) {
20191 var b = this._zeroBits(this.words[i]);
20192 r += b;
20193 if (b !== 26) break;
20194 }
20195 return r;
20196 };
20197
20198 BN.prototype.byteLength = function byteLength () {
20199 return Math.ceil(this.bitLength() / 8);
20200 };
20201
20202 BN.prototype.toTwos = function toTwos (width) {
20203 if (this.negative !== 0) {
20204 return this.abs().inotn(width).iaddn(1);
20205 }
20206 return this.clone();
20207 };
20208
20209 BN.prototype.fromTwos = function fromTwos (width) {
20210 if (this.testn(width - 1)) {
20211 return this.notn(width).iaddn(1).ineg();
20212 }
20213 return this.clone();
20214 };
20215
20216 BN.prototype.isNeg = function isNeg () {
20217 return this.negative !== 0;
20218 };
20219
20220 // Return negative clone of `this`
20221 BN.prototype.neg = function neg () {
20222 return this.clone().ineg();
20223 };
20224
20225 BN.prototype.ineg = function ineg () {
20226 if (!this.isZero()) {
20227 this.negative ^= 1;
20228 }
20229
20230 return this;
20231 };
20232
20233 // Or `num` with `this` in-place
20234 BN.prototype.iuor = function iuor (num) {
20235 while (this.length < num.length) {
20236 this.words[this.length++] = 0;
20237 }
20238
20239 for (var i = 0; i < num.length; i++) {
20240 this.words[i] = this.words[i] | num.words[i];
20241 }
20242
20243 return this.strip();
20244 };
20245
20246 BN.prototype.ior = function ior (num) {
20247 assert((this.negative | num.negative) === 0);
20248 return this.iuor(num);
20249 };
20250
20251 // Or `num` with `this`
20252 BN.prototype.or = function or (num) {
20253 if (this.length > num.length) return this.clone().ior(num);
20254 return num.clone().ior(this);
20255 };
20256
20257 BN.prototype.uor = function uor (num) {
20258 if (this.length > num.length) return this.clone().iuor(num);
20259 return num.clone().iuor(this);
20260 };
20261
20262 // And `num` with `this` in-place
20263 BN.prototype.iuand = function iuand (num) {
20264 // b = min-length(num, this)
20265 var b;
20266 if (this.length > num.length) {
20267 b = num;
20268 } else {
20269 b = this;
20270 }
20271
20272 for (var i = 0; i < b.length; i++) {
20273 this.words[i] = this.words[i] & num.words[i];
20274 }
20275
20276 this.length = b.length;
20277
20278 return this.strip();
20279 };
20280
20281 BN.prototype.iand = function iand (num) {
20282 assert((this.negative | num.negative) === 0);
20283 return this.iuand(num);
20284 };
20285
20286 // And `num` with `this`
20287 BN.prototype.and = function and (num) {
20288 if (this.length > num.length) return this.clone().iand(num);
20289 return num.clone().iand(this);
20290 };
20291
20292 BN.prototype.uand = function uand (num) {
20293 if (this.length > num.length) return this.clone().iuand(num);
20294 return num.clone().iuand(this);
20295 };
20296
20297 // Xor `num` with `this` in-place
20298 BN.prototype.iuxor = function iuxor (num) {
20299 // a.length > b.length
20300 var a;
20301 var b;
20302 if (this.length > num.length) {
20303 a = this;
20304 b = num;
20305 } else {
20306 a = num;
20307 b = this;
20308 }
20309
20310 for (var i = 0; i < b.length; i++) {
20311 this.words[i] = a.words[i] ^ b.words[i];
20312 }
20313
20314 if (this !== a) {
20315 for (; i < a.length; i++) {
20316 this.words[i] = a.words[i];
20317 }
20318 }
20319
20320 this.length = a.length;
20321
20322 return this.strip();
20323 };
20324
20325 BN.prototype.ixor = function ixor (num) {
20326 assert((this.negative | num.negative) === 0);
20327 return this.iuxor(num);
20328 };
20329
20330 // Xor `num` with `this`
20331 BN.prototype.xor = function xor (num) {
20332 if (this.length > num.length) return this.clone().ixor(num);
20333 return num.clone().ixor(this);
20334 };
20335
20336 BN.prototype.uxor = function uxor (num) {
20337 if (this.length > num.length) return this.clone().iuxor(num);
20338 return num.clone().iuxor(this);
20339 };
20340
20341 // Not ``this`` with ``width`` bitwidth
20342 BN.prototype.inotn = function inotn (width) {
20343 assert(typeof width === 'number' && width >= 0);
20344
20345 var bytesNeeded = Math.ceil(width / 26) | 0;
20346 var bitsLeft = width % 26;
20347
20348 // Extend the buffer with leading zeroes
20349 this._expand(bytesNeeded);
20350
20351 if (bitsLeft > 0) {
20352 bytesNeeded--;
20353 }
20354
20355 // Handle complete words
20356 for (var i = 0; i < bytesNeeded; i++) {
20357 this.words[i] = ~this.words[i] & 0x3ffffff;
20358 }
20359
20360 // Handle the residue
20361 if (bitsLeft > 0) {
20362 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
20363 }
20364
20365 // And remove leading zeroes
20366 return this.strip();
20367 };
20368
20369 BN.prototype.notn = function notn (width) {
20370 return this.clone().inotn(width);
20371 };
20372
20373 // Set `bit` of `this`
20374 BN.prototype.setn = function setn (bit, val) {
20375 assert(typeof bit === 'number' && bit >= 0);
20376
20377 var off = (bit / 26) | 0;
20378 var wbit = bit % 26;
20379
20380 this._expand(off + 1);
20381
20382 if (val) {
20383 this.words[off] = this.words[off] | (1 << wbit);
20384 } else {
20385 this.words[off] = this.words[off] & ~(1 << wbit);
20386 }
20387
20388 return this.strip();
20389 };
20390
20391 // Add `num` to `this` in-place
20392 BN.prototype.iadd = function iadd (num) {
20393 var r;
20394
20395 // negative + positive
20396 if (this.negative !== 0 && num.negative === 0) {
20397 this.negative = 0;
20398 r = this.isub(num);
20399 this.negative ^= 1;
20400 return this._normSign();
20401
20402 // positive + negative
20403 } else if (this.negative === 0 && num.negative !== 0) {
20404 num.negative = 0;
20405 r = this.isub(num);
20406 num.negative = 1;
20407 return r._normSign();
20408 }
20409
20410 // a.length > b.length
20411 var a, b;
20412 if (this.length > num.length) {
20413 a = this;
20414 b = num;
20415 } else {
20416 a = num;
20417 b = this;
20418 }
20419
20420 var carry = 0;
20421 for (var i = 0; i < b.length; i++) {
20422 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
20423 this.words[i] = r & 0x3ffffff;
20424 carry = r >>> 26;
20425 }
20426 for (; carry !== 0 && i < a.length; i++) {
20427 r = (a.words[i] | 0) + carry;
20428 this.words[i] = r & 0x3ffffff;
20429 carry = r >>> 26;
20430 }
20431
20432 this.length = a.length;
20433 if (carry !== 0) {
20434 this.words[this.length] = carry;
20435 this.length++;
20436 // Copy the rest of the words
20437 } else if (a !== this) {
20438 for (; i < a.length; i++) {
20439 this.words[i] = a.words[i];
20440 }
20441 }
20442
20443 return this;
20444 };
20445
20446 // Add `num` to `this`
20447 BN.prototype.add = function add (num) {
20448 var res;
20449 if (num.negative !== 0 && this.negative === 0) {
20450 num.negative = 0;
20451 res = this.sub(num);
20452 num.negative ^= 1;
20453 return res;
20454 } else if (num.negative === 0 && this.negative !== 0) {
20455 this.negative = 0;
20456 res = num.sub(this);
20457 this.negative = 1;
20458 return res;
20459 }
20460
20461 if (this.length > num.length) return this.clone().iadd(num);
20462
20463 return num.clone().iadd(this);
20464 };
20465
20466 // Subtract `num` from `this` in-place
20467 BN.prototype.isub = function isub (num) {
20468 // this - (-num) = this + num
20469 if (num.negative !== 0) {
20470 num.negative = 0;
20471 var r = this.iadd(num);
20472 num.negative = 1;
20473 return r._normSign();
20474
20475 // -this - num = -(this + num)
20476 } else if (this.negative !== 0) {
20477 this.negative = 0;
20478 this.iadd(num);
20479 this.negative = 1;
20480 return this._normSign();
20481 }
20482
20483 // At this point both numbers are positive
20484 var cmp = this.cmp(num);
20485
20486 // Optimization - zeroify
20487 if (cmp === 0) {
20488 this.negative = 0;
20489 this.length = 1;
20490 this.words[0] = 0;
20491 return this;
20492 }
20493
20494 // a > b
20495 var a, b;
20496 if (cmp > 0) {
20497 a = this;
20498 b = num;
20499 } else {
20500 a = num;
20501 b = this;
20502 }
20503
20504 var carry = 0;
20505 for (var i = 0; i < b.length; i++) {
20506 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
20507 carry = r >> 26;
20508 this.words[i] = r & 0x3ffffff;
20509 }
20510 for (; carry !== 0 && i < a.length; i++) {
20511 r = (a.words[i] | 0) + carry;
20512 carry = r >> 26;
20513 this.words[i] = r & 0x3ffffff;
20514 }
20515
20516 // Copy rest of the words
20517 if (carry === 0 && i < a.length && a !== this) {
20518 for (; i < a.length; i++) {
20519 this.words[i] = a.words[i];
20520 }
20521 }
20522
20523 this.length = Math.max(this.length, i);
20524
20525 if (a !== this) {
20526 this.negative = 1;
20527 }
20528
20529 return this.strip();
20530 };
20531
20532 // Subtract `num` from `this`
20533 BN.prototype.sub = function sub (num) {
20534 return this.clone().isub(num);
20535 };
20536
20537 function smallMulTo (self, num, out) {
20538 out.negative = num.negative ^ self.negative;
20539 var len = (self.length + num.length) | 0;
20540 out.length = len;
20541 len = (len - 1) | 0;
20542
20543 // Peel one iteration (compiler can't do it, because of code complexity)
20544 var a = self.words[0] | 0;
20545 var b = num.words[0] | 0;
20546 var r = a * b;
20547
20548 var lo = r & 0x3ffffff;
20549 var carry = (r / 0x4000000) | 0;
20550 out.words[0] = lo;
20551
20552 for (var k = 1; k < len; k++) {
20553 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
20554 // note that ncarry could be >= 0x3ffffff
20555 var ncarry = carry >>> 26;
20556 var rword = carry & 0x3ffffff;
20557 var maxJ = Math.min(k, num.length - 1);
20558 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
20559 var i = (k - j) | 0;
20560 a = self.words[i] | 0;
20561 b = num.words[j] | 0;
20562 r = a * b + rword;
20563 ncarry += (r / 0x4000000) | 0;
20564 rword = r & 0x3ffffff;
20565 }
20566 out.words[k] = rword | 0;
20567 carry = ncarry | 0;
20568 }
20569 if (carry !== 0) {
20570 out.words[k] = carry | 0;
20571 } else {
20572 out.length--;
20573 }
20574
20575 return out.strip();
20576 }
20577
20578 // TODO(indutny): it may be reasonable to omit it for users who don't need
20579 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
20580 // multiplication (like elliptic secp256k1).
20581 var comb10MulTo = function comb10MulTo (self, num, out) {
20582 var a = self.words;
20583 var b = num.words;
20584 var o = out.words;
20585 var c = 0;
20586 var lo;
20587 var mid;
20588 var hi;
20589 var a0 = a[0] | 0;
20590 var al0 = a0 & 0x1fff;
20591 var ah0 = a0 >>> 13;
20592 var a1 = a[1] | 0;
20593 var al1 = a1 & 0x1fff;
20594 var ah1 = a1 >>> 13;
20595 var a2 = a[2] | 0;
20596 var al2 = a2 & 0x1fff;
20597 var ah2 = a2 >>> 13;
20598 var a3 = a[3] | 0;
20599 var al3 = a3 & 0x1fff;
20600 var ah3 = a3 >>> 13;
20601 var a4 = a[4] | 0;
20602 var al4 = a4 & 0x1fff;
20603 var ah4 = a4 >>> 13;
20604 var a5 = a[5] | 0;
20605 var al5 = a5 & 0x1fff;
20606 var ah5 = a5 >>> 13;
20607 var a6 = a[6] | 0;
20608 var al6 = a6 & 0x1fff;
20609 var ah6 = a6 >>> 13;
20610 var a7 = a[7] | 0;
20611 var al7 = a7 & 0x1fff;
20612 var ah7 = a7 >>> 13;
20613 var a8 = a[8] | 0;
20614 var al8 = a8 & 0x1fff;
20615 var ah8 = a8 >>> 13;
20616 var a9 = a[9] | 0;
20617 var al9 = a9 & 0x1fff;
20618 var ah9 = a9 >>> 13;
20619 var b0 = b[0] | 0;
20620 var bl0 = b0 & 0x1fff;
20621 var bh0 = b0 >>> 13;
20622 var b1 = b[1] | 0;
20623 var bl1 = b1 & 0x1fff;
20624 var bh1 = b1 >>> 13;
20625 var b2 = b[2] | 0;
20626 var bl2 = b2 & 0x1fff;
20627 var bh2 = b2 >>> 13;
20628 var b3 = b[3] | 0;
20629 var bl3 = b3 & 0x1fff;
20630 var bh3 = b3 >>> 13;
20631 var b4 = b[4] | 0;
20632 var bl4 = b4 & 0x1fff;
20633 var bh4 = b4 >>> 13;
20634 var b5 = b[5] | 0;
20635 var bl5 = b5 & 0x1fff;
20636 var bh5 = b5 >>> 13;
20637 var b6 = b[6] | 0;
20638 var bl6 = b6 & 0x1fff;
20639 var bh6 = b6 >>> 13;
20640 var b7 = b[7] | 0;
20641 var bl7 = b7 & 0x1fff;
20642 var bh7 = b7 >>> 13;
20643 var b8 = b[8] | 0;
20644 var bl8 = b8 & 0x1fff;
20645 var bh8 = b8 >>> 13;
20646 var b9 = b[9] | 0;
20647 var bl9 = b9 & 0x1fff;
20648 var bh9 = b9 >>> 13;
20649
20650 out.negative = self.negative ^ num.negative;
20651 out.length = 19;
20652 /* k = 0 */
20653 lo = Math.imul(al0, bl0);
20654 mid = Math.imul(al0, bh0);
20655 mid = (mid + Math.imul(ah0, bl0)) | 0;
20656 hi = Math.imul(ah0, bh0);
20657 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
20658 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
20659 w0 &= 0x3ffffff;
20660 /* k = 1 */
20661 lo = Math.imul(al1, bl0);
20662 mid = Math.imul(al1, bh0);
20663 mid = (mid + Math.imul(ah1, bl0)) | 0;
20664 hi = Math.imul(ah1, bh0);
20665 lo = (lo + Math.imul(al0, bl1)) | 0;
20666 mid = (mid + Math.imul(al0, bh1)) | 0;
20667 mid = (mid + Math.imul(ah0, bl1)) | 0;
20668 hi = (hi + Math.imul(ah0, bh1)) | 0;
20669 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
20670 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
20671 w1 &= 0x3ffffff;
20672 /* k = 2 */
20673 lo = Math.imul(al2, bl0);
20674 mid = Math.imul(al2, bh0);
20675 mid = (mid + Math.imul(ah2, bl0)) | 0;
20676 hi = Math.imul(ah2, bh0);
20677 lo = (lo + Math.imul(al1, bl1)) | 0;
20678 mid = (mid + Math.imul(al1, bh1)) | 0;
20679 mid = (mid + Math.imul(ah1, bl1)) | 0;
20680 hi = (hi + Math.imul(ah1, bh1)) | 0;
20681 lo = (lo + Math.imul(al0, bl2)) | 0;
20682 mid = (mid + Math.imul(al0, bh2)) | 0;
20683 mid = (mid + Math.imul(ah0, bl2)) | 0;
20684 hi = (hi + Math.imul(ah0, bh2)) | 0;
20685 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
20686 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
20687 w2 &= 0x3ffffff;
20688 /* k = 3 */
20689 lo = Math.imul(al3, bl0);
20690 mid = Math.imul(al3, bh0);
20691 mid = (mid + Math.imul(ah3, bl0)) | 0;
20692 hi = Math.imul(ah3, bh0);
20693 lo = (lo + Math.imul(al2, bl1)) | 0;
20694 mid = (mid + Math.imul(al2, bh1)) | 0;
20695 mid = (mid + Math.imul(ah2, bl1)) | 0;
20696 hi = (hi + Math.imul(ah2, bh1)) | 0;
20697 lo = (lo + Math.imul(al1, bl2)) | 0;
20698 mid = (mid + Math.imul(al1, bh2)) | 0;
20699 mid = (mid + Math.imul(ah1, bl2)) | 0;
20700 hi = (hi + Math.imul(ah1, bh2)) | 0;
20701 lo = (lo + Math.imul(al0, bl3)) | 0;
20702 mid = (mid + Math.imul(al0, bh3)) | 0;
20703 mid = (mid + Math.imul(ah0, bl3)) | 0;
20704 hi = (hi + Math.imul(ah0, bh3)) | 0;
20705 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
20706 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
20707 w3 &= 0x3ffffff;
20708 /* k = 4 */
20709 lo = Math.imul(al4, bl0);
20710 mid = Math.imul(al4, bh0);
20711 mid = (mid + Math.imul(ah4, bl0)) | 0;
20712 hi = Math.imul(ah4, bh0);
20713 lo = (lo + Math.imul(al3, bl1)) | 0;
20714 mid = (mid + Math.imul(al3, bh1)) | 0;
20715 mid = (mid + Math.imul(ah3, bl1)) | 0;
20716 hi = (hi + Math.imul(ah3, bh1)) | 0;
20717 lo = (lo + Math.imul(al2, bl2)) | 0;
20718 mid = (mid + Math.imul(al2, bh2)) | 0;
20719 mid = (mid + Math.imul(ah2, bl2)) | 0;
20720 hi = (hi + Math.imul(ah2, bh2)) | 0;
20721 lo = (lo + Math.imul(al1, bl3)) | 0;
20722 mid = (mid + Math.imul(al1, bh3)) | 0;
20723 mid = (mid + Math.imul(ah1, bl3)) | 0;
20724 hi = (hi + Math.imul(ah1, bh3)) | 0;
20725 lo = (lo + Math.imul(al0, bl4)) | 0;
20726 mid = (mid + Math.imul(al0, bh4)) | 0;
20727 mid = (mid + Math.imul(ah0, bl4)) | 0;
20728 hi = (hi + Math.imul(ah0, bh4)) | 0;
20729 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
20730 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
20731 w4 &= 0x3ffffff;
20732 /* k = 5 */
20733 lo = Math.imul(al5, bl0);
20734 mid = Math.imul(al5, bh0);
20735 mid = (mid + Math.imul(ah5, bl0)) | 0;
20736 hi = Math.imul(ah5, bh0);
20737 lo = (lo + Math.imul(al4, bl1)) | 0;
20738 mid = (mid + Math.imul(al4, bh1)) | 0;
20739 mid = (mid + Math.imul(ah4, bl1)) | 0;
20740 hi = (hi + Math.imul(ah4, bh1)) | 0;
20741 lo = (lo + Math.imul(al3, bl2)) | 0;
20742 mid = (mid + Math.imul(al3, bh2)) | 0;
20743 mid = (mid + Math.imul(ah3, bl2)) | 0;
20744 hi = (hi + Math.imul(ah3, bh2)) | 0;
20745 lo = (lo + Math.imul(al2, bl3)) | 0;
20746 mid = (mid + Math.imul(al2, bh3)) | 0;
20747 mid = (mid + Math.imul(ah2, bl3)) | 0;
20748 hi = (hi + Math.imul(ah2, bh3)) | 0;
20749 lo = (lo + Math.imul(al1, bl4)) | 0;
20750 mid = (mid + Math.imul(al1, bh4)) | 0;
20751 mid = (mid + Math.imul(ah1, bl4)) | 0;
20752 hi = (hi + Math.imul(ah1, bh4)) | 0;
20753 lo = (lo + Math.imul(al0, bl5)) | 0;
20754 mid = (mid + Math.imul(al0, bh5)) | 0;
20755 mid = (mid + Math.imul(ah0, bl5)) | 0;
20756 hi = (hi + Math.imul(ah0, bh5)) | 0;
20757 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
20758 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
20759 w5 &= 0x3ffffff;
20760 /* k = 6 */
20761 lo = Math.imul(al6, bl0);
20762 mid = Math.imul(al6, bh0);
20763 mid = (mid + Math.imul(ah6, bl0)) | 0;
20764 hi = Math.imul(ah6, bh0);
20765 lo = (lo + Math.imul(al5, bl1)) | 0;
20766 mid = (mid + Math.imul(al5, bh1)) | 0;
20767 mid = (mid + Math.imul(ah5, bl1)) | 0;
20768 hi = (hi + Math.imul(ah5, bh1)) | 0;
20769 lo = (lo + Math.imul(al4, bl2)) | 0;
20770 mid = (mid + Math.imul(al4, bh2)) | 0;
20771 mid = (mid + Math.imul(ah4, bl2)) | 0;
20772 hi = (hi + Math.imul(ah4, bh2)) | 0;
20773 lo = (lo + Math.imul(al3, bl3)) | 0;
20774 mid = (mid + Math.imul(al3, bh3)) | 0;
20775 mid = (mid + Math.imul(ah3, bl3)) | 0;
20776 hi = (hi + Math.imul(ah3, bh3)) | 0;
20777 lo = (lo + Math.imul(al2, bl4)) | 0;
20778 mid = (mid + Math.imul(al2, bh4)) | 0;
20779 mid = (mid + Math.imul(ah2, bl4)) | 0;
20780 hi = (hi + Math.imul(ah2, bh4)) | 0;
20781 lo = (lo + Math.imul(al1, bl5)) | 0;
20782 mid = (mid + Math.imul(al1, bh5)) | 0;
20783 mid = (mid + Math.imul(ah1, bl5)) | 0;
20784 hi = (hi + Math.imul(ah1, bh5)) | 0;
20785 lo = (lo + Math.imul(al0, bl6)) | 0;
20786 mid = (mid + Math.imul(al0, bh6)) | 0;
20787 mid = (mid + Math.imul(ah0, bl6)) | 0;
20788 hi = (hi + Math.imul(ah0, bh6)) | 0;
20789 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
20790 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
20791 w6 &= 0x3ffffff;
20792 /* k = 7 */
20793 lo = Math.imul(al7, bl0);
20794 mid = Math.imul(al7, bh0);
20795 mid = (mid + Math.imul(ah7, bl0)) | 0;
20796 hi = Math.imul(ah7, bh0);
20797 lo = (lo + Math.imul(al6, bl1)) | 0;
20798 mid = (mid + Math.imul(al6, bh1)) | 0;
20799 mid = (mid + Math.imul(ah6, bl1)) | 0;
20800 hi = (hi + Math.imul(ah6, bh1)) | 0;
20801 lo = (lo + Math.imul(al5, bl2)) | 0;
20802 mid = (mid + Math.imul(al5, bh2)) | 0;
20803 mid = (mid + Math.imul(ah5, bl2)) | 0;
20804 hi = (hi + Math.imul(ah5, bh2)) | 0;
20805 lo = (lo + Math.imul(al4, bl3)) | 0;
20806 mid = (mid + Math.imul(al4, bh3)) | 0;
20807 mid = (mid + Math.imul(ah4, bl3)) | 0;
20808 hi = (hi + Math.imul(ah4, bh3)) | 0;
20809 lo = (lo + Math.imul(al3, bl4)) | 0;
20810 mid = (mid + Math.imul(al3, bh4)) | 0;
20811 mid = (mid + Math.imul(ah3, bl4)) | 0;
20812 hi = (hi + Math.imul(ah3, bh4)) | 0;
20813 lo = (lo + Math.imul(al2, bl5)) | 0;
20814 mid = (mid + Math.imul(al2, bh5)) | 0;
20815 mid = (mid + Math.imul(ah2, bl5)) | 0;
20816 hi = (hi + Math.imul(ah2, bh5)) | 0;
20817 lo = (lo + Math.imul(al1, bl6)) | 0;
20818 mid = (mid + Math.imul(al1, bh6)) | 0;
20819 mid = (mid + Math.imul(ah1, bl6)) | 0;
20820 hi = (hi + Math.imul(ah1, bh6)) | 0;
20821 lo = (lo + Math.imul(al0, bl7)) | 0;
20822 mid = (mid + Math.imul(al0, bh7)) | 0;
20823 mid = (mid + Math.imul(ah0, bl7)) | 0;
20824 hi = (hi + Math.imul(ah0, bh7)) | 0;
20825 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
20826 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
20827 w7 &= 0x3ffffff;
20828 /* k = 8 */
20829 lo = Math.imul(al8, bl0);
20830 mid = Math.imul(al8, bh0);
20831 mid = (mid + Math.imul(ah8, bl0)) | 0;
20832 hi = Math.imul(ah8, bh0);
20833 lo = (lo + Math.imul(al7, bl1)) | 0;
20834 mid = (mid + Math.imul(al7, bh1)) | 0;
20835 mid = (mid + Math.imul(ah7, bl1)) | 0;
20836 hi = (hi + Math.imul(ah7, bh1)) | 0;
20837 lo = (lo + Math.imul(al6, bl2)) | 0;
20838 mid = (mid + Math.imul(al6, bh2)) | 0;
20839 mid = (mid + Math.imul(ah6, bl2)) | 0;
20840 hi = (hi + Math.imul(ah6, bh2)) | 0;
20841 lo = (lo + Math.imul(al5, bl3)) | 0;
20842 mid = (mid + Math.imul(al5, bh3)) | 0;
20843 mid = (mid + Math.imul(ah5, bl3)) | 0;
20844 hi = (hi + Math.imul(ah5, bh3)) | 0;
20845 lo = (lo + Math.imul(al4, bl4)) | 0;
20846 mid = (mid + Math.imul(al4, bh4)) | 0;
20847 mid = (mid + Math.imul(ah4, bl4)) | 0;
20848 hi = (hi + Math.imul(ah4, bh4)) | 0;
20849 lo = (lo + Math.imul(al3, bl5)) | 0;
20850 mid = (mid + Math.imul(al3, bh5)) | 0;
20851 mid = (mid + Math.imul(ah3, bl5)) | 0;
20852 hi = (hi + Math.imul(ah3, bh5)) | 0;
20853 lo = (lo + Math.imul(al2, bl6)) | 0;
20854 mid = (mid + Math.imul(al2, bh6)) | 0;
20855 mid = (mid + Math.imul(ah2, bl6)) | 0;
20856 hi = (hi + Math.imul(ah2, bh6)) | 0;
20857 lo = (lo + Math.imul(al1, bl7)) | 0;
20858 mid = (mid + Math.imul(al1, bh7)) | 0;
20859 mid = (mid + Math.imul(ah1, bl7)) | 0;
20860 hi = (hi + Math.imul(ah1, bh7)) | 0;
20861 lo = (lo + Math.imul(al0, bl8)) | 0;
20862 mid = (mid + Math.imul(al0, bh8)) | 0;
20863 mid = (mid + Math.imul(ah0, bl8)) | 0;
20864 hi = (hi + Math.imul(ah0, bh8)) | 0;
20865 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
20866 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
20867 w8 &= 0x3ffffff;
20868 /* k = 9 */
20869 lo = Math.imul(al9, bl0);
20870 mid = Math.imul(al9, bh0);
20871 mid = (mid + Math.imul(ah9, bl0)) | 0;
20872 hi = Math.imul(ah9, bh0);
20873 lo = (lo + Math.imul(al8, bl1)) | 0;
20874 mid = (mid + Math.imul(al8, bh1)) | 0;
20875 mid = (mid + Math.imul(ah8, bl1)) | 0;
20876 hi = (hi + Math.imul(ah8, bh1)) | 0;
20877 lo = (lo + Math.imul(al7, bl2)) | 0;
20878 mid = (mid + Math.imul(al7, bh2)) | 0;
20879 mid = (mid + Math.imul(ah7, bl2)) | 0;
20880 hi = (hi + Math.imul(ah7, bh2)) | 0;
20881 lo = (lo + Math.imul(al6, bl3)) | 0;
20882 mid = (mid + Math.imul(al6, bh3)) | 0;
20883 mid = (mid + Math.imul(ah6, bl3)) | 0;
20884 hi = (hi + Math.imul(ah6, bh3)) | 0;
20885 lo = (lo + Math.imul(al5, bl4)) | 0;
20886 mid = (mid + Math.imul(al5, bh4)) | 0;
20887 mid = (mid + Math.imul(ah5, bl4)) | 0;
20888 hi = (hi + Math.imul(ah5, bh4)) | 0;
20889 lo = (lo + Math.imul(al4, bl5)) | 0;
20890 mid = (mid + Math.imul(al4, bh5)) | 0;
20891 mid = (mid + Math.imul(ah4, bl5)) | 0;
20892 hi = (hi + Math.imul(ah4, bh5)) | 0;
20893 lo = (lo + Math.imul(al3, bl6)) | 0;
20894 mid = (mid + Math.imul(al3, bh6)) | 0;
20895 mid = (mid + Math.imul(ah3, bl6)) | 0;
20896 hi = (hi + Math.imul(ah3, bh6)) | 0;
20897 lo = (lo + Math.imul(al2, bl7)) | 0;
20898 mid = (mid + Math.imul(al2, bh7)) | 0;
20899 mid = (mid + Math.imul(ah2, bl7)) | 0;
20900 hi = (hi + Math.imul(ah2, bh7)) | 0;
20901 lo = (lo + Math.imul(al1, bl8)) | 0;
20902 mid = (mid + Math.imul(al1, bh8)) | 0;
20903 mid = (mid + Math.imul(ah1, bl8)) | 0;
20904 hi = (hi + Math.imul(ah1, bh8)) | 0;
20905 lo = (lo + Math.imul(al0, bl9)) | 0;
20906 mid = (mid + Math.imul(al0, bh9)) | 0;
20907 mid = (mid + Math.imul(ah0, bl9)) | 0;
20908 hi = (hi + Math.imul(ah0, bh9)) | 0;
20909 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
20910 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
20911 w9 &= 0x3ffffff;
20912 /* k = 10 */
20913 lo = Math.imul(al9, bl1);
20914 mid = Math.imul(al9, bh1);
20915 mid = (mid + Math.imul(ah9, bl1)) | 0;
20916 hi = Math.imul(ah9, bh1);
20917 lo = (lo + Math.imul(al8, bl2)) | 0;
20918 mid = (mid + Math.imul(al8, bh2)) | 0;
20919 mid = (mid + Math.imul(ah8, bl2)) | 0;
20920 hi = (hi + Math.imul(ah8, bh2)) | 0;
20921 lo = (lo + Math.imul(al7, bl3)) | 0;
20922 mid = (mid + Math.imul(al7, bh3)) | 0;
20923 mid = (mid + Math.imul(ah7, bl3)) | 0;
20924 hi = (hi + Math.imul(ah7, bh3)) | 0;
20925 lo = (lo + Math.imul(al6, bl4)) | 0;
20926 mid = (mid + Math.imul(al6, bh4)) | 0;
20927 mid = (mid + Math.imul(ah6, bl4)) | 0;
20928 hi = (hi + Math.imul(ah6, bh4)) | 0;
20929 lo = (lo + Math.imul(al5, bl5)) | 0;
20930 mid = (mid + Math.imul(al5, bh5)) | 0;
20931 mid = (mid + Math.imul(ah5, bl5)) | 0;
20932 hi = (hi + Math.imul(ah5, bh5)) | 0;
20933 lo = (lo + Math.imul(al4, bl6)) | 0;
20934 mid = (mid + Math.imul(al4, bh6)) | 0;
20935 mid = (mid + Math.imul(ah4, bl6)) | 0;
20936 hi = (hi + Math.imul(ah4, bh6)) | 0;
20937 lo = (lo + Math.imul(al3, bl7)) | 0;
20938 mid = (mid + Math.imul(al3, bh7)) | 0;
20939 mid = (mid + Math.imul(ah3, bl7)) | 0;
20940 hi = (hi + Math.imul(ah3, bh7)) | 0;
20941 lo = (lo + Math.imul(al2, bl8)) | 0;
20942 mid = (mid + Math.imul(al2, bh8)) | 0;
20943 mid = (mid + Math.imul(ah2, bl8)) | 0;
20944 hi = (hi + Math.imul(ah2, bh8)) | 0;
20945 lo = (lo + Math.imul(al1, bl9)) | 0;
20946 mid = (mid + Math.imul(al1, bh9)) | 0;
20947 mid = (mid + Math.imul(ah1, bl9)) | 0;
20948 hi = (hi + Math.imul(ah1, bh9)) | 0;
20949 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
20950 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
20951 w10 &= 0x3ffffff;
20952 /* k = 11 */
20953 lo = Math.imul(al9, bl2);
20954 mid = Math.imul(al9, bh2);
20955 mid = (mid + Math.imul(ah9, bl2)) | 0;
20956 hi = Math.imul(ah9, bh2);
20957 lo = (lo + Math.imul(al8, bl3)) | 0;
20958 mid = (mid + Math.imul(al8, bh3)) | 0;
20959 mid = (mid + Math.imul(ah8, bl3)) | 0;
20960 hi = (hi + Math.imul(ah8, bh3)) | 0;
20961 lo = (lo + Math.imul(al7, bl4)) | 0;
20962 mid = (mid + Math.imul(al7, bh4)) | 0;
20963 mid = (mid + Math.imul(ah7, bl4)) | 0;
20964 hi = (hi + Math.imul(ah7, bh4)) | 0;
20965 lo = (lo + Math.imul(al6, bl5)) | 0;
20966 mid = (mid + Math.imul(al6, bh5)) | 0;
20967 mid = (mid + Math.imul(ah6, bl5)) | 0;
20968 hi = (hi + Math.imul(ah6, bh5)) | 0;
20969 lo = (lo + Math.imul(al5, bl6)) | 0;
20970 mid = (mid + Math.imul(al5, bh6)) | 0;
20971 mid = (mid + Math.imul(ah5, bl6)) | 0;
20972 hi = (hi + Math.imul(ah5, bh6)) | 0;
20973 lo = (lo + Math.imul(al4, bl7)) | 0;
20974 mid = (mid + Math.imul(al4, bh7)) | 0;
20975 mid = (mid + Math.imul(ah4, bl7)) | 0;
20976 hi = (hi + Math.imul(ah4, bh7)) | 0;
20977 lo = (lo + Math.imul(al3, bl8)) | 0;
20978 mid = (mid + Math.imul(al3, bh8)) | 0;
20979 mid = (mid + Math.imul(ah3, bl8)) | 0;
20980 hi = (hi + Math.imul(ah3, bh8)) | 0;
20981 lo = (lo + Math.imul(al2, bl9)) | 0;
20982 mid = (mid + Math.imul(al2, bh9)) | 0;
20983 mid = (mid + Math.imul(ah2, bl9)) | 0;
20984 hi = (hi + Math.imul(ah2, bh9)) | 0;
20985 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
20986 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
20987 w11 &= 0x3ffffff;
20988 /* k = 12 */
20989 lo = Math.imul(al9, bl3);
20990 mid = Math.imul(al9, bh3);
20991 mid = (mid + Math.imul(ah9, bl3)) | 0;
20992 hi = Math.imul(ah9, bh3);
20993 lo = (lo + Math.imul(al8, bl4)) | 0;
20994 mid = (mid + Math.imul(al8, bh4)) | 0;
20995 mid = (mid + Math.imul(ah8, bl4)) | 0;
20996 hi = (hi + Math.imul(ah8, bh4)) | 0;
20997 lo = (lo + Math.imul(al7, bl5)) | 0;
20998 mid = (mid + Math.imul(al7, bh5)) | 0;
20999 mid = (mid + Math.imul(ah7, bl5)) | 0;
21000 hi = (hi + Math.imul(ah7, bh5)) | 0;
21001 lo = (lo + Math.imul(al6, bl6)) | 0;
21002 mid = (mid + Math.imul(al6, bh6)) | 0;
21003 mid = (mid + Math.imul(ah6, bl6)) | 0;
21004 hi = (hi + Math.imul(ah6, bh6)) | 0;
21005 lo = (lo + Math.imul(al5, bl7)) | 0;
21006 mid = (mid + Math.imul(al5, bh7)) | 0;
21007 mid = (mid + Math.imul(ah5, bl7)) | 0;
21008 hi = (hi + Math.imul(ah5, bh7)) | 0;
21009 lo = (lo + Math.imul(al4, bl8)) | 0;
21010 mid = (mid + Math.imul(al4, bh8)) | 0;
21011 mid = (mid + Math.imul(ah4, bl8)) | 0;
21012 hi = (hi + Math.imul(ah4, bh8)) | 0;
21013 lo = (lo + Math.imul(al3, bl9)) | 0;
21014 mid = (mid + Math.imul(al3, bh9)) | 0;
21015 mid = (mid + Math.imul(ah3, bl9)) | 0;
21016 hi = (hi + Math.imul(ah3, bh9)) | 0;
21017 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
21018 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
21019 w12 &= 0x3ffffff;
21020 /* k = 13 */
21021 lo = Math.imul(al9, bl4);
21022 mid = Math.imul(al9, bh4);
21023 mid = (mid + Math.imul(ah9, bl4)) | 0;
21024 hi = Math.imul(ah9, bh4);
21025 lo = (lo + Math.imul(al8, bl5)) | 0;
21026 mid = (mid + Math.imul(al8, bh5)) | 0;
21027 mid = (mid + Math.imul(ah8, bl5)) | 0;
21028 hi = (hi + Math.imul(ah8, bh5)) | 0;
21029 lo = (lo + Math.imul(al7, bl6)) | 0;
21030 mid = (mid + Math.imul(al7, bh6)) | 0;
21031 mid = (mid + Math.imul(ah7, bl6)) | 0;
21032 hi = (hi + Math.imul(ah7, bh6)) | 0;
21033 lo = (lo + Math.imul(al6, bl7)) | 0;
21034 mid = (mid + Math.imul(al6, bh7)) | 0;
21035 mid = (mid + Math.imul(ah6, bl7)) | 0;
21036 hi = (hi + Math.imul(ah6, bh7)) | 0;
21037 lo = (lo + Math.imul(al5, bl8)) | 0;
21038 mid = (mid + Math.imul(al5, bh8)) | 0;
21039 mid = (mid + Math.imul(ah5, bl8)) | 0;
21040 hi = (hi + Math.imul(ah5, bh8)) | 0;
21041 lo = (lo + Math.imul(al4, bl9)) | 0;
21042 mid = (mid + Math.imul(al4, bh9)) | 0;
21043 mid = (mid + Math.imul(ah4, bl9)) | 0;
21044 hi = (hi + Math.imul(ah4, bh9)) | 0;
21045 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
21046 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
21047 w13 &= 0x3ffffff;
21048 /* k = 14 */
21049 lo = Math.imul(al9, bl5);
21050 mid = Math.imul(al9, bh5);
21051 mid = (mid + Math.imul(ah9, bl5)) | 0;
21052 hi = Math.imul(ah9, bh5);
21053 lo = (lo + Math.imul(al8, bl6)) | 0;
21054 mid = (mid + Math.imul(al8, bh6)) | 0;
21055 mid = (mid + Math.imul(ah8, bl6)) | 0;
21056 hi = (hi + Math.imul(ah8, bh6)) | 0;
21057 lo = (lo + Math.imul(al7, bl7)) | 0;
21058 mid = (mid + Math.imul(al7, bh7)) | 0;
21059 mid = (mid + Math.imul(ah7, bl7)) | 0;
21060 hi = (hi + Math.imul(ah7, bh7)) | 0;
21061 lo = (lo + Math.imul(al6, bl8)) | 0;
21062 mid = (mid + Math.imul(al6, bh8)) | 0;
21063 mid = (mid + Math.imul(ah6, bl8)) | 0;
21064 hi = (hi + Math.imul(ah6, bh8)) | 0;
21065 lo = (lo + Math.imul(al5, bl9)) | 0;
21066 mid = (mid + Math.imul(al5, bh9)) | 0;
21067 mid = (mid + Math.imul(ah5, bl9)) | 0;
21068 hi = (hi + Math.imul(ah5, bh9)) | 0;
21069 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
21070 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
21071 w14 &= 0x3ffffff;
21072 /* k = 15 */
21073 lo = Math.imul(al9, bl6);
21074 mid = Math.imul(al9, bh6);
21075 mid = (mid + Math.imul(ah9, bl6)) | 0;
21076 hi = Math.imul(ah9, bh6);
21077 lo = (lo + Math.imul(al8, bl7)) | 0;
21078 mid = (mid + Math.imul(al8, bh7)) | 0;
21079 mid = (mid + Math.imul(ah8, bl7)) | 0;
21080 hi = (hi + Math.imul(ah8, bh7)) | 0;
21081 lo = (lo + Math.imul(al7, bl8)) | 0;
21082 mid = (mid + Math.imul(al7, bh8)) | 0;
21083 mid = (mid + Math.imul(ah7, bl8)) | 0;
21084 hi = (hi + Math.imul(ah7, bh8)) | 0;
21085 lo = (lo + Math.imul(al6, bl9)) | 0;
21086 mid = (mid + Math.imul(al6, bh9)) | 0;
21087 mid = (mid + Math.imul(ah6, bl9)) | 0;
21088 hi = (hi + Math.imul(ah6, bh9)) | 0;
21089 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
21090 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
21091 w15 &= 0x3ffffff;
21092 /* k = 16 */
21093 lo = Math.imul(al9, bl7);
21094 mid = Math.imul(al9, bh7);
21095 mid = (mid + Math.imul(ah9, bl7)) | 0;
21096 hi = Math.imul(ah9, bh7);
21097 lo = (lo + Math.imul(al8, bl8)) | 0;
21098 mid = (mid + Math.imul(al8, bh8)) | 0;
21099 mid = (mid + Math.imul(ah8, bl8)) | 0;
21100 hi = (hi + Math.imul(ah8, bh8)) | 0;
21101 lo = (lo + Math.imul(al7, bl9)) | 0;
21102 mid = (mid + Math.imul(al7, bh9)) | 0;
21103 mid = (mid + Math.imul(ah7, bl9)) | 0;
21104 hi = (hi + Math.imul(ah7, bh9)) | 0;
21105 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
21106 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
21107 w16 &= 0x3ffffff;
21108 /* k = 17 */
21109 lo = Math.imul(al9, bl8);
21110 mid = Math.imul(al9, bh8);
21111 mid = (mid + Math.imul(ah9, bl8)) | 0;
21112 hi = Math.imul(ah9, bh8);
21113 lo = (lo + Math.imul(al8, bl9)) | 0;
21114 mid = (mid + Math.imul(al8, bh9)) | 0;
21115 mid = (mid + Math.imul(ah8, bl9)) | 0;
21116 hi = (hi + Math.imul(ah8, bh9)) | 0;
21117 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
21118 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
21119 w17 &= 0x3ffffff;
21120 /* k = 18 */
21121 lo = Math.imul(al9, bl9);
21122 mid = Math.imul(al9, bh9);
21123 mid = (mid + Math.imul(ah9, bl9)) | 0;
21124 hi = Math.imul(ah9, bh9);
21125 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
21126 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
21127 w18 &= 0x3ffffff;
21128 o[0] = w0;
21129 o[1] = w1;
21130 o[2] = w2;
21131 o[3] = w3;
21132 o[4] = w4;
21133 o[5] = w5;
21134 o[6] = w6;
21135 o[7] = w7;
21136 o[8] = w8;
21137 o[9] = w9;
21138 o[10] = w10;
21139 o[11] = w11;
21140 o[12] = w12;
21141 o[13] = w13;
21142 o[14] = w14;
21143 o[15] = w15;
21144 o[16] = w16;
21145 o[17] = w17;
21146 o[18] = w18;
21147 if (c !== 0) {
21148 o[19] = c;
21149 out.length++;
21150 }
21151 return out;
21152 };
21153
21154 // Polyfill comb
21155 if (!Math.imul) {
21156 comb10MulTo = smallMulTo;
21157 }
21158
21159 function bigMulTo (self, num, out) {
21160 out.negative = num.negative ^ self.negative;
21161 out.length = self.length + num.length;
21162
21163 var carry = 0;
21164 var hncarry = 0;
21165 for (var k = 0; k < out.length - 1; k++) {
21166 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
21167 // note that ncarry could be >= 0x3ffffff
21168 var ncarry = hncarry;
21169 hncarry = 0;
21170 var rword = carry & 0x3ffffff;
21171 var maxJ = Math.min(k, num.length - 1);
21172 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
21173 var i = k - j;
21174 var a = self.words[i] | 0;
21175 var b = num.words[j] | 0;
21176 var r = a * b;
21177
21178 var lo = r & 0x3ffffff;
21179 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
21180 lo = (lo + rword) | 0;
21181 rword = lo & 0x3ffffff;
21182 ncarry = (ncarry + (lo >>> 26)) | 0;
21183
21184 hncarry += ncarry >>> 26;
21185 ncarry &= 0x3ffffff;
21186 }
21187 out.words[k] = rword;
21188 carry = ncarry;
21189 ncarry = hncarry;
21190 }
21191 if (carry !== 0) {
21192 out.words[k] = carry;
21193 } else {
21194 out.length--;
21195 }
21196
21197 return out.strip();
21198 }
21199
21200 function jumboMulTo (self, num, out) {
21201 var fftm = new FFTM();
21202 return fftm.mulp(self, num, out);
21203 }
21204
21205 BN.prototype.mulTo = function mulTo (num, out) {
21206 var res;
21207 var len = this.length + num.length;
21208 if (this.length === 10 && num.length === 10) {
21209 res = comb10MulTo(this, num, out);
21210 } else if (len < 63) {
21211 res = smallMulTo(this, num, out);
21212 } else if (len < 1024) {
21213 res = bigMulTo(this, num, out);
21214 } else {
21215 res = jumboMulTo(this, num, out);
21216 }
21217
21218 return res;
21219 };
21220
21221 // Cooley-Tukey algorithm for FFT
21222 // slightly revisited to rely on looping instead of recursion
21223
21224 function FFTM (x, y) {
21225 this.x = x;
21226 this.y = y;
21227 }
21228
21229 FFTM.prototype.makeRBT = function makeRBT (N) {
21230 var t = new Array(N);
21231 var l = BN.prototype._countBits(N) - 1;
21232 for (var i = 0; i < N; i++) {
21233 t[i] = this.revBin(i, l, N);
21234 }
21235
21236 return t;
21237 };
21238
21239 // Returns binary-reversed representation of `x`
21240 FFTM.prototype.revBin = function revBin (x, l, N) {
21241 if (x === 0 || x === N - 1) return x;
21242
21243 var rb = 0;
21244 for (var i = 0; i < l; i++) {
21245 rb |= (x & 1) << (l - i - 1);
21246 x >>= 1;
21247 }
21248
21249 return rb;
21250 };
21251
21252 // Performs "tweedling" phase, therefore 'emulating'
21253 // behaviour of the recursive algorithm
21254 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
21255 for (var i = 0; i < N; i++) {
21256 rtws[i] = rws[rbt[i]];
21257 itws[i] = iws[rbt[i]];
21258 }
21259 };
21260
21261 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
21262 this.permute(rbt, rws, iws, rtws, itws, N);
21263
21264 for (var s = 1; s < N; s <<= 1) {
21265 var l = s << 1;
21266
21267 var rtwdf = Math.cos(2 * Math.PI / l);
21268 var itwdf = Math.sin(2 * Math.PI / l);
21269
21270 for (var p = 0; p < N; p += l) {
21271 var rtwdf_ = rtwdf;
21272 var itwdf_ = itwdf;
21273
21274 for (var j = 0; j < s; j++) {
21275 var re = rtws[p + j];
21276 var ie = itws[p + j];
21277
21278 var ro = rtws[p + j + s];
21279 var io = itws[p + j + s];
21280
21281 var rx = rtwdf_ * ro - itwdf_ * io;
21282
21283 io = rtwdf_ * io + itwdf_ * ro;
21284 ro = rx;
21285
21286 rtws[p + j] = re + ro;
21287 itws[p + j] = ie + io;
21288
21289 rtws[p + j + s] = re - ro;
21290 itws[p + j + s] = ie - io;
21291
21292 /* jshint maxdepth : false */
21293 if (j !== l) {
21294 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
21295
21296 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
21297 rtwdf_ = rx;
21298 }
21299 }
21300 }
21301 }
21302 };
21303
21304 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
21305 var N = Math.max(m, n) | 1;
21306 var odd = N & 1;
21307 var i = 0;
21308 for (N = N / 2 | 0; N; N = N >>> 1) {
21309 i++;
21310 }
21311
21312 return 1 << i + 1 + odd;
21313 };
21314
21315 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
21316 if (N <= 1) return;
21317
21318 for (var i = 0; i < N / 2; i++) {
21319 var t = rws[i];
21320
21321 rws[i] = rws[N - i - 1];
21322 rws[N - i - 1] = t;
21323
21324 t = iws[i];
21325
21326 iws[i] = -iws[N - i - 1];
21327 iws[N - i - 1] = -t;
21328 }
21329 };
21330
21331 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
21332 var carry = 0;
21333 for (var i = 0; i < N / 2; i++) {
21334 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
21335 Math.round(ws[2 * i] / N) +
21336 carry;
21337
21338 ws[i] = w & 0x3ffffff;
21339
21340 if (w < 0x4000000) {
21341 carry = 0;
21342 } else {
21343 carry = w / 0x4000000 | 0;
21344 }
21345 }
21346
21347 return ws;
21348 };
21349
21350 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
21351 var carry = 0;
21352 for (var i = 0; i < len; i++) {
21353 carry = carry + (ws[i] | 0);
21354
21355 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
21356 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
21357 }
21358
21359 // Pad with zeroes
21360 for (i = 2 * len; i < N; ++i) {
21361 rws[i] = 0;
21362 }
21363
21364 assert(carry === 0);
21365 assert((carry & ~0x1fff) === 0);
21366 };
21367
21368 FFTM.prototype.stub = function stub (N) {
21369 var ph = new Array(N);
21370 for (var i = 0; i < N; i++) {
21371 ph[i] = 0;
21372 }
21373
21374 return ph;
21375 };
21376
21377 FFTM.prototype.mulp = function mulp (x, y, out) {
21378 var N = 2 * this.guessLen13b(x.length, y.length);
21379
21380 var rbt = this.makeRBT(N);
21381
21382 var _ = this.stub(N);
21383
21384 var rws = new Array(N);
21385 var rwst = new Array(N);
21386 var iwst = new Array(N);
21387
21388 var nrws = new Array(N);
21389 var nrwst = new Array(N);
21390 var niwst = new Array(N);
21391
21392 var rmws = out.words;
21393 rmws.length = N;
21394
21395 this.convert13b(x.words, x.length, rws, N);
21396 this.convert13b(y.words, y.length, nrws, N);
21397
21398 this.transform(rws, _, rwst, iwst, N, rbt);
21399 this.transform(nrws, _, nrwst, niwst, N, rbt);
21400
21401 for (var i = 0; i < N; i++) {
21402 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
21403 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
21404 rwst[i] = rx;
21405 }
21406
21407 this.conjugate(rwst, iwst, N);
21408 this.transform(rwst, iwst, rmws, _, N, rbt);
21409 this.conjugate(rmws, _, N);
21410 this.normalize13b(rmws, N);
21411
21412 out.negative = x.negative ^ y.negative;
21413 out.length = x.length + y.length;
21414 return out.strip();
21415 };
21416
21417 // Multiply `this` by `num`
21418 BN.prototype.mul = function mul (num) {
21419 var out = new BN(null);
21420 out.words = new Array(this.length + num.length);
21421 return this.mulTo(num, out);
21422 };
21423
21424 // Multiply employing FFT
21425 BN.prototype.mulf = function mulf (num) {
21426 var out = new BN(null);
21427 out.words = new Array(this.length + num.length);
21428 return jumboMulTo(this, num, out);
21429 };
21430
21431 // In-place Multiplication
21432 BN.prototype.imul = function imul (num) {
21433 return this.clone().mulTo(num, this);
21434 };
21435
21436 BN.prototype.imuln = function imuln (num) {
21437 assert(typeof num === 'number');
21438 assert(num < 0x4000000);
21439
21440 // Carry
21441 var carry = 0;
21442 for (var i = 0; i < this.length; i++) {
21443 var w = (this.words[i] | 0) * num;
21444 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
21445 carry >>= 26;
21446 carry += (w / 0x4000000) | 0;
21447 // NOTE: lo is 27bit maximum
21448 carry += lo >>> 26;
21449 this.words[i] = lo & 0x3ffffff;
21450 }
21451
21452 if (carry !== 0) {
21453 this.words[i] = carry;
21454 this.length++;
21455 }
21456
21457 return this;
21458 };
21459
21460 BN.prototype.muln = function muln (num) {
21461 return this.clone().imuln(num);
21462 };
21463
21464 // `this` * `this`
21465 BN.prototype.sqr = function sqr () {
21466 return this.mul(this);
21467 };
21468
21469 // `this` * `this` in-place
21470 BN.prototype.isqr = function isqr () {
21471 return this.imul(this.clone());
21472 };
21473
21474 // Math.pow(`this`, `num`)
21475 BN.prototype.pow = function pow (num) {
21476 var w = toBitArray(num);
21477 if (w.length === 0) return new BN(1);
21478
21479 // Skip leading zeroes
21480 var res = this;
21481 for (var i = 0; i < w.length; i++, res = res.sqr()) {
21482 if (w[i] !== 0) break;
21483 }
21484
21485 if (++i < w.length) {
21486 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
21487 if (w[i] === 0) continue;
21488
21489 res = res.mul(q);
21490 }
21491 }
21492
21493 return res;
21494 };
21495
21496 // Shift-left in-place
21497 BN.prototype.iushln = function iushln (bits) {
21498 assert(typeof bits === 'number' && bits >= 0);
21499 var r = bits % 26;
21500 var s = (bits - r) / 26;
21501 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
21502 var i;
21503
21504 if (r !== 0) {
21505 var carry = 0;
21506
21507 for (i = 0; i < this.length; i++) {
21508 var newCarry = this.words[i] & carryMask;
21509 var c = ((this.words[i] | 0) - newCarry) << r;
21510 this.words[i] = c | carry;
21511 carry = newCarry >>> (26 - r);
21512 }
21513
21514 if (carry) {
21515 this.words[i] = carry;
21516 this.length++;
21517 }
21518 }
21519
21520 if (s !== 0) {
21521 for (i = this.length - 1; i >= 0; i--) {
21522 this.words[i + s] = this.words[i];
21523 }
21524
21525 for (i = 0; i < s; i++) {
21526 this.words[i] = 0;
21527 }
21528
21529 this.length += s;
21530 }
21531
21532 return this.strip();
21533 };
21534
21535 BN.prototype.ishln = function ishln (bits) {
21536 // TODO(indutny): implement me
21537 assert(this.negative === 0);
21538 return this.iushln(bits);
21539 };
21540
21541 // Shift-right in-place
21542 // NOTE: `hint` is a lowest bit before trailing zeroes
21543 // NOTE: if `extended` is present - it will be filled with destroyed bits
21544 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
21545 assert(typeof bits === 'number' && bits >= 0);
21546 var h;
21547 if (hint) {
21548 h = (hint - (hint % 26)) / 26;
21549 } else {
21550 h = 0;
21551 }
21552
21553 var r = bits % 26;
21554 var s = Math.min((bits - r) / 26, this.length);
21555 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
21556 var maskedWords = extended;
21557
21558 h -= s;
21559 h = Math.max(0, h);
21560
21561 // Extended mode, copy masked part
21562 if (maskedWords) {
21563 for (var i = 0; i < s; i++) {
21564 maskedWords.words[i] = this.words[i];
21565 }
21566 maskedWords.length = s;
21567 }
21568
21569 if (s === 0) {
21570 // No-op, we should not move anything at all
21571 } else if (this.length > s) {
21572 this.length -= s;
21573 for (i = 0; i < this.length; i++) {
21574 this.words[i] = this.words[i + s];
21575 }
21576 } else {
21577 this.words[0] = 0;
21578 this.length = 1;
21579 }
21580
21581 var carry = 0;
21582 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
21583 var word = this.words[i] | 0;
21584 this.words[i] = (carry << (26 - r)) | (word >>> r);
21585 carry = word & mask;
21586 }
21587
21588 // Push carried bits as a mask
21589 if (maskedWords && carry !== 0) {
21590 maskedWords.words[maskedWords.length++] = carry;
21591 }
21592
21593 if (this.length === 0) {
21594 this.words[0] = 0;
21595 this.length = 1;
21596 }
21597
21598 return this.strip();
21599 };
21600
21601 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
21602 // TODO(indutny): implement me
21603 assert(this.negative === 0);
21604 return this.iushrn(bits, hint, extended);
21605 };
21606
21607 // Shift-left
21608 BN.prototype.shln = function shln (bits) {
21609 return this.clone().ishln(bits);
21610 };
21611
21612 BN.prototype.ushln = function ushln (bits) {
21613 return this.clone().iushln(bits);
21614 };
21615
21616 // Shift-right
21617 BN.prototype.shrn = function shrn (bits) {
21618 return this.clone().ishrn(bits);
21619 };
21620
21621 BN.prototype.ushrn = function ushrn (bits) {
21622 return this.clone().iushrn(bits);
21623 };
21624
21625 // Test if n bit is set
21626 BN.prototype.testn = function testn (bit) {
21627 assert(typeof bit === 'number' && bit >= 0);
21628 var r = bit % 26;
21629 var s = (bit - r) / 26;
21630 var q = 1 << r;
21631
21632 // Fast case: bit is much higher than all existing words
21633 if (this.length <= s) return false;
21634
21635 // Check bit and return
21636 var w = this.words[s];
21637
21638 return !!(w & q);
21639 };
21640
21641 // Return only lowers bits of number (in-place)
21642 BN.prototype.imaskn = function imaskn (bits) {
21643 assert(typeof bits === 'number' && bits >= 0);
21644 var r = bits % 26;
21645 var s = (bits - r) / 26;
21646
21647 assert(this.negative === 0, 'imaskn works only with positive numbers');
21648
21649 if (this.length <= s) {
21650 return this;
21651 }
21652
21653 if (r !== 0) {
21654 s++;
21655 }
21656 this.length = Math.min(s, this.length);
21657
21658 if (r !== 0) {
21659 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
21660 this.words[this.length - 1] &= mask;
21661 }
21662
21663 return this.strip();
21664 };
21665
21666 // Return only lowers bits of number
21667 BN.prototype.maskn = function maskn (bits) {
21668 return this.clone().imaskn(bits);
21669 };
21670
21671 // Add plain number `num` to `this`
21672 BN.prototype.iaddn = function iaddn (num) {
21673 assert(typeof num === 'number');
21674 assert(num < 0x4000000);
21675 if (num < 0) return this.isubn(-num);
21676
21677 // Possible sign change
21678 if (this.negative !== 0) {
21679 if (this.length === 1 && (this.words[0] | 0) < num) {
21680 this.words[0] = num - (this.words[0] | 0);
21681 this.negative = 0;
21682 return this;
21683 }
21684
21685 this.negative = 0;
21686 this.isubn(num);
21687 this.negative = 1;
21688 return this;
21689 }
21690
21691 // Add without checks
21692 return this._iaddn(num);
21693 };
21694
21695 BN.prototype._iaddn = function _iaddn (num) {
21696 this.words[0] += num;
21697
21698 // Carry
21699 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
21700 this.words[i] -= 0x4000000;
21701 if (i === this.length - 1) {
21702 this.words[i + 1] = 1;
21703 } else {
21704 this.words[i + 1]++;
21705 }
21706 }
21707 this.length = Math.max(this.length, i + 1);
21708
21709 return this;
21710 };
21711
21712 // Subtract plain number `num` from `this`
21713 BN.prototype.isubn = function isubn (num) {
21714 assert(typeof num === 'number');
21715 assert(num < 0x4000000);
21716 if (num < 0) return this.iaddn(-num);
21717
21718 if (this.negative !== 0) {
21719 this.negative = 0;
21720 this.iaddn(num);
21721 this.negative = 1;
21722 return this;
21723 }
21724
21725 this.words[0] -= num;
21726
21727 if (this.length === 1 && this.words[0] < 0) {
21728 this.words[0] = -this.words[0];
21729 this.negative = 1;
21730 } else {
21731 // Carry
21732 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
21733 this.words[i] += 0x4000000;
21734 this.words[i + 1] -= 1;
21735 }
21736 }
21737
21738 return this.strip();
21739 };
21740
21741 BN.prototype.addn = function addn (num) {
21742 return this.clone().iaddn(num);
21743 };
21744
21745 BN.prototype.subn = function subn (num) {
21746 return this.clone().isubn(num);
21747 };
21748
21749 BN.prototype.iabs = function iabs () {
21750 this.negative = 0;
21751
21752 return this;
21753 };
21754
21755 BN.prototype.abs = function abs () {
21756 return this.clone().iabs();
21757 };
21758
21759 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
21760 var len = num.length + shift;
21761 var i;
21762
21763 this._expand(len);
21764
21765 var w;
21766 var carry = 0;
21767 for (i = 0; i < num.length; i++) {
21768 w = (this.words[i + shift] | 0) + carry;
21769 var right = (num.words[i] | 0) * mul;
21770 w -= right & 0x3ffffff;
21771 carry = (w >> 26) - ((right / 0x4000000) | 0);
21772 this.words[i + shift] = w & 0x3ffffff;
21773 }
21774 for (; i < this.length - shift; i++) {
21775 w = (this.words[i + shift] | 0) + carry;
21776 carry = w >> 26;
21777 this.words[i + shift] = w & 0x3ffffff;
21778 }
21779
21780 if (carry === 0) return this.strip();
21781
21782 // Subtraction overflow
21783 assert(carry === -1);
21784 carry = 0;
21785 for (i = 0; i < this.length; i++) {
21786 w = -(this.words[i] | 0) + carry;
21787 carry = w >> 26;
21788 this.words[i] = w & 0x3ffffff;
21789 }
21790 this.negative = 1;
21791
21792 return this.strip();
21793 };
21794
21795 BN.prototype._wordDiv = function _wordDiv (num, mode) {
21796 var shift = this.length - num.length;
21797
21798 var a = this.clone();
21799 var b = num;
21800
21801 // Normalize
21802 var bhi = b.words[b.length - 1] | 0;
21803 var bhiBits = this._countBits(bhi);
21804 shift = 26 - bhiBits;
21805 if (shift !== 0) {
21806 b = b.ushln(shift);
21807 a.iushln(shift);
21808 bhi = b.words[b.length - 1] | 0;
21809 }
21810
21811 // Initialize quotient
21812 var m = a.length - b.length;
21813 var q;
21814
21815 if (mode !== 'mod') {
21816 q = new BN(null);
21817 q.length = m + 1;
21818 q.words = new Array(q.length);
21819 for (var i = 0; i < q.length; i++) {
21820 q.words[i] = 0;
21821 }
21822 }
21823
21824 var diff = a.clone()._ishlnsubmul(b, 1, m);
21825 if (diff.negative === 0) {
21826 a = diff;
21827 if (q) {
21828 q.words[m] = 1;
21829 }
21830 }
21831
21832 for (var j = m - 1; j >= 0; j--) {
21833 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
21834 (a.words[b.length + j - 1] | 0);
21835
21836 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
21837 // (0x7ffffff)
21838 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
21839
21840 a._ishlnsubmul(b, qj, j);
21841 while (a.negative !== 0) {
21842 qj--;
21843 a.negative = 0;
21844 a._ishlnsubmul(b, 1, j);
21845 if (!a.isZero()) {
21846 a.negative ^= 1;
21847 }
21848 }
21849 if (q) {
21850 q.words[j] = qj;
21851 }
21852 }
21853 if (q) {
21854 q.strip();
21855 }
21856 a.strip();
21857
21858 // Denormalize
21859 if (mode !== 'div' && shift !== 0) {
21860 a.iushrn(shift);
21861 }
21862
21863 return {
21864 div: q || null,
21865 mod: a
21866 };
21867 };
21868
21869 // NOTE: 1) `mode` can be set to `mod` to request mod only,
21870 // to `div` to request div only, or be absent to
21871 // request both div & mod
21872 // 2) `positive` is true if unsigned mod is requested
21873 BN.prototype.divmod = function divmod (num, mode, positive) {
21874 assert(!num.isZero());
21875
21876 if (this.isZero()) {
21877 return {
21878 div: new BN(0),
21879 mod: new BN(0)
21880 };
21881 }
21882
21883 var div, mod, res;
21884 if (this.negative !== 0 && num.negative === 0) {
21885 res = this.neg().divmod(num, mode);
21886
21887 if (mode !== 'mod') {
21888 div = res.div.neg();
21889 }
21890
21891 if (mode !== 'div') {
21892 mod = res.mod.neg();
21893 if (positive && mod.negative !== 0) {
21894 mod.iadd(num);
21895 }
21896 }
21897
21898 return {
21899 div: div,
21900 mod: mod
21901 };
21902 }
21903
21904 if (this.negative === 0 && num.negative !== 0) {
21905 res = this.divmod(num.neg(), mode);
21906
21907 if (mode !== 'mod') {
21908 div = res.div.neg();
21909 }
21910
21911 return {
21912 div: div,
21913 mod: res.mod
21914 };
21915 }
21916
21917 if ((this.negative & num.negative) !== 0) {
21918 res = this.neg().divmod(num.neg(), mode);
21919
21920 if (mode !== 'div') {
21921 mod = res.mod.neg();
21922 if (positive && mod.negative !== 0) {
21923 mod.isub(num);
21924 }
21925 }
21926
21927 return {
21928 div: res.div,
21929 mod: mod
21930 };
21931 }
21932
21933 // Both numbers are positive at this point
21934
21935 // Strip both numbers to approximate shift value
21936 if (num.length > this.length || this.cmp(num) < 0) {
21937 return {
21938 div: new BN(0),
21939 mod: this
21940 };
21941 }
21942
21943 // Very short reduction
21944 if (num.length === 1) {
21945 if (mode === 'div') {
21946 return {
21947 div: this.divn(num.words[0]),
21948 mod: null
21949 };
21950 }
21951
21952 if (mode === 'mod') {
21953 return {
21954 div: null,
21955 mod: new BN(this.modn(num.words[0]))
21956 };
21957 }
21958
21959 return {
21960 div: this.divn(num.words[0]),
21961 mod: new BN(this.modn(num.words[0]))
21962 };
21963 }
21964
21965 return this._wordDiv(num, mode);
21966 };
21967
21968 // Find `this` / `num`
21969 BN.prototype.div = function div (num) {
21970 return this.divmod(num, 'div', false).div;
21971 };
21972
21973 // Find `this` % `num`
21974 BN.prototype.mod = function mod (num) {
21975 return this.divmod(num, 'mod', false).mod;
21976 };
21977
21978 BN.prototype.umod = function umod (num) {
21979 return this.divmod(num, 'mod', true).mod;
21980 };
21981
21982 // Find Round(`this` / `num`)
21983 BN.prototype.divRound = function divRound (num) {
21984 var dm = this.divmod(num);
21985
21986 // Fast case - exact division
21987 if (dm.mod.isZero()) return dm.div;
21988
21989 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
21990
21991 var half = num.ushrn(1);
21992 var r2 = num.andln(1);
21993 var cmp = mod.cmp(half);
21994
21995 // Round down
21996 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
21997
21998 // Round up
21999 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
22000 };
22001
22002 BN.prototype.modn = function modn (num) {
22003 assert(num <= 0x3ffffff);
22004 var p = (1 << 26) % num;
22005
22006 var acc = 0;
22007 for (var i = this.length - 1; i >= 0; i--) {
22008 acc = (p * acc + (this.words[i] | 0)) % num;
22009 }
22010
22011 return acc;
22012 };
22013
22014 // In-place division by number
22015 BN.prototype.idivn = function idivn (num) {
22016 assert(num <= 0x3ffffff);
22017
22018 var carry = 0;
22019 for (var i = this.length - 1; i >= 0; i--) {
22020 var w = (this.words[i] | 0) + carry * 0x4000000;
22021 this.words[i] = (w / num) | 0;
22022 carry = w % num;
22023 }
22024
22025 return this.strip();
22026 };
22027
22028 BN.prototype.divn = function divn (num) {
22029 return this.clone().idivn(num);
22030 };
22031
22032 BN.prototype.egcd = function egcd (p) {
22033 assert(p.negative === 0);
22034 assert(!p.isZero());
22035
22036 var x = this;
22037 var y = p.clone();
22038
22039 if (x.negative !== 0) {
22040 x = x.umod(p);
22041 } else {
22042 x = x.clone();
22043 }
22044
22045 // A * x + B * y = x
22046 var A = new BN(1);
22047 var B = new BN(0);
22048
22049 // C * x + D * y = y
22050 var C = new BN(0);
22051 var D = new BN(1);
22052
22053 var g = 0;
22054
22055 while (x.isEven() && y.isEven()) {
22056 x.iushrn(1);
22057 y.iushrn(1);
22058 ++g;
22059 }
22060
22061 var yp = y.clone();
22062 var xp = x.clone();
22063
22064 while (!x.isZero()) {
22065 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
22066 if (i > 0) {
22067 x.iushrn(i);
22068 while (i-- > 0) {
22069 if (A.isOdd() || B.isOdd()) {
22070 A.iadd(yp);
22071 B.isub(xp);
22072 }
22073
22074 A.iushrn(1);
22075 B.iushrn(1);
22076 }
22077 }
22078
22079 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
22080 if (j > 0) {
22081 y.iushrn(j);
22082 while (j-- > 0) {
22083 if (C.isOdd() || D.isOdd()) {
22084 C.iadd(yp);
22085 D.isub(xp);
22086 }
22087
22088 C.iushrn(1);
22089 D.iushrn(1);
22090 }
22091 }
22092
22093 if (x.cmp(y) >= 0) {
22094 x.isub(y);
22095 A.isub(C);
22096 B.isub(D);
22097 } else {
22098 y.isub(x);
22099 C.isub(A);
22100 D.isub(B);
22101 }
22102 }
22103
22104 return {
22105 a: C,
22106 b: D,
22107 gcd: y.iushln(g)
22108 };
22109 };
22110
22111 // This is reduced incarnation of the binary EEA
22112 // above, designated to invert members of the
22113 // _prime_ fields F(p) at a maximal speed
22114 BN.prototype._invmp = function _invmp (p) {
22115 assert(p.negative === 0);
22116 assert(!p.isZero());
22117
22118 var a = this;
22119 var b = p.clone();
22120
22121 if (a.negative !== 0) {
22122 a = a.umod(p);
22123 } else {
22124 a = a.clone();
22125 }
22126
22127 var x1 = new BN(1);
22128 var x2 = new BN(0);
22129
22130 var delta = b.clone();
22131
22132 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
22133 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
22134 if (i > 0) {
22135 a.iushrn(i);
22136 while (i-- > 0) {
22137 if (x1.isOdd()) {
22138 x1.iadd(delta);
22139 }
22140
22141 x1.iushrn(1);
22142 }
22143 }
22144
22145 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
22146 if (j > 0) {
22147 b.iushrn(j);
22148 while (j-- > 0) {
22149 if (x2.isOdd()) {
22150 x2.iadd(delta);
22151 }
22152
22153 x2.iushrn(1);
22154 }
22155 }
22156
22157 if (a.cmp(b) >= 0) {
22158 a.isub(b);
22159 x1.isub(x2);
22160 } else {
22161 b.isub(a);
22162 x2.isub(x1);
22163 }
22164 }
22165
22166 var res;
22167 if (a.cmpn(1) === 0) {
22168 res = x1;
22169 } else {
22170 res = x2;
22171 }
22172
22173 if (res.cmpn(0) < 0) {
22174 res.iadd(p);
22175 }
22176
22177 return res;
22178 };
22179
22180 BN.prototype.gcd = function gcd (num) {
22181 if (this.isZero()) return num.abs();
22182 if (num.isZero()) return this.abs();
22183
22184 var a = this.clone();
22185 var b = num.clone();
22186 a.negative = 0;
22187 b.negative = 0;
22188
22189 // Remove common factor of two
22190 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
22191 a.iushrn(1);
22192 b.iushrn(1);
22193 }
22194
22195 do {
22196 while (a.isEven()) {
22197 a.iushrn(1);
22198 }
22199 while (b.isEven()) {
22200 b.iushrn(1);
22201 }
22202
22203 var r = a.cmp(b);
22204 if (r < 0) {
22205 // Swap `a` and `b` to make `a` always bigger than `b`
22206 var t = a;
22207 a = b;
22208 b = t;
22209 } else if (r === 0 || b.cmpn(1) === 0) {
22210 break;
22211 }
22212
22213 a.isub(b);
22214 } while (true);
22215
22216 return b.iushln(shift);
22217 };
22218
22219 // Invert number in the field F(num)
22220 BN.prototype.invm = function invm (num) {
22221 return this.egcd(num).a.umod(num);
22222 };
22223
22224 BN.prototype.isEven = function isEven () {
22225 return (this.words[0] & 1) === 0;
22226 };
22227
22228 BN.prototype.isOdd = function isOdd () {
22229 return (this.words[0] & 1) === 1;
22230 };
22231
22232 // And first word and num
22233 BN.prototype.andln = function andln (num) {
22234 return this.words[0] & num;
22235 };
22236
22237 // Increment at the bit position in-line
22238 BN.prototype.bincn = function bincn (bit) {
22239 assert(typeof bit === 'number');
22240 var r = bit % 26;
22241 var s = (bit - r) / 26;
22242 var q = 1 << r;
22243
22244 // Fast case: bit is much higher than all existing words
22245 if (this.length <= s) {
22246 this._expand(s + 1);
22247 this.words[s] |= q;
22248 return this;
22249 }
22250
22251 // Add bit and propagate, if needed
22252 var carry = q;
22253 for (var i = s; carry !== 0 && i < this.length; i++) {
22254 var w = this.words[i] | 0;
22255 w += carry;
22256 carry = w >>> 26;
22257 w &= 0x3ffffff;
22258 this.words[i] = w;
22259 }
22260 if (carry !== 0) {
22261 this.words[i] = carry;
22262 this.length++;
22263 }
22264 return this;
22265 };
22266
22267 BN.prototype.isZero = function isZero () {
22268 return this.length === 1 && this.words[0] === 0;
22269 };
22270
22271 BN.prototype.cmpn = function cmpn (num) {
22272 var negative = num < 0;
22273
22274 if (this.negative !== 0 && !negative) return -1;
22275 if (this.negative === 0 && negative) return 1;
22276
22277 this.strip();
22278
22279 var res;
22280 if (this.length > 1) {
22281 res = 1;
22282 } else {
22283 if (negative) {
22284 num = -num;
22285 }
22286
22287 assert(num <= 0x3ffffff, 'Number is too big');
22288
22289 var w = this.words[0] | 0;
22290 res = w === num ? 0 : w < num ? -1 : 1;
22291 }
22292 if (this.negative !== 0) return -res | 0;
22293 return res;
22294 };
22295
22296 // Compare two numbers and return:
22297 // 1 - if `this` > `num`
22298 // 0 - if `this` == `num`
22299 // -1 - if `this` < `num`
22300 BN.prototype.cmp = function cmp (num) {
22301 if (this.negative !== 0 && num.negative === 0) return -1;
22302 if (this.negative === 0 && num.negative !== 0) return 1;
22303
22304 var res = this.ucmp(num);
22305 if (this.negative !== 0) return -res | 0;
22306 return res;
22307 };
22308
22309 // Unsigned comparison
22310 BN.prototype.ucmp = function ucmp (num) {
22311 // At this point both numbers have the same sign
22312 if (this.length > num.length) return 1;
22313 if (this.length < num.length) return -1;
22314
22315 var res = 0;
22316 for (var i = this.length - 1; i >= 0; i--) {
22317 var a = this.words[i] | 0;
22318 var b = num.words[i] | 0;
22319
22320 if (a === b) continue;
22321 if (a < b) {
22322 res = -1;
22323 } else if (a > b) {
22324 res = 1;
22325 }
22326 break;
22327 }
22328 return res;
22329 };
22330
22331 BN.prototype.gtn = function gtn (num) {
22332 return this.cmpn(num) === 1;
22333 };
22334
22335 BN.prototype.gt = function gt (num) {
22336 return this.cmp(num) === 1;
22337 };
22338
22339 BN.prototype.gten = function gten (num) {
22340 return this.cmpn(num) >= 0;
22341 };
22342
22343 BN.prototype.gte = function gte (num) {
22344 return this.cmp(num) >= 0;
22345 };
22346
22347 BN.prototype.ltn = function ltn (num) {
22348 return this.cmpn(num) === -1;
22349 };
22350
22351 BN.prototype.lt = function lt (num) {
22352 return this.cmp(num) === -1;
22353 };
22354
22355 BN.prototype.lten = function lten (num) {
22356 return this.cmpn(num) <= 0;
22357 };
22358
22359 BN.prototype.lte = function lte (num) {
22360 return this.cmp(num) <= 0;
22361 };
22362
22363 BN.prototype.eqn = function eqn (num) {
22364 return this.cmpn(num) === 0;
22365 };
22366
22367 BN.prototype.eq = function eq (num) {
22368 return this.cmp(num) === 0;
22369 };
22370
22371 //
22372 // A reduce context, could be using montgomery or something better, depending
22373 // on the `m` itself.
22374 //
22375 BN.red = function red (num) {
22376 return new Red(num);
22377 };
22378
22379 BN.prototype.toRed = function toRed (ctx) {
22380 assert(!this.red, 'Already a number in reduction context');
22381 assert(this.negative === 0, 'red works only with positives');
22382 return ctx.convertTo(this)._forceRed(ctx);
22383 };
22384
22385 BN.prototype.fromRed = function fromRed () {
22386 assert(this.red, 'fromRed works only with numbers in reduction context');
22387 return this.red.convertFrom(this);
22388 };
22389
22390 BN.prototype._forceRed = function _forceRed (ctx) {
22391 this.red = ctx;
22392 return this;
22393 };
22394
22395 BN.prototype.forceRed = function forceRed (ctx) {
22396 assert(!this.red, 'Already a number in reduction context');
22397 return this._forceRed(ctx);
22398 };
22399
22400 BN.prototype.redAdd = function redAdd (num) {
22401 assert(this.red, 'redAdd works only with red numbers');
22402 return this.red.add(this, num);
22403 };
22404
22405 BN.prototype.redIAdd = function redIAdd (num) {
22406 assert(this.red, 'redIAdd works only with red numbers');
22407 return this.red.iadd(this, num);
22408 };
22409
22410 BN.prototype.redSub = function redSub (num) {
22411 assert(this.red, 'redSub works only with red numbers');
22412 return this.red.sub(this, num);
22413 };
22414
22415 BN.prototype.redISub = function redISub (num) {
22416 assert(this.red, 'redISub works only with red numbers');
22417 return this.red.isub(this, num);
22418 };
22419
22420 BN.prototype.redShl = function redShl (num) {
22421 assert(this.red, 'redShl works only with red numbers');
22422 return this.red.shl(this, num);
22423 };
22424
22425 BN.prototype.redMul = function redMul (num) {
22426 assert(this.red, 'redMul works only with red numbers');
22427 this.red._verify2(this, num);
22428 return this.red.mul(this, num);
22429 };
22430
22431 BN.prototype.redIMul = function redIMul (num) {
22432 assert(this.red, 'redMul works only with red numbers');
22433 this.red._verify2(this, num);
22434 return this.red.imul(this, num);
22435 };
22436
22437 BN.prototype.redSqr = function redSqr () {
22438 assert(this.red, 'redSqr works only with red numbers');
22439 this.red._verify1(this);
22440 return this.red.sqr(this);
22441 };
22442
22443 BN.prototype.redISqr = function redISqr () {
22444 assert(this.red, 'redISqr works only with red numbers');
22445 this.red._verify1(this);
22446 return this.red.isqr(this);
22447 };
22448
22449 // Square root over p
22450 BN.prototype.redSqrt = function redSqrt () {
22451 assert(this.red, 'redSqrt works only with red numbers');
22452 this.red._verify1(this);
22453 return this.red.sqrt(this);
22454 };
22455
22456 BN.prototype.redInvm = function redInvm () {
22457 assert(this.red, 'redInvm works only with red numbers');
22458 this.red._verify1(this);
22459 return this.red.invm(this);
22460 };
22461
22462 // Return negative clone of `this` % `red modulo`
22463 BN.prototype.redNeg = function redNeg () {
22464 assert(this.red, 'redNeg works only with red numbers');
22465 this.red._verify1(this);
22466 return this.red.neg(this);
22467 };
22468
22469 BN.prototype.redPow = function redPow (num) {
22470 assert(this.red && !num.red, 'redPow(normalNum)');
22471 this.red._verify1(this);
22472 return this.red.pow(this, num);
22473 };
22474
22475 // Prime numbers with efficient reduction
22476 var primes = {
22477 k256: null,
22478 p224: null,
22479 p192: null,
22480 p25519: null
22481 };
22482
22483 // Pseudo-Mersenne prime
22484 function MPrime (name, p) {
22485 // P = 2 ^ N - K
22486 this.name = name;
22487 this.p = new BN(p, 16);
22488 this.n = this.p.bitLength();
22489 this.k = new BN(1).iushln(this.n).isub(this.p);
22490
22491 this.tmp = this._tmp();
22492 }
22493
22494 MPrime.prototype._tmp = function _tmp () {
22495 var tmp = new BN(null);
22496 tmp.words = new Array(Math.ceil(this.n / 13));
22497 return tmp;
22498 };
22499
22500 MPrime.prototype.ireduce = function ireduce (num) {
22501 // Assumes that `num` is less than `P^2`
22502 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
22503 var r = num;
22504 var rlen;
22505
22506 do {
22507 this.split(r, this.tmp);
22508 r = this.imulK(r);
22509 r = r.iadd(this.tmp);
22510 rlen = r.bitLength();
22511 } while (rlen > this.n);
22512
22513 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
22514 if (cmp === 0) {
22515 r.words[0] = 0;
22516 r.length = 1;
22517 } else if (cmp > 0) {
22518 r.isub(this.p);
22519 } else {
22520 r.strip();
22521 }
22522
22523 return r;
22524 };
22525
22526 MPrime.prototype.split = function split (input, out) {
22527 input.iushrn(this.n, 0, out);
22528 };
22529
22530 MPrime.prototype.imulK = function imulK (num) {
22531 return num.imul(this.k);
22532 };
22533
22534 function K256 () {
22535 MPrime.call(
22536 this,
22537 'k256',
22538 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
22539 }
22540 inherits(K256, MPrime);
22541
22542 K256.prototype.split = function split (input, output) {
22543 // 256 = 9 * 26 + 22
22544 var mask = 0x3fffff;
22545
22546 var outLen = Math.min(input.length, 9);
22547 for (var i = 0; i < outLen; i++) {
22548 output.words[i] = input.words[i];
22549 }
22550 output.length = outLen;
22551
22552 if (input.length <= 9) {
22553 input.words[0] = 0;
22554 input.length = 1;
22555 return;
22556 }
22557
22558 // Shift by 9 limbs
22559 var prev = input.words[9];
22560 output.words[output.length++] = prev & mask;
22561
22562 for (i = 10; i < input.length; i++) {
22563 var next = input.words[i] | 0;
22564 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
22565 prev = next;
22566 }
22567 prev >>>= 22;
22568 input.words[i - 10] = prev;
22569 if (prev === 0 && input.length > 10) {
22570 input.length -= 10;
22571 } else {
22572 input.length -= 9;
22573 }
22574 };
22575
22576 K256.prototype.imulK = function imulK (num) {
22577 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
22578 num.words[num.length] = 0;
22579 num.words[num.length + 1] = 0;
22580 num.length += 2;
22581
22582 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
22583 var lo = 0;
22584 for (var i = 0; i < num.length; i++) {
22585 var w = num.words[i] | 0;
22586 lo += w * 0x3d1;
22587 num.words[i] = lo & 0x3ffffff;
22588 lo = w * 0x40 + ((lo / 0x4000000) | 0);
22589 }
22590
22591 // Fast length reduction
22592 if (num.words[num.length - 1] === 0) {
22593 num.length--;
22594 if (num.words[num.length - 1] === 0) {
22595 num.length--;
22596 }
22597 }
22598 return num;
22599 };
22600
22601 function P224 () {
22602 MPrime.call(
22603 this,
22604 'p224',
22605 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
22606 }
22607 inherits(P224, MPrime);
22608
22609 function P192 () {
22610 MPrime.call(
22611 this,
22612 'p192',
22613 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
22614 }
22615 inherits(P192, MPrime);
22616
22617 function P25519 () {
22618 // 2 ^ 255 - 19
22619 MPrime.call(
22620 this,
22621 '25519',
22622 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
22623 }
22624 inherits(P25519, MPrime);
22625
22626 P25519.prototype.imulK = function imulK (num) {
22627 // K = 0x13
22628 var carry = 0;
22629 for (var i = 0; i < num.length; i++) {
22630 var hi = (num.words[i] | 0) * 0x13 + carry;
22631 var lo = hi & 0x3ffffff;
22632 hi >>>= 26;
22633
22634 num.words[i] = lo;
22635 carry = hi;
22636 }
22637 if (carry !== 0) {
22638 num.words[num.length++] = carry;
22639 }
22640 return num;
22641 };
22642
22643 // Exported mostly for testing purposes, use plain name instead
22644 BN._prime = function prime (name) {
22645 // Cached version of prime
22646 if (primes[name]) return primes[name];
22647
22648 var prime;
22649 if (name === 'k256') {
22650 prime = new K256();
22651 } else if (name === 'p224') {
22652 prime = new P224();
22653 } else if (name === 'p192') {
22654 prime = new P192();
22655 } else if (name === 'p25519') {
22656 prime = new P25519();
22657 } else {
22658 throw new Error('Unknown prime ' + name);
22659 }
22660 primes[name] = prime;
22661
22662 return prime;
22663 };
22664
22665 //
22666 // Base reduction engine
22667 //
22668 function Red (m) {
22669 if (typeof m === 'string') {
22670 var prime = BN._prime(m);
22671 this.m = prime.p;
22672 this.prime = prime;
22673 } else {
22674 assert(m.gtn(1), 'modulus must be greater than 1');
22675 this.m = m;
22676 this.prime = null;
22677 }
22678 }
22679
22680 Red.prototype._verify1 = function _verify1 (a) {
22681 assert(a.negative === 0, 'red works only with positives');
22682 assert(a.red, 'red works only with red numbers');
22683 };
22684
22685 Red.prototype._verify2 = function _verify2 (a, b) {
22686 assert((a.negative | b.negative) === 0, 'red works only with positives');
22687 assert(a.red && a.red === b.red,
22688 'red works only with red numbers');
22689 };
22690
22691 Red.prototype.imod = function imod (a) {
22692 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
22693 return a.umod(this.m)._forceRed(this);
22694 };
22695
22696 Red.prototype.neg = function neg (a) {
22697 if (a.isZero()) {
22698 return a.clone();
22699 }
22700
22701 return this.m.sub(a)._forceRed(this);
22702 };
22703
22704 Red.prototype.add = function add (a, b) {
22705 this._verify2(a, b);
22706
22707 var res = a.add(b);
22708 if (res.cmp(this.m) >= 0) {
22709 res.isub(this.m);
22710 }
22711 return res._forceRed(this);
22712 };
22713
22714 Red.prototype.iadd = function iadd (a, b) {
22715 this._verify2(a, b);
22716
22717 var res = a.iadd(b);
22718 if (res.cmp(this.m) >= 0) {
22719 res.isub(this.m);
22720 }
22721 return res;
22722 };
22723
22724 Red.prototype.sub = function sub (a, b) {
22725 this._verify2(a, b);
22726
22727 var res = a.sub(b);
22728 if (res.cmpn(0) < 0) {
22729 res.iadd(this.m);
22730 }
22731 return res._forceRed(this);
22732 };
22733
22734 Red.prototype.isub = function isub (a, b) {
22735 this._verify2(a, b);
22736
22737 var res = a.isub(b);
22738 if (res.cmpn(0) < 0) {
22739 res.iadd(this.m);
22740 }
22741 return res;
22742 };
22743
22744 Red.prototype.shl = function shl (a, num) {
22745 this._verify1(a);
22746 return this.imod(a.ushln(num));
22747 };
22748
22749 Red.prototype.imul = function imul (a, b) {
22750 this._verify2(a, b);
22751 return this.imod(a.imul(b));
22752 };
22753
22754 Red.prototype.mul = function mul (a, b) {
22755 this._verify2(a, b);
22756 return this.imod(a.mul(b));
22757 };
22758
22759 Red.prototype.isqr = function isqr (a) {
22760 return this.imul(a, a.clone());
22761 };
22762
22763 Red.prototype.sqr = function sqr (a) {
22764 return this.mul(a, a);
22765 };
22766
22767 Red.prototype.sqrt = function sqrt (a) {
22768 if (a.isZero()) return a.clone();
22769
22770 var mod3 = this.m.andln(3);
22771 assert(mod3 % 2 === 1);
22772
22773 // Fast case
22774 if (mod3 === 3) {
22775 var pow = this.m.add(new BN(1)).iushrn(2);
22776 return this.pow(a, pow);
22777 }
22778
22779 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
22780 //
22781 // Find Q and S, that Q * 2 ^ S = (P - 1)
22782 var q = this.m.subn(1);
22783 var s = 0;
22784 while (!q.isZero() && q.andln(1) === 0) {
22785 s++;
22786 q.iushrn(1);
22787 }
22788 assert(!q.isZero());
22789
22790 var one = new BN(1).toRed(this);
22791 var nOne = one.redNeg();
22792
22793 // Find quadratic non-residue
22794 // NOTE: Max is such because of generalized Riemann hypothesis.
22795 var lpow = this.m.subn(1).iushrn(1);
22796 var z = this.m.bitLength();
22797 z = new BN(2 * z * z).toRed(this);
22798
22799 while (this.pow(z, lpow).cmp(nOne) !== 0) {
22800 z.redIAdd(nOne);
22801 }
22802
22803 var c = this.pow(z, q);
22804 var r = this.pow(a, q.addn(1).iushrn(1));
22805 var t = this.pow(a, q);
22806 var m = s;
22807 while (t.cmp(one) !== 0) {
22808 var tmp = t;
22809 for (var i = 0; tmp.cmp(one) !== 0; i++) {
22810 tmp = tmp.redSqr();
22811 }
22812 assert(i < m);
22813 var b = this.pow(c, new BN(1).iushln(m - i - 1));
22814
22815 r = r.redMul(b);
22816 c = b.redSqr();
22817 t = t.redMul(c);
22818 m = i;
22819 }
22820
22821 return r;
22822 };
22823
22824 Red.prototype.invm = function invm (a) {
22825 var inv = a._invmp(this.m);
22826 if (inv.negative !== 0) {
22827 inv.negative = 0;
22828 return this.imod(inv).redNeg();
22829 } else {
22830 return this.imod(inv);
22831 }
22832 };
22833
22834 Red.prototype.pow = function pow (a, num) {
22835 if (num.isZero()) return new BN(1);
22836 if (num.cmpn(1) === 0) return a.clone();
22837
22838 var windowSize = 4;
22839 var wnd = new Array(1 << windowSize);
22840 wnd[0] = new BN(1).toRed(this);
22841 wnd[1] = a;
22842 for (var i = 2; i < wnd.length; i++) {
22843 wnd[i] = this.mul(wnd[i - 1], a);
22844 }
22845
22846 var res = wnd[0];
22847 var current = 0;
22848 var currentLen = 0;
22849 var start = num.bitLength() % 26;
22850 if (start === 0) {
22851 start = 26;
22852 }
22853
22854 for (i = num.length - 1; i >= 0; i--) {
22855 var word = num.words[i];
22856 for (var j = start - 1; j >= 0; j--) {
22857 var bit = (word >> j) & 1;
22858 if (res !== wnd[0]) {
22859 res = this.sqr(res);
22860 }
22861
22862 if (bit === 0 && current === 0) {
22863 currentLen = 0;
22864 continue;
22865 }
22866
22867 current <<= 1;
22868 current |= bit;
22869 currentLen++;
22870 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
22871
22872 res = this.mul(res, wnd[current]);
22873 currentLen = 0;
22874 current = 0;
22875 }
22876 start = 26;
22877 }
22878
22879 return res;
22880 };
22881
22882 Red.prototype.convertTo = function convertTo (num) {
22883 var r = num.umod(this.m);
22884
22885 return r === num ? r.clone() : r;
22886 };
22887
22888 Red.prototype.convertFrom = function convertFrom (num) {
22889 var res = num.clone();
22890 res.red = null;
22891 return res;
22892 };
22893
22894 //
22895 // Montgomery method engine
22896 //
22897
22898 BN.mont = function mont (num) {
22899 return new Mont(num);
22900 };
22901
22902 function Mont (m) {
22903 Red.call(this, m);
22904
22905 this.shift = this.m.bitLength();
22906 if (this.shift % 26 !== 0) {
22907 this.shift += 26 - (this.shift % 26);
22908 }
22909
22910 this.r = new BN(1).iushln(this.shift);
22911 this.r2 = this.imod(this.r.sqr());
22912 this.rinv = this.r._invmp(this.m);
22913
22914 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
22915 this.minv = this.minv.umod(this.r);
22916 this.minv = this.r.sub(this.minv);
22917 }
22918 inherits(Mont, Red);
22919
22920 Mont.prototype.convertTo = function convertTo (num) {
22921 return this.imod(num.ushln(this.shift));
22922 };
22923
22924 Mont.prototype.convertFrom = function convertFrom (num) {
22925 var r = this.imod(num.mul(this.rinv));
22926 r.red = null;
22927 return r;
22928 };
22929
22930 Mont.prototype.imul = function imul (a, b) {
22931 if (a.isZero() || b.isZero()) {
22932 a.words[0] = 0;
22933 a.length = 1;
22934 return a;
22935 }
22936
22937 var t = a.imul(b);
22938 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
22939 var u = t.isub(c).iushrn(this.shift);
22940 var res = u;
22941
22942 if (u.cmp(this.m) >= 0) {
22943 res = u.isub(this.m);
22944 } else if (u.cmpn(0) < 0) {
22945 res = u.iadd(this.m);
22946 }
22947
22948 return res._forceRed(this);
22949 };
22950
22951 Mont.prototype.mul = function mul (a, b) {
22952 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
22953
22954 var t = a.mul(b);
22955 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
22956 var u = t.isub(c).iushrn(this.shift);
22957 var res = u;
22958 if (u.cmp(this.m) >= 0) {
22959 res = u.isub(this.m);
22960 } else if (u.cmpn(0) < 0) {
22961 res = u.iadd(this.m);
22962 }
22963
22964 return res._forceRed(this);
22965 };
22966
22967 Mont.prototype.invm = function invm (a) {
22968 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
22969 var res = this.imod(a._invmp(this.m).mul(this.r2));
22970 return res._forceRed(this);
22971 };
22972})(typeof module === 'undefined' || module, this);
22973
22974},{}],82:[function(require,module,exports){
22975var r;
22976
22977module.exports = function rand(len) {
22978 if (!r)
22979 r = new Rand(null);
22980
22981 return r.generate(len);
22982};
22983
22984function Rand(rand) {
22985 this.rand = rand;
22986}
22987module.exports.Rand = Rand;
22988
22989Rand.prototype.generate = function generate(len) {
22990 return this._rand(len);
22991};
22992
22993// Emulate crypto API using randy
22994Rand.prototype._rand = function _rand(n) {
22995 if (this.rand.getBytes)
22996 return this.rand.getBytes(n);
22997
22998 var res = new Uint8Array(n);
22999 for (var i = 0; i < res.length; i++)
23000 res[i] = this.rand.getByte();
23001 return res;
23002};
23003
23004if (typeof self === 'object') {
23005 if (self.crypto && self.crypto.getRandomValues) {
23006 // Modern browsers
23007 Rand.prototype._rand = function _rand(n) {
23008 var arr = new Uint8Array(n);
23009 self.crypto.getRandomValues(arr);
23010 return arr;
23011 };
23012 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
23013 // IE
23014 Rand.prototype._rand = function _rand(n) {
23015 var arr = new Uint8Array(n);
23016 self.msCrypto.getRandomValues(arr);
23017 return arr;
23018 };
23019
23020 // Safari's WebWorkers do not have `crypto`
23021 } else if (typeof window === 'object') {
23022 // Old junk
23023 Rand.prototype._rand = function() {
23024 throw new Error('Not implemented yet');
23025 };
23026 }
23027} else {
23028 // Node.js or Web worker with no crypto support
23029 try {
23030 var crypto = require('crypto');
23031 if (typeof crypto.randomBytes !== 'function')
23032 throw new Error('Not supported');
23033
23034 Rand.prototype._rand = function _rand(n) {
23035 return crypto.randomBytes(n);
23036 };
23037 } catch (e) {
23038 }
23039}
23040
23041},{"crypto":3}],83:[function(require,module,exports){
23042var basex = require('base-x')
23043var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
23044
23045module.exports = basex(ALPHABET)
23046
23047},{"base-x":35}],84:[function(require,module,exports){
23048(function (Buffer){
23049'use strict'
23050
23051var base58 = require('bs58')
23052
23053module.exports = function (checksumFn) {
23054 // Encode a buffer as a base58-check encoded string
23055 function encode (payload) {
23056 var checksum = checksumFn(payload)
23057
23058 return base58.encode(Buffer.concat([
23059 payload,
23060 checksum
23061 ], payload.length + 4))
23062 }
23063
23064 function decodeRaw (buffer) {
23065 var payload = buffer.slice(0, -4)
23066 var checksum = buffer.slice(-4)
23067 var newChecksum = checksumFn(payload)
23068
23069 if (checksum[0] ^ newChecksum[0] |
23070 checksum[1] ^ newChecksum[1] |
23071 checksum[2] ^ newChecksum[2] |
23072 checksum[3] ^ newChecksum[3]) return
23073
23074 return payload
23075 }
23076
23077 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
23078 function decodeUnsafe (string) {
23079 var buffer = base58.decodeUnsafe(string)
23080 if (!buffer) return
23081
23082 return decodeRaw(buffer)
23083 }
23084
23085 function decode (string) {
23086 var buffer = base58.decode(string)
23087 var payload = decodeRaw(buffer, checksumFn)
23088 if (!payload) throw new Error('Invalid checksum')
23089 return payload
23090 }
23091
23092 return {
23093 encode: encode,
23094 decode: decode,
23095 decodeUnsafe: decodeUnsafe
23096 }
23097}
23098
23099}).call(this,require("buffer").Buffer)
23100},{"bs58":83,"buffer":5}],85:[function(require,module,exports){
23101'use strict'
23102
23103var createHash = require('create-hash')
23104var bs58checkBase = require('./base')
23105
23106// SHA256(SHA256(buffer))
23107function sha256x2 (buffer) {
23108 var tmp = createHash('sha256').update(buffer).digest()
23109 return createHash('sha256').update(tmp).digest()
23110}
23111
23112module.exports = bs58checkBase(sha256x2)
23113
23114},{"./base":84,"create-hash":87}],86:[function(require,module,exports){
23115var Buffer = require('safe-buffer').Buffer
23116var Transform = require('stream').Transform
23117var StringDecoder = require('string_decoder').StringDecoder
23118var inherits = require('inherits')
23119
23120function CipherBase (hashMode) {
23121 Transform.call(this)
23122 this.hashMode = typeof hashMode === 'string'
23123 if (this.hashMode) {
23124 this[hashMode] = this._finalOrDigest
23125 } else {
23126 this.final = this._finalOrDigest
23127 }
23128 if (this._final) {
23129 this.__final = this._final
23130 this._final = null
23131 }
23132 this._decoder = null
23133 this._encoding = null
23134}
23135inherits(CipherBase, Transform)
23136
23137CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
23138 if (typeof data === 'string') {
23139 data = Buffer.from(data, inputEnc)
23140 }
23141
23142 var outData = this._update(data)
23143 if (this.hashMode) return this
23144
23145 if (outputEnc) {
23146 outData = this._toString(outData, outputEnc)
23147 }
23148
23149 return outData
23150}
23151
23152CipherBase.prototype.setAutoPadding = function () {}
23153CipherBase.prototype.getAuthTag = function () {
23154 throw new Error('trying to get auth tag in unsupported state')
23155}
23156
23157CipherBase.prototype.setAuthTag = function () {
23158 throw new Error('trying to set auth tag in unsupported state')
23159}
23160
23161CipherBase.prototype.setAAD = function () {
23162 throw new Error('trying to set aad in unsupported state')
23163}
23164
23165CipherBase.prototype._transform = function (data, _, next) {
23166 var err
23167 try {
23168 if (this.hashMode) {
23169 this._update(data)
23170 } else {
23171 this.push(this._update(data))
23172 }
23173 } catch (e) {
23174 err = e
23175 } finally {
23176 next(err)
23177 }
23178}
23179CipherBase.prototype._flush = function (done) {
23180 var err
23181 try {
23182 this.push(this.__final())
23183 } catch (e) {
23184 err = e
23185 }
23186
23187 done(err)
23188}
23189CipherBase.prototype._finalOrDigest = function (outputEnc) {
23190 var outData = this.__final() || Buffer.alloc(0)
23191 if (outputEnc) {
23192 outData = this._toString(outData, outputEnc, true)
23193 }
23194 return outData
23195}
23196
23197CipherBase.prototype._toString = function (value, enc, fin) {
23198 if (!this._decoder) {
23199 this._decoder = new StringDecoder(enc)
23200 this._encoding = enc
23201 }
23202
23203 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
23204
23205 var out = this._decoder.write(value)
23206 if (fin) {
23207 out += this._decoder.end()
23208 }
23209
23210 return out
23211}
23212
23213module.exports = CipherBase
23214
23215},{"inherits":121,"safe-buffer":128,"stream":28,"string_decoder":29}],87:[function(require,module,exports){
23216(function (Buffer){
23217'use strict'
23218var inherits = require('inherits')
23219var md5 = require('./md5')
23220var RIPEMD160 = require('ripemd160')
23221var sha = require('sha.js')
23222
23223var Base = require('cipher-base')
23224
23225function HashNoConstructor (hash) {
23226 Base.call(this, 'digest')
23227
23228 this._hash = hash
23229 this.buffers = []
23230}
23231
23232inherits(HashNoConstructor, Base)
23233
23234HashNoConstructor.prototype._update = function (data) {
23235 this.buffers.push(data)
23236}
23237
23238HashNoConstructor.prototype._final = function () {
23239 var buf = Buffer.concat(this.buffers)
23240 var r = this._hash(buf)
23241 this.buffers = null
23242
23243 return r
23244}
23245
23246function Hash (hash) {
23247 Base.call(this, 'digest')
23248
23249 this._hash = hash
23250}
23251
23252inherits(Hash, Base)
23253
23254Hash.prototype._update = function (data) {
23255 this._hash.update(data)
23256}
23257
23258Hash.prototype._final = function () {
23259 return this._hash.digest()
23260}
23261
23262module.exports = function createHash (alg) {
23263 alg = alg.toLowerCase()
23264 if (alg === 'md5') return new HashNoConstructor(md5)
23265 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
23266
23267 return new Hash(sha(alg))
23268}
23269
23270}).call(this,require("buffer").Buffer)
23271},{"./md5":89,"buffer":5,"cipher-base":86,"inherits":121,"ripemd160":127,"sha.js":130}],88:[function(require,module,exports){
23272(function (Buffer){
23273'use strict'
23274var intSize = 4
23275var zeroBuffer = new Buffer(intSize)
23276zeroBuffer.fill(0)
23277
23278var charSize = 8
23279var hashSize = 16
23280
23281function toArray (buf) {
23282 if ((buf.length % intSize) !== 0) {
23283 var len = buf.length + (intSize - (buf.length % intSize))
23284 buf = Buffer.concat([buf, zeroBuffer], len)
23285 }
23286
23287 var arr = new Array(buf.length >>> 2)
23288 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
23289 arr[j] = buf.readInt32LE(i)
23290 }
23291
23292 return arr
23293}
23294
23295module.exports = function hash (buf, fn) {
23296 var arr = fn(toArray(buf), buf.length * charSize)
23297 buf = new Buffer(hashSize)
23298 for (var i = 0; i < arr.length; i++) {
23299 buf.writeInt32LE(arr[i], i << 2, true)
23300 }
23301 return buf
23302}
23303
23304}).call(this,require("buffer").Buffer)
23305},{"buffer":5}],89:[function(require,module,exports){
23306'use strict'
23307/*
23308 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
23309 * Digest Algorithm, as defined in RFC 1321.
23310 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
23311 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
23312 * Distributed under the BSD License
23313 * See http://pajhome.org.uk/crypt/md5 for more info.
23314 */
23315
23316var makeHash = require('./make-hash')
23317
23318/*
23319 * Calculate the MD5 of an array of little-endian words, and a bit length
23320 */
23321function core_md5 (x, len) {
23322 /* append padding */
23323 x[len >> 5] |= 0x80 << ((len) % 32)
23324 x[(((len + 64) >>> 9) << 4) + 14] = len
23325
23326 var a = 1732584193
23327 var b = -271733879
23328 var c = -1732584194
23329 var d = 271733878
23330
23331 for (var i = 0; i < x.length; i += 16) {
23332 var olda = a
23333 var oldb = b
23334 var oldc = c
23335 var oldd = d
23336
23337 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
23338 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
23339 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
23340 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
23341 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
23342 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
23343 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
23344 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
23345 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
23346 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
23347 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
23348 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
23349 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
23350 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
23351 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
23352 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
23353
23354 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
23355 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
23356 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
23357 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
23358 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
23359 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
23360 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
23361 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
23362 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
23363 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
23364 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
23365 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
23366 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
23367 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
23368 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
23369 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
23370
23371 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
23372 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
23373 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
23374 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
23375 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
23376 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
23377 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
23378 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
23379 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
23380 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
23381 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
23382 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
23383 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
23384 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
23385 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
23386 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
23387
23388 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
23389 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
23390 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
23391 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
23392 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
23393 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
23394 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
23395 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
23396 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
23397 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
23398 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
23399 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
23400 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
23401 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
23402 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
23403 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
23404
23405 a = safe_add(a, olda)
23406 b = safe_add(b, oldb)
23407 c = safe_add(c, oldc)
23408 d = safe_add(d, oldd)
23409 }
23410
23411 return [a, b, c, d]
23412}
23413
23414/*
23415 * These functions implement the four basic operations the algorithm uses.
23416 */
23417function md5_cmn (q, a, b, x, s, t) {
23418 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
23419}
23420
23421function md5_ff (a, b, c, d, x, s, t) {
23422 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
23423}
23424
23425function md5_gg (a, b, c, d, x, s, t) {
23426 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
23427}
23428
23429function md5_hh (a, b, c, d, x, s, t) {
23430 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
23431}
23432
23433function md5_ii (a, b, c, d, x, s, t) {
23434 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
23435}
23436
23437/*
23438 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
23439 * to work around bugs in some JS interpreters.
23440 */
23441function safe_add (x, y) {
23442 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
23443 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
23444 return (msw << 16) | (lsw & 0xFFFF)
23445}
23446
23447/*
23448 * Bitwise rotate a 32-bit number to the left.
23449 */
23450function bit_rol (num, cnt) {
23451 return (num << cnt) | (num >>> (32 - cnt))
23452}
23453
23454module.exports = function md5 (buf) {
23455 return makeHash(buf, core_md5)
23456}
23457
23458},{"./make-hash":88}],90:[function(require,module,exports){
23459'use strict'
23460var inherits = require('inherits')
23461var Legacy = require('./legacy')
23462var Base = require('cipher-base')
23463var Buffer = require('safe-buffer').Buffer
23464var md5 = require('create-hash/md5')
23465var RIPEMD160 = require('ripemd160')
23466
23467var sha = require('sha.js')
23468
23469var ZEROS = Buffer.alloc(128)
23470
23471function Hmac (alg, key) {
23472 Base.call(this, 'digest')
23473 if (typeof key === 'string') {
23474 key = Buffer.from(key)
23475 }
23476
23477 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
23478
23479 this._alg = alg
23480 this._key = key
23481 if (key.length > blocksize) {
23482 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
23483 key = hash.update(key).digest()
23484 } else if (key.length < blocksize) {
23485 key = Buffer.concat([key, ZEROS], blocksize)
23486 }
23487
23488 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
23489 var opad = this._opad = Buffer.allocUnsafe(blocksize)
23490
23491 for (var i = 0; i < blocksize; i++) {
23492 ipad[i] = key[i] ^ 0x36
23493 opad[i] = key[i] ^ 0x5C
23494 }
23495 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
23496 this._hash.update(ipad)
23497}
23498
23499inherits(Hmac, Base)
23500
23501Hmac.prototype._update = function (data) {
23502 this._hash.update(data)
23503}
23504
23505Hmac.prototype._final = function () {
23506 var h = this._hash.digest()
23507 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
23508 return hash.update(this._opad).update(h).digest()
23509}
23510
23511module.exports = function createHmac (alg, key) {
23512 alg = alg.toLowerCase()
23513 if (alg === 'rmd160' || alg === 'ripemd160') {
23514 return new Hmac('rmd160', key)
23515 }
23516 if (alg === 'md5') {
23517 return new Legacy(md5, key)
23518 }
23519 return new Hmac(alg, key)
23520}
23521
23522},{"./legacy":91,"cipher-base":86,"create-hash/md5":89,"inherits":121,"ripemd160":127,"safe-buffer":128,"sha.js":130}],91:[function(require,module,exports){
23523'use strict'
23524var inherits = require('inherits')
23525var Buffer = require('safe-buffer').Buffer
23526
23527var Base = require('cipher-base')
23528
23529var ZEROS = Buffer.alloc(128)
23530var blocksize = 64
23531
23532function Hmac (alg, key) {
23533 Base.call(this, 'digest')
23534 if (typeof key === 'string') {
23535 key = Buffer.from(key)
23536 }
23537
23538 this._alg = alg
23539 this._key = key
23540
23541 if (key.length > blocksize) {
23542 key = alg(key)
23543 } else if (key.length < blocksize) {
23544 key = Buffer.concat([key, ZEROS], blocksize)
23545 }
23546
23547 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
23548 var opad = this._opad = Buffer.allocUnsafe(blocksize)
23549
23550 for (var i = 0; i < blocksize; i++) {
23551 ipad[i] = key[i] ^ 0x36
23552 opad[i] = key[i] ^ 0x5C
23553 }
23554
23555 this._hash = [ipad]
23556}
23557
23558inherits(Hmac, Base)
23559
23560Hmac.prototype._update = function (data) {
23561 this._hash.push(data)
23562}
23563
23564Hmac.prototype._final = function () {
23565 var h = this._alg(Buffer.concat(this._hash))
23566 return this._alg(Buffer.concat([this._opad, h]))
23567}
23568module.exports = Hmac
23569
23570},{"cipher-base":86,"inherits":121,"safe-buffer":128}],92:[function(require,module,exports){
23571var assert = require('assert')
23572var BigInteger = require('bigi')
23573
23574var Point = require('./point')
23575
23576function Curve (p, a, b, Gx, Gy, n, h) {
23577 this.p = p
23578 this.a = a
23579 this.b = b
23580 this.G = Point.fromAffine(this, Gx, Gy)
23581 this.n = n
23582 this.h = h
23583
23584 this.infinity = new Point(this, null, null, BigInteger.ZERO)
23585
23586 // result caching
23587 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
23588
23589 // determine size of p in bytes
23590 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
23591}
23592
23593Curve.prototype.pointFromX = function (isOdd, x) {
23594 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
23595 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
23596
23597 var y = beta
23598 if (beta.isEven() ^ !isOdd) {
23599 y = this.p.subtract(y) // -y % p
23600 }
23601
23602 return Point.fromAffine(this, x, y)
23603}
23604
23605Curve.prototype.isInfinity = function (Q) {
23606 if (Q === this.infinity) return true
23607
23608 return Q.z.signum() === 0 && Q.y.signum() !== 0
23609}
23610
23611Curve.prototype.isOnCurve = function (Q) {
23612 if (this.isInfinity(Q)) return true
23613
23614 var x = Q.affineX
23615 var y = Q.affineY
23616 var a = this.a
23617 var b = this.b
23618 var p = this.p
23619
23620 // Check that xQ and yQ are integers in the interval [0, p - 1]
23621 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
23622 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
23623
23624 // and check that y^2 = x^3 + ax + b (mod p)
23625 var lhs = y.square().mod(p)
23626 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
23627 return lhs.equals(rhs)
23628}
23629
23630/**
23631 * Validate an elliptic curve point.
23632 *
23633 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
23634 */
23635Curve.prototype.validate = function (Q) {
23636 // Check Q != O
23637 assert(!this.isInfinity(Q), 'Point is at infinity')
23638 assert(this.isOnCurve(Q), 'Point is not on the curve')
23639
23640 // Check nQ = O (where Q is a scalar multiple of G)
23641 var nQ = Q.multiply(this.n)
23642 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
23643
23644 return true
23645}
23646
23647module.exports = Curve
23648
23649},{"./point":96,"assert":1,"bigi":39}],93:[function(require,module,exports){
23650module.exports={
23651 "secp128r1": {
23652 "p": "fffffffdffffffffffffffffffffffff",
23653 "a": "fffffffdfffffffffffffffffffffffc",
23654 "b": "e87579c11079f43dd824993c2cee5ed3",
23655 "n": "fffffffe0000000075a30d1b9038a115",
23656 "h": "01",
23657 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
23658 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
23659 },
23660 "secp160k1": {
23661 "p": "fffffffffffffffffffffffffffffffeffffac73",
23662 "a": "00",
23663 "b": "07",
23664 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
23665 "h": "01",
23666 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
23667 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
23668 },
23669 "secp160r1": {
23670 "p": "ffffffffffffffffffffffffffffffff7fffffff",
23671 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
23672 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
23673 "n": "0100000000000000000001f4c8f927aed3ca752257",
23674 "h": "01",
23675 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
23676 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
23677 },
23678 "secp192k1": {
23679 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
23680 "a": "00",
23681 "b": "03",
23682 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
23683 "h": "01",
23684 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
23685 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
23686 },
23687 "secp192r1": {
23688 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
23689 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
23690 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
23691 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
23692 "h": "01",
23693 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
23694 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
23695 },
23696 "secp256k1": {
23697 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
23698 "a": "00",
23699 "b": "07",
23700 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
23701 "h": "01",
23702 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
23703 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
23704 },
23705 "secp256r1": {
23706 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
23707 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
23708 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
23709 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
23710 "h": "01",
23711 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
23712 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
23713 }
23714}
23715
23716},{}],94:[function(require,module,exports){
23717var Point = require('./point')
23718var Curve = require('./curve')
23719
23720var getCurveByName = require('./names')
23721
23722module.exports = {
23723 Curve: Curve,
23724 Point: Point,
23725 getCurveByName: getCurveByName
23726}
23727
23728},{"./curve":92,"./names":95,"./point":96}],95:[function(require,module,exports){
23729var BigInteger = require('bigi')
23730
23731var curves = require('./curves.json')
23732var Curve = require('./curve')
23733
23734function getCurveByName (name) {
23735 var curve = curves[name]
23736 if (!curve) return null
23737
23738 var p = new BigInteger(curve.p, 16)
23739 var a = new BigInteger(curve.a, 16)
23740 var b = new BigInteger(curve.b, 16)
23741 var n = new BigInteger(curve.n, 16)
23742 var h = new BigInteger(curve.h, 16)
23743 var Gx = new BigInteger(curve.Gx, 16)
23744 var Gy = new BigInteger(curve.Gy, 16)
23745
23746 return new Curve(p, a, b, Gx, Gy, n, h)
23747}
23748
23749module.exports = getCurveByName
23750
23751},{"./curve":92,"./curves.json":93,"bigi":39}],96:[function(require,module,exports){
23752(function (Buffer){
23753var assert = require('assert')
23754var BigInteger = require('bigi')
23755
23756var THREE = BigInteger.valueOf(3)
23757
23758function Point (curve, x, y, z) {
23759 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
23760
23761 this.curve = curve
23762 this.x = x
23763 this.y = y
23764 this.z = z
23765 this._zInv = null
23766
23767 this.compressed = true
23768}
23769
23770Object.defineProperty(Point.prototype, 'zInv', {
23771 get: function () {
23772 if (this._zInv === null) {
23773 this._zInv = this.z.modInverse(this.curve.p)
23774 }
23775
23776 return this._zInv
23777 }
23778})
23779
23780Object.defineProperty(Point.prototype, 'affineX', {
23781 get: function () {
23782 return this.x.multiply(this.zInv).mod(this.curve.p)
23783 }
23784})
23785
23786Object.defineProperty(Point.prototype, 'affineY', {
23787 get: function () {
23788 return this.y.multiply(this.zInv).mod(this.curve.p)
23789 }
23790})
23791
23792Point.fromAffine = function (curve, x, y) {
23793 return new Point(curve, x, y, BigInteger.ONE)
23794}
23795
23796Point.prototype.equals = function (other) {
23797 if (other === this) return true
23798 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
23799 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
23800
23801 // u = Y2 * Z1 - Y1 * Z2
23802 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
23803
23804 if (u.signum() !== 0) return false
23805
23806 // v = X2 * Z1 - X1 * Z2
23807 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
23808
23809 return v.signum() === 0
23810}
23811
23812Point.prototype.negate = function () {
23813 var y = this.curve.p.subtract(this.y)
23814
23815 return new Point(this.curve, this.x, y, this.z)
23816}
23817
23818Point.prototype.add = function (b) {
23819 if (this.curve.isInfinity(this)) return b
23820 if (this.curve.isInfinity(b)) return this
23821
23822 var x1 = this.x
23823 var y1 = this.y
23824 var x2 = b.x
23825 var y2 = b.y
23826
23827 // u = Y2 * Z1 - Y1 * Z2
23828 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
23829 // v = X2 * Z1 - X1 * Z2
23830 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
23831
23832 if (v.signum() === 0) {
23833 if (u.signum() === 0) {
23834 return this.twice() // this == b, so double
23835 }
23836
23837 return this.curve.infinity // this = -b, so infinity
23838 }
23839
23840 var v2 = v.square()
23841 var v3 = v2.multiply(v)
23842 var x1v2 = x1.multiply(v2)
23843 var zu2 = u.square().multiply(this.z)
23844
23845 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
23846 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
23847 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
23848 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)
23849 // z3 = v^3 * z1 * z2
23850 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
23851
23852 return new Point(this.curve, x3, y3, z3)
23853}
23854
23855Point.prototype.twice = function () {
23856 if (this.curve.isInfinity(this)) return this
23857 if (this.y.signum() === 0) return this.curve.infinity
23858
23859 var x1 = this.x
23860 var y1 = this.y
23861
23862 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
23863 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
23864 var a = this.curve.a
23865
23866 // w = 3 * x1^2 + a * z1^2
23867 var w = x1.square().multiply(THREE)
23868
23869 if (a.signum() !== 0) {
23870 w = w.add(this.z.square().multiply(a))
23871 }
23872
23873 w = w.mod(this.curve.p)
23874 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
23875 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
23876 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
23877 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
23878 // z3 = 8 * (y1 * z1)^3
23879 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
23880
23881 return new Point(this.curve, x3, y3, z3)
23882}
23883
23884// Simple NAF (Non-Adjacent Form) multiplication algorithm
23885// TODO: modularize the multiplication algorithm
23886Point.prototype.multiply = function (k) {
23887 if (this.curve.isInfinity(this)) return this
23888 if (k.signum() === 0) return this.curve.infinity
23889
23890 var e = k
23891 var h = e.multiply(THREE)
23892
23893 var neg = this.negate()
23894 var R = this
23895
23896 for (var i = h.bitLength() - 2; i > 0; --i) {
23897 var hBit = h.testBit(i)
23898 var eBit = e.testBit(i)
23899
23900 R = R.twice()
23901
23902 if (hBit !== eBit) {
23903 R = R.add(hBit ? this : neg)
23904 }
23905 }
23906
23907 return R
23908}
23909
23910// Compute this*j + x*k (simultaneous multiplication)
23911Point.prototype.multiplyTwo = function (j, x, k) {
23912 var i = Math.max(j.bitLength(), k.bitLength()) - 1
23913 var R = this.curve.infinity
23914 var both = this.add(x)
23915
23916 while (i >= 0) {
23917 var jBit = j.testBit(i)
23918 var kBit = k.testBit(i)
23919
23920 R = R.twice()
23921
23922 if (jBit) {
23923 if (kBit) {
23924 R = R.add(both)
23925 } else {
23926 R = R.add(this)
23927 }
23928 } else if (kBit) {
23929 R = R.add(x)
23930 }
23931 --i
23932 }
23933
23934 return R
23935}
23936
23937Point.prototype.getEncoded = function (compressed) {
23938 if (compressed == null) compressed = this.compressed
23939 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
23940
23941 var x = this.affineX
23942 var y = this.affineY
23943 var byteLength = this.curve.pLength
23944 var buffer
23945
23946 // 0x02/0x03 | X
23947 if (compressed) {
23948 buffer = new Buffer(1 + byteLength)
23949 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
23950
23951 // 0x04 | X | Y
23952 } else {
23953 buffer = new Buffer(1 + byteLength + byteLength)
23954 buffer.writeUInt8(0x04, 0)
23955
23956 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
23957 }
23958
23959 x.toBuffer(byteLength).copy(buffer, 1)
23960
23961 return buffer
23962}
23963
23964Point.decodeFrom = function (curve, buffer) {
23965 var type = buffer.readUInt8(0)
23966 var compressed = (type !== 4)
23967
23968 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
23969 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
23970
23971 var Q
23972 if (compressed) {
23973 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
23974 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
23975
23976 var isOdd = (type === 0x03)
23977 Q = curve.pointFromX(isOdd, x)
23978 } else {
23979 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
23980
23981 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
23982 Q = Point.fromAffine(curve, x, y)
23983 }
23984
23985 Q.compressed = compressed
23986 return Q
23987}
23988
23989Point.prototype.toString = function () {
23990 if (this.curve.isInfinity(this)) return '(INFINITY)'
23991
23992 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
23993}
23994
23995module.exports = Point
23996
23997}).call(this,require("buffer").Buffer)
23998},{"assert":1,"bigi":39,"buffer":5}],97:[function(require,module,exports){
23999'use strict';
24000
24001var elliptic = exports;
24002
24003elliptic.version = require('../package.json').version;
24004elliptic.utils = require('./elliptic/utils');
24005elliptic.rand = require('brorand');
24006elliptic.curve = require('./elliptic/curve');
24007elliptic.curves = require('./elliptic/curves');
24008
24009// Protocols
24010elliptic.ec = require('./elliptic/ec');
24011elliptic.eddsa = require('./elliptic/eddsa');
24012
24013},{"../package.json":112,"./elliptic/curve":100,"./elliptic/curves":103,"./elliptic/ec":104,"./elliptic/eddsa":107,"./elliptic/utils":111,"brorand":82}],98:[function(require,module,exports){
24014'use strict';
24015
24016var BN = require('bn.js');
24017var elliptic = require('../../elliptic');
24018var utils = elliptic.utils;
24019var getNAF = utils.getNAF;
24020var getJSF = utils.getJSF;
24021var assert = utils.assert;
24022
24023function BaseCurve(type, conf) {
24024 this.type = type;
24025 this.p = new BN(conf.p, 16);
24026
24027 // Use Montgomery, when there is no fast reduction for the prime
24028 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
24029
24030 // Useful for many curves
24031 this.zero = new BN(0).toRed(this.red);
24032 this.one = new BN(1).toRed(this.red);
24033 this.two = new BN(2).toRed(this.red);
24034
24035 // Curve configuration, optional
24036 this.n = conf.n && new BN(conf.n, 16);
24037 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
24038
24039 // Temporary arrays
24040 this._wnafT1 = new Array(4);
24041 this._wnafT2 = new Array(4);
24042 this._wnafT3 = new Array(4);
24043 this._wnafT4 = new Array(4);
24044
24045 // Generalized Greg Maxwell's trick
24046 var adjustCount = this.n && this.p.div(this.n);
24047 if (!adjustCount || adjustCount.cmpn(100) > 0) {
24048 this.redN = null;
24049 } else {
24050 this._maxwellTrick = true;
24051 this.redN = this.n.toRed(this.red);
24052 }
24053}
24054module.exports = BaseCurve;
24055
24056BaseCurve.prototype.point = function point() {
24057 throw new Error('Not implemented');
24058};
24059
24060BaseCurve.prototype.validate = function validate() {
24061 throw new Error('Not implemented');
24062};
24063
24064BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
24065 assert(p.precomputed);
24066 var doubles = p._getDoubles();
24067
24068 var naf = getNAF(k, 1);
24069 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
24070 I /= 3;
24071
24072 // Translate into more windowed form
24073 var repr = [];
24074 for (var j = 0; j < naf.length; j += doubles.step) {
24075 var nafW = 0;
24076 for (var k = j + doubles.step - 1; k >= j; k--)
24077 nafW = (nafW << 1) + naf[k];
24078 repr.push(nafW);
24079 }
24080
24081 var a = this.jpoint(null, null, null);
24082 var b = this.jpoint(null, null, null);
24083 for (var i = I; i > 0; i--) {
24084 for (var j = 0; j < repr.length; j++) {
24085 var nafW = repr[j];
24086 if (nafW === i)
24087 b = b.mixedAdd(doubles.points[j]);
24088 else if (nafW === -i)
24089 b = b.mixedAdd(doubles.points[j].neg());
24090 }
24091 a = a.add(b);
24092 }
24093 return a.toP();
24094};
24095
24096BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
24097 var w = 4;
24098
24099 // Precompute window
24100 var nafPoints = p._getNAFPoints(w);
24101 w = nafPoints.wnd;
24102 var wnd = nafPoints.points;
24103
24104 // Get NAF form
24105 var naf = getNAF(k, w);
24106
24107 // Add `this`*(N+1) for every w-NAF index
24108 var acc = this.jpoint(null, null, null);
24109 for (var i = naf.length - 1; i >= 0; i--) {
24110 // Count zeroes
24111 for (var k = 0; i >= 0 && naf[i] === 0; i--)
24112 k++;
24113 if (i >= 0)
24114 k++;
24115 acc = acc.dblp(k);
24116
24117 if (i < 0)
24118 break;
24119 var z = naf[i];
24120 assert(z !== 0);
24121 if (p.type === 'affine') {
24122 // J +- P
24123 if (z > 0)
24124 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
24125 else
24126 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
24127 } else {
24128 // J +- J
24129 if (z > 0)
24130 acc = acc.add(wnd[(z - 1) >> 1]);
24131 else
24132 acc = acc.add(wnd[(-z - 1) >> 1].neg());
24133 }
24134 }
24135 return p.type === 'affine' ? acc.toP() : acc;
24136};
24137
24138BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
24139 points,
24140 coeffs,
24141 len,
24142 jacobianResult) {
24143 var wndWidth = this._wnafT1;
24144 var wnd = this._wnafT2;
24145 var naf = this._wnafT3;
24146
24147 // Fill all arrays
24148 var max = 0;
24149 for (var i = 0; i < len; i++) {
24150 var p = points[i];
24151 var nafPoints = p._getNAFPoints(defW);
24152 wndWidth[i] = nafPoints.wnd;
24153 wnd[i] = nafPoints.points;
24154 }
24155
24156 // Comb small window NAFs
24157 for (var i = len - 1; i >= 1; i -= 2) {
24158 var a = i - 1;
24159 var b = i;
24160 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
24161 naf[a] = getNAF(coeffs[a], wndWidth[a]);
24162 naf[b] = getNAF(coeffs[b], wndWidth[b]);
24163 max = Math.max(naf[a].length, max);
24164 max = Math.max(naf[b].length, max);
24165 continue;
24166 }
24167
24168 var comb = [
24169 points[a], /* 1 */
24170 null, /* 3 */
24171 null, /* 5 */
24172 points[b] /* 7 */
24173 ];
24174
24175 // Try to avoid Projective points, if possible
24176 if (points[a].y.cmp(points[b].y) === 0) {
24177 comb[1] = points[a].add(points[b]);
24178 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
24179 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
24180 comb[1] = points[a].toJ().mixedAdd(points[b]);
24181 comb[2] = points[a].add(points[b].neg());
24182 } else {
24183 comb[1] = points[a].toJ().mixedAdd(points[b]);
24184 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
24185 }
24186
24187 var index = [
24188 -3, /* -1 -1 */
24189 -1, /* -1 0 */
24190 -5, /* -1 1 */
24191 -7, /* 0 -1 */
24192 0, /* 0 0 */
24193 7, /* 0 1 */
24194 5, /* 1 -1 */
24195 1, /* 1 0 */
24196 3 /* 1 1 */
24197 ];
24198
24199 var jsf = getJSF(coeffs[a], coeffs[b]);
24200 max = Math.max(jsf[0].length, max);
24201 naf[a] = new Array(max);
24202 naf[b] = new Array(max);
24203 for (var j = 0; j < max; j++) {
24204 var ja = jsf[0][j] | 0;
24205 var jb = jsf[1][j] | 0;
24206
24207 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
24208 naf[b][j] = 0;
24209 wnd[a] = comb;
24210 }
24211 }
24212
24213 var acc = this.jpoint(null, null, null);
24214 var tmp = this._wnafT4;
24215 for (var i = max; i >= 0; i--) {
24216 var k = 0;
24217
24218 while (i >= 0) {
24219 var zero = true;
24220 for (var j = 0; j < len; j++) {
24221 tmp[j] = naf[j][i] | 0;
24222 if (tmp[j] !== 0)
24223 zero = false;
24224 }
24225 if (!zero)
24226 break;
24227 k++;
24228 i--;
24229 }
24230 if (i >= 0)
24231 k++;
24232 acc = acc.dblp(k);
24233 if (i < 0)
24234 break;
24235
24236 for (var j = 0; j < len; j++) {
24237 var z = tmp[j];
24238 var p;
24239 if (z === 0)
24240 continue;
24241 else if (z > 0)
24242 p = wnd[j][(z - 1) >> 1];
24243 else if (z < 0)
24244 p = wnd[j][(-z - 1) >> 1].neg();
24245
24246 if (p.type === 'affine')
24247 acc = acc.mixedAdd(p);
24248 else
24249 acc = acc.add(p);
24250 }
24251 }
24252 // Zeroify references
24253 for (var i = 0; i < len; i++)
24254 wnd[i] = null;
24255
24256 if (jacobianResult)
24257 return acc;
24258 else
24259 return acc.toP();
24260};
24261
24262function BasePoint(curve, type) {
24263 this.curve = curve;
24264 this.type = type;
24265 this.precomputed = null;
24266}
24267BaseCurve.BasePoint = BasePoint;
24268
24269BasePoint.prototype.eq = function eq(/*other*/) {
24270 throw new Error('Not implemented');
24271};
24272
24273BasePoint.prototype.validate = function validate() {
24274 return this.curve.validate(this);
24275};
24276
24277BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
24278 bytes = utils.toArray(bytes, enc);
24279
24280 var len = this.p.byteLength();
24281
24282 // uncompressed, hybrid-odd, hybrid-even
24283 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
24284 bytes.length - 1 === 2 * len) {
24285 if (bytes[0] === 0x06)
24286 assert(bytes[bytes.length - 1] % 2 === 0);
24287 else if (bytes[0] === 0x07)
24288 assert(bytes[bytes.length - 1] % 2 === 1);
24289
24290 var res = this.point(bytes.slice(1, 1 + len),
24291 bytes.slice(1 + len, 1 + 2 * len));
24292
24293 return res;
24294 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
24295 bytes.length - 1 === len) {
24296 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
24297 }
24298 throw new Error('Unknown point format');
24299};
24300
24301BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
24302 return this.encode(enc, true);
24303};
24304
24305BasePoint.prototype._encode = function _encode(compact) {
24306 var len = this.curve.p.byteLength();
24307 var x = this.getX().toArray('be', len);
24308
24309 if (compact)
24310 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
24311
24312 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
24313};
24314
24315BasePoint.prototype.encode = function encode(enc, compact) {
24316 return utils.encode(this._encode(compact), enc);
24317};
24318
24319BasePoint.prototype.precompute = function precompute(power) {
24320 if (this.precomputed)
24321 return this;
24322
24323 var precomputed = {
24324 doubles: null,
24325 naf: null,
24326 beta: null
24327 };
24328 precomputed.naf = this._getNAFPoints(8);
24329 precomputed.doubles = this._getDoubles(4, power);
24330 precomputed.beta = this._getBeta();
24331 this.precomputed = precomputed;
24332
24333 return this;
24334};
24335
24336BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
24337 if (!this.precomputed)
24338 return false;
24339
24340 var doubles = this.precomputed.doubles;
24341 if (!doubles)
24342 return false;
24343
24344 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
24345};
24346
24347BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
24348 if (this.precomputed && this.precomputed.doubles)
24349 return this.precomputed.doubles;
24350
24351 var doubles = [ this ];
24352 var acc = this;
24353 for (var i = 0; i < power; i += step) {
24354 for (var j = 0; j < step; j++)
24355 acc = acc.dbl();
24356 doubles.push(acc);
24357 }
24358 return {
24359 step: step,
24360 points: doubles
24361 };
24362};
24363
24364BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
24365 if (this.precomputed && this.precomputed.naf)
24366 return this.precomputed.naf;
24367
24368 var res = [ this ];
24369 var max = (1 << wnd) - 1;
24370 var dbl = max === 1 ? null : this.dbl();
24371 for (var i = 1; i < max; i++)
24372 res[i] = res[i - 1].add(dbl);
24373 return {
24374 wnd: wnd,
24375 points: res
24376 };
24377};
24378
24379BasePoint.prototype._getBeta = function _getBeta() {
24380 return null;
24381};
24382
24383BasePoint.prototype.dblp = function dblp(k) {
24384 var r = this;
24385 for (var i = 0; i < k; i++)
24386 r = r.dbl();
24387 return r;
24388};
24389
24390},{"../../elliptic":97,"bn.js":81}],99:[function(require,module,exports){
24391'use strict';
24392
24393var curve = require('../curve');
24394var elliptic = require('../../elliptic');
24395var BN = require('bn.js');
24396var inherits = require('inherits');
24397var Base = curve.base;
24398
24399var assert = elliptic.utils.assert;
24400
24401function EdwardsCurve(conf) {
24402 // NOTE: Important as we are creating point in Base.call()
24403 this.twisted = (conf.a | 0) !== 1;
24404 this.mOneA = this.twisted && (conf.a | 0) === -1;
24405 this.extended = this.mOneA;
24406
24407 Base.call(this, 'edwards', conf);
24408
24409 this.a = new BN(conf.a, 16).umod(this.red.m);
24410 this.a = this.a.toRed(this.red);
24411 this.c = new BN(conf.c, 16).toRed(this.red);
24412 this.c2 = this.c.redSqr();
24413 this.d = new BN(conf.d, 16).toRed(this.red);
24414 this.dd = this.d.redAdd(this.d);
24415
24416 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
24417 this.oneC = (conf.c | 0) === 1;
24418}
24419inherits(EdwardsCurve, Base);
24420module.exports = EdwardsCurve;
24421
24422EdwardsCurve.prototype._mulA = function _mulA(num) {
24423 if (this.mOneA)
24424 return num.redNeg();
24425 else
24426 return this.a.redMul(num);
24427};
24428
24429EdwardsCurve.prototype._mulC = function _mulC(num) {
24430 if (this.oneC)
24431 return num;
24432 else
24433 return this.c.redMul(num);
24434};
24435
24436// Just for compatibility with Short curve
24437EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
24438 return this.point(x, y, z, t);
24439};
24440
24441EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
24442 x = new BN(x, 16);
24443 if (!x.red)
24444 x = x.toRed(this.red);
24445
24446 var x2 = x.redSqr();
24447 var rhs = this.c2.redSub(this.a.redMul(x2));
24448 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
24449
24450 var y2 = rhs.redMul(lhs.redInvm());
24451 var y = y2.redSqrt();
24452 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
24453 throw new Error('invalid point');
24454
24455 var isOdd = y.fromRed().isOdd();
24456 if (odd && !isOdd || !odd && isOdd)
24457 y = y.redNeg();
24458
24459 return this.point(x, y);
24460};
24461
24462EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
24463 y = new BN(y, 16);
24464 if (!y.red)
24465 y = y.toRed(this.red);
24466
24467 // x^2 = (y^2 - 1) / (d y^2 + 1)
24468 var y2 = y.redSqr();
24469 var lhs = y2.redSub(this.one);
24470 var rhs = y2.redMul(this.d).redAdd(this.one);
24471 var x2 = lhs.redMul(rhs.redInvm());
24472
24473 if (x2.cmp(this.zero) === 0) {
24474 if (odd)
24475 throw new Error('invalid point');
24476 else
24477 return this.point(this.zero, y);
24478 }
24479
24480 var x = x2.redSqrt();
24481 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
24482 throw new Error('invalid point');
24483
24484 if (x.isOdd() !== odd)
24485 x = x.redNeg();
24486
24487 return this.point(x, y);
24488};
24489
24490EdwardsCurve.prototype.validate = function validate(point) {
24491 if (point.isInfinity())
24492 return true;
24493
24494 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
24495 point.normalize();
24496
24497 var x2 = point.x.redSqr();
24498 var y2 = point.y.redSqr();
24499 var lhs = x2.redMul(this.a).redAdd(y2);
24500 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
24501
24502 return lhs.cmp(rhs) === 0;
24503};
24504
24505function Point(curve, x, y, z, t) {
24506 Base.BasePoint.call(this, curve, 'projective');
24507 if (x === null && y === null && z === null) {
24508 this.x = this.curve.zero;
24509 this.y = this.curve.one;
24510 this.z = this.curve.one;
24511 this.t = this.curve.zero;
24512 this.zOne = true;
24513 } else {
24514 this.x = new BN(x, 16);
24515 this.y = new BN(y, 16);
24516 this.z = z ? new BN(z, 16) : this.curve.one;
24517 this.t = t && new BN(t, 16);
24518 if (!this.x.red)
24519 this.x = this.x.toRed(this.curve.red);
24520 if (!this.y.red)
24521 this.y = this.y.toRed(this.curve.red);
24522 if (!this.z.red)
24523 this.z = this.z.toRed(this.curve.red);
24524 if (this.t && !this.t.red)
24525 this.t = this.t.toRed(this.curve.red);
24526 this.zOne = this.z === this.curve.one;
24527
24528 // Use extended coordinates
24529 if (this.curve.extended && !this.t) {
24530 this.t = this.x.redMul(this.y);
24531 if (!this.zOne)
24532 this.t = this.t.redMul(this.z.redInvm());
24533 }
24534 }
24535}
24536inherits(Point, Base.BasePoint);
24537
24538EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
24539 return Point.fromJSON(this, obj);
24540};
24541
24542EdwardsCurve.prototype.point = function point(x, y, z, t) {
24543 return new Point(this, x, y, z, t);
24544};
24545
24546Point.fromJSON = function fromJSON(curve, obj) {
24547 return new Point(curve, obj[0], obj[1], obj[2]);
24548};
24549
24550Point.prototype.inspect = function inspect() {
24551 if (this.isInfinity())
24552 return '<EC Point Infinity>';
24553 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
24554 ' y: ' + this.y.fromRed().toString(16, 2) +
24555 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
24556};
24557
24558Point.prototype.isInfinity = function isInfinity() {
24559 // XXX This code assumes that zero is always zero in red
24560 return this.x.cmpn(0) === 0 &&
24561 this.y.cmp(this.z) === 0;
24562};
24563
24564Point.prototype._extDbl = function _extDbl() {
24565 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
24566 // #doubling-dbl-2008-hwcd
24567 // 4M + 4S
24568
24569 // A = X1^2
24570 var a = this.x.redSqr();
24571 // B = Y1^2
24572 var b = this.y.redSqr();
24573 // C = 2 * Z1^2
24574 var c = this.z.redSqr();
24575 c = c.redIAdd(c);
24576 // D = a * A
24577 var d = this.curve._mulA(a);
24578 // E = (X1 + Y1)^2 - A - B
24579 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
24580 // G = D + B
24581 var g = d.redAdd(b);
24582 // F = G - C
24583 var f = g.redSub(c);
24584 // H = D - B
24585 var h = d.redSub(b);
24586 // X3 = E * F
24587 var nx = e.redMul(f);
24588 // Y3 = G * H
24589 var ny = g.redMul(h);
24590 // T3 = E * H
24591 var nt = e.redMul(h);
24592 // Z3 = F * G
24593 var nz = f.redMul(g);
24594 return this.curve.point(nx, ny, nz, nt);
24595};
24596
24597Point.prototype._projDbl = function _projDbl() {
24598 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
24599 // #doubling-dbl-2008-bbjlp
24600 // #doubling-dbl-2007-bl
24601 // and others
24602 // Generally 3M + 4S or 2M + 4S
24603
24604 // B = (X1 + Y1)^2
24605 var b = this.x.redAdd(this.y).redSqr();
24606 // C = X1^2
24607 var c = this.x.redSqr();
24608 // D = Y1^2
24609 var d = this.y.redSqr();
24610
24611 var nx;
24612 var ny;
24613 var nz;
24614 if (this.curve.twisted) {
24615 // E = a * C
24616 var e = this.curve._mulA(c);
24617 // F = E + D
24618 var f = e.redAdd(d);
24619 if (this.zOne) {
24620 // X3 = (B - C - D) * (F - 2)
24621 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
24622 // Y3 = F * (E - D)
24623 ny = f.redMul(e.redSub(d));
24624 // Z3 = F^2 - 2 * F
24625 nz = f.redSqr().redSub(f).redSub(f);
24626 } else {
24627 // H = Z1^2
24628 var h = this.z.redSqr();
24629 // J = F - 2 * H
24630 var j = f.redSub(h).redISub(h);
24631 // X3 = (B-C-D)*J
24632 nx = b.redSub(c).redISub(d).redMul(j);
24633 // Y3 = F * (E - D)
24634 ny = f.redMul(e.redSub(d));
24635 // Z3 = F * J
24636 nz = f.redMul(j);
24637 }
24638 } else {
24639 // E = C + D
24640 var e = c.redAdd(d);
24641 // H = (c * Z1)^2
24642 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
24643 // J = E - 2 * H
24644 var j = e.redSub(h).redSub(h);
24645 // X3 = c * (B - E) * J
24646 nx = this.curve._mulC(b.redISub(e)).redMul(j);
24647 // Y3 = c * E * (C - D)
24648 ny = this.curve._mulC(e).redMul(c.redISub(d));
24649 // Z3 = E * J
24650 nz = e.redMul(j);
24651 }
24652 return this.curve.point(nx, ny, nz);
24653};
24654
24655Point.prototype.dbl = function dbl() {
24656 if (this.isInfinity())
24657 return this;
24658
24659 // Double in extended coordinates
24660 if (this.curve.extended)
24661 return this._extDbl();
24662 else
24663 return this._projDbl();
24664};
24665
24666Point.prototype._extAdd = function _extAdd(p) {
24667 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
24668 // #addition-add-2008-hwcd-3
24669 // 8M
24670
24671 // A = (Y1 - X1) * (Y2 - X2)
24672 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
24673 // B = (Y1 + X1) * (Y2 + X2)
24674 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
24675 // C = T1 * k * T2
24676 var c = this.t.redMul(this.curve.dd).redMul(p.t);
24677 // D = Z1 * 2 * Z2
24678 var d = this.z.redMul(p.z.redAdd(p.z));
24679 // E = B - A
24680 var e = b.redSub(a);
24681 // F = D - C
24682 var f = d.redSub(c);
24683 // G = D + C
24684 var g = d.redAdd(c);
24685 // H = B + A
24686 var h = b.redAdd(a);
24687 // X3 = E * F
24688 var nx = e.redMul(f);
24689 // Y3 = G * H
24690 var ny = g.redMul(h);
24691 // T3 = E * H
24692 var nt = e.redMul(h);
24693 // Z3 = F * G
24694 var nz = f.redMul(g);
24695 return this.curve.point(nx, ny, nz, nt);
24696};
24697
24698Point.prototype._projAdd = function _projAdd(p) {
24699 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
24700 // #addition-add-2008-bbjlp
24701 // #addition-add-2007-bl
24702 // 10M + 1S
24703
24704 // A = Z1 * Z2
24705 var a = this.z.redMul(p.z);
24706 // B = A^2
24707 var b = a.redSqr();
24708 // C = X1 * X2
24709 var c = this.x.redMul(p.x);
24710 // D = Y1 * Y2
24711 var d = this.y.redMul(p.y);
24712 // E = d * C * D
24713 var e = this.curve.d.redMul(c).redMul(d);
24714 // F = B - E
24715 var f = b.redSub(e);
24716 // G = B + E
24717 var g = b.redAdd(e);
24718 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
24719 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
24720 var nx = a.redMul(f).redMul(tmp);
24721 var ny;
24722 var nz;
24723 if (this.curve.twisted) {
24724 // Y3 = A * G * (D - a * C)
24725 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
24726 // Z3 = F * G
24727 nz = f.redMul(g);
24728 } else {
24729 // Y3 = A * G * (D - C)
24730 ny = a.redMul(g).redMul(d.redSub(c));
24731 // Z3 = c * F * G
24732 nz = this.curve._mulC(f).redMul(g);
24733 }
24734 return this.curve.point(nx, ny, nz);
24735};
24736
24737Point.prototype.add = function add(p) {
24738 if (this.isInfinity())
24739 return p;
24740 if (p.isInfinity())
24741 return this;
24742
24743 if (this.curve.extended)
24744 return this._extAdd(p);
24745 else
24746 return this._projAdd(p);
24747};
24748
24749Point.prototype.mul = function mul(k) {
24750 if (this._hasDoubles(k))
24751 return this.curve._fixedNafMul(this, k);
24752 else
24753 return this.curve._wnafMul(this, k);
24754};
24755
24756Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
24757 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
24758};
24759
24760Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
24761 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
24762};
24763
24764Point.prototype.normalize = function normalize() {
24765 if (this.zOne)
24766 return this;
24767
24768 // Normalize coordinates
24769 var zi = this.z.redInvm();
24770 this.x = this.x.redMul(zi);
24771 this.y = this.y.redMul(zi);
24772 if (this.t)
24773 this.t = this.t.redMul(zi);
24774 this.z = this.curve.one;
24775 this.zOne = true;
24776 return this;
24777};
24778
24779Point.prototype.neg = function neg() {
24780 return this.curve.point(this.x.redNeg(),
24781 this.y,
24782 this.z,
24783 this.t && this.t.redNeg());
24784};
24785
24786Point.prototype.getX = function getX() {
24787 this.normalize();
24788 return this.x.fromRed();
24789};
24790
24791Point.prototype.getY = function getY() {
24792 this.normalize();
24793 return this.y.fromRed();
24794};
24795
24796Point.prototype.eq = function eq(other) {
24797 return this === other ||
24798 this.getX().cmp(other.getX()) === 0 &&
24799 this.getY().cmp(other.getY()) === 0;
24800};
24801
24802Point.prototype.eqXToP = function eqXToP(x) {
24803 var rx = x.toRed(this.curve.red).redMul(this.z);
24804 if (this.x.cmp(rx) === 0)
24805 return true;
24806
24807 var xc = x.clone();
24808 var t = this.curve.redN.redMul(this.z);
24809 for (;;) {
24810 xc.iadd(this.curve.n);
24811 if (xc.cmp(this.curve.p) >= 0)
24812 return false;
24813
24814 rx.redIAdd(t);
24815 if (this.x.cmp(rx) === 0)
24816 return true;
24817 }
24818 return false;
24819};
24820
24821// Compatibility with BaseCurve
24822Point.prototype.toP = Point.prototype.normalize;
24823Point.prototype.mixedAdd = Point.prototype.add;
24824
24825},{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],100:[function(require,module,exports){
24826'use strict';
24827
24828var curve = exports;
24829
24830curve.base = require('./base');
24831curve.short = require('./short');
24832curve.mont = require('./mont');
24833curve.edwards = require('./edwards');
24834
24835},{"./base":98,"./edwards":99,"./mont":101,"./short":102}],101:[function(require,module,exports){
24836'use strict';
24837
24838var curve = require('../curve');
24839var BN = require('bn.js');
24840var inherits = require('inherits');
24841var Base = curve.base;
24842
24843var elliptic = require('../../elliptic');
24844var utils = elliptic.utils;
24845
24846function MontCurve(conf) {
24847 Base.call(this, 'mont', conf);
24848
24849 this.a = new BN(conf.a, 16).toRed(this.red);
24850 this.b = new BN(conf.b, 16).toRed(this.red);
24851 this.i4 = new BN(4).toRed(this.red).redInvm();
24852 this.two = new BN(2).toRed(this.red);
24853 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
24854}
24855inherits(MontCurve, Base);
24856module.exports = MontCurve;
24857
24858MontCurve.prototype.validate = function validate(point) {
24859 var x = point.normalize().x;
24860 var x2 = x.redSqr();
24861 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
24862 var y = rhs.redSqrt();
24863
24864 return y.redSqr().cmp(rhs) === 0;
24865};
24866
24867function Point(curve, x, z) {
24868 Base.BasePoint.call(this, curve, 'projective');
24869 if (x === null && z === null) {
24870 this.x = this.curve.one;
24871 this.z = this.curve.zero;
24872 } else {
24873 this.x = new BN(x, 16);
24874 this.z = new BN(z, 16);
24875 if (!this.x.red)
24876 this.x = this.x.toRed(this.curve.red);
24877 if (!this.z.red)
24878 this.z = this.z.toRed(this.curve.red);
24879 }
24880}
24881inherits(Point, Base.BasePoint);
24882
24883MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
24884 return this.point(utils.toArray(bytes, enc), 1);
24885};
24886
24887MontCurve.prototype.point = function point(x, z) {
24888 return new Point(this, x, z);
24889};
24890
24891MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
24892 return Point.fromJSON(this, obj);
24893};
24894
24895Point.prototype.precompute = function precompute() {
24896 // No-op
24897};
24898
24899Point.prototype._encode = function _encode() {
24900 return this.getX().toArray('be', this.curve.p.byteLength());
24901};
24902
24903Point.fromJSON = function fromJSON(curve, obj) {
24904 return new Point(curve, obj[0], obj[1] || curve.one);
24905};
24906
24907Point.prototype.inspect = function inspect() {
24908 if (this.isInfinity())
24909 return '<EC Point Infinity>';
24910 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
24911 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
24912};
24913
24914Point.prototype.isInfinity = function isInfinity() {
24915 // XXX This code assumes that zero is always zero in red
24916 return this.z.cmpn(0) === 0;
24917};
24918
24919Point.prototype.dbl = function dbl() {
24920 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
24921 // 2M + 2S + 4A
24922
24923 // A = X1 + Z1
24924 var a = this.x.redAdd(this.z);
24925 // AA = A^2
24926 var aa = a.redSqr();
24927 // B = X1 - Z1
24928 var b = this.x.redSub(this.z);
24929 // BB = B^2
24930 var bb = b.redSqr();
24931 // C = AA - BB
24932 var c = aa.redSub(bb);
24933 // X3 = AA * BB
24934 var nx = aa.redMul(bb);
24935 // Z3 = C * (BB + A24 * C)
24936 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
24937 return this.curve.point(nx, nz);
24938};
24939
24940Point.prototype.add = function add() {
24941 throw new Error('Not supported on Montgomery curve');
24942};
24943
24944Point.prototype.diffAdd = function diffAdd(p, diff) {
24945 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
24946 // 4M + 2S + 6A
24947
24948 // A = X2 + Z2
24949 var a = this.x.redAdd(this.z);
24950 // B = X2 - Z2
24951 var b = this.x.redSub(this.z);
24952 // C = X3 + Z3
24953 var c = p.x.redAdd(p.z);
24954 // D = X3 - Z3
24955 var d = p.x.redSub(p.z);
24956 // DA = D * A
24957 var da = d.redMul(a);
24958 // CB = C * B
24959 var cb = c.redMul(b);
24960 // X5 = Z1 * (DA + CB)^2
24961 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
24962 // Z5 = X1 * (DA - CB)^2
24963 var nz = diff.x.redMul(da.redISub(cb).redSqr());
24964 return this.curve.point(nx, nz);
24965};
24966
24967Point.prototype.mul = function mul(k) {
24968 var t = k.clone();
24969 var a = this; // (N / 2) * Q + Q
24970 var b = this.curve.point(null, null); // (N / 2) * Q
24971 var c = this; // Q
24972
24973 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
24974 bits.push(t.andln(1));
24975
24976 for (var i = bits.length - 1; i >= 0; i--) {
24977 if (bits[i] === 0) {
24978 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
24979 a = a.diffAdd(b, c);
24980 // N * Q = 2 * ((N / 2) * Q + Q))
24981 b = b.dbl();
24982 } else {
24983 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
24984 b = a.diffAdd(b, c);
24985 // N * Q + Q = 2 * ((N / 2) * Q + Q)
24986 a = a.dbl();
24987 }
24988 }
24989 return b;
24990};
24991
24992Point.prototype.mulAdd = function mulAdd() {
24993 throw new Error('Not supported on Montgomery curve');
24994};
24995
24996Point.prototype.jumlAdd = function jumlAdd() {
24997 throw new Error('Not supported on Montgomery curve');
24998};
24999
25000Point.prototype.eq = function eq(other) {
25001 return this.getX().cmp(other.getX()) === 0;
25002};
25003
25004Point.prototype.normalize = function normalize() {
25005 this.x = this.x.redMul(this.z.redInvm());
25006 this.z = this.curve.one;
25007 return this;
25008};
25009
25010Point.prototype.getX = function getX() {
25011 // Normalize coordinates
25012 this.normalize();
25013
25014 return this.x.fromRed();
25015};
25016
25017},{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],102:[function(require,module,exports){
25018'use strict';
25019
25020var curve = require('../curve');
25021var elliptic = require('../../elliptic');
25022var BN = require('bn.js');
25023var inherits = require('inherits');
25024var Base = curve.base;
25025
25026var assert = elliptic.utils.assert;
25027
25028function ShortCurve(conf) {
25029 Base.call(this, 'short', conf);
25030
25031 this.a = new BN(conf.a, 16).toRed(this.red);
25032 this.b = new BN(conf.b, 16).toRed(this.red);
25033 this.tinv = this.two.redInvm();
25034
25035 this.zeroA = this.a.fromRed().cmpn(0) === 0;
25036 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
25037
25038 // If the curve is endomorphic, precalculate beta and lambda
25039 this.endo = this._getEndomorphism(conf);
25040 this._endoWnafT1 = new Array(4);
25041 this._endoWnafT2 = new Array(4);
25042}
25043inherits(ShortCurve, Base);
25044module.exports = ShortCurve;
25045
25046ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
25047 // No efficient endomorphism
25048 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
25049 return;
25050
25051 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
25052 var beta;
25053 var lambda;
25054 if (conf.beta) {
25055 beta = new BN(conf.beta, 16).toRed(this.red);
25056 } else {
25057 var betas = this._getEndoRoots(this.p);
25058 // Choose the smallest beta
25059 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
25060 beta = beta.toRed(this.red);
25061 }
25062 if (conf.lambda) {
25063 lambda = new BN(conf.lambda, 16);
25064 } else {
25065 // Choose the lambda that is matching selected beta
25066 var lambdas = this._getEndoRoots(this.n);
25067 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
25068 lambda = lambdas[0];
25069 } else {
25070 lambda = lambdas[1];
25071 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
25072 }
25073 }
25074
25075 // Get basis vectors, used for balanced length-two representation
25076 var basis;
25077 if (conf.basis) {
25078 basis = conf.basis.map(function(vec) {
25079 return {
25080 a: new BN(vec.a, 16),
25081 b: new BN(vec.b, 16)
25082 };
25083 });
25084 } else {
25085 basis = this._getEndoBasis(lambda);
25086 }
25087
25088 return {
25089 beta: beta,
25090 lambda: lambda,
25091 basis: basis
25092 };
25093};
25094
25095ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
25096 // Find roots of for x^2 + x + 1 in F
25097 // Root = (-1 +- Sqrt(-3)) / 2
25098 //
25099 var red = num === this.p ? this.red : BN.mont(num);
25100 var tinv = new BN(2).toRed(red).redInvm();
25101 var ntinv = tinv.redNeg();
25102
25103 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
25104
25105 var l1 = ntinv.redAdd(s).fromRed();
25106 var l2 = ntinv.redSub(s).fromRed();
25107 return [ l1, l2 ];
25108};
25109
25110ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
25111 // aprxSqrt >= sqrt(this.n)
25112 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
25113
25114 // 3.74
25115 // Run EGCD, until r(L + 1) < aprxSqrt
25116 var u = lambda;
25117 var v = this.n.clone();
25118 var x1 = new BN(1);
25119 var y1 = new BN(0);
25120 var x2 = new BN(0);
25121 var y2 = new BN(1);
25122
25123 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
25124 var a0;
25125 var b0;
25126 // First vector
25127 var a1;
25128 var b1;
25129 // Second vector
25130 var a2;
25131 var b2;
25132
25133 var prevR;
25134 var i = 0;
25135 var r;
25136 var x;
25137 while (u.cmpn(0) !== 0) {
25138 var q = v.div(u);
25139 r = v.sub(q.mul(u));
25140 x = x2.sub(q.mul(x1));
25141 var y = y2.sub(q.mul(y1));
25142
25143 if (!a1 && r.cmp(aprxSqrt) < 0) {
25144 a0 = prevR.neg();
25145 b0 = x1;
25146 a1 = r.neg();
25147 b1 = x;
25148 } else if (a1 && ++i === 2) {
25149 break;
25150 }
25151 prevR = r;
25152
25153 v = u;
25154 u = r;
25155 x2 = x1;
25156 x1 = x;
25157 y2 = y1;
25158 y1 = y;
25159 }
25160 a2 = r.neg();
25161 b2 = x;
25162
25163 var len1 = a1.sqr().add(b1.sqr());
25164 var len2 = a2.sqr().add(b2.sqr());
25165 if (len2.cmp(len1) >= 0) {
25166 a2 = a0;
25167 b2 = b0;
25168 }
25169
25170 // Normalize signs
25171 if (a1.negative) {
25172 a1 = a1.neg();
25173 b1 = b1.neg();
25174 }
25175 if (a2.negative) {
25176 a2 = a2.neg();
25177 b2 = b2.neg();
25178 }
25179
25180 return [
25181 { a: a1, b: b1 },
25182 { a: a2, b: b2 }
25183 ];
25184};
25185
25186ShortCurve.prototype._endoSplit = function _endoSplit(k) {
25187 var basis = this.endo.basis;
25188 var v1 = basis[0];
25189 var v2 = basis[1];
25190
25191 var c1 = v2.b.mul(k).divRound(this.n);
25192 var c2 = v1.b.neg().mul(k).divRound(this.n);
25193
25194 var p1 = c1.mul(v1.a);
25195 var p2 = c2.mul(v2.a);
25196 var q1 = c1.mul(v1.b);
25197 var q2 = c2.mul(v2.b);
25198
25199 // Calculate answer
25200 var k1 = k.sub(p1).sub(p2);
25201 var k2 = q1.add(q2).neg();
25202 return { k1: k1, k2: k2 };
25203};
25204
25205ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
25206 x = new BN(x, 16);
25207 if (!x.red)
25208 x = x.toRed(this.red);
25209
25210 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
25211 var y = y2.redSqrt();
25212 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
25213 throw new Error('invalid point');
25214
25215 // XXX Is there any way to tell if the number is odd without converting it
25216 // to non-red form?
25217 var isOdd = y.fromRed().isOdd();
25218 if (odd && !isOdd || !odd && isOdd)
25219 y = y.redNeg();
25220
25221 return this.point(x, y);
25222};
25223
25224ShortCurve.prototype.validate = function validate(point) {
25225 if (point.inf)
25226 return true;
25227
25228 var x = point.x;
25229 var y = point.y;
25230
25231 var ax = this.a.redMul(x);
25232 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
25233 return y.redSqr().redISub(rhs).cmpn(0) === 0;
25234};
25235
25236ShortCurve.prototype._endoWnafMulAdd =
25237 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
25238 var npoints = this._endoWnafT1;
25239 var ncoeffs = this._endoWnafT2;
25240 for (var i = 0; i < points.length; i++) {
25241 var split = this._endoSplit(coeffs[i]);
25242 var p = points[i];
25243 var beta = p._getBeta();
25244
25245 if (split.k1.negative) {
25246 split.k1.ineg();
25247 p = p.neg(true);
25248 }
25249 if (split.k2.negative) {
25250 split.k2.ineg();
25251 beta = beta.neg(true);
25252 }
25253
25254 npoints[i * 2] = p;
25255 npoints[i * 2 + 1] = beta;
25256 ncoeffs[i * 2] = split.k1;
25257 ncoeffs[i * 2 + 1] = split.k2;
25258 }
25259 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
25260
25261 // Clean-up references to points and coefficients
25262 for (var j = 0; j < i * 2; j++) {
25263 npoints[j] = null;
25264 ncoeffs[j] = null;
25265 }
25266 return res;
25267};
25268
25269function Point(curve, x, y, isRed) {
25270 Base.BasePoint.call(this, curve, 'affine');
25271 if (x === null && y === null) {
25272 this.x = null;
25273 this.y = null;
25274 this.inf = true;
25275 } else {
25276 this.x = new BN(x, 16);
25277 this.y = new BN(y, 16);
25278 // Force redgomery representation when loading from JSON
25279 if (isRed) {
25280 this.x.forceRed(this.curve.red);
25281 this.y.forceRed(this.curve.red);
25282 }
25283 if (!this.x.red)
25284 this.x = this.x.toRed(this.curve.red);
25285 if (!this.y.red)
25286 this.y = this.y.toRed(this.curve.red);
25287 this.inf = false;
25288 }
25289}
25290inherits(Point, Base.BasePoint);
25291
25292ShortCurve.prototype.point = function point(x, y, isRed) {
25293 return new Point(this, x, y, isRed);
25294};
25295
25296ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
25297 return Point.fromJSON(this, obj, red);
25298};
25299
25300Point.prototype._getBeta = function _getBeta() {
25301 if (!this.curve.endo)
25302 return;
25303
25304 var pre = this.precomputed;
25305 if (pre && pre.beta)
25306 return pre.beta;
25307
25308 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
25309 if (pre) {
25310 var curve = this.curve;
25311 var endoMul = function(p) {
25312 return curve.point(p.x.redMul(curve.endo.beta), p.y);
25313 };
25314 pre.beta = beta;
25315 beta.precomputed = {
25316 beta: null,
25317 naf: pre.naf && {
25318 wnd: pre.naf.wnd,
25319 points: pre.naf.points.map(endoMul)
25320 },
25321 doubles: pre.doubles && {
25322 step: pre.doubles.step,
25323 points: pre.doubles.points.map(endoMul)
25324 }
25325 };
25326 }
25327 return beta;
25328};
25329
25330Point.prototype.toJSON = function toJSON() {
25331 if (!this.precomputed)
25332 return [ this.x, this.y ];
25333
25334 return [ this.x, this.y, this.precomputed && {
25335 doubles: this.precomputed.doubles && {
25336 step: this.precomputed.doubles.step,
25337 points: this.precomputed.doubles.points.slice(1)
25338 },
25339 naf: this.precomputed.naf && {
25340 wnd: this.precomputed.naf.wnd,
25341 points: this.precomputed.naf.points.slice(1)
25342 }
25343 } ];
25344};
25345
25346Point.fromJSON = function fromJSON(curve, obj, red) {
25347 if (typeof obj === 'string')
25348 obj = JSON.parse(obj);
25349 var res = curve.point(obj[0], obj[1], red);
25350 if (!obj[2])
25351 return res;
25352
25353 function obj2point(obj) {
25354 return curve.point(obj[0], obj[1], red);
25355 }
25356
25357 var pre = obj[2];
25358 res.precomputed = {
25359 beta: null,
25360 doubles: pre.doubles && {
25361 step: pre.doubles.step,
25362 points: [ res ].concat(pre.doubles.points.map(obj2point))
25363 },
25364 naf: pre.naf && {
25365 wnd: pre.naf.wnd,
25366 points: [ res ].concat(pre.naf.points.map(obj2point))
25367 }
25368 };
25369 return res;
25370};
25371
25372Point.prototype.inspect = function inspect() {
25373 if (this.isInfinity())
25374 return '<EC Point Infinity>';
25375 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
25376 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
25377};
25378
25379Point.prototype.isInfinity = function isInfinity() {
25380 return this.inf;
25381};
25382
25383Point.prototype.add = function add(p) {
25384 // O + P = P
25385 if (this.inf)
25386 return p;
25387
25388 // P + O = P
25389 if (p.inf)
25390 return this;
25391
25392 // P + P = 2P
25393 if (this.eq(p))
25394 return this.dbl();
25395
25396 // P + (-P) = O
25397 if (this.neg().eq(p))
25398 return this.curve.point(null, null);
25399
25400 // P + Q = O
25401 if (this.x.cmp(p.x) === 0)
25402 return this.curve.point(null, null);
25403
25404 var c = this.y.redSub(p.y);
25405 if (c.cmpn(0) !== 0)
25406 c = c.redMul(this.x.redSub(p.x).redInvm());
25407 var nx = c.redSqr().redISub(this.x).redISub(p.x);
25408 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
25409 return this.curve.point(nx, ny);
25410};
25411
25412Point.prototype.dbl = function dbl() {
25413 if (this.inf)
25414 return this;
25415
25416 // 2P = O
25417 var ys1 = this.y.redAdd(this.y);
25418 if (ys1.cmpn(0) === 0)
25419 return this.curve.point(null, null);
25420
25421 var a = this.curve.a;
25422
25423 var x2 = this.x.redSqr();
25424 var dyinv = ys1.redInvm();
25425 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
25426
25427 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
25428 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
25429 return this.curve.point(nx, ny);
25430};
25431
25432Point.prototype.getX = function getX() {
25433 return this.x.fromRed();
25434};
25435
25436Point.prototype.getY = function getY() {
25437 return this.y.fromRed();
25438};
25439
25440Point.prototype.mul = function mul(k) {
25441 k = new BN(k, 16);
25442
25443 if (this._hasDoubles(k))
25444 return this.curve._fixedNafMul(this, k);
25445 else if (this.curve.endo)
25446 return this.curve._endoWnafMulAdd([ this ], [ k ]);
25447 else
25448 return this.curve._wnafMul(this, k);
25449};
25450
25451Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
25452 var points = [ this, p2 ];
25453 var coeffs = [ k1, k2 ];
25454 if (this.curve.endo)
25455 return this.curve._endoWnafMulAdd(points, coeffs);
25456 else
25457 return this.curve._wnafMulAdd(1, points, coeffs, 2);
25458};
25459
25460Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
25461 var points = [ this, p2 ];
25462 var coeffs = [ k1, k2 ];
25463 if (this.curve.endo)
25464 return this.curve._endoWnafMulAdd(points, coeffs, true);
25465 else
25466 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
25467};
25468
25469Point.prototype.eq = function eq(p) {
25470 return this === p ||
25471 this.inf === p.inf &&
25472 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
25473};
25474
25475Point.prototype.neg = function neg(_precompute) {
25476 if (this.inf)
25477 return this;
25478
25479 var res = this.curve.point(this.x, this.y.redNeg());
25480 if (_precompute && this.precomputed) {
25481 var pre = this.precomputed;
25482 var negate = function(p) {
25483 return p.neg();
25484 };
25485 res.precomputed = {
25486 naf: pre.naf && {
25487 wnd: pre.naf.wnd,
25488 points: pre.naf.points.map(negate)
25489 },
25490 doubles: pre.doubles && {
25491 step: pre.doubles.step,
25492 points: pre.doubles.points.map(negate)
25493 }
25494 };
25495 }
25496 return res;
25497};
25498
25499Point.prototype.toJ = function toJ() {
25500 if (this.inf)
25501 return this.curve.jpoint(null, null, null);
25502
25503 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
25504 return res;
25505};
25506
25507function JPoint(curve, x, y, z) {
25508 Base.BasePoint.call(this, curve, 'jacobian');
25509 if (x === null && y === null && z === null) {
25510 this.x = this.curve.one;
25511 this.y = this.curve.one;
25512 this.z = new BN(0);
25513 } else {
25514 this.x = new BN(x, 16);
25515 this.y = new BN(y, 16);
25516 this.z = new BN(z, 16);
25517 }
25518 if (!this.x.red)
25519 this.x = this.x.toRed(this.curve.red);
25520 if (!this.y.red)
25521 this.y = this.y.toRed(this.curve.red);
25522 if (!this.z.red)
25523 this.z = this.z.toRed(this.curve.red);
25524
25525 this.zOne = this.z === this.curve.one;
25526}
25527inherits(JPoint, Base.BasePoint);
25528
25529ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
25530 return new JPoint(this, x, y, z);
25531};
25532
25533JPoint.prototype.toP = function toP() {
25534 if (this.isInfinity())
25535 return this.curve.point(null, null);
25536
25537 var zinv = this.z.redInvm();
25538 var zinv2 = zinv.redSqr();
25539 var ax = this.x.redMul(zinv2);
25540 var ay = this.y.redMul(zinv2).redMul(zinv);
25541
25542 return this.curve.point(ax, ay);
25543};
25544
25545JPoint.prototype.neg = function neg() {
25546 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
25547};
25548
25549JPoint.prototype.add = function add(p) {
25550 // O + P = P
25551 if (this.isInfinity())
25552 return p;
25553
25554 // P + O = P
25555 if (p.isInfinity())
25556 return this;
25557
25558 // 12M + 4S + 7A
25559 var pz2 = p.z.redSqr();
25560 var z2 = this.z.redSqr();
25561 var u1 = this.x.redMul(pz2);
25562 var u2 = p.x.redMul(z2);
25563 var s1 = this.y.redMul(pz2.redMul(p.z));
25564 var s2 = p.y.redMul(z2.redMul(this.z));
25565
25566 var h = u1.redSub(u2);
25567 var r = s1.redSub(s2);
25568 if (h.cmpn(0) === 0) {
25569 if (r.cmpn(0) !== 0)
25570 return this.curve.jpoint(null, null, null);
25571 else
25572 return this.dbl();
25573 }
25574
25575 var h2 = h.redSqr();
25576 var h3 = h2.redMul(h);
25577 var v = u1.redMul(h2);
25578
25579 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
25580 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
25581 var nz = this.z.redMul(p.z).redMul(h);
25582
25583 return this.curve.jpoint(nx, ny, nz);
25584};
25585
25586JPoint.prototype.mixedAdd = function mixedAdd(p) {
25587 // O + P = P
25588 if (this.isInfinity())
25589 return p.toJ();
25590
25591 // P + O = P
25592 if (p.isInfinity())
25593 return this;
25594
25595 // 8M + 3S + 7A
25596 var z2 = this.z.redSqr();
25597 var u1 = this.x;
25598 var u2 = p.x.redMul(z2);
25599 var s1 = this.y;
25600 var s2 = p.y.redMul(z2).redMul(this.z);
25601
25602 var h = u1.redSub(u2);
25603 var r = s1.redSub(s2);
25604 if (h.cmpn(0) === 0) {
25605 if (r.cmpn(0) !== 0)
25606 return this.curve.jpoint(null, null, null);
25607 else
25608 return this.dbl();
25609 }
25610
25611 var h2 = h.redSqr();
25612 var h3 = h2.redMul(h);
25613 var v = u1.redMul(h2);
25614
25615 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
25616 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
25617 var nz = this.z.redMul(h);
25618
25619 return this.curve.jpoint(nx, ny, nz);
25620};
25621
25622JPoint.prototype.dblp = function dblp(pow) {
25623 if (pow === 0)
25624 return this;
25625 if (this.isInfinity())
25626 return this;
25627 if (!pow)
25628 return this.dbl();
25629
25630 if (this.curve.zeroA || this.curve.threeA) {
25631 var r = this;
25632 for (var i = 0; i < pow; i++)
25633 r = r.dbl();
25634 return r;
25635 }
25636
25637 // 1M + 2S + 1A + N * (4S + 5M + 8A)
25638 // N = 1 => 6M + 6S + 9A
25639 var a = this.curve.a;
25640 var tinv = this.curve.tinv;
25641
25642 var jx = this.x;
25643 var jy = this.y;
25644 var jz = this.z;
25645 var jz4 = jz.redSqr().redSqr();
25646
25647 // Reuse results
25648 var jyd = jy.redAdd(jy);
25649 for (var i = 0; i < pow; i++) {
25650 var jx2 = jx.redSqr();
25651 var jyd2 = jyd.redSqr();
25652 var jyd4 = jyd2.redSqr();
25653 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
25654
25655 var t1 = jx.redMul(jyd2);
25656 var nx = c.redSqr().redISub(t1.redAdd(t1));
25657 var t2 = t1.redISub(nx);
25658 var dny = c.redMul(t2);
25659 dny = dny.redIAdd(dny).redISub(jyd4);
25660 var nz = jyd.redMul(jz);
25661 if (i + 1 < pow)
25662 jz4 = jz4.redMul(jyd4);
25663
25664 jx = nx;
25665 jz = nz;
25666 jyd = dny;
25667 }
25668
25669 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
25670};
25671
25672JPoint.prototype.dbl = function dbl() {
25673 if (this.isInfinity())
25674 return this;
25675
25676 if (this.curve.zeroA)
25677 return this._zeroDbl();
25678 else if (this.curve.threeA)
25679 return this._threeDbl();
25680 else
25681 return this._dbl();
25682};
25683
25684JPoint.prototype._zeroDbl = function _zeroDbl() {
25685 var nx;
25686 var ny;
25687 var nz;
25688 // Z = 1
25689 if (this.zOne) {
25690 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
25691 // #doubling-mdbl-2007-bl
25692 // 1M + 5S + 14A
25693
25694 // XX = X1^2
25695 var xx = this.x.redSqr();
25696 // YY = Y1^2
25697 var yy = this.y.redSqr();
25698 // YYYY = YY^2
25699 var yyyy = yy.redSqr();
25700 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
25701 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
25702 s = s.redIAdd(s);
25703 // M = 3 * XX + a; a = 0
25704 var m = xx.redAdd(xx).redIAdd(xx);
25705 // T = M ^ 2 - 2*S
25706 var t = m.redSqr().redISub(s).redISub(s);
25707
25708 // 8 * YYYY
25709 var yyyy8 = yyyy.redIAdd(yyyy);
25710 yyyy8 = yyyy8.redIAdd(yyyy8);
25711 yyyy8 = yyyy8.redIAdd(yyyy8);
25712
25713 // X3 = T
25714 nx = t;
25715 // Y3 = M * (S - T) - 8 * YYYY
25716 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
25717 // Z3 = 2*Y1
25718 nz = this.y.redAdd(this.y);
25719 } else {
25720 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
25721 // #doubling-dbl-2009-l
25722 // 2M + 5S + 13A
25723
25724 // A = X1^2
25725 var a = this.x.redSqr();
25726 // B = Y1^2
25727 var b = this.y.redSqr();
25728 // C = B^2
25729 var c = b.redSqr();
25730 // D = 2 * ((X1 + B)^2 - A - C)
25731 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
25732 d = d.redIAdd(d);
25733 // E = 3 * A
25734 var e = a.redAdd(a).redIAdd(a);
25735 // F = E^2
25736 var f = e.redSqr();
25737
25738 // 8 * C
25739 var c8 = c.redIAdd(c);
25740 c8 = c8.redIAdd(c8);
25741 c8 = c8.redIAdd(c8);
25742
25743 // X3 = F - 2 * D
25744 nx = f.redISub(d).redISub(d);
25745 // Y3 = E * (D - X3) - 8 * C
25746 ny = e.redMul(d.redISub(nx)).redISub(c8);
25747 // Z3 = 2 * Y1 * Z1
25748 nz = this.y.redMul(this.z);
25749 nz = nz.redIAdd(nz);
25750 }
25751
25752 return this.curve.jpoint(nx, ny, nz);
25753};
25754
25755JPoint.prototype._threeDbl = function _threeDbl() {
25756 var nx;
25757 var ny;
25758 var nz;
25759 // Z = 1
25760 if (this.zOne) {
25761 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
25762 // #doubling-mdbl-2007-bl
25763 // 1M + 5S + 15A
25764
25765 // XX = X1^2
25766 var xx = this.x.redSqr();
25767 // YY = Y1^2
25768 var yy = this.y.redSqr();
25769 // YYYY = YY^2
25770 var yyyy = yy.redSqr();
25771 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
25772 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
25773 s = s.redIAdd(s);
25774 // M = 3 * XX + a
25775 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
25776 // T = M^2 - 2 * S
25777 var t = m.redSqr().redISub(s).redISub(s);
25778 // X3 = T
25779 nx = t;
25780 // Y3 = M * (S - T) - 8 * YYYY
25781 var yyyy8 = yyyy.redIAdd(yyyy);
25782 yyyy8 = yyyy8.redIAdd(yyyy8);
25783 yyyy8 = yyyy8.redIAdd(yyyy8);
25784 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
25785 // Z3 = 2 * Y1
25786 nz = this.y.redAdd(this.y);
25787 } else {
25788 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
25789 // 3M + 5S
25790
25791 // delta = Z1^2
25792 var delta = this.z.redSqr();
25793 // gamma = Y1^2
25794 var gamma = this.y.redSqr();
25795 // beta = X1 * gamma
25796 var beta = this.x.redMul(gamma);
25797 // alpha = 3 * (X1 - delta) * (X1 + delta)
25798 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
25799 alpha = alpha.redAdd(alpha).redIAdd(alpha);
25800 // X3 = alpha^2 - 8 * beta
25801 var beta4 = beta.redIAdd(beta);
25802 beta4 = beta4.redIAdd(beta4);
25803 var beta8 = beta4.redAdd(beta4);
25804 nx = alpha.redSqr().redISub(beta8);
25805 // Z3 = (Y1 + Z1)^2 - gamma - delta
25806 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
25807 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
25808 var ggamma8 = gamma.redSqr();
25809 ggamma8 = ggamma8.redIAdd(ggamma8);
25810 ggamma8 = ggamma8.redIAdd(ggamma8);
25811 ggamma8 = ggamma8.redIAdd(ggamma8);
25812 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
25813 }
25814
25815 return this.curve.jpoint(nx, ny, nz);
25816};
25817
25818JPoint.prototype._dbl = function _dbl() {
25819 var a = this.curve.a;
25820
25821 // 4M + 6S + 10A
25822 var jx = this.x;
25823 var jy = this.y;
25824 var jz = this.z;
25825 var jz4 = jz.redSqr().redSqr();
25826
25827 var jx2 = jx.redSqr();
25828 var jy2 = jy.redSqr();
25829
25830 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
25831
25832 var jxd4 = jx.redAdd(jx);
25833 jxd4 = jxd4.redIAdd(jxd4);
25834 var t1 = jxd4.redMul(jy2);
25835 var nx = c.redSqr().redISub(t1.redAdd(t1));
25836 var t2 = t1.redISub(nx);
25837
25838 var jyd8 = jy2.redSqr();
25839 jyd8 = jyd8.redIAdd(jyd8);
25840 jyd8 = jyd8.redIAdd(jyd8);
25841 jyd8 = jyd8.redIAdd(jyd8);
25842 var ny = c.redMul(t2).redISub(jyd8);
25843 var nz = jy.redAdd(jy).redMul(jz);
25844
25845 return this.curve.jpoint(nx, ny, nz);
25846};
25847
25848JPoint.prototype.trpl = function trpl() {
25849 if (!this.curve.zeroA)
25850 return this.dbl().add(this);
25851
25852 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
25853 // 5M + 10S + ...
25854
25855 // XX = X1^2
25856 var xx = this.x.redSqr();
25857 // YY = Y1^2
25858 var yy = this.y.redSqr();
25859 // ZZ = Z1^2
25860 var zz = this.z.redSqr();
25861 // YYYY = YY^2
25862 var yyyy = yy.redSqr();
25863 // M = 3 * XX + a * ZZ2; a = 0
25864 var m = xx.redAdd(xx).redIAdd(xx);
25865 // MM = M^2
25866 var mm = m.redSqr();
25867 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
25868 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
25869 e = e.redIAdd(e);
25870 e = e.redAdd(e).redIAdd(e);
25871 e = e.redISub(mm);
25872 // EE = E^2
25873 var ee = e.redSqr();
25874 // T = 16*YYYY
25875 var t = yyyy.redIAdd(yyyy);
25876 t = t.redIAdd(t);
25877 t = t.redIAdd(t);
25878 t = t.redIAdd(t);
25879 // U = (M + E)^2 - MM - EE - T
25880 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
25881 // X3 = 4 * (X1 * EE - 4 * YY * U)
25882 var yyu4 = yy.redMul(u);
25883 yyu4 = yyu4.redIAdd(yyu4);
25884 yyu4 = yyu4.redIAdd(yyu4);
25885 var nx = this.x.redMul(ee).redISub(yyu4);
25886 nx = nx.redIAdd(nx);
25887 nx = nx.redIAdd(nx);
25888 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
25889 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
25890 ny = ny.redIAdd(ny);
25891 ny = ny.redIAdd(ny);
25892 ny = ny.redIAdd(ny);
25893 // Z3 = (Z1 + E)^2 - ZZ - EE
25894 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
25895
25896 return this.curve.jpoint(nx, ny, nz);
25897};
25898
25899JPoint.prototype.mul = function mul(k, kbase) {
25900 k = new BN(k, kbase);
25901
25902 return this.curve._wnafMul(this, k);
25903};
25904
25905JPoint.prototype.eq = function eq(p) {
25906 if (p.type === 'affine')
25907 return this.eq(p.toJ());
25908
25909 if (this === p)
25910 return true;
25911
25912 // x1 * z2^2 == x2 * z1^2
25913 var z2 = this.z.redSqr();
25914 var pz2 = p.z.redSqr();
25915 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
25916 return false;
25917
25918 // y1 * z2^3 == y2 * z1^3
25919 var z3 = z2.redMul(this.z);
25920 var pz3 = pz2.redMul(p.z);
25921 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
25922};
25923
25924JPoint.prototype.eqXToP = function eqXToP(x) {
25925 var zs = this.z.redSqr();
25926 var rx = x.toRed(this.curve.red).redMul(zs);
25927 if (this.x.cmp(rx) === 0)
25928 return true;
25929
25930 var xc = x.clone();
25931 var t = this.curve.redN.redMul(zs);
25932 for (;;) {
25933 xc.iadd(this.curve.n);
25934 if (xc.cmp(this.curve.p) >= 0)
25935 return false;
25936
25937 rx.redIAdd(t);
25938 if (this.x.cmp(rx) === 0)
25939 return true;
25940 }
25941 return false;
25942};
25943
25944JPoint.prototype.inspect = function inspect() {
25945 if (this.isInfinity())
25946 return '<EC JPoint Infinity>';
25947 return '<EC JPoint x: ' + this.x.toString(16, 2) +
25948 ' y: ' + this.y.toString(16, 2) +
25949 ' z: ' + this.z.toString(16, 2) + '>';
25950};
25951
25952JPoint.prototype.isInfinity = function isInfinity() {
25953 // XXX This code assumes that zero is always zero in red
25954 return this.z.cmpn(0) === 0;
25955};
25956
25957},{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],103:[function(require,module,exports){
25958'use strict';
25959
25960var curves = exports;
25961
25962var hash = require('hash.js');
25963var elliptic = require('../elliptic');
25964
25965var assert = elliptic.utils.assert;
25966
25967function PresetCurve(options) {
25968 if (options.type === 'short')
25969 this.curve = new elliptic.curve.short(options);
25970 else if (options.type === 'edwards')
25971 this.curve = new elliptic.curve.edwards(options);
25972 else
25973 this.curve = new elliptic.curve.mont(options);
25974 this.g = this.curve.g;
25975 this.n = this.curve.n;
25976 this.hash = options.hash;
25977
25978 assert(this.g.validate(), 'Invalid curve');
25979 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
25980}
25981curves.PresetCurve = PresetCurve;
25982
25983function defineCurve(name, options) {
25984 Object.defineProperty(curves, name, {
25985 configurable: true,
25986 enumerable: true,
25987 get: function() {
25988 var curve = new PresetCurve(options);
25989 Object.defineProperty(curves, name, {
25990 configurable: true,
25991 enumerable: true,
25992 value: curve
25993 });
25994 return curve;
25995 }
25996 });
25997}
25998
25999defineCurve('p192', {
26000 type: 'short',
26001 prime: 'p192',
26002 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
26003 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
26004 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
26005 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
26006 hash: hash.sha256,
26007 gRed: false,
26008 g: [
26009 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
26010 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
26011 ]
26012});
26013
26014defineCurve('p224', {
26015 type: 'short',
26016 prime: 'p224',
26017 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
26018 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
26019 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
26020 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
26021 hash: hash.sha256,
26022 gRed: false,
26023 g: [
26024 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
26025 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
26026 ]
26027});
26028
26029defineCurve('p256', {
26030 type: 'short',
26031 prime: null,
26032 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
26033 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
26034 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
26035 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
26036 hash: hash.sha256,
26037 gRed: false,
26038 g: [
26039 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
26040 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
26041 ]
26042});
26043
26044defineCurve('p384', {
26045 type: 'short',
26046 prime: null,
26047 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
26048 'fffffffe ffffffff 00000000 00000000 ffffffff',
26049 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
26050 'fffffffe ffffffff 00000000 00000000 fffffffc',
26051 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
26052 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
26053 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
26054 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
26055 hash: hash.sha384,
26056 gRed: false,
26057 g: [
26058 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
26059 '5502f25d bf55296c 3a545e38 72760ab7',
26060 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
26061 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
26062 ]
26063});
26064
26065defineCurve('p521', {
26066 type: 'short',
26067 prime: null,
26068 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
26069 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
26070 'ffffffff ffffffff ffffffff ffffffff ffffffff',
26071 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
26072 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
26073 'ffffffff ffffffff ffffffff ffffffff fffffffc',
26074 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
26075 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
26076 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
26077 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
26078 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
26079 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
26080 hash: hash.sha512,
26081 gRed: false,
26082 g: [
26083 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
26084 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
26085 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
26086 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
26087 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
26088 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
26089 ]
26090});
26091
26092defineCurve('curve25519', {
26093 type: 'mont',
26094 prime: 'p25519',
26095 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
26096 a: '76d06',
26097 b: '1',
26098 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
26099 hash: hash.sha256,
26100 gRed: false,
26101 g: [
26102 '9'
26103 ]
26104});
26105
26106defineCurve('ed25519', {
26107 type: 'edwards',
26108 prime: 'p25519',
26109 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
26110 a: '-1',
26111 c: '1',
26112 // -121665 * (121666^(-1)) (mod P)
26113 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
26114 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
26115 hash: hash.sha256,
26116 gRed: false,
26117 g: [
26118 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
26119
26120 // 4/5
26121 '6666666666666666666666666666666666666666666666666666666666666658'
26122 ]
26123});
26124
26125var pre;
26126try {
26127 pre = require('./precomputed/secp256k1');
26128} catch (e) {
26129 pre = undefined;
26130}
26131
26132defineCurve('secp256k1', {
26133 type: 'short',
26134 prime: 'k256',
26135 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
26136 a: '0',
26137 b: '7',
26138 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
26139 h: '1',
26140 hash: hash.sha256,
26141
26142 // Precomputed endomorphism
26143 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
26144 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
26145 basis: [
26146 {
26147 a: '3086d221a7d46bcde86c90e49284eb15',
26148 b: '-e4437ed6010e88286f547fa90abfe4c3'
26149 },
26150 {
26151 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
26152 b: '3086d221a7d46bcde86c90e49284eb15'
26153 }
26154 ],
26155
26156 gRed: false,
26157 g: [
26158 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
26159 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
26160 pre
26161 ]
26162});
26163
26164},{"../elliptic":97,"./precomputed/secp256k1":110,"hash.js":114}],104:[function(require,module,exports){
26165'use strict';
26166
26167var BN = require('bn.js');
26168var HmacDRBG = require('hmac-drbg');
26169var elliptic = require('../../elliptic');
26170var utils = elliptic.utils;
26171var assert = utils.assert;
26172
26173var KeyPair = require('./key');
26174var Signature = require('./signature');
26175
26176function EC(options) {
26177 if (!(this instanceof EC))
26178 return new EC(options);
26179
26180 // Shortcut `elliptic.ec(curve-name)`
26181 if (typeof options === 'string') {
26182 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
26183
26184 options = elliptic.curves[options];
26185 }
26186
26187 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
26188 if (options instanceof elliptic.curves.PresetCurve)
26189 options = { curve: options };
26190
26191 this.curve = options.curve.curve;
26192 this.n = this.curve.n;
26193 this.nh = this.n.ushrn(1);
26194 this.g = this.curve.g;
26195
26196 // Point on curve
26197 this.g = options.curve.g;
26198 this.g.precompute(options.curve.n.bitLength() + 1);
26199
26200 // Hash for function for DRBG
26201 this.hash = options.hash || options.curve.hash;
26202}
26203module.exports = EC;
26204
26205EC.prototype.keyPair = function keyPair(options) {
26206 return new KeyPair(this, options);
26207};
26208
26209EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
26210 return KeyPair.fromPrivate(this, priv, enc);
26211};
26212
26213EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
26214 return KeyPair.fromPublic(this, pub, enc);
26215};
26216
26217EC.prototype.genKeyPair = function genKeyPair(options) {
26218 if (!options)
26219 options = {};
26220
26221 // Instantiate Hmac_DRBG
26222 var drbg = new HmacDRBG({
26223 hash: this.hash,
26224 pers: options.pers,
26225 persEnc: options.persEnc || 'utf8',
26226 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
26227 entropyEnc: options.entropy && options.entropyEnc || 'utf8',
26228 nonce: this.n.toArray()
26229 });
26230
26231 var bytes = this.n.byteLength();
26232 var ns2 = this.n.sub(new BN(2));
26233 do {
26234 var priv = new BN(drbg.generate(bytes));
26235 if (priv.cmp(ns2) > 0)
26236 continue;
26237
26238 priv.iaddn(1);
26239 return this.keyFromPrivate(priv);
26240 } while (true);
26241};
26242
26243EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
26244 var delta = msg.byteLength() * 8 - this.n.bitLength();
26245 if (delta > 0)
26246 msg = msg.ushrn(delta);
26247 if (!truncOnly && msg.cmp(this.n) >= 0)
26248 return msg.sub(this.n);
26249 else
26250 return msg;
26251};
26252
26253EC.prototype.sign = function sign(msg, key, enc, options) {
26254 if (typeof enc === 'object') {
26255 options = enc;
26256 enc = null;
26257 }
26258 if (!options)
26259 options = {};
26260
26261 key = this.keyFromPrivate(key, enc);
26262 msg = this._truncateToN(new BN(msg, 16));
26263
26264 // Zero-extend key to provide enough entropy
26265 var bytes = this.n.byteLength();
26266 var bkey = key.getPrivate().toArray('be', bytes);
26267
26268 // Zero-extend nonce to have the same byte size as N
26269 var nonce = msg.toArray('be', bytes);
26270
26271 // Instantiate Hmac_DRBG
26272 var drbg = new HmacDRBG({
26273 hash: this.hash,
26274 entropy: bkey,
26275 nonce: nonce,
26276 pers: options.pers,
26277 persEnc: options.persEnc || 'utf8'
26278 });
26279
26280 // Number of bytes to generate
26281 var ns1 = this.n.sub(new BN(1));
26282
26283 for (var iter = 0; true; iter++) {
26284 var k = options.k ?
26285 options.k(iter) :
26286 new BN(drbg.generate(this.n.byteLength()));
26287 k = this._truncateToN(k, true);
26288 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
26289 continue;
26290
26291 var kp = this.g.mul(k);
26292 if (kp.isInfinity())
26293 continue;
26294
26295 var kpX = kp.getX();
26296 var r = kpX.umod(this.n);
26297 if (r.cmpn(0) === 0)
26298 continue;
26299
26300 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
26301 s = s.umod(this.n);
26302 if (s.cmpn(0) === 0)
26303 continue;
26304
26305 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
26306 (kpX.cmp(r) !== 0 ? 2 : 0);
26307
26308 // Use complement of `s`, if it is > `n / 2`
26309 if (options.canonical && s.cmp(this.nh) > 0) {
26310 s = this.n.sub(s);
26311 recoveryParam ^= 1;
26312 }
26313
26314 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
26315 }
26316};
26317
26318EC.prototype.verify = function verify(msg, signature, key, enc) {
26319 msg = this._truncateToN(new BN(msg, 16));
26320 key = this.keyFromPublic(key, enc);
26321 signature = new Signature(signature, 'hex');
26322
26323 // Perform primitive values validation
26324 var r = signature.r;
26325 var s = signature.s;
26326 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
26327 return false;
26328 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
26329 return false;
26330
26331 // Validate signature
26332 var sinv = s.invm(this.n);
26333 var u1 = sinv.mul(msg).umod(this.n);
26334 var u2 = sinv.mul(r).umod(this.n);
26335
26336 if (!this.curve._maxwellTrick) {
26337 var p = this.g.mulAdd(u1, key.getPublic(), u2);
26338 if (p.isInfinity())
26339 return false;
26340
26341 return p.getX().umod(this.n).cmp(r) === 0;
26342 }
26343
26344 // NOTE: Greg Maxwell's trick, inspired by:
26345 // https://git.io/vad3K
26346
26347 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
26348 if (p.isInfinity())
26349 return false;
26350
26351 // Compare `p.x` of Jacobian point with `r`,
26352 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
26353 // inverse of `p.z^2`
26354 return p.eqXToP(r);
26355};
26356
26357EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
26358 assert((3 & j) === j, 'The recovery param is more than two bits');
26359 signature = new Signature(signature, enc);
26360
26361 var n = this.n;
26362 var e = new BN(msg);
26363 var r = signature.r;
26364 var s = signature.s;
26365
26366 // A set LSB signifies that the y-coordinate is odd
26367 var isYOdd = j & 1;
26368 var isSecondKey = j >> 1;
26369 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
26370 throw new Error('Unable to find sencond key candinate');
26371
26372 // 1.1. Let x = r + jn.
26373 if (isSecondKey)
26374 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
26375 else
26376 r = this.curve.pointFromX(r, isYOdd);
26377
26378 var rInv = signature.r.invm(n);
26379 var s1 = n.sub(e).mul(rInv).umod(n);
26380 var s2 = s.mul(rInv).umod(n);
26381
26382 // 1.6.1 Compute Q = r^-1 (sR - eG)
26383 // Q = r^-1 (sR + -eG)
26384 return this.g.mulAdd(s1, r, s2);
26385};
26386
26387EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
26388 signature = new Signature(signature, enc);
26389 if (signature.recoveryParam !== null)
26390 return signature.recoveryParam;
26391
26392 for (var i = 0; i < 4; i++) {
26393 var Qprime;
26394 try {
26395 Qprime = this.recoverPubKey(e, signature, i);
26396 } catch (e) {
26397 continue;
26398 }
26399
26400 if (Qprime.eq(Q))
26401 return i;
26402 }
26403 throw new Error('Unable to find valid recovery factor');
26404};
26405
26406},{"../../elliptic":97,"./key":105,"./signature":106,"bn.js":81,"hmac-drbg":120}],105:[function(require,module,exports){
26407'use strict';
26408
26409var BN = require('bn.js');
26410var elliptic = require('../../elliptic');
26411var utils = elliptic.utils;
26412var assert = utils.assert;
26413
26414function KeyPair(ec, options) {
26415 this.ec = ec;
26416 this.priv = null;
26417 this.pub = null;
26418
26419 // KeyPair(ec, { priv: ..., pub: ... })
26420 if (options.priv)
26421 this._importPrivate(options.priv, options.privEnc);
26422 if (options.pub)
26423 this._importPublic(options.pub, options.pubEnc);
26424}
26425module.exports = KeyPair;
26426
26427KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
26428 if (pub instanceof KeyPair)
26429 return pub;
26430
26431 return new KeyPair(ec, {
26432 pub: pub,
26433 pubEnc: enc
26434 });
26435};
26436
26437KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
26438 if (priv instanceof KeyPair)
26439 return priv;
26440
26441 return new KeyPair(ec, {
26442 priv: priv,
26443 privEnc: enc
26444 });
26445};
26446
26447KeyPair.prototype.validate = function validate() {
26448 var pub = this.getPublic();
26449
26450 if (pub.isInfinity())
26451 return { result: false, reason: 'Invalid public key' };
26452 if (!pub.validate())
26453 return { result: false, reason: 'Public key is not a point' };
26454 if (!pub.mul(this.ec.curve.n).isInfinity())
26455 return { result: false, reason: 'Public key * N != O' };
26456
26457 return { result: true, reason: null };
26458};
26459
26460KeyPair.prototype.getPublic = function getPublic(compact, enc) {
26461 // compact is optional argument
26462 if (typeof compact === 'string') {
26463 enc = compact;
26464 compact = null;
26465 }
26466
26467 if (!this.pub)
26468 this.pub = this.ec.g.mul(this.priv);
26469
26470 if (!enc)
26471 return this.pub;
26472
26473 return this.pub.encode(enc, compact);
26474};
26475
26476KeyPair.prototype.getPrivate = function getPrivate(enc) {
26477 if (enc === 'hex')
26478 return this.priv.toString(16, 2);
26479 else
26480 return this.priv;
26481};
26482
26483KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
26484 this.priv = new BN(key, enc || 16);
26485
26486 // Ensure that the priv won't be bigger than n, otherwise we may fail
26487 // in fixed multiplication method
26488 this.priv = this.priv.umod(this.ec.curve.n);
26489};
26490
26491KeyPair.prototype._importPublic = function _importPublic(key, enc) {
26492 if (key.x || key.y) {
26493 // Montgomery points only have an `x` coordinate.
26494 // Weierstrass/Edwards points on the other hand have both `x` and
26495 // `y` coordinates.
26496 if (this.ec.curve.type === 'mont') {
26497 assert(key.x, 'Need x coordinate');
26498 } else if (this.ec.curve.type === 'short' ||
26499 this.ec.curve.type === 'edwards') {
26500 assert(key.x && key.y, 'Need both x and y coordinate');
26501 }
26502 this.pub = this.ec.curve.point(key.x, key.y);
26503 return;
26504 }
26505 this.pub = this.ec.curve.decodePoint(key, enc);
26506};
26507
26508// ECDH
26509KeyPair.prototype.derive = function derive(pub) {
26510 return pub.mul(this.priv).getX();
26511};
26512
26513// ECDSA
26514KeyPair.prototype.sign = function sign(msg, enc, options) {
26515 return this.ec.sign(msg, this, enc, options);
26516};
26517
26518KeyPair.prototype.verify = function verify(msg, signature) {
26519 return this.ec.verify(msg, signature, this);
26520};
26521
26522KeyPair.prototype.inspect = function inspect() {
26523 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
26524 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
26525};
26526
26527},{"../../elliptic":97,"bn.js":81}],106:[function(require,module,exports){
26528'use strict';
26529
26530var BN = require('bn.js');
26531
26532var elliptic = require('../../elliptic');
26533var utils = elliptic.utils;
26534var assert = utils.assert;
26535
26536function Signature(options, enc) {
26537 if (options instanceof Signature)
26538 return options;
26539
26540 if (this._importDER(options, enc))
26541 return;
26542
26543 assert(options.r && options.s, 'Signature without r or s');
26544 this.r = new BN(options.r, 16);
26545 this.s = new BN(options.s, 16);
26546 if (options.recoveryParam === undefined)
26547 this.recoveryParam = null;
26548 else
26549 this.recoveryParam = options.recoveryParam;
26550}
26551module.exports = Signature;
26552
26553function Position() {
26554 this.place = 0;
26555}
26556
26557function getLength(buf, p) {
26558 var initial = buf[p.place++];
26559 if (!(initial & 0x80)) {
26560 return initial;
26561 }
26562 var octetLen = initial & 0xf;
26563 var val = 0;
26564 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
26565 val <<= 8;
26566 val |= buf[off];
26567 }
26568 p.place = off;
26569 return val;
26570}
26571
26572function rmPadding(buf) {
26573 var i = 0;
26574 var len = buf.length - 1;
26575 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
26576 i++;
26577 }
26578 if (i === 0) {
26579 return buf;
26580 }
26581 return buf.slice(i);
26582}
26583
26584Signature.prototype._importDER = function _importDER(data, enc) {
26585 data = utils.toArray(data, enc);
26586 var p = new Position();
26587 if (data[p.place++] !== 0x30) {
26588 return false;
26589 }
26590 var len = getLength(data, p);
26591 if ((len + p.place) !== data.length) {
26592 return false;
26593 }
26594 if (data[p.place++] !== 0x02) {
26595 return false;
26596 }
26597 var rlen = getLength(data, p);
26598 var r = data.slice(p.place, rlen + p.place);
26599 p.place += rlen;
26600 if (data[p.place++] !== 0x02) {
26601 return false;
26602 }
26603 var slen = getLength(data, p);
26604 if (data.length !== slen + p.place) {
26605 return false;
26606 }
26607 var s = data.slice(p.place, slen + p.place);
26608 if (r[0] === 0 && (r[1] & 0x80)) {
26609 r = r.slice(1);
26610 }
26611 if (s[0] === 0 && (s[1] & 0x80)) {
26612 s = s.slice(1);
26613 }
26614
26615 this.r = new BN(r);
26616 this.s = new BN(s);
26617 this.recoveryParam = null;
26618
26619 return true;
26620};
26621
26622function constructLength(arr, len) {
26623 if (len < 0x80) {
26624 arr.push(len);
26625 return;
26626 }
26627 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
26628 arr.push(octets | 0x80);
26629 while (--octets) {
26630 arr.push((len >>> (octets << 3)) & 0xff);
26631 }
26632 arr.push(len);
26633}
26634
26635Signature.prototype.toDER = function toDER(enc) {
26636 var r = this.r.toArray();
26637 var s = this.s.toArray();
26638
26639 // Pad values
26640 if (r[0] & 0x80)
26641 r = [ 0 ].concat(r);
26642 // Pad values
26643 if (s[0] & 0x80)
26644 s = [ 0 ].concat(s);
26645
26646 r = rmPadding(r);
26647 s = rmPadding(s);
26648
26649 while (!s[0] && !(s[1] & 0x80)) {
26650 s = s.slice(1);
26651 }
26652 var arr = [ 0x02 ];
26653 constructLength(arr, r.length);
26654 arr = arr.concat(r);
26655 arr.push(0x02);
26656 constructLength(arr, s.length);
26657 var backHalf = arr.concat(s);
26658 var res = [ 0x30 ];
26659 constructLength(res, backHalf.length);
26660 res = res.concat(backHalf);
26661 return utils.encode(res, enc);
26662};
26663
26664},{"../../elliptic":97,"bn.js":81}],107:[function(require,module,exports){
26665'use strict';
26666
26667var hash = require('hash.js');
26668var elliptic = require('../../elliptic');
26669var utils = elliptic.utils;
26670var assert = utils.assert;
26671var parseBytes = utils.parseBytes;
26672var KeyPair = require('./key');
26673var Signature = require('./signature');
26674
26675function EDDSA(curve) {
26676 assert(curve === 'ed25519', 'only tested with ed25519 so far');
26677
26678 if (!(this instanceof EDDSA))
26679 return new EDDSA(curve);
26680
26681 var curve = elliptic.curves[curve].curve;
26682 this.curve = curve;
26683 this.g = curve.g;
26684 this.g.precompute(curve.n.bitLength() + 1);
26685
26686 this.pointClass = curve.point().constructor;
26687 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
26688 this.hash = hash.sha512;
26689}
26690
26691module.exports = EDDSA;
26692
26693/**
26694* @param {Array|String} message - message bytes
26695* @param {Array|String|KeyPair} secret - secret bytes or a keypair
26696* @returns {Signature} - signature
26697*/
26698EDDSA.prototype.sign = function sign(message, secret) {
26699 message = parseBytes(message);
26700 var key = this.keyFromSecret(secret);
26701 var r = this.hashInt(key.messagePrefix(), message);
26702 var R = this.g.mul(r);
26703 var Rencoded = this.encodePoint(R);
26704 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
26705 .mul(key.priv());
26706 var S = r.add(s_).umod(this.curve.n);
26707 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
26708};
26709
26710/**
26711* @param {Array} message - message bytes
26712* @param {Array|String|Signature} sig - sig bytes
26713* @param {Array|String|Point|KeyPair} pub - public key
26714* @returns {Boolean} - true if public key matches sig of message
26715*/
26716EDDSA.prototype.verify = function verify(message, sig, pub) {
26717 message = parseBytes(message);
26718 sig = this.makeSignature(sig);
26719 var key = this.keyFromPublic(pub);
26720 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
26721 var SG = this.g.mul(sig.S());
26722 var RplusAh = sig.R().add(key.pub().mul(h));
26723 return RplusAh.eq(SG);
26724};
26725
26726EDDSA.prototype.hashInt = function hashInt() {
26727 var hash = this.hash();
26728 for (var i = 0; i < arguments.length; i++)
26729 hash.update(arguments[i]);
26730 return utils.intFromLE(hash.digest()).umod(this.curve.n);
26731};
26732
26733EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
26734 return KeyPair.fromPublic(this, pub);
26735};
26736
26737EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
26738 return KeyPair.fromSecret(this, secret);
26739};
26740
26741EDDSA.prototype.makeSignature = function makeSignature(sig) {
26742 if (sig instanceof Signature)
26743 return sig;
26744 return new Signature(this, sig);
26745};
26746
26747/**
26748* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
26749*
26750* EDDSA defines methods for encoding and decoding points and integers. These are
26751* helper convenience methods, that pass along to utility functions implied
26752* parameters.
26753*
26754*/
26755EDDSA.prototype.encodePoint = function encodePoint(point) {
26756 var enc = point.getY().toArray('le', this.encodingLength);
26757 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
26758 return enc;
26759};
26760
26761EDDSA.prototype.decodePoint = function decodePoint(bytes) {
26762 bytes = utils.parseBytes(bytes);
26763
26764 var lastIx = bytes.length - 1;
26765 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
26766 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
26767
26768 var y = utils.intFromLE(normed);
26769 return this.curve.pointFromY(y, xIsOdd);
26770};
26771
26772EDDSA.prototype.encodeInt = function encodeInt(num) {
26773 return num.toArray('le', this.encodingLength);
26774};
26775
26776EDDSA.prototype.decodeInt = function decodeInt(bytes) {
26777 return utils.intFromLE(bytes);
26778};
26779
26780EDDSA.prototype.isPoint = function isPoint(val) {
26781 return val instanceof this.pointClass;
26782};
26783
26784},{"../../elliptic":97,"./key":108,"./signature":109,"hash.js":114}],108:[function(require,module,exports){
26785'use strict';
26786
26787var elliptic = require('../../elliptic');
26788var utils = elliptic.utils;
26789var assert = utils.assert;
26790var parseBytes = utils.parseBytes;
26791var cachedProperty = utils.cachedProperty;
26792
26793/**
26794* @param {EDDSA} eddsa - instance
26795* @param {Object} params - public/private key parameters
26796*
26797* @param {Array<Byte>} [params.secret] - secret seed bytes
26798* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
26799* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
26800*
26801*/
26802function KeyPair(eddsa, params) {
26803 this.eddsa = eddsa;
26804 this._secret = parseBytes(params.secret);
26805 if (eddsa.isPoint(params.pub))
26806 this._pub = params.pub;
26807 else
26808 this._pubBytes = parseBytes(params.pub);
26809}
26810
26811KeyPair.fromPublic = function fromPublic(eddsa, pub) {
26812 if (pub instanceof KeyPair)
26813 return pub;
26814 return new KeyPair(eddsa, { pub: pub });
26815};
26816
26817KeyPair.fromSecret = function fromSecret(eddsa, secret) {
26818 if (secret instanceof KeyPair)
26819 return secret;
26820 return new KeyPair(eddsa, { secret: secret });
26821};
26822
26823KeyPair.prototype.secret = function secret() {
26824 return this._secret;
26825};
26826
26827cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
26828 return this.eddsa.encodePoint(this.pub());
26829});
26830
26831cachedProperty(KeyPair, 'pub', function pub() {
26832 if (this._pubBytes)
26833 return this.eddsa.decodePoint(this._pubBytes);
26834 return this.eddsa.g.mul(this.priv());
26835});
26836
26837cachedProperty(KeyPair, 'privBytes', function privBytes() {
26838 var eddsa = this.eddsa;
26839 var hash = this.hash();
26840 var lastIx = eddsa.encodingLength - 1;
26841
26842 var a = hash.slice(0, eddsa.encodingLength);
26843 a[0] &= 248;
26844 a[lastIx] &= 127;
26845 a[lastIx] |= 64;
26846
26847 return a;
26848});
26849
26850cachedProperty(KeyPair, 'priv', function priv() {
26851 return this.eddsa.decodeInt(this.privBytes());
26852});
26853
26854cachedProperty(KeyPair, 'hash', function hash() {
26855 return this.eddsa.hash().update(this.secret()).digest();
26856});
26857
26858cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
26859 return this.hash().slice(this.eddsa.encodingLength);
26860});
26861
26862KeyPair.prototype.sign = function sign(message) {
26863 assert(this._secret, 'KeyPair can only verify');
26864 return this.eddsa.sign(message, this);
26865};
26866
26867KeyPair.prototype.verify = function verify(message, sig) {
26868 return this.eddsa.verify(message, sig, this);
26869};
26870
26871KeyPair.prototype.getSecret = function getSecret(enc) {
26872 assert(this._secret, 'KeyPair is public only');
26873 return utils.encode(this.secret(), enc);
26874};
26875
26876KeyPair.prototype.getPublic = function getPublic(enc) {
26877 return utils.encode(this.pubBytes(), enc);
26878};
26879
26880module.exports = KeyPair;
26881
26882},{"../../elliptic":97}],109:[function(require,module,exports){
26883'use strict';
26884
26885var BN = require('bn.js');
26886var elliptic = require('../../elliptic');
26887var utils = elliptic.utils;
26888var assert = utils.assert;
26889var cachedProperty = utils.cachedProperty;
26890var parseBytes = utils.parseBytes;
26891
26892/**
26893* @param {EDDSA} eddsa - eddsa instance
26894* @param {Array<Bytes>|Object} sig -
26895* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
26896* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
26897* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
26898* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
26899*/
26900function Signature(eddsa, sig) {
26901 this.eddsa = eddsa;
26902
26903 if (typeof sig !== 'object')
26904 sig = parseBytes(sig);
26905
26906 if (Array.isArray(sig)) {
26907 sig = {
26908 R: sig.slice(0, eddsa.encodingLength),
26909 S: sig.slice(eddsa.encodingLength)
26910 };
26911 }
26912
26913 assert(sig.R && sig.S, 'Signature without R or S');
26914
26915 if (eddsa.isPoint(sig.R))
26916 this._R = sig.R;
26917 if (sig.S instanceof BN)
26918 this._S = sig.S;
26919
26920 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
26921 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
26922}
26923
26924cachedProperty(Signature, 'S', function S() {
26925 return this.eddsa.decodeInt(this.Sencoded());
26926});
26927
26928cachedProperty(Signature, 'R', function R() {
26929 return this.eddsa.decodePoint(this.Rencoded());
26930});
26931
26932cachedProperty(Signature, 'Rencoded', function Rencoded() {
26933 return this.eddsa.encodePoint(this.R());
26934});
26935
26936cachedProperty(Signature, 'Sencoded', function Sencoded() {
26937 return this.eddsa.encodeInt(this.S());
26938});
26939
26940Signature.prototype.toBytes = function toBytes() {
26941 return this.Rencoded().concat(this.Sencoded());
26942};
26943
26944Signature.prototype.toHex = function toHex() {
26945 return utils.encode(this.toBytes(), 'hex').toUpperCase();
26946};
26947
26948module.exports = Signature;
26949
26950},{"../../elliptic":97,"bn.js":81}],110:[function(require,module,exports){
26951module.exports = {
26952 doubles: {
26953 step: 4,
26954 points: [
26955 [
26956 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
26957 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
26958 ],
26959 [
26960 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
26961 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
26962 ],
26963 [
26964 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
26965 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
26966 ],
26967 [
26968 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
26969 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
26970 ],
26971 [
26972 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
26973 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
26974 ],
26975 [
26976 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
26977 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
26978 ],
26979 [
26980 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
26981 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
26982 ],
26983 [
26984 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
26985 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
26986 ],
26987 [
26988 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
26989 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
26990 ],
26991 [
26992 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
26993 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
26994 ],
26995 [
26996 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
26997 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
26998 ],
26999 [
27000 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
27001 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
27002 ],
27003 [
27004 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
27005 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
27006 ],
27007 [
27008 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
27009 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
27010 ],
27011 [
27012 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
27013 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
27014 ],
27015 [
27016 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
27017 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
27018 ],
27019 [
27020 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
27021 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
27022 ],
27023 [
27024 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
27025 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
27026 ],
27027 [
27028 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
27029 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
27030 ],
27031 [
27032 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
27033 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
27034 ],
27035 [
27036 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
27037 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
27038 ],
27039 [
27040 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
27041 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
27042 ],
27043 [
27044 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
27045 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
27046 ],
27047 [
27048 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
27049 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
27050 ],
27051 [
27052 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
27053 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
27054 ],
27055 [
27056 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
27057 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
27058 ],
27059 [
27060 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
27061 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
27062 ],
27063 [
27064 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
27065 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
27066 ],
27067 [
27068 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
27069 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
27070 ],
27071 [
27072 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
27073 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
27074 ],
27075 [
27076 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
27077 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
27078 ],
27079 [
27080 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
27081 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
27082 ],
27083 [
27084 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
27085 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
27086 ],
27087 [
27088 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
27089 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
27090 ],
27091 [
27092 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
27093 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
27094 ],
27095 [
27096 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
27097 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
27098 ],
27099 [
27100 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
27101 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
27102 ],
27103 [
27104 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
27105 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
27106 ],
27107 [
27108 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
27109 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
27110 ],
27111 [
27112 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
27113 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
27114 ],
27115 [
27116 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
27117 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
27118 ],
27119 [
27120 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
27121 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
27122 ],
27123 [
27124 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
27125 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
27126 ],
27127 [
27128 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
27129 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
27130 ],
27131 [
27132 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
27133 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
27134 ],
27135 [
27136 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
27137 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
27138 ],
27139 [
27140 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
27141 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
27142 ],
27143 [
27144 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
27145 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
27146 ],
27147 [
27148 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
27149 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
27150 ],
27151 [
27152 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
27153 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
27154 ],
27155 [
27156 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
27157 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
27158 ],
27159 [
27160 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
27161 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
27162 ],
27163 [
27164 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
27165 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
27166 ],
27167 [
27168 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
27169 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
27170 ],
27171 [
27172 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
27173 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
27174 ],
27175 [
27176 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
27177 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
27178 ],
27179 [
27180 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
27181 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
27182 ],
27183 [
27184 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
27185 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
27186 ],
27187 [
27188 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
27189 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
27190 ],
27191 [
27192 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
27193 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
27194 ],
27195 [
27196 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
27197 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
27198 ],
27199 [
27200 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
27201 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
27202 ],
27203 [
27204 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
27205 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
27206 ],
27207 [
27208 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
27209 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
27210 ],
27211 [
27212 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
27213 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
27214 ]
27215 ]
27216 },
27217 naf: {
27218 wnd: 7,
27219 points: [
27220 [
27221 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
27222 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
27223 ],
27224 [
27225 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
27226 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
27227 ],
27228 [
27229 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
27230 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
27231 ],
27232 [
27233 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
27234 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
27235 ],
27236 [
27237 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
27238 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
27239 ],
27240 [
27241 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
27242 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
27243 ],
27244 [
27245 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
27246 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
27247 ],
27248 [
27249 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
27250 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
27251 ],
27252 [
27253 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
27254 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
27255 ],
27256 [
27257 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
27258 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
27259 ],
27260 [
27261 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
27262 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
27263 ],
27264 [
27265 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
27266 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
27267 ],
27268 [
27269 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
27270 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
27271 ],
27272 [
27273 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
27274 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
27275 ],
27276 [
27277 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
27278 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
27279 ],
27280 [
27281 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
27282 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
27283 ],
27284 [
27285 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
27286 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
27287 ],
27288 [
27289 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
27290 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
27291 ],
27292 [
27293 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
27294 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
27295 ],
27296 [
27297 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
27298 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
27299 ],
27300 [
27301 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
27302 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
27303 ],
27304 [
27305 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
27306 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
27307 ],
27308 [
27309 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
27310 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
27311 ],
27312 [
27313 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
27314 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
27315 ],
27316 [
27317 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
27318 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
27319 ],
27320 [
27321 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
27322 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
27323 ],
27324 [
27325 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
27326 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
27327 ],
27328 [
27329 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
27330 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
27331 ],
27332 [
27333 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
27334 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
27335 ],
27336 [
27337 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
27338 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
27339 ],
27340 [
27341 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
27342 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
27343 ],
27344 [
27345 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
27346 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
27347 ],
27348 [
27349 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
27350 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
27351 ],
27352 [
27353 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
27354 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
27355 ],
27356 [
27357 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
27358 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
27359 ],
27360 [
27361 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
27362 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
27363 ],
27364 [
27365 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
27366 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
27367 ],
27368 [
27369 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
27370 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
27371 ],
27372 [
27373 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
27374 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
27375 ],
27376 [
27377 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
27378 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
27379 ],
27380 [
27381 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
27382 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
27383 ],
27384 [
27385 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
27386 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
27387 ],
27388 [
27389 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
27390 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
27391 ],
27392 [
27393 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
27394 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
27395 ],
27396 [
27397 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
27398 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
27399 ],
27400 [
27401 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
27402 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
27403 ],
27404 [
27405 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
27406 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
27407 ],
27408 [
27409 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
27410 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
27411 ],
27412 [
27413 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
27414 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
27415 ],
27416 [
27417 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
27418 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
27419 ],
27420 [
27421 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
27422 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
27423 ],
27424 [
27425 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
27426 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
27427 ],
27428 [
27429 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
27430 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
27431 ],
27432 [
27433 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
27434 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
27435 ],
27436 [
27437 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
27438 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
27439 ],
27440 [
27441 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
27442 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
27443 ],
27444 [
27445 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
27446 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
27447 ],
27448 [
27449 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
27450 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
27451 ],
27452 [
27453 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
27454 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
27455 ],
27456 [
27457 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
27458 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
27459 ],
27460 [
27461 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
27462 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
27463 ],
27464 [
27465 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
27466 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
27467 ],
27468 [
27469 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
27470 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
27471 ],
27472 [
27473 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
27474 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
27475 ],
27476 [
27477 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
27478 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
27479 ],
27480 [
27481 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
27482 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
27483 ],
27484 [
27485 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
27486 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
27487 ],
27488 [
27489 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
27490 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
27491 ],
27492 [
27493 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
27494 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
27495 ],
27496 [
27497 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
27498 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
27499 ],
27500 [
27501 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
27502 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
27503 ],
27504 [
27505 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
27506 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
27507 ],
27508 [
27509 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
27510 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
27511 ],
27512 [
27513 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
27514 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
27515 ],
27516 [
27517 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
27518 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
27519 ],
27520 [
27521 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
27522 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
27523 ],
27524 [
27525 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
27526 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
27527 ],
27528 [
27529 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
27530 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
27531 ],
27532 [
27533 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
27534 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
27535 ],
27536 [
27537 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
27538 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
27539 ],
27540 [
27541 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
27542 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
27543 ],
27544 [
27545 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
27546 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
27547 ],
27548 [
27549 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
27550 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
27551 ],
27552 [
27553 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
27554 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
27555 ],
27556 [
27557 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
27558 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
27559 ],
27560 [
27561 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
27562 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
27563 ],
27564 [
27565 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
27566 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
27567 ],
27568 [
27569 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
27570 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
27571 ],
27572 [
27573 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
27574 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
27575 ],
27576 [
27577 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
27578 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
27579 ],
27580 [
27581 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
27582 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
27583 ],
27584 [
27585 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
27586 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
27587 ],
27588 [
27589 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
27590 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
27591 ],
27592 [
27593 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
27594 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
27595 ],
27596 [
27597 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
27598 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
27599 ],
27600 [
27601 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
27602 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
27603 ],
27604 [
27605 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
27606 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
27607 ],
27608 [
27609 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
27610 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
27611 ],
27612 [
27613 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
27614 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
27615 ],
27616 [
27617 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
27618 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
27619 ],
27620 [
27621 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
27622 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
27623 ],
27624 [
27625 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
27626 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
27627 ],
27628 [
27629 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
27630 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
27631 ],
27632 [
27633 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
27634 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
27635 ],
27636 [
27637 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
27638 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
27639 ],
27640 [
27641 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
27642 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
27643 ],
27644 [
27645 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
27646 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
27647 ],
27648 [
27649 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
27650 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
27651 ],
27652 [
27653 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
27654 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
27655 ],
27656 [
27657 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
27658 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
27659 ],
27660 [
27661 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
27662 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
27663 ],
27664 [
27665 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
27666 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
27667 ],
27668 [
27669 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
27670 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
27671 ],
27672 [
27673 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
27674 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
27675 ],
27676 [
27677 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
27678 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
27679 ],
27680 [
27681 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
27682 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
27683 ],
27684 [
27685 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
27686 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
27687 ],
27688 [
27689 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
27690 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
27691 ],
27692 [
27693 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
27694 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
27695 ],
27696 [
27697 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
27698 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
27699 ],
27700 [
27701 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
27702 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
27703 ],
27704 [
27705 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
27706 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
27707 ],
27708 [
27709 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
27710 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
27711 ],
27712 [
27713 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
27714 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
27715 ],
27716 [
27717 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
27718 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
27719 ],
27720 [
27721 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
27722 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
27723 ],
27724 [
27725 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
27726 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
27727 ]
27728 ]
27729 }
27730};
8b095871 27731
cf6c2044
IC
27732},{}],111:[function(require,module,exports){
27733'use strict';
27734
27735var utils = exports;
27736var BN = require('bn.js');
27737var minAssert = require('minimalistic-assert');
27738var minUtils = require('minimalistic-crypto-utils');
27739
27740utils.assert = minAssert;
27741utils.toArray = minUtils.toArray;
27742utils.zero2 = minUtils.zero2;
27743utils.toHex = minUtils.toHex;
27744utils.encode = minUtils.encode;
27745
27746// Represent num in a w-NAF form
27747function getNAF(num, w) {
27748 var naf = [];
27749 var ws = 1 << (w + 1);
27750 var k = num.clone();
27751 while (k.cmpn(1) >= 0) {
27752 var z;
27753 if (k.isOdd()) {
27754 var mod = k.andln(ws - 1);
27755 if (mod > (ws >> 1) - 1)
27756 z = (ws >> 1) - mod;
27757 else
27758 z = mod;
27759 k.isubn(z);
27760 } else {
27761 z = 0;
27762 }
27763 naf.push(z);
27764
27765 // Optimization, shift by word if possible
27766 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
27767 for (var i = 1; i < shift; i++)
27768 naf.push(0);
27769 k.iushrn(shift);
27770 }
27771
27772 return naf;
27773}
27774utils.getNAF = getNAF;
27775
27776// Represent k1, k2 in a Joint Sparse Form
27777function getJSF(k1, k2) {
27778 var jsf = [
27779 [],
27780 []
27781 ];
27782
27783 k1 = k1.clone();
27784 k2 = k2.clone();
27785 var d1 = 0;
27786 var d2 = 0;
27787 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
27788
27789 // First phase
27790 var m14 = (k1.andln(3) + d1) & 3;
27791 var m24 = (k2.andln(3) + d2) & 3;
27792 if (m14 === 3)
27793 m14 = -1;
27794 if (m24 === 3)
27795 m24 = -1;
27796 var u1;
27797 if ((m14 & 1) === 0) {
27798 u1 = 0;
27799 } else {
27800 var m8 = (k1.andln(7) + d1) & 7;
27801 if ((m8 === 3 || m8 === 5) && m24 === 2)
27802 u1 = -m14;
27803 else
27804 u1 = m14;
27805 }
27806 jsf[0].push(u1);
27807
27808 var u2;
27809 if ((m24 & 1) === 0) {
27810 u2 = 0;
27811 } else {
27812 var m8 = (k2.andln(7) + d2) & 7;
27813 if ((m8 === 3 || m8 === 5) && m14 === 2)
27814 u2 = -m24;
27815 else
27816 u2 = m24;
27817 }
27818 jsf[1].push(u2);
27819
27820 // Second phase
27821 if (2 * d1 === u1 + 1)
27822 d1 = 1 - d1;
27823 if (2 * d2 === u2 + 1)
27824 d2 = 1 - d2;
27825 k1.iushrn(1);
27826 k2.iushrn(1);
27827 }
27828
27829 return jsf;
27830}
27831utils.getJSF = getJSF;
27832
27833function cachedProperty(obj, name, computer) {
27834 var key = '_' + name;
27835 obj.prototype[name] = function cachedProperty() {
27836 return this[key] !== undefined ? this[key] :
27837 this[key] = computer.call(this);
27838 };
27839}
27840utils.cachedProperty = cachedProperty;
27841
27842function parseBytes(bytes) {
27843 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
27844 bytes;
27845}
27846utils.parseBytes = parseBytes;
27847
27848function intFromLE(bytes) {
27849 return new BN(bytes, 'hex', 'le');
27850}
27851utils.intFromLE = intFromLE;
27852
27853
27854},{"bn.js":81,"minimalistic-assert":123,"minimalistic-crypto-utils":124}],112:[function(require,module,exports){
27855module.exports={
27856 "_args": [
27857 [
27858 "elliptic",
27859 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
27860 ]
27861 ],
27862 "_from": "elliptic@latest",
27863 "_id": "elliptic@6.4.0",
27864 "_inCache": true,
27865 "_installable": true,
27866 "_location": "/elliptic",
27867 "_nodeVersion": "7.0.0",
27868 "_npmOperationalInternal": {
27869 "host": "packages-18-east.internal.npmjs.com",
27870 "tmp": "tmp/elliptic-6.4.0.tgz_1487798866428_0.30510620190761983"
27871 },
27872 "_npmUser": {
27873 "email": "fedor@indutny.com",
27874 "name": "indutny"
27875 },
27876 "_npmVersion": "3.10.8",
27877 "_phantomChildren": {},
27878 "_requested": {
27879 "name": "elliptic",
27880 "raw": "elliptic",
27881 "rawSpec": "",
27882 "scope": null,
27883 "spec": "latest",
27884 "type": "tag"
27885 },
27886 "_requiredBy": [
27887 "#USER"
27888 ],
27889 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
27890 "_shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
27891 "_shrinkwrap": null,
27892 "_spec": "elliptic",
27893 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
27894 "author": {
27895 "email": "fedor@indutny.com",
27896 "name": "Fedor Indutny"
27897 },
27898 "bugs": {
27899 "url": "https://github.com/indutny/elliptic/issues"
27900 },
27901 "dependencies": {
27902 "bn.js": "^4.4.0",
27903 "brorand": "^1.0.1",
27904 "hash.js": "^1.0.0",
27905 "hmac-drbg": "^1.0.0",
27906 "inherits": "^2.0.1",
27907 "minimalistic-assert": "^1.0.0",
27908 "minimalistic-crypto-utils": "^1.0.0"
27909 },
27910 "description": "EC cryptography",
27911 "devDependencies": {
27912 "brfs": "^1.4.3",
27913 "coveralls": "^2.11.3",
27914 "grunt": "^0.4.5",
27915 "grunt-browserify": "^5.0.0",
27916 "grunt-cli": "^1.2.0",
27917 "grunt-contrib-connect": "^1.0.0",
27918 "grunt-contrib-copy": "^1.0.0",
27919 "grunt-contrib-uglify": "^1.0.1",
27920 "grunt-mocha-istanbul": "^3.0.1",
27921 "grunt-saucelabs": "^8.6.2",
27922 "istanbul": "^0.4.2",
27923 "jscs": "^2.9.0",
27924 "jshint": "^2.6.0",
27925 "mocha": "^2.1.0"
27926 },
27927 "directories": {},
27928 "dist": {
27929 "shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
27930 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz"
27931 },
27932 "files": [
27933 "lib"
27934 ],
27935 "gitHead": "6b0d2b76caae91471649c8e21f0b1d3ba0f96090",
27936 "homepage": "https://github.com/indutny/elliptic",
27937 "keywords": [
27938 "EC",
27939 "Elliptic",
27940 "curve",
27941 "Cryptography"
27942 ],
27943 "license": "MIT",
27944 "main": "lib/elliptic.js",
27945 "maintainers": [
27946 {
27947 "email": "fedor@indutny.com",
27948 "name": "indutny"
27949 }
27950 ],
27951 "name": "elliptic",
27952 "optionalDependencies": {},
27953 "readme": "ERROR: No README data found!",
27954 "repository": {
27955 "type": "git",
27956 "url": "git+ssh://git@github.com/indutny/elliptic.git"
27957 },
27958 "scripts": {
27959 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
27960 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
27961 "lint": "npm run jscs && npm run jshint",
27962 "test": "npm run lint && npm run unit",
27963 "unit": "istanbul test _mocha --reporter=spec test/index.js",
27964 "version": "grunt dist && git add dist/"
27965 },
27966 "version": "6.4.0"
27967}
27968
27969},{}],113:[function(require,module,exports){
27970(function (Buffer){
27971'use strict'
27972var Transform = require('stream').Transform
27973var inherits = require('inherits')
27974
27975function HashBase (blockSize) {
27976 Transform.call(this)
27977
27978 this._block = new Buffer(blockSize)
27979 this._blockSize = blockSize
27980 this._blockOffset = 0
27981 this._length = [0, 0, 0, 0]
27982
27983 this._finalized = false
27984}
27985
27986inherits(HashBase, Transform)
27987
27988HashBase.prototype._transform = function (chunk, encoding, callback) {
27989 var error = null
27990 try {
27991 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
27992 this.update(chunk)
27993 } catch (err) {
27994 error = err
27995 }
27996
27997 callback(error)
27998}
27999
28000HashBase.prototype._flush = function (callback) {
28001 var error = null
28002 try {
28003 this.push(this._digest())
28004 } catch (err) {
28005 error = err
28006 }
28007
28008 callback(error)
28009}
28010
28011HashBase.prototype.update = function (data, encoding) {
28012 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
28013 if (this._finalized) throw new Error('Digest already called')
28014 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
28015
28016 // consume data
28017 var block = this._block
28018 var offset = 0
28019 while (this._blockOffset + data.length - offset >= this._blockSize) {
28020 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
28021 this._update()
28022 this._blockOffset = 0
28023 }
28024 while (offset < data.length) block[this._blockOffset++] = data[offset++]
28025
28026 // update length
28027 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
28028 this._length[j] += carry
28029 carry = (this._length[j] / 0x0100000000) | 0
28030 if (carry > 0) this._length[j] -= 0x0100000000 * carry
28031 }
28032
28033 return this
28034}
28035
28036HashBase.prototype._update = function (data) {
28037 throw new Error('_update is not implemented')
28038}
28039
28040HashBase.prototype.digest = function (encoding) {
28041 if (this._finalized) throw new Error('Digest already called')
28042 this._finalized = true
28043
28044 var digest = this._digest()
28045 if (encoding !== undefined) digest = digest.toString(encoding)
28046 return digest
28047}
28048
28049HashBase.prototype._digest = function () {
28050 throw new Error('_digest is not implemented')
28051}
28052
28053module.exports = HashBase
28054
28055}).call(this,require("buffer").Buffer)
28056},{"buffer":5,"inherits":121,"stream":28}],114:[function(require,module,exports){
28057var hash = exports;
28058
28059hash.utils = require('./hash/utils');
28060hash.common = require('./hash/common');
28061hash.sha = require('./hash/sha');
28062hash.ripemd = require('./hash/ripemd');
28063hash.hmac = require('./hash/hmac');
28064
28065// Proxy hash functions to the main object
28066hash.sha1 = hash.sha.sha1;
28067hash.sha256 = hash.sha.sha256;
28068hash.sha224 = hash.sha.sha224;
28069hash.sha384 = hash.sha.sha384;
28070hash.sha512 = hash.sha.sha512;
28071hash.ripemd160 = hash.ripemd.ripemd160;
28072
28073},{"./hash/common":115,"./hash/hmac":116,"./hash/ripemd":117,"./hash/sha":118,"./hash/utils":119}],115:[function(require,module,exports){
28074var hash = require('../hash');
28075var utils = hash.utils;
28076var assert = utils.assert;
28077
28078function BlockHash() {
28079 this.pending = null;
28080 this.pendingTotal = 0;
28081 this.blockSize = this.constructor.blockSize;
28082 this.outSize = this.constructor.outSize;
28083 this.hmacStrength = this.constructor.hmacStrength;
28084 this.padLength = this.constructor.padLength / 8;
28085 this.endian = 'big';
28086
28087 this._delta8 = this.blockSize / 8;
28088 this._delta32 = this.blockSize / 32;
28089}
28090exports.BlockHash = BlockHash;
28091
28092BlockHash.prototype.update = function update(msg, enc) {
28093 // Convert message to array, pad it, and join into 32bit blocks
28094 msg = utils.toArray(msg, enc);
28095 if (!this.pending)
28096 this.pending = msg;
28097 else
28098 this.pending = this.pending.concat(msg);
28099 this.pendingTotal += msg.length;
28100
28101 // Enough data, try updating
28102 if (this.pending.length >= this._delta8) {
28103 msg = this.pending;
28104
28105 // Process pending data in blocks
28106 var r = msg.length % this._delta8;
28107 this.pending = msg.slice(msg.length - r, msg.length);
28108 if (this.pending.length === 0)
28109 this.pending = null;
28110
28111 msg = utils.join32(msg, 0, msg.length - r, this.endian);
28112 for (var i = 0; i < msg.length; i += this._delta32)
28113 this._update(msg, i, i + this._delta32);
28114 }
28115
28116 return this;
28117};
28118
28119BlockHash.prototype.digest = function digest(enc) {
28120 this.update(this._pad());
28121 assert(this.pending === null);
28122
28123 return this._digest(enc);
28124};
28125
28126BlockHash.prototype._pad = function pad() {
28127 var len = this.pendingTotal;
28128 var bytes = this._delta8;
28129 var k = bytes - ((len + this.padLength) % bytes);
28130 var res = new Array(k + this.padLength);
28131 res[0] = 0x80;
28132 for (var i = 1; i < k; i++)
28133 res[i] = 0;
28134
28135 // Append length
28136 len <<= 3;
28137 if (this.endian === 'big') {
28138 for (var t = 8; t < this.padLength; t++)
28139 res[i++] = 0;
28140
28141 res[i++] = 0;
28142 res[i++] = 0;
28143 res[i++] = 0;
28144 res[i++] = 0;
28145 res[i++] = (len >>> 24) & 0xff;
28146 res[i++] = (len >>> 16) & 0xff;
28147 res[i++] = (len >>> 8) & 0xff;
28148 res[i++] = len & 0xff;
28149 } else {
28150 res[i++] = len & 0xff;
28151 res[i++] = (len >>> 8) & 0xff;
28152 res[i++] = (len >>> 16) & 0xff;
28153 res[i++] = (len >>> 24) & 0xff;
28154 res[i++] = 0;
28155 res[i++] = 0;
28156 res[i++] = 0;
28157 res[i++] = 0;
28158
28159 for (var t = 8; t < this.padLength; t++)
28160 res[i++] = 0;
28161 }
28162
28163 return res;
28164};
28165
28166},{"../hash":114}],116:[function(require,module,exports){
28167var hmac = exports;
28168
28169var hash = require('../hash');
28170var utils = hash.utils;
28171var assert = utils.assert;
28172
28173function Hmac(hash, key, enc) {
28174 if (!(this instanceof Hmac))
28175 return new Hmac(hash, key, enc);
28176 this.Hash = hash;
28177 this.blockSize = hash.blockSize / 8;
28178 this.outSize = hash.outSize / 8;
28179 this.inner = null;
28180 this.outer = null;
28181
28182 this._init(utils.toArray(key, enc));
28183}
28184module.exports = Hmac;
28185
28186Hmac.prototype._init = function init(key) {
28187 // Shorten key, if needed
28188 if (key.length > this.blockSize)
28189 key = new this.Hash().update(key).digest();
28190 assert(key.length <= this.blockSize);
28191
28192 // Add padding to key
28193 for (var i = key.length; i < this.blockSize; i++)
28194 key.push(0);
28195
28196 for (var i = 0; i < key.length; i++)
28197 key[i] ^= 0x36;
28198 this.inner = new this.Hash().update(key);
28199
28200 // 0x36 ^ 0x5c = 0x6a
28201 for (var i = 0; i < key.length; i++)
28202 key[i] ^= 0x6a;
28203 this.outer = new this.Hash().update(key);
28204};
28205
28206Hmac.prototype.update = function update(msg, enc) {
28207 this.inner.update(msg, enc);
28208 return this;
28209};
28210
28211Hmac.prototype.digest = function digest(enc) {
28212 this.outer.update(this.inner.digest());
28213 return this.outer.digest(enc);
28214};
28215
28216},{"../hash":114}],117:[function(require,module,exports){
28217var hash = require('../hash');
28218var utils = hash.utils;
28219
28220var rotl32 = utils.rotl32;
28221var sum32 = utils.sum32;
28222var sum32_3 = utils.sum32_3;
28223var sum32_4 = utils.sum32_4;
28224var BlockHash = hash.common.BlockHash;
28225
28226function RIPEMD160() {
28227 if (!(this instanceof RIPEMD160))
28228 return new RIPEMD160();
28229
28230 BlockHash.call(this);
28231
28232 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
28233 this.endian = 'little';
28234}
28235utils.inherits(RIPEMD160, BlockHash);
28236exports.ripemd160 = RIPEMD160;
28237
28238RIPEMD160.blockSize = 512;
28239RIPEMD160.outSize = 160;
28240RIPEMD160.hmacStrength = 192;
28241RIPEMD160.padLength = 64;
28242
28243RIPEMD160.prototype._update = function update(msg, start) {
28244 var A = this.h[0];
28245 var B = this.h[1];
28246 var C = this.h[2];
28247 var D = this.h[3];
28248 var E = this.h[4];
28249 var Ah = A;
28250 var Bh = B;
28251 var Ch = C;
28252 var Dh = D;
28253 var Eh = E;
28254 for (var j = 0; j < 80; j++) {
28255 var T = sum32(
28256 rotl32(
28257 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
28258 s[j]),
28259 E);
28260 A = E;
28261 E = D;
28262 D = rotl32(C, 10);
28263 C = B;
28264 B = T;
28265 T = sum32(
28266 rotl32(
28267 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
28268 sh[j]),
28269 Eh);
28270 Ah = Eh;
28271 Eh = Dh;
28272 Dh = rotl32(Ch, 10);
28273 Ch = Bh;
28274 Bh = T;
9987f0c1 28275 }
cf6c2044
IC
28276 T = sum32_3(this.h[1], C, Dh);
28277 this.h[1] = sum32_3(this.h[2], D, Eh);
28278 this.h[2] = sum32_3(this.h[3], E, Ah);
28279 this.h[3] = sum32_3(this.h[4], A, Bh);
28280 this.h[4] = sum32_3(this.h[0], B, Ch);
28281 this.h[0] = T;
28282};
8b095871 28283
cf6c2044
IC
28284RIPEMD160.prototype._digest = function digest(enc) {
28285 if (enc === 'hex')
28286 return utils.toHex32(this.h, 'little');
28287 else
28288 return utils.split32(this.h, 'little');
28289};
8b095871 28290
cf6c2044
IC
28291function f(j, x, y, z) {
28292 if (j <= 15)
28293 return x ^ y ^ z;
28294 else if (j <= 31)
28295 return (x & y) | ((~x) & z);
28296 else if (j <= 47)
28297 return (x | (~y)) ^ z;
28298 else if (j <= 63)
28299 return (x & z) | (y & (~z));
28300 else
28301 return x ^ (y | (~z));
28302}
8b095871 28303
cf6c2044
IC
28304function K(j) {
28305 if (j <= 15)
28306 return 0x00000000;
28307 else if (j <= 31)
28308 return 0x5a827999;
28309 else if (j <= 47)
28310 return 0x6ed9eba1;
28311 else if (j <= 63)
28312 return 0x8f1bbcdc;
28313 else
28314 return 0xa953fd4e;
28315}
9987f0c1 28316
cf6c2044
IC
28317function Kh(j) {
28318 if (j <= 15)
28319 return 0x50a28be6;
28320 else if (j <= 31)
28321 return 0x5c4dd124;
28322 else if (j <= 47)
28323 return 0x6d703ef3;
28324 else if (j <= 63)
28325 return 0x7a6d76e9;
28326 else
28327 return 0x00000000;
28328}
9987f0c1 28329
cf6c2044
IC
28330var r = [
28331 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
28332 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
28333 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
28334 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
28335 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
28336];
9987f0c1 28337
cf6c2044
IC
28338var rh = [
28339 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
28340 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
28341 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
28342 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
28343 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
28344];
9987f0c1 28345
cf6c2044
IC
28346var s = [
28347 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
28348 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
28349 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
28350 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
28351 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
28352];
9987f0c1 28353
cf6c2044
IC
28354var sh = [
28355 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
28356 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
28357 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
28358 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
28359 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
28360];
9987f0c1 28361
cf6c2044
IC
28362},{"../hash":114}],118:[function(require,module,exports){
28363var hash = require('../hash');
28364var utils = hash.utils;
28365var assert = utils.assert;
9987f0c1 28366
cf6c2044
IC
28367var rotr32 = utils.rotr32;
28368var rotl32 = utils.rotl32;
28369var sum32 = utils.sum32;
28370var sum32_4 = utils.sum32_4;
28371var sum32_5 = utils.sum32_5;
28372var rotr64_hi = utils.rotr64_hi;
28373var rotr64_lo = utils.rotr64_lo;
28374var shr64_hi = utils.shr64_hi;
28375var shr64_lo = utils.shr64_lo;
28376var sum64 = utils.sum64;
28377var sum64_hi = utils.sum64_hi;
28378var sum64_lo = utils.sum64_lo;
28379var sum64_4_hi = utils.sum64_4_hi;
28380var sum64_4_lo = utils.sum64_4_lo;
28381var sum64_5_hi = utils.sum64_5_hi;
28382var sum64_5_lo = utils.sum64_5_lo;
28383var BlockHash = hash.common.BlockHash;
9987f0c1 28384
cf6c2044
IC
28385var sha256_K = [
28386 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
28387 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
28388 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
28389 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
28390 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
28391 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
28392 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
28393 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
28394 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
28395 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
28396 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
28397 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
28398 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
28399 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
28400 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
28401 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
28402];
8b095871 28403
cf6c2044
IC
28404var sha512_K = [
28405 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
28406 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
28407 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
28408 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
28409 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
28410 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
28411 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
28412 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
28413 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
28414 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
28415 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
28416 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
28417 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
28418 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
28419 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
28420 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
28421 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
28422 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
28423 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
28424 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
28425 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
28426 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
28427 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
28428 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
28429 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
28430 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
28431 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
28432 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
28433 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
28434 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
28435 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
28436 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
28437 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
28438 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
28439 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
28440 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
28441 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
28442 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
28443 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
28444 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
28445];
8b095871 28446
cf6c2044
IC
28447var sha1_K = [
28448 0x5A827999, 0x6ED9EBA1,
28449 0x8F1BBCDC, 0xCA62C1D6
28450];
8b095871 28451
cf6c2044
IC
28452function SHA256() {
28453 if (!(this instanceof SHA256))
28454 return new SHA256();
8b095871 28455
cf6c2044
IC
28456 BlockHash.call(this);
28457 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
28458 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
28459 this.k = sha256_K;
28460 this.W = new Array(64);
9987f0c1 28461}
cf6c2044
IC
28462utils.inherits(SHA256, BlockHash);
28463exports.sha256 = SHA256;
8b095871 28464
cf6c2044
IC
28465SHA256.blockSize = 512;
28466SHA256.outSize = 256;
28467SHA256.hmacStrength = 192;
28468SHA256.padLength = 64;
8b095871 28469
cf6c2044
IC
28470SHA256.prototype._update = function _update(msg, start) {
28471 var W = this.W;
8b095871 28472
cf6c2044
IC
28473 for (var i = 0; i < 16; i++)
28474 W[i] = msg[start + i];
28475 for (; i < W.length; i++)
28476 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
8b095871 28477
cf6c2044
IC
28478 var a = this.h[0];
28479 var b = this.h[1];
28480 var c = this.h[2];
28481 var d = this.h[3];
28482 var e = this.h[4];
28483 var f = this.h[5];
28484 var g = this.h[6];
28485 var h = this.h[7];
8b095871 28486
cf6c2044
IC
28487 assert(this.k.length === W.length);
28488 for (var i = 0; i < W.length; i++) {
28489 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
28490 var T2 = sum32(s0_256(a), maj32(a, b, c));
28491 h = g;
28492 g = f;
28493 f = e;
28494 e = sum32(d, T1);
28495 d = c;
28496 c = b;
28497 b = a;
28498 a = sum32(T1, T2);
28499 }
8b095871 28500
cf6c2044
IC
28501 this.h[0] = sum32(this.h[0], a);
28502 this.h[1] = sum32(this.h[1], b);
28503 this.h[2] = sum32(this.h[2], c);
28504 this.h[3] = sum32(this.h[3], d);
28505 this.h[4] = sum32(this.h[4], e);
28506 this.h[5] = sum32(this.h[5], f);
28507 this.h[6] = sum32(this.h[6], g);
28508 this.h[7] = sum32(this.h[7], h);
28509};
8b095871 28510
cf6c2044
IC
28511SHA256.prototype._digest = function digest(enc) {
28512 if (enc === 'hex')
28513 return utils.toHex32(this.h, 'big');
28514 else
28515 return utils.split32(this.h, 'big');
28516};
8b095871 28517
cf6c2044
IC
28518function SHA224() {
28519 if (!(this instanceof SHA224))
28520 return new SHA224();
8b095871 28521
cf6c2044
IC
28522 SHA256.call(this);
28523 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
28524 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
28525}
28526utils.inherits(SHA224, SHA256);
28527exports.sha224 = SHA224;
8b095871 28528
cf6c2044
IC
28529SHA224.blockSize = 512;
28530SHA224.outSize = 224;
28531SHA224.hmacStrength = 192;
28532SHA224.padLength = 64;
8b095871 28533
cf6c2044
IC
28534SHA224.prototype._digest = function digest(enc) {
28535 // Just truncate output
28536 if (enc === 'hex')
28537 return utils.toHex32(this.h.slice(0, 7), 'big');
28538 else
28539 return utils.split32(this.h.slice(0, 7), 'big');
28540};
8b095871 28541
cf6c2044
IC
28542function SHA512() {
28543 if (!(this instanceof SHA512))
28544 return new SHA512();
28545
28546 BlockHash.call(this);
28547 this.h = [ 0x6a09e667, 0xf3bcc908,
28548 0xbb67ae85, 0x84caa73b,
28549 0x3c6ef372, 0xfe94f82b,
28550 0xa54ff53a, 0x5f1d36f1,
28551 0x510e527f, 0xade682d1,
28552 0x9b05688c, 0x2b3e6c1f,
28553 0x1f83d9ab, 0xfb41bd6b,
28554 0x5be0cd19, 0x137e2179 ];
28555 this.k = sha512_K;
28556 this.W = new Array(160);
9987f0c1 28557}
cf6c2044
IC
28558utils.inherits(SHA512, BlockHash);
28559exports.sha512 = SHA512;
8b095871 28560
cf6c2044
IC
28561SHA512.blockSize = 1024;
28562SHA512.outSize = 512;
28563SHA512.hmacStrength = 192;
28564SHA512.padLength = 128;
9987f0c1 28565
cf6c2044
IC
28566SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
28567 var W = this.W;
8b095871 28568
cf6c2044
IC
28569 // 32 x 32bit words
28570 for (var i = 0; i < 32; i++)
28571 W[i] = msg[start + i];
28572 for (; i < W.length; i += 2) {
28573 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
28574 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
28575 var c1_hi = W[i - 14]; // i - 7
28576 var c1_lo = W[i - 13];
28577 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
28578 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
28579 var c3_hi = W[i - 32]; // i - 16
28580 var c3_lo = W[i - 31];
8b095871 28581
cf6c2044
IC
28582 W[i] = sum64_4_hi(c0_hi, c0_lo,
28583 c1_hi, c1_lo,
28584 c2_hi, c2_lo,
28585 c3_hi, c3_lo);
28586 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
28587 c1_hi, c1_lo,
28588 c2_hi, c2_lo,
28589 c3_hi, c3_lo);
9987f0c1 28590 }
cf6c2044 28591};
8b095871 28592
cf6c2044
IC
28593SHA512.prototype._update = function _update(msg, start) {
28594 this._prepareBlock(msg, start);
8b095871 28595
cf6c2044 28596 var W = this.W;
8b095871 28597
cf6c2044
IC
28598 var ah = this.h[0];
28599 var al = this.h[1];
28600 var bh = this.h[2];
28601 var bl = this.h[3];
28602 var ch = this.h[4];
28603 var cl = this.h[5];
28604 var dh = this.h[6];
28605 var dl = this.h[7];
28606 var eh = this.h[8];
28607 var el = this.h[9];
28608 var fh = this.h[10];
28609 var fl = this.h[11];
28610 var gh = this.h[12];
28611 var gl = this.h[13];
28612 var hh = this.h[14];
28613 var hl = this.h[15];
28614
28615 assert(this.k.length === W.length);
28616 for (var i = 0; i < W.length; i += 2) {
28617 var c0_hi = hh;
28618 var c0_lo = hl;
28619 var c1_hi = s1_512_hi(eh, el);
28620 var c1_lo = s1_512_lo(eh, el);
28621 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
28622 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
28623 var c3_hi = this.k[i];
28624 var c3_lo = this.k[i + 1];
28625 var c4_hi = W[i];
28626 var c4_lo = W[i + 1];
8b095871 28627
cf6c2044
IC
28628 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
28629 c1_hi, c1_lo,
28630 c2_hi, c2_lo,
28631 c3_hi, c3_lo,
28632 c4_hi, c4_lo);
28633 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
28634 c1_hi, c1_lo,
28635 c2_hi, c2_lo,
28636 c3_hi, c3_lo,
28637 c4_hi, c4_lo);
8b095871 28638
cf6c2044
IC
28639 var c0_hi = s0_512_hi(ah, al);
28640 var c0_lo = s0_512_lo(ah, al);
28641 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
28642 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
8b095871 28643
cf6c2044
IC
28644 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
28645 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
8b095871 28646
cf6c2044
IC
28647 hh = gh;
28648 hl = gl;
8b095871 28649
cf6c2044
IC
28650 gh = fh;
28651 gl = fl;
8b095871 28652
cf6c2044
IC
28653 fh = eh;
28654 fl = el;
8b095871 28655
cf6c2044
IC
28656 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
28657 el = sum64_lo(dl, dl, T1_hi, T1_lo);
8b095871 28658
cf6c2044
IC
28659 dh = ch;
28660 dl = cl;
8b095871 28661
cf6c2044
IC
28662 ch = bh;
28663 cl = bl;
8b095871 28664
cf6c2044
IC
28665 bh = ah;
28666 bl = al;
8b095871 28667
cf6c2044
IC
28668 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
28669 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
28670 }
8b095871 28671
cf6c2044
IC
28672 sum64(this.h, 0, ah, al);
28673 sum64(this.h, 2, bh, bl);
28674 sum64(this.h, 4, ch, cl);
28675 sum64(this.h, 6, dh, dl);
28676 sum64(this.h, 8, eh, el);
28677 sum64(this.h, 10, fh, fl);
28678 sum64(this.h, 12, gh, gl);
28679 sum64(this.h, 14, hh, hl);
28680};
8b095871 28681
cf6c2044
IC
28682SHA512.prototype._digest = function digest(enc) {
28683 if (enc === 'hex')
28684 return utils.toHex32(this.h, 'big');
28685 else
28686 return utils.split32(this.h, 'big');
28687};
8b095871 28688
cf6c2044
IC
28689function SHA384() {
28690 if (!(this instanceof SHA384))
28691 return new SHA384();
8b095871 28692
cf6c2044
IC
28693 SHA512.call(this);
28694 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
28695 0x629a292a, 0x367cd507,
28696 0x9159015a, 0x3070dd17,
28697 0x152fecd8, 0xf70e5939,
28698 0x67332667, 0xffc00b31,
28699 0x8eb44a87, 0x68581511,
28700 0xdb0c2e0d, 0x64f98fa7,
28701 0x47b5481d, 0xbefa4fa4 ];
9987f0c1 28702}
cf6c2044
IC
28703utils.inherits(SHA384, SHA512);
28704exports.sha384 = SHA384;
8b095871 28705
cf6c2044
IC
28706SHA384.blockSize = 1024;
28707SHA384.outSize = 384;
28708SHA384.hmacStrength = 192;
28709SHA384.padLength = 128;
9987f0c1 28710
cf6c2044
IC
28711SHA384.prototype._digest = function digest(enc) {
28712 if (enc === 'hex')
28713 return utils.toHex32(this.h.slice(0, 12), 'big');
28714 else
28715 return utils.split32(this.h.slice(0, 12), 'big');
28716};
8b095871 28717
cf6c2044
IC
28718function SHA1() {
28719 if (!(this instanceof SHA1))
28720 return new SHA1();
8b095871 28721
cf6c2044
IC
28722 BlockHash.call(this);
28723 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
28724 0x10325476, 0xc3d2e1f0 ];
28725 this.W = new Array(80);
9987f0c1 28726}
8b095871 28727
cf6c2044
IC
28728utils.inherits(SHA1, BlockHash);
28729exports.sha1 = SHA1;
8b095871 28730
cf6c2044
IC
28731SHA1.blockSize = 512;
28732SHA1.outSize = 160;
28733SHA1.hmacStrength = 80;
28734SHA1.padLength = 64;
8b095871 28735
cf6c2044
IC
28736SHA1.prototype._update = function _update(msg, start) {
28737 var W = this.W;
9987f0c1 28738
cf6c2044
IC
28739 for (var i = 0; i < 16; i++)
28740 W[i] = msg[start + i];
8b095871 28741
cf6c2044
IC
28742 for(; i < W.length; i++)
28743 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
8b095871 28744
cf6c2044
IC
28745 var a = this.h[0];
28746 var b = this.h[1];
28747 var c = this.h[2];
28748 var d = this.h[3];
28749 var e = this.h[4];
8b095871 28750
cf6c2044
IC
28751 for (var i = 0; i < W.length; i++) {
28752 var s = ~~(i / 20);
28753 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
28754 e = d;
28755 d = c;
28756 c = rotl32(b, 30);
28757 b = a;
28758 a = t;
9987f0c1 28759 }
8b095871 28760
cf6c2044
IC
28761 this.h[0] = sum32(this.h[0], a);
28762 this.h[1] = sum32(this.h[1], b);
28763 this.h[2] = sum32(this.h[2], c);
28764 this.h[3] = sum32(this.h[3], d);
28765 this.h[4] = sum32(this.h[4], e);
28766};
8b095871 28767
cf6c2044
IC
28768SHA1.prototype._digest = function digest(enc) {
28769 if (enc === 'hex')
28770 return utils.toHex32(this.h, 'big');
28771 else
28772 return utils.split32(this.h, 'big');
28773};
8b095871 28774
cf6c2044
IC
28775function ch32(x, y, z) {
28776 return (x & y) ^ ((~x) & z);
8b095871
IC
28777}
28778
cf6c2044
IC
28779function maj32(x, y, z) {
28780 return (x & y) ^ (x & z) ^ (y & z);
28781}
8b095871 28782
cf6c2044
IC
28783function p32(x, y, z) {
28784 return x ^ y ^ z;
28785}
8b095871 28786
cf6c2044
IC
28787function s0_256(x) {
28788 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
28789}
8b095871 28790
cf6c2044
IC
28791function s1_256(x) {
28792 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
8b095871
IC
28793}
28794
cf6c2044
IC
28795function g0_256(x) {
28796 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
28797}
8b095871 28798
cf6c2044
IC
28799function g1_256(x) {
28800 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
28801}
8b095871 28802
cf6c2044
IC
28803function ft_1(s, x, y, z) {
28804 if (s === 0)
28805 return ch32(x, y, z);
28806 if (s === 1 || s === 3)
28807 return p32(x, y, z);
28808 if (s === 2)
28809 return maj32(x, y, z);
28810}
8b095871 28811
cf6c2044
IC
28812function ch64_hi(xh, xl, yh, yl, zh, zl) {
28813 var r = (xh & yh) ^ ((~xh) & zh);
28814 if (r < 0)
28815 r += 0x100000000;
28816 return r;
28817}
8b095871 28818
cf6c2044
IC
28819function ch64_lo(xh, xl, yh, yl, zh, zl) {
28820 var r = (xl & yl) ^ ((~xl) & zl);
28821 if (r < 0)
28822 r += 0x100000000;
28823 return r;
28824}
8b095871 28825
cf6c2044
IC
28826function maj64_hi(xh, xl, yh, yl, zh, zl) {
28827 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
28828 if (r < 0)
28829 r += 0x100000000;
28830 return r;
8b095871
IC
28831}
28832
cf6c2044
IC
28833function maj64_lo(xh, xl, yh, yl, zh, zl) {
28834 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
28835 if (r < 0)
28836 r += 0x100000000;
28837 return r;
28838}
8b095871 28839
cf6c2044
IC
28840function s0_512_hi(xh, xl) {
28841 var c0_hi = rotr64_hi(xh, xl, 28);
28842 var c1_hi = rotr64_hi(xl, xh, 2); // 34
28843 var c2_hi = rotr64_hi(xl, xh, 7); // 39
8b095871 28844
cf6c2044
IC
28845 var r = c0_hi ^ c1_hi ^ c2_hi;
28846 if (r < 0)
28847 r += 0x100000000;
28848 return r;
28849}
9987f0c1 28850
cf6c2044
IC
28851function s0_512_lo(xh, xl) {
28852 var c0_lo = rotr64_lo(xh, xl, 28);
28853 var c1_lo = rotr64_lo(xl, xh, 2); // 34
28854 var c2_lo = rotr64_lo(xl, xh, 7); // 39
9987f0c1 28855
cf6c2044
IC
28856 var r = c0_lo ^ c1_lo ^ c2_lo;
28857 if (r < 0)
28858 r += 0x100000000;
28859 return r;
8b095871
IC
28860}
28861
cf6c2044
IC
28862function s1_512_hi(xh, xl) {
28863 var c0_hi = rotr64_hi(xh, xl, 14);
28864 var c1_hi = rotr64_hi(xh, xl, 18);
28865 var c2_hi = rotr64_hi(xl, xh, 9); // 41
8b095871 28866
cf6c2044
IC
28867 var r = c0_hi ^ c1_hi ^ c2_hi;
28868 if (r < 0)
28869 r += 0x100000000;
28870 return r;
28871}
8b095871 28872
cf6c2044
IC
28873function s1_512_lo(xh, xl) {
28874 var c0_lo = rotr64_lo(xh, xl, 14);
28875 var c1_lo = rotr64_lo(xh, xl, 18);
28876 var c2_lo = rotr64_lo(xl, xh, 9); // 41
8b095871 28877
cf6c2044
IC
28878 var r = c0_lo ^ c1_lo ^ c2_lo;
28879 if (r < 0)
28880 r += 0x100000000;
28881 return r;
9987f0c1 28882}
8b095871 28883
cf6c2044
IC
28884function g0_512_hi(xh, xl) {
28885 var c0_hi = rotr64_hi(xh, xl, 1);
28886 var c1_hi = rotr64_hi(xh, xl, 8);
28887 var c2_hi = shr64_hi(xh, xl, 7);
8b095871 28888
cf6c2044
IC
28889 var r = c0_hi ^ c1_hi ^ c2_hi;
28890 if (r < 0)
28891 r += 0x100000000;
28892 return r;
8b095871
IC
28893}
28894
cf6c2044
IC
28895function g0_512_lo(xh, xl) {
28896 var c0_lo = rotr64_lo(xh, xl, 1);
28897 var c1_lo = rotr64_lo(xh, xl, 8);
28898 var c2_lo = shr64_lo(xh, xl, 7);
9987f0c1 28899
cf6c2044
IC
28900 var r = c0_lo ^ c1_lo ^ c2_lo;
28901 if (r < 0)
28902 r += 0x100000000;
28903 return r;
28904}
8b095871 28905
cf6c2044
IC
28906function g1_512_hi(xh, xl) {
28907 var c0_hi = rotr64_hi(xh, xl, 19);
28908 var c1_hi = rotr64_hi(xl, xh, 29); // 61
28909 var c2_hi = shr64_hi(xh, xl, 6);
8b095871 28910
cf6c2044
IC
28911 var r = c0_hi ^ c1_hi ^ c2_hi;
28912 if (r < 0)
28913 r += 0x100000000;
28914 return r;
28915}
8b095871 28916
cf6c2044
IC
28917function g1_512_lo(xh, xl) {
28918 var c0_lo = rotr64_lo(xh, xl, 19);
28919 var c1_lo = rotr64_lo(xl, xh, 29); // 61
28920 var c2_lo = shr64_lo(xh, xl, 6);
9987f0c1 28921
cf6c2044
IC
28922 var r = c0_lo ^ c1_lo ^ c2_lo;
28923 if (r < 0)
28924 r += 0x100000000;
28925 return r;
28926}
9987f0c1 28927
cf6c2044
IC
28928},{"../hash":114}],119:[function(require,module,exports){
28929var utils = exports;
28930var inherits = require('inherits');
9987f0c1 28931
cf6c2044
IC
28932function toArray(msg, enc) {
28933 if (Array.isArray(msg))
28934 return msg.slice();
28935 if (!msg)
28936 return [];
28937 var res = [];
28938 if (typeof msg === 'string') {
28939 if (!enc) {
28940 for (var i = 0; i < msg.length; i++) {
28941 var c = msg.charCodeAt(i);
28942 var hi = c >> 8;
28943 var lo = c & 0xff;
28944 if (hi)
28945 res.push(hi, lo);
28946 else
28947 res.push(lo);
28948 }
28949 } else if (enc === 'hex') {
28950 msg = msg.replace(/[^a-z0-9]+/ig, '');
28951 if (msg.length % 2 !== 0)
28952 msg = '0' + msg;
28953 for (var i = 0; i < msg.length; i += 2)
28954 res.push(parseInt(msg[i] + msg[i + 1], 16));
28955 }
28956 } else {
28957 for (var i = 0; i < msg.length; i++)
28958 res[i] = msg[i] | 0;
28959 }
28960 return res;
8b095871 28961}
cf6c2044 28962utils.toArray = toArray;
8b095871 28963
cf6c2044
IC
28964function toHex(msg) {
28965 var res = '';
28966 for (var i = 0; i < msg.length; i++)
28967 res += zero2(msg[i].toString(16));
28968 return res;
28969}
28970utils.toHex = toHex;
8b095871 28971
cf6c2044
IC
28972function htonl(w) {
28973 var res = (w >>> 24) |
28974 ((w >>> 8) & 0xff00) |
28975 ((w << 8) & 0xff0000) |
28976 ((w & 0xff) << 24);
28977 return res >>> 0;
28978}
28979utils.htonl = htonl;
8b095871 28980
cf6c2044
IC
28981function toHex32(msg, endian) {
28982 var res = '';
28983 for (var i = 0; i < msg.length; i++) {
28984 var w = msg[i];
28985 if (endian === 'little')
28986 w = htonl(w);
28987 res += zero8(w.toString(16));
9987f0c1 28988 }
cf6c2044
IC
28989 return res;
28990}
28991utils.toHex32 = toHex32;
8b095871 28992
cf6c2044
IC
28993function zero2(word) {
28994 if (word.length === 1)
28995 return '0' + word;
28996 else
28997 return word;
28998}
28999utils.zero2 = zero2;
8b095871 29000
cf6c2044
IC
29001function zero8(word) {
29002 if (word.length === 7)
29003 return '0' + word;
29004 else if (word.length === 6)
29005 return '00' + word;
29006 else if (word.length === 5)
29007 return '000' + word;
29008 else if (word.length === 4)
29009 return '0000' + word;
29010 else if (word.length === 3)
29011 return '00000' + word;
29012 else if (word.length === 2)
29013 return '000000' + word;
29014 else if (word.length === 1)
29015 return '0000000' + word;
29016 else
29017 return word;
8b095871 29018}
cf6c2044 29019utils.zero8 = zero8;
8b095871 29020
cf6c2044
IC
29021function join32(msg, start, end, endian) {
29022 var len = end - start;
29023 assert(len % 4 === 0);
29024 var res = new Array(len / 4);
29025 for (var i = 0, k = start; i < res.length; i++, k += 4) {
29026 var w;
29027 if (endian === 'big')
29028 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
29029 else
29030 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
29031 res[i] = w >>> 0;
29032 }
29033 return res;
29034}
29035utils.join32 = join32;
8b095871 29036
cf6c2044
IC
29037function split32(msg, endian) {
29038 var res = new Array(msg.length * 4);
29039 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
29040 var m = msg[i];
29041 if (endian === 'big') {
29042 res[k] = m >>> 24;
29043 res[k + 1] = (m >>> 16) & 0xff;
29044 res[k + 2] = (m >>> 8) & 0xff;
29045 res[k + 3] = m & 0xff;
29046 } else {
29047 res[k + 3] = m >>> 24;
29048 res[k + 2] = (m >>> 16) & 0xff;
29049 res[k + 1] = (m >>> 8) & 0xff;
29050 res[k] = m & 0xff;
29051 }
29052 }
29053 return res;
29054}
29055utils.split32 = split32;
8b095871 29056
cf6c2044
IC
29057function rotr32(w, b) {
29058 return (w >>> b) | (w << (32 - b));
29059}
29060utils.rotr32 = rotr32;
8b095871 29061
cf6c2044
IC
29062function rotl32(w, b) {
29063 return (w << b) | (w >>> (32 - b));
29064}
29065utils.rotl32 = rotl32;
8b095871 29066
cf6c2044
IC
29067function sum32(a, b) {
29068 return (a + b) >>> 0;
29069}
29070utils.sum32 = sum32;
8b095871 29071
cf6c2044
IC
29072function sum32_3(a, b, c) {
29073 return (a + b + c) >>> 0;
29074}
29075utils.sum32_3 = sum32_3;
8b095871 29076
cf6c2044
IC
29077function sum32_4(a, b, c, d) {
29078 return (a + b + c + d) >>> 0;
9987f0c1 29079}
cf6c2044 29080utils.sum32_4 = sum32_4;
8b095871 29081
cf6c2044
IC
29082function sum32_5(a, b, c, d, e) {
29083 return (a + b + c + d + e) >>> 0;
29084}
29085utils.sum32_5 = sum32_5;
9987f0c1 29086
cf6c2044
IC
29087function assert(cond, msg) {
29088 if (!cond)
29089 throw new Error(msg || 'Assertion failed');
29090}
29091utils.assert = assert;
9987f0c1 29092
cf6c2044 29093utils.inherits = inherits;
9987f0c1 29094
cf6c2044
IC
29095function sum64(buf, pos, ah, al) {
29096 var bh = buf[pos];
29097 var bl = buf[pos + 1];
8b095871 29098
cf6c2044
IC
29099 var lo = (al + bl) >>> 0;
29100 var hi = (lo < al ? 1 : 0) + ah + bh;
29101 buf[pos] = hi >>> 0;
29102 buf[pos + 1] = lo;
9987f0c1 29103}
cf6c2044 29104exports.sum64 = sum64;
8b095871 29105
cf6c2044
IC
29106function sum64_hi(ah, al, bh, bl) {
29107 var lo = (al + bl) >>> 0;
29108 var hi = (lo < al ? 1 : 0) + ah + bh;
29109 return hi >>> 0;
29110};
29111exports.sum64_hi = sum64_hi;
9987f0c1 29112
cf6c2044
IC
29113function sum64_lo(ah, al, bh, bl) {
29114 var lo = al + bl;
29115 return lo >>> 0;
29116};
29117exports.sum64_lo = sum64_lo;
8b095871 29118
cf6c2044
IC
29119function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
29120 var carry = 0;
29121 var lo = al;
29122 lo = (lo + bl) >>> 0;
29123 carry += lo < al ? 1 : 0;
29124 lo = (lo + cl) >>> 0;
29125 carry += lo < cl ? 1 : 0;
29126 lo = (lo + dl) >>> 0;
29127 carry += lo < dl ? 1 : 0;
8b095871 29128
cf6c2044
IC
29129 var hi = ah + bh + ch + dh + carry;
29130 return hi >>> 0;
29131};
29132exports.sum64_4_hi = sum64_4_hi;
8b095871 29133
cf6c2044
IC
29134function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
29135 var lo = al + bl + cl + dl;
29136 return lo >>> 0;
29137};
29138exports.sum64_4_lo = sum64_4_lo;
8b095871 29139
cf6c2044
IC
29140function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
29141 var carry = 0;
29142 var lo = al;
29143 lo = (lo + bl) >>> 0;
29144 carry += lo < al ? 1 : 0;
29145 lo = (lo + cl) >>> 0;
29146 carry += lo < cl ? 1 : 0;
29147 lo = (lo + dl) >>> 0;
29148 carry += lo < dl ? 1 : 0;
29149 lo = (lo + el) >>> 0;
29150 carry += lo < el ? 1 : 0;
8b095871 29151
cf6c2044
IC
29152 var hi = ah + bh + ch + dh + eh + carry;
29153 return hi >>> 0;
29154};
29155exports.sum64_5_hi = sum64_5_hi;
8b095871 29156
cf6c2044
IC
29157function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
29158 var lo = al + bl + cl + dl + el;
8b095871 29159
cf6c2044
IC
29160 return lo >>> 0;
29161};
29162exports.sum64_5_lo = sum64_5_lo;
8b095871 29163
cf6c2044
IC
29164function rotr64_hi(ah, al, num) {
29165 var r = (al << (32 - num)) | (ah >>> num);
29166 return r >>> 0;
29167};
29168exports.rotr64_hi = rotr64_hi;
8b095871 29169
cf6c2044
IC
29170function rotr64_lo(ah, al, num) {
29171 var r = (ah << (32 - num)) | (al >>> num);
29172 return r >>> 0;
29173};
29174exports.rotr64_lo = rotr64_lo;
8b095871 29175
cf6c2044
IC
29176function shr64_hi(ah, al, num) {
29177 return ah >>> num;
29178};
29179exports.shr64_hi = shr64_hi;
8b095871 29180
cf6c2044
IC
29181function shr64_lo(ah, al, num) {
29182 var r = (ah << (32 - num)) | (al >>> num);
29183 return r >>> 0;
29184};
29185exports.shr64_lo = shr64_lo;
8b095871 29186
cf6c2044
IC
29187},{"inherits":121}],120:[function(require,module,exports){
29188'use strict';
8b095871 29189
cf6c2044
IC
29190var hash = require('hash.js');
29191var utils = require('minimalistic-crypto-utils');
29192var assert = require('minimalistic-assert');
8b095871 29193
cf6c2044
IC
29194function HmacDRBG(options) {
29195 if (!(this instanceof HmacDRBG))
29196 return new HmacDRBG(options);
29197 this.hash = options.hash;
29198 this.predResist = !!options.predResist;
8b095871 29199
cf6c2044
IC
29200 this.outLen = this.hash.outSize;
29201 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
8b095871 29202
cf6c2044
IC
29203 this._reseed = null;
29204 this.reseedInterval = null;
29205 this.K = null;
29206 this.V = null;
8b095871 29207
cf6c2044
IC
29208 var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
29209 var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
29210 var pers = utils.toArray(options.pers, options.persEnc || 'hex');
29211 assert(entropy.length >= (this.minEntropy / 8),
29212 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
29213 this._init(entropy, nonce, pers);
9987f0c1 29214}
cf6c2044 29215module.exports = HmacDRBG;
8b095871 29216
cf6c2044
IC
29217HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
29218 var seed = entropy.concat(nonce).concat(pers);
8b095871 29219
cf6c2044
IC
29220 this.K = new Array(this.outLen / 8);
29221 this.V = new Array(this.outLen / 8);
29222 for (var i = 0; i < this.V.length; i++) {
29223 this.K[i] = 0x00;
29224 this.V[i] = 0x01;
9987f0c1 29225 }
8b095871 29226
cf6c2044
IC
29227 this._update(seed);
29228 this._reseed = 1;
29229 this.reseedInterval = 0x1000000000000; // 2^48
29230};
8b095871 29231
cf6c2044
IC
29232HmacDRBG.prototype._hmac = function hmac() {
29233 return new hash.hmac(this.hash, this.K);
29234};
8b095871 29235
cf6c2044
IC
29236HmacDRBG.prototype._update = function update(seed) {
29237 var kmac = this._hmac()
29238 .update(this.V)
29239 .update([ 0x00 ]);
29240 if (seed)
29241 kmac = kmac.update(seed);
29242 this.K = kmac.digest();
29243 this.V = this._hmac().update(this.V).digest();
29244 if (!seed)
29245 return;
8b095871 29246
cf6c2044
IC
29247 this.K = this._hmac()
29248 .update(this.V)
29249 .update([ 0x01 ])
29250 .update(seed)
29251 .digest();
29252 this.V = this._hmac().update(this.V).digest();
29253};
8b095871 29254
cf6c2044
IC
29255HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
29256 // Optional entropy enc
29257 if (typeof entropyEnc !== 'string') {
29258 addEnc = add;
29259 add = entropyEnc;
29260 entropyEnc = null;
9987f0c1 29261 }
8b095871 29262
cf6c2044
IC
29263 entropy = utils.toArray(entropy, entropyEnc);
29264 add = utils.toArray(add, addEnc);
8b095871 29265
cf6c2044
IC
29266 assert(entropy.length >= (this.minEntropy / 8),
29267 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
8b095871 29268
cf6c2044
IC
29269 this._update(entropy.concat(add || []));
29270 this._reseed = 1;
29271};
8b095871 29272
cf6c2044
IC
29273HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
29274 if (this._reseed > this.reseedInterval)
29275 throw new Error('Reseed is required');
8b095871 29276
cf6c2044
IC
29277 // Optional encoding
29278 if (typeof enc !== 'string') {
29279 addEnc = add;
29280 add = enc;
29281 enc = null;
29282 }
8b095871 29283
cf6c2044
IC
29284 // Optional additional data
29285 if (add) {
29286 add = utils.toArray(add, addEnc || 'hex');
29287 this._update(add);
29288 }
8b095871 29289
cf6c2044
IC
29290 var temp = [];
29291 while (temp.length < len) {
29292 this.V = this._hmac().update(this.V).digest();
29293 temp = temp.concat(this.V);
29294 }
8b095871 29295
cf6c2044
IC
29296 var res = temp.slice(0, len);
29297 this._update(add);
29298 this._reseed++;
29299 return utils.encode(res, enc);
29300};
29301
29302},{"hash.js":114,"minimalistic-assert":123,"minimalistic-crypto-utils":124}],121:[function(require,module,exports){
29303arguments[4][9][0].apply(exports,arguments)
29304},{"dup":9}],122:[function(require,module,exports){
9987f0c1
IC
29305(function (Buffer){
29306// constant-space merkle root calculation algorithm
29307module.exports = function fastRoot (values, digestFn) {
29308 if (!Array.isArray(values)) throw TypeError('Expected values Array')
29309 if (typeof digestFn !== 'function') throw TypeError('Expected digest Function')
8b095871 29310
9987f0c1
IC
29311 var length = values.length
29312 var results = values.concat()
8b095871 29313
9987f0c1
IC
29314 while (length > 1) {
29315 var j = 0
8b095871 29316
9987f0c1
IC
29317 for (var i = 0; i < length; i += 2, ++j) {
29318 var left = results[i]
29319 var right = i + 1 === length ? left : results[i + 1]
29320 var data = Buffer.concat([left, right])
8b095871 29321
9987f0c1 29322 results[j] = digestFn(data)
8b095871
IC
29323 }
29324
9987f0c1 29325 length = j
8b095871
IC
29326 }
29327
9987f0c1 29328 return results[0]
8b095871
IC
29329}
29330
8b095871 29331}).call(this,require("buffer").Buffer)
cf6c2044
IC
29332},{"buffer":5}],123:[function(require,module,exports){
29333module.exports = assert;
29334
29335function assert(val, msg) {
29336 if (!val)
29337 throw new Error(msg || 'Assertion failed');
29338}
29339
29340assert.equal = function assertEqual(l, r, msg) {
29341 if (l != r)
29342 throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
29343};
29344
29345},{}],124:[function(require,module,exports){
29346'use strict';
29347
29348var utils = exports;
29349
29350function toArray(msg, enc) {
29351 if (Array.isArray(msg))
29352 return msg.slice();
29353 if (!msg)
29354 return [];
29355 var res = [];
29356 if (typeof msg !== 'string') {
29357 for (var i = 0; i < msg.length; i++)
29358 res[i] = msg[i] | 0;
29359 return res;
29360 }
29361 if (enc === 'hex') {
29362 msg = msg.replace(/[^a-z0-9]+/ig, '');
29363 if (msg.length % 2 !== 0)
29364 msg = '0' + msg;
29365 for (var i = 0; i < msg.length; i += 2)
29366 res.push(parseInt(msg[i] + msg[i + 1], 16));
29367 } else {
29368 for (var i = 0; i < msg.length; i++) {
29369 var c = msg.charCodeAt(i);
29370 var hi = c >> 8;
29371 var lo = c & 0xff;
29372 if (hi)
29373 res.push(hi, lo);
29374 else
29375 res.push(lo);
29376 }
29377 }
29378 return res;
29379}
29380utils.toArray = toArray;
29381
29382function zero2(word) {
29383 if (word.length === 1)
29384 return '0' + word;
29385 else
29386 return word;
29387}
29388utils.zero2 = zero2;
29389
29390function toHex(msg) {
29391 var res = '';
29392 for (var i = 0; i < msg.length; i++)
29393 res += zero2(msg[i].toString(16));
29394 return res;
29395}
29396utils.toHex = toHex;
29397
29398utils.encode = function encode(arr, enc) {
29399 if (enc === 'hex')
29400 return toHex(arr);
29401 else
29402 return arr;
29403};
29404
29405},{}],125:[function(require,module,exports){
9987f0c1
IC
29406var OPS = require('bitcoin-ops')
29407
29408function encodingLength (i) {
29409 return i < OPS.OP_PUSHDATA1 ? 1
29410 : i <= 0xff ? 2
29411 : i <= 0xffff ? 3
29412 : 5
8b095871
IC
29413}
29414
9987f0c1
IC
29415function encode (buffer, number, offset) {
29416 var size = encodingLength(number)
8b095871 29417
9987f0c1
IC
29418 // ~6 bit
29419 if (size === 1) {
29420 buffer.writeUInt8(number, offset)
8b095871 29421
9987f0c1
IC
29422 // 8 bit
29423 } else if (size === 2) {
29424 buffer.writeUInt8(OPS.OP_PUSHDATA1, offset)
29425 buffer.writeUInt8(number, offset + 1)
29426
29427 // 16 bit
29428 } else if (size === 3) {
29429 buffer.writeUInt8(OPS.OP_PUSHDATA2, offset)
29430 buffer.writeUInt16LE(number, offset + 1)
8b095871 29431
9987f0c1
IC
29432 // 32 bit
29433 } else {
29434 buffer.writeUInt8(OPS.OP_PUSHDATA4, offset)
29435 buffer.writeUInt32LE(number, offset + 1)
29436 }
8b095871 29437
9987f0c1 29438 return size
8b095871
IC
29439}
29440
9987f0c1
IC
29441function decode (buffer, offset) {
29442 var opcode = buffer.readUInt8(offset)
29443 var number, size
8b095871 29444
9987f0c1
IC
29445 // ~6 bit
29446 if (opcode < OPS.OP_PUSHDATA1) {
29447 number = opcode
29448 size = 1
8b095871 29449
9987f0c1
IC
29450 // 8 bit
29451 } else if (opcode === OPS.OP_PUSHDATA1) {
29452 if (offset + 2 > buffer.length) return null
29453 number = buffer.readUInt8(offset + 1)
29454 size = 2
8b095871 29455
9987f0c1
IC
29456 // 16 bit
29457 } else if (opcode === OPS.OP_PUSHDATA2) {
29458 if (offset + 3 > buffer.length) return null
29459 number = buffer.readUInt16LE(offset + 1)
29460 size = 3
8b095871 29461
9987f0c1
IC
29462 // 32 bit
29463 } else {
29464 if (offset + 5 > buffer.length) return null
29465 if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode')
8b095871 29466
9987f0c1
IC
29467 number = buffer.readUInt32LE(offset + 1)
29468 size = 5
29469 }
8b095871 29470
9987f0c1
IC
29471 return {
29472 opcode: opcode,
29473 number: number,
29474 size: size
29475 }
8b095871
IC
29476}
29477
29478module.exports = {
9987f0c1
IC
29479 encodingLength: encodingLength,
29480 encode: encode,
29481 decode: decode
8b095871
IC
29482}
29483
cf6c2044 29484},{"bitcoin-ops":42}],126:[function(require,module,exports){
9987f0c1
IC
29485(function (process,global){
29486'use strict'
8b095871 29487
9987f0c1
IC
29488function oldBrowser () {
29489 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
8b095871
IC
29490}
29491
9987f0c1
IC
29492var Buffer = require('safe-buffer').Buffer
29493var crypto = global.crypto || global.msCrypto
8b095871 29494
9987f0c1
IC
29495if (crypto && crypto.getRandomValues) {
29496 module.exports = randomBytes
29497} else {
29498 module.exports = oldBrowser
29499}
8b095871 29500
9987f0c1
IC
29501function randomBytes (size, cb) {
29502 // phantomjs needs to throw
29503 if (size > 65536) throw new Error('requested too many random bytes')
29504 // in case browserify isn't using the Uint8Array version
29505 var rawBytes = new global.Uint8Array(size)
8b095871 29506
9987f0c1
IC
29507 // This will not work in older browsers.
29508 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
29509 if (size > 0) { // getRandomValues fails on IE if size == 0
29510 crypto.getRandomValues(rawBytes)
8b095871 29511 }
8b095871 29512
9987f0c1
IC
29513 // XXX: phantomjs doesn't like a buffer being passed here
29514 var bytes = Buffer.from(rawBytes.buffer)
8b095871 29515
9987f0c1
IC
29516 if (typeof cb === 'function') {
29517 return process.nextTick(function () {
29518 cb(null, bytes)
29519 })
29520 }
8b095871 29521
9987f0c1 29522 return bytes
8b095871
IC
29523}
29524
9987f0c1 29525}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
cf6c2044 29526},{"_process":13,"safe-buffer":128}],127:[function(require,module,exports){
9987f0c1
IC
29527(function (Buffer){
29528'use strict'
29529var inherits = require('inherits')
29530var HashBase = require('hash-base')
8b095871 29531
9987f0c1
IC
29532function RIPEMD160 () {
29533 HashBase.call(this, 64)
8b095871 29534
9987f0c1
IC
29535 // state
29536 this._a = 0x67452301
29537 this._b = 0xefcdab89
29538 this._c = 0x98badcfe
29539 this._d = 0x10325476
29540 this._e = 0xc3d2e1f0
8b095871
IC
29541}
29542
9987f0c1
IC
29543inherits(RIPEMD160, HashBase)
29544
29545RIPEMD160.prototype._update = function () {
29546 var m = new Array(16)
29547 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
29548
29549 var al = this._a
29550 var bl = this._b
29551 var cl = this._c
29552 var dl = this._d
29553 var el = this._e
29554
29555 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
29556 // K = 0x00000000
29557 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
29558 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
29559 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
29560 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
29561 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
29562 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
29563 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
29564 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
29565 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
29566 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
29567 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
29568 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
29569 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
29570 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
29571 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
29572 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
29573 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
29574
29575 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
29576 // K = 0x5a827999
29577 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
29578 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
29579 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
29580 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
29581 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
29582 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
29583 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
29584 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
29585 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
29586 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
29587 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
29588 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
29589 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
29590 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
29591 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
29592 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
29593 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
29594
29595 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
29596 // K = 0x6ed9eba1
29597 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
29598 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
29599 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
29600 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
29601 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
29602 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
29603 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
29604 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
29605 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
29606 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
29607 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
29608 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
29609 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
29610 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
29611 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
29612 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
29613 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
29614
29615 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
29616 // K = 0x8f1bbcdc
29617 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
29618 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
29619 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
29620 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
29621 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
29622 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
29623 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
29624 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
29625 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
29626 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
29627 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
29628 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
29629 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
29630 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
29631 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
29632 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
29633 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
29634
29635 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
29636 // K = 0xa953fd4e
29637 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
29638 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
29639 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
29640 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
29641 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
29642 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
29643 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
29644 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
29645 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
29646 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
29647 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
29648 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
29649 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
29650 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
29651 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
29652 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
29653 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
29654
29655 var ar = this._a
29656 var br = this._b
29657 var cr = this._c
29658 var dr = this._d
29659 var er = this._e
29660
29661 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
29662 // K' = 0x50a28be6
29663 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
29664 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
29665 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
29666 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
29667 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
29668 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
29669 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
29670 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
29671 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
29672 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
29673 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
29674 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
29675 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
29676 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
29677 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
29678 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
29679 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
29680
29681 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
29682 // K' = 0x5c4dd124
29683 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
29684 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
29685 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
29686 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
29687 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
29688 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
29689 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
29690 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
29691 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
29692 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
29693 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
29694 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
29695 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
29696 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
29697 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
29698 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
29699 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
29700
29701 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
29702 // K' = 0x6d703ef3
29703 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
29704 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
29705 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
29706 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
29707 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
29708 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
29709 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
29710 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
29711 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
29712 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
29713 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
29714 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
29715 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
29716 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
29717 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
29718 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
29719 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
29720
29721 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
29722 // K' = 0x7a6d76e9
29723 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
29724 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
29725 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
29726 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
29727 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
29728 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
29729 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
29730 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
29731 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
29732 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
29733 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
29734 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
29735 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
29736 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
29737 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
29738 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
29739 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
29740
29741 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
29742 // K' = 0x00000000
29743 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
29744 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
29745 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
29746 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
29747 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
29748 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
29749 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
29750 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
29751 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
29752 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
29753 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
29754 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
29755 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
29756 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
29757 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
29758 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
29759 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
29760
29761 // change state
29762 var t = (this._b + cl + dr) | 0
29763 this._b = (this._c + dl + er) | 0
29764 this._c = (this._d + el + ar) | 0
29765 this._d = (this._e + al + br) | 0
29766 this._e = (this._a + bl + cr) | 0
29767 this._a = t
29768}
29769
29770RIPEMD160.prototype._digest = function () {
29771 // create padding and handle blocks
29772 this._block[this._blockOffset++] = 0x80
29773 if (this._blockOffset > 56) {
29774 this._block.fill(0, this._blockOffset, 64)
29775 this._update()
29776 this._blockOffset = 0
29777 }
29778
29779 this._block.fill(0, this._blockOffset, 56)
29780 this._block.writeUInt32LE(this._length[0], 56)
29781 this._block.writeUInt32LE(this._length[1], 60)
29782 this._update()
29783
29784 // produce result
29785 var buffer = new Buffer(20)
29786 buffer.writeInt32LE(this._a, 0)
29787 buffer.writeInt32LE(this._b, 4)
29788 buffer.writeInt32LE(this._c, 8)
29789 buffer.writeInt32LE(this._d, 12)
29790 buffer.writeInt32LE(this._e, 16)
29791 return buffer
29792}
8b095871 29793
9987f0c1
IC
29794function rotl (x, n) {
29795 return (x << n) | (x >>> (32 - n))
29796}
8b095871 29797
9987f0c1
IC
29798function fn1 (a, b, c, d, e, m, k, s) {
29799 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
29800}
8b095871 29801
9987f0c1
IC
29802function fn2 (a, b, c, d, e, m, k, s) {
29803 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
29804}
8b095871 29805
9987f0c1
IC
29806function fn3 (a, b, c, d, e, m, k, s) {
29807 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
29808}
8b095871 29809
9987f0c1
IC
29810function fn4 (a, b, c, d, e, m, k, s) {
29811 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
29812}
8b095871 29813
9987f0c1
IC
29814function fn5 (a, b, c, d, e, m, k, s) {
29815 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
29816}
8b095871 29817
9987f0c1 29818module.exports = RIPEMD160
8b095871 29819
9987f0c1 29820}).call(this,require("buffer").Buffer)
cf6c2044
IC
29821},{"buffer":5,"hash-base":113,"inherits":121}],128:[function(require,module,exports){
29822/* eslint-disable node/no-deprecated-api */
29823var buffer = require('buffer')
29824var Buffer = buffer.Buffer
29825
29826// alternative to using Object.keys for old browsers
29827function copyProps (src, dst) {
29828 for (var key in src) {
29829 dst[key] = src[key]
29830 }
29831}
29832if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
29833 module.exports = buffer
29834} else {
29835 // Copy properties from require('buffer')
29836 copyProps(buffer, exports)
29837 exports.Buffer = SafeBuffer
29838}
29839
29840function SafeBuffer (arg, encodingOrOffset, length) {
29841 return Buffer(arg, encodingOrOffset, length)
29842}
29843
29844// Copy static methods from Buffer
29845copyProps(Buffer, SafeBuffer)
29846
29847SafeBuffer.from = function (arg, encodingOrOffset, length) {
29848 if (typeof arg === 'number') {
29849 throw new TypeError('Argument must not be a number')
29850 }
29851 return Buffer(arg, encodingOrOffset, length)
29852}
29853
29854SafeBuffer.alloc = function (size, fill, encoding) {
29855 if (typeof size !== 'number') {
29856 throw new TypeError('Argument must be a number')
29857 }
29858 var buf = Buffer(size)
29859 if (fill !== undefined) {
29860 if (typeof encoding === 'string') {
29861 buf.fill(fill, encoding)
29862 } else {
29863 buf.fill(fill)
29864 }
29865 } else {
29866 buf.fill(0)
29867 }
29868 return buf
29869}
29870
29871SafeBuffer.allocUnsafe = function (size) {
29872 if (typeof size !== 'number') {
29873 throw new TypeError('Argument must be a number')
29874 }
29875 return Buffer(size)
29876}
29877
29878SafeBuffer.allocUnsafeSlow = function (size) {
29879 if (typeof size !== 'number') {
29880 throw new TypeError('Argument must be a number')
29881 }
29882 return buffer.SlowBuffer(size)
29883}
29884
29885},{"buffer":5}],129:[function(require,module,exports){
29886var Buffer = require('safe-buffer').Buffer
29887
9987f0c1
IC
29888// prototype class for hash functions
29889function Hash (blockSize, finalSize) {
cf6c2044 29890 this._block = Buffer.alloc(blockSize)
9987f0c1
IC
29891 this._finalSize = finalSize
29892 this._blockSize = blockSize
29893 this._len = 0
9987f0c1
IC
29894}
29895
29896Hash.prototype.update = function (data, enc) {
29897 if (typeof data === 'string') {
29898 enc = enc || 'utf8'
cf6c2044 29899 data = Buffer.from(data, enc)
8b095871
IC
29900 }
29901
cf6c2044
IC
29902 var block = this._block
29903 var blockSize = this._blockSize
29904 var length = data.length
29905 var accum = this._len
8b095871 29906
cf6c2044
IC
29907 for (var offset = 0; offset < length;) {
29908 var assigned = accum % blockSize
29909 var remainder = Math.min(length - offset, blockSize - assigned)
8b095871 29910
cf6c2044
IC
29911 for (var i = 0; i < remainder; i++) {
29912 block[assigned + i] = data[offset + i]
8b095871
IC
29913 }
29914
cf6c2044
IC
29915 accum += remainder
29916 offset += remainder
8b095871 29917
cf6c2044
IC
29918 if ((accum % blockSize) === 0) {
29919 this._update(block)
9987f0c1
IC
29920 }
29921 }
8b095871 29922
cf6c2044 29923 this._len += length
9987f0c1
IC
29924 return this
29925}
8b095871 29926
9987f0c1 29927Hash.prototype.digest = function (enc) {
cf6c2044 29928 var rem = this._len % this._blockSize
8b095871 29929
cf6c2044 29930 this._block[rem] = 0x80
8b095871 29931
cf6c2044
IC
29932 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
29933 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
29934 this._block.fill(0, rem + 1)
8b095871 29935
cf6c2044 29936 if (rem >= this._finalSize) {
9987f0c1
IC
29937 this._update(this._block)
29938 this._block.fill(0)
29939 }
8b095871 29940
cf6c2044 29941 var bits = this._len * 8
8b095871 29942
cf6c2044
IC
29943 // uint32
29944 if (bits <= 0xffffffff) {
29945 this._block.writeUInt32BE(bits, this._blockSize - 4)
29946
29947 // uint64
29948 } else {
29949 var lowBits = bits & 0xffffffff
29950 var highBits = (bits - lowBits) / 0x100000000
29951
29952 this._block.writeUInt32BE(highBits, this._blockSize - 8)
29953 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
29954 }
29955
29956 this._update(this._block)
29957 var hash = this._hash()
8b095871 29958
9987f0c1 29959 return enc ? hash.toString(enc) : hash
8b095871
IC
29960}
29961
9987f0c1
IC
29962Hash.prototype._update = function () {
29963 throw new Error('_update must be implemented by subclass')
8b095871
IC
29964}
29965
9987f0c1 29966module.exports = Hash
8b095871 29967
cf6c2044 29968},{"safe-buffer":128}],130:[function(require,module,exports){
9987f0c1
IC
29969var exports = module.exports = function SHA (algorithm) {
29970 algorithm = algorithm.toLowerCase()
8b095871 29971
9987f0c1
IC
29972 var Algorithm = exports[algorithm]
29973 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8b095871 29974
9987f0c1 29975 return new Algorithm()
8b095871
IC
29976}
29977
9987f0c1
IC
29978exports.sha = require('./sha')
29979exports.sha1 = require('./sha1')
29980exports.sha224 = require('./sha224')
29981exports.sha256 = require('./sha256')
29982exports.sha384 = require('./sha384')
29983exports.sha512 = require('./sha512')
8b095871 29984
cf6c2044 29985},{"./sha":131,"./sha1":132,"./sha224":133,"./sha256":134,"./sha384":135,"./sha512":136}],131:[function(require,module,exports){
9987f0c1
IC
29986/*
29987 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
29988 * in FIPS PUB 180-1
29989 * This source code is derived from sha1.js of the same repository.
29990 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
29991 * operation was added.
29992 */
8b095871 29993
9987f0c1
IC
29994var inherits = require('inherits')
29995var Hash = require('./hash')
cf6c2044 29996var Buffer = require('safe-buffer').Buffer
8b095871 29997
9987f0c1
IC
29998var K = [
29999 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
30000]
8b095871 30001
9987f0c1 30002var W = new Array(80)
8b095871 30003
9987f0c1
IC
30004function Sha () {
30005 this.init()
30006 this._w = W
8b095871 30007
9987f0c1 30008 Hash.call(this, 64, 56)
8b095871
IC
30009}
30010
9987f0c1 30011inherits(Sha, Hash)
8b095871 30012
9987f0c1
IC
30013Sha.prototype.init = function () {
30014 this._a = 0x67452301
30015 this._b = 0xefcdab89
30016 this._c = 0x98badcfe
30017 this._d = 0x10325476
30018 this._e = 0xc3d2e1f0
8b095871 30019
9987f0c1 30020 return this
8b095871
IC
30021}
30022
9987f0c1
IC
30023function rotl5 (num) {
30024 return (num << 5) | (num >>> 27)
8b095871
IC
30025}
30026
9987f0c1
IC
30027function rotl30 (num) {
30028 return (num << 30) | (num >>> 2)
8b095871
IC
30029}
30030
9987f0c1
IC
30031function ft (s, b, c, d) {
30032 if (s === 0) return (b & c) | ((~b) & d)
30033 if (s === 2) return (b & c) | (b & d) | (c & d)
30034 return b ^ c ^ d
8b095871
IC
30035}
30036
9987f0c1
IC
30037Sha.prototype._update = function (M) {
30038 var W = this._w
8b095871 30039
9987f0c1
IC
30040 var a = this._a | 0
30041 var b = this._b | 0
30042 var c = this._c | 0
30043 var d = this._d | 0
30044 var e = this._e | 0
8b095871 30045
9987f0c1
IC
30046 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
30047 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
8b095871 30048
9987f0c1
IC
30049 for (var j = 0; j < 80; ++j) {
30050 var s = ~~(j / 20)
30051 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
8b095871 30052
9987f0c1
IC
30053 e = d
30054 d = c
30055 c = rotl30(b)
30056 b = a
30057 a = t
30058 }
8b095871 30059
9987f0c1
IC
30060 this._a = (a + this._a) | 0
30061 this._b = (b + this._b) | 0
30062 this._c = (c + this._c) | 0
30063 this._d = (d + this._d) | 0
30064 this._e = (e + this._e) | 0
8b095871
IC
30065}
30066
9987f0c1 30067Sha.prototype._hash = function () {
cf6c2044 30068 var H = Buffer.allocUnsafe(20)
8b095871 30069
9987f0c1
IC
30070 H.writeInt32BE(this._a | 0, 0)
30071 H.writeInt32BE(this._b | 0, 4)
30072 H.writeInt32BE(this._c | 0, 8)
30073 H.writeInt32BE(this._d | 0, 12)
30074 H.writeInt32BE(this._e | 0, 16)
8b095871 30075
9987f0c1 30076 return H
8b095871
IC
30077}
30078
9987f0c1 30079module.exports = Sha
8b095871 30080
cf6c2044 30081},{"./hash":129,"inherits":121,"safe-buffer":128}],132:[function(require,module,exports){
9987f0c1
IC
30082/*
30083 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
30084 * in FIPS PUB 180-1
30085 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
30086 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
30087 * Distributed under the BSD License
30088 * See http://pajhome.org.uk/crypt/md5 for details.
30089 */
8b095871 30090
9987f0c1
IC
30091var inherits = require('inherits')
30092var Hash = require('./hash')
cf6c2044 30093var Buffer = require('safe-buffer').Buffer
8b095871 30094
9987f0c1
IC
30095var K = [
30096 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
30097]
8b095871 30098
9987f0c1 30099var W = new Array(80)
8b095871 30100
9987f0c1
IC
30101function Sha1 () {
30102 this.init()
30103 this._w = W
8b095871 30104
9987f0c1 30105 Hash.call(this, 64, 56)
8b095871
IC
30106}
30107
9987f0c1 30108inherits(Sha1, Hash)
8b095871 30109
9987f0c1
IC
30110Sha1.prototype.init = function () {
30111 this._a = 0x67452301
30112 this._b = 0xefcdab89
30113 this._c = 0x98badcfe
30114 this._d = 0x10325476
30115 this._e = 0xc3d2e1f0
8b095871 30116
9987f0c1 30117 return this
8b095871
IC
30118}
30119
9987f0c1
IC
30120function rotl1 (num) {
30121 return (num << 1) | (num >>> 31)
30122}
8b095871 30123
9987f0c1
IC
30124function rotl5 (num) {
30125 return (num << 5) | (num >>> 27)
8b095871
IC
30126}
30127
9987f0c1
IC
30128function rotl30 (num) {
30129 return (num << 30) | (num >>> 2)
8b095871
IC
30130}
30131
9987f0c1
IC
30132function ft (s, b, c, d) {
30133 if (s === 0) return (b & c) | ((~b) & d)
30134 if (s === 2) return (b & c) | (b & d) | (c & d)
30135 return b ^ c ^ d
8b095871
IC
30136}
30137
9987f0c1
IC
30138Sha1.prototype._update = function (M) {
30139 var W = this._w
8b095871 30140
9987f0c1
IC
30141 var a = this._a | 0
30142 var b = this._b | 0
30143 var c = this._c | 0
30144 var d = this._d | 0
30145 var e = this._e | 0
8b095871 30146
9987f0c1
IC
30147 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
30148 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
8b095871 30149
9987f0c1
IC
30150 for (var j = 0; j < 80; ++j) {
30151 var s = ~~(j / 20)
30152 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
8b095871 30153
9987f0c1
IC
30154 e = d
30155 d = c
30156 c = rotl30(b)
30157 b = a
30158 a = t
30159 }
8b095871 30160
9987f0c1
IC
30161 this._a = (a + this._a) | 0
30162 this._b = (b + this._b) | 0
30163 this._c = (c + this._c) | 0
30164 this._d = (d + this._d) | 0
30165 this._e = (e + this._e) | 0
8b095871
IC
30166}
30167
9987f0c1 30168Sha1.prototype._hash = function () {
cf6c2044 30169 var H = Buffer.allocUnsafe(20)
9987f0c1
IC
30170
30171 H.writeInt32BE(this._a | 0, 0)
30172 H.writeInt32BE(this._b | 0, 4)
30173 H.writeInt32BE(this._c | 0, 8)
30174 H.writeInt32BE(this._d | 0, 12)
30175 H.writeInt32BE(this._e | 0, 16)
8b095871 30176
9987f0c1 30177 return H
8b095871
IC
30178}
30179
9987f0c1 30180module.exports = Sha1
8b095871 30181
cf6c2044 30182},{"./hash":129,"inherits":121,"safe-buffer":128}],133:[function(require,module,exports){
9987f0c1
IC
30183/**
30184 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
30185 * in FIPS 180-2
30186 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
30187 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
30188 *
30189 */
8b095871 30190
9987f0c1
IC
30191var inherits = require('inherits')
30192var Sha256 = require('./sha256')
30193var Hash = require('./hash')
cf6c2044 30194var Buffer = require('safe-buffer').Buffer
8b095871 30195
9987f0c1 30196var W = new Array(64)
8b095871 30197
9987f0c1
IC
30198function Sha224 () {
30199 this.init()
8b095871 30200
9987f0c1 30201 this._w = W // new Array(64)
8b095871 30202
9987f0c1 30203 Hash.call(this, 64, 56)
8b095871
IC
30204}
30205
9987f0c1 30206inherits(Sha224, Sha256)
8b095871 30207
9987f0c1
IC
30208Sha224.prototype.init = function () {
30209 this._a = 0xc1059ed8
30210 this._b = 0x367cd507
30211 this._c = 0x3070dd17
30212 this._d = 0xf70e5939
30213 this._e = 0xffc00b31
30214 this._f = 0x68581511
30215 this._g = 0x64f98fa7
30216 this._h = 0xbefa4fa4
30217
30218 return this
8b095871
IC
30219}
30220
9987f0c1 30221Sha224.prototype._hash = function () {
cf6c2044 30222 var H = Buffer.allocUnsafe(28)
8b095871 30223
9987f0c1
IC
30224 H.writeInt32BE(this._a, 0)
30225 H.writeInt32BE(this._b, 4)
30226 H.writeInt32BE(this._c, 8)
30227 H.writeInt32BE(this._d, 12)
30228 H.writeInt32BE(this._e, 16)
30229 H.writeInt32BE(this._f, 20)
30230 H.writeInt32BE(this._g, 24)
8b095871 30231
9987f0c1 30232 return H
8b095871
IC
30233}
30234
9987f0c1 30235module.exports = Sha224
8b095871 30236
cf6c2044 30237},{"./hash":129,"./sha256":134,"inherits":121,"safe-buffer":128}],134:[function(require,module,exports){
9987f0c1
IC
30238/**
30239 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
30240 * in FIPS 180-2
30241 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
30242 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
30243 *
30244 */
8b095871 30245
9987f0c1
IC
30246var inherits = require('inherits')
30247var Hash = require('./hash')
cf6c2044 30248var Buffer = require('safe-buffer').Buffer
8b095871 30249
9987f0c1
IC
30250var K = [
30251 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
30252 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
30253 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
30254 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
30255 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
30256 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
30257 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
30258 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
30259 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
30260 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
30261 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
30262 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
30263 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
30264 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
30265 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
30266 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
30267]
8b095871 30268
9987f0c1 30269var W = new Array(64)
8b095871 30270
9987f0c1
IC
30271function Sha256 () {
30272 this.init()
8b095871 30273
9987f0c1 30274 this._w = W // new Array(64)
8b095871 30275
9987f0c1
IC
30276 Hash.call(this, 64, 56)
30277}
8b095871 30278
9987f0c1 30279inherits(Sha256, Hash)
8b095871 30280
9987f0c1
IC
30281Sha256.prototype.init = function () {
30282 this._a = 0x6a09e667
30283 this._b = 0xbb67ae85
30284 this._c = 0x3c6ef372
30285 this._d = 0xa54ff53a
30286 this._e = 0x510e527f
30287 this._f = 0x9b05688c
30288 this._g = 0x1f83d9ab
30289 this._h = 0x5be0cd19
8b095871 30290
9987f0c1
IC
30291 return this
30292}
8b095871 30293
9987f0c1
IC
30294function ch (x, y, z) {
30295 return z ^ (x & (y ^ z))
8b095871
IC
30296}
30297
9987f0c1
IC
30298function maj (x, y, z) {
30299 return (x & y) | (z & (x | y))
8b095871
IC
30300}
30301
9987f0c1
IC
30302function sigma0 (x) {
30303 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
8b095871
IC
30304}
30305
9987f0c1
IC
30306function sigma1 (x) {
30307 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
30308}
8b095871 30309
9987f0c1
IC
30310function gamma0 (x) {
30311 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
30312}
8b095871 30313
9987f0c1
IC
30314function gamma1 (x) {
30315 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
30316}
8b095871 30317
9987f0c1
IC
30318Sha256.prototype._update = function (M) {
30319 var W = this._w
8b095871 30320
9987f0c1
IC
30321 var a = this._a | 0
30322 var b = this._b | 0
30323 var c = this._c | 0
30324 var d = this._d | 0
30325 var e = this._e | 0
30326 var f = this._f | 0
30327 var g = this._g | 0
30328 var h = this._h | 0
8b095871 30329
9987f0c1
IC
30330 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
30331 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
8b095871 30332
9987f0c1
IC
30333 for (var j = 0; j < 64; ++j) {
30334 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
30335 var T2 = (sigma0(a) + maj(a, b, c)) | 0
8b095871 30336
9987f0c1
IC
30337 h = g
30338 g = f
30339 f = e
30340 e = (d + T1) | 0
30341 d = c
30342 c = b
30343 b = a
30344 a = (T1 + T2) | 0
8b095871
IC
30345 }
30346
9987f0c1
IC
30347 this._a = (a + this._a) | 0
30348 this._b = (b + this._b) | 0
30349 this._c = (c + this._c) | 0
30350 this._d = (d + this._d) | 0
30351 this._e = (e + this._e) | 0
30352 this._f = (f + this._f) | 0
30353 this._g = (g + this._g) | 0
30354 this._h = (h + this._h) | 0
8b095871
IC
30355}
30356
9987f0c1 30357Sha256.prototype._hash = function () {
cf6c2044 30358 var H = Buffer.allocUnsafe(32)
8b095871 30359
9987f0c1
IC
30360 H.writeInt32BE(this._a, 0)
30361 H.writeInt32BE(this._b, 4)
30362 H.writeInt32BE(this._c, 8)
30363 H.writeInt32BE(this._d, 12)
30364 H.writeInt32BE(this._e, 16)
30365 H.writeInt32BE(this._f, 20)
30366 H.writeInt32BE(this._g, 24)
30367 H.writeInt32BE(this._h, 28)
8b095871 30368
9987f0c1 30369 return H
8b095871
IC
30370}
30371
9987f0c1 30372module.exports = Sha256
8b095871 30373
cf6c2044 30374},{"./hash":129,"inherits":121,"safe-buffer":128}],135:[function(require,module,exports){
9987f0c1
IC
30375var inherits = require('inherits')
30376var SHA512 = require('./sha512')
30377var Hash = require('./hash')
cf6c2044 30378var Buffer = require('safe-buffer').Buffer
8b095871 30379
9987f0c1 30380var W = new Array(160)
8b095871 30381
9987f0c1
IC
30382function Sha384 () {
30383 this.init()
30384 this._w = W
8b095871 30385
9987f0c1
IC
30386 Hash.call(this, 128, 112)
30387}
8b095871 30388
9987f0c1 30389inherits(Sha384, SHA512)
8b095871 30390
9987f0c1
IC
30391Sha384.prototype.init = function () {
30392 this._ah = 0xcbbb9d5d
30393 this._bh = 0x629a292a
30394 this._ch = 0x9159015a
30395 this._dh = 0x152fecd8
30396 this._eh = 0x67332667
30397 this._fh = 0x8eb44a87
30398 this._gh = 0xdb0c2e0d
30399 this._hh = 0x47b5481d
8b095871 30400
9987f0c1
IC
30401 this._al = 0xc1059ed8
30402 this._bl = 0x367cd507
30403 this._cl = 0x3070dd17
30404 this._dl = 0xf70e5939
30405 this._el = 0xffc00b31
30406 this._fl = 0x68581511
30407 this._gl = 0x64f98fa7
30408 this._hl = 0xbefa4fa4
8b095871 30409
9987f0c1 30410 return this
8b095871
IC
30411}
30412
9987f0c1 30413Sha384.prototype._hash = function () {
cf6c2044 30414 var H = Buffer.allocUnsafe(48)
8b095871 30415
9987f0c1
IC
30416 function writeInt64BE (h, l, offset) {
30417 H.writeInt32BE(h, offset)
30418 H.writeInt32BE(l, offset + 4)
30419 }
8b095871 30420
9987f0c1
IC
30421 writeInt64BE(this._ah, this._al, 0)
30422 writeInt64BE(this._bh, this._bl, 8)
30423 writeInt64BE(this._ch, this._cl, 16)
30424 writeInt64BE(this._dh, this._dl, 24)
30425 writeInt64BE(this._eh, this._el, 32)
30426 writeInt64BE(this._fh, this._fl, 40)
8b095871 30427
9987f0c1
IC
30428 return H
30429}
8b095871 30430
9987f0c1 30431module.exports = Sha384
8b095871 30432
cf6c2044 30433},{"./hash":129,"./sha512":136,"inherits":121,"safe-buffer":128}],136:[function(require,module,exports){
9987f0c1
IC
30434var inherits = require('inherits')
30435var Hash = require('./hash')
cf6c2044 30436var Buffer = require('safe-buffer').Buffer
8b095871 30437
9987f0c1
IC
30438var K = [
30439 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
30440 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
30441 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
30442 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
30443 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
30444 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
30445 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
30446 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
30447 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
30448 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
30449 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
30450 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
30451 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
30452 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
30453 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
30454 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
30455 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
30456 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
30457 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
30458 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
30459 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
30460 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
30461 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
30462 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
30463 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
30464 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
30465 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
30466 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
30467 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
30468 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
30469 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
30470 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
30471 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
30472 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
30473 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
30474 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
30475 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
30476 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
30477 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
30478 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
30479]
8b095871 30480
9987f0c1 30481var W = new Array(160)
8b095871 30482
9987f0c1
IC
30483function Sha512 () {
30484 this.init()
30485 this._w = W
8b095871 30486
9987f0c1
IC
30487 Hash.call(this, 128, 112)
30488}
8b095871 30489
9987f0c1 30490inherits(Sha512, Hash)
8b095871 30491
9987f0c1
IC
30492Sha512.prototype.init = function () {
30493 this._ah = 0x6a09e667
30494 this._bh = 0xbb67ae85
30495 this._ch = 0x3c6ef372
30496 this._dh = 0xa54ff53a
30497 this._eh = 0x510e527f
30498 this._fh = 0x9b05688c
30499 this._gh = 0x1f83d9ab
30500 this._hh = 0x5be0cd19
8b095871 30501
9987f0c1
IC
30502 this._al = 0xf3bcc908
30503 this._bl = 0x84caa73b
30504 this._cl = 0xfe94f82b
30505 this._dl = 0x5f1d36f1
30506 this._el = 0xade682d1
30507 this._fl = 0x2b3e6c1f
30508 this._gl = 0xfb41bd6b
30509 this._hl = 0x137e2179
8b095871 30510
9987f0c1 30511 return this
8b095871
IC
30512}
30513
9987f0c1
IC
30514function Ch (x, y, z) {
30515 return z ^ (x & (y ^ z))
8b095871
IC
30516}
30517
9987f0c1
IC
30518function maj (x, y, z) {
30519 return (x & y) | (z & (x | y))
8b095871
IC
30520}
30521
9987f0c1
IC
30522function sigma0 (x, xl) {
30523 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
30524}
8b095871 30525
9987f0c1
IC
30526function sigma1 (x, xl) {
30527 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
30528}
8b095871 30529
9987f0c1
IC
30530function Gamma0 (x, xl) {
30531 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
8b095871
IC
30532}
30533
9987f0c1
IC
30534function Gamma0l (x, xl) {
30535 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
30536}
8b095871 30537
9987f0c1
IC
30538function Gamma1 (x, xl) {
30539 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
30540}
8b095871 30541
9987f0c1
IC
30542function Gamma1l (x, xl) {
30543 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
30544}
8b095871 30545
9987f0c1
IC
30546function getCarry (a, b) {
30547 return (a >>> 0) < (b >>> 0) ? 1 : 0
8b095871
IC
30548}
30549
9987f0c1
IC
30550Sha512.prototype._update = function (M) {
30551 var W = this._w
8b095871 30552
9987f0c1
IC
30553 var ah = this._ah | 0
30554 var bh = this._bh | 0
30555 var ch = this._ch | 0
30556 var dh = this._dh | 0
30557 var eh = this._eh | 0
30558 var fh = this._fh | 0
30559 var gh = this._gh | 0
30560 var hh = this._hh | 0
8b095871 30561
9987f0c1
IC
30562 var al = this._al | 0
30563 var bl = this._bl | 0
30564 var cl = this._cl | 0
30565 var dl = this._dl | 0
30566 var el = this._el | 0
30567 var fl = this._fl | 0
30568 var gl = this._gl | 0
30569 var hl = this._hl | 0
8b095871 30570
9987f0c1
IC
30571 for (var i = 0; i < 32; i += 2) {
30572 W[i] = M.readInt32BE(i * 4)
30573 W[i + 1] = M.readInt32BE(i * 4 + 4)
30574 }
30575 for (; i < 160; i += 2) {
30576 var xh = W[i - 15 * 2]
30577 var xl = W[i - 15 * 2 + 1]
30578 var gamma0 = Gamma0(xh, xl)
30579 var gamma0l = Gamma0l(xl, xh)
8b095871 30580
9987f0c1
IC
30581 xh = W[i - 2 * 2]
30582 xl = W[i - 2 * 2 + 1]
30583 var gamma1 = Gamma1(xh, xl)
30584 var gamma1l = Gamma1l(xl, xh)
8b095871 30585
9987f0c1
IC
30586 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
30587 var Wi7h = W[i - 7 * 2]
30588 var Wi7l = W[i - 7 * 2 + 1]
8b095871 30589
9987f0c1
IC
30590 var Wi16h = W[i - 16 * 2]
30591 var Wi16l = W[i - 16 * 2 + 1]
8b095871 30592
9987f0c1
IC
30593 var Wil = (gamma0l + Wi7l) | 0
30594 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
30595 Wil = (Wil + gamma1l) | 0
30596 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
30597 Wil = (Wil + Wi16l) | 0
30598 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
8b095871 30599
9987f0c1
IC
30600 W[i] = Wih
30601 W[i + 1] = Wil
8b095871
IC
30602 }
30603
9987f0c1
IC
30604 for (var j = 0; j < 160; j += 2) {
30605 Wih = W[j]
30606 Wil = W[j + 1]
8b095871 30607
9987f0c1
IC
30608 var majh = maj(ah, bh, ch)
30609 var majl = maj(al, bl, cl)
8b095871 30610
9987f0c1
IC
30611 var sigma0h = sigma0(ah, al)
30612 var sigma0l = sigma0(al, ah)
30613 var sigma1h = sigma1(eh, el)
30614 var sigma1l = sigma1(el, eh)
8b095871 30615
9987f0c1
IC
30616 // t1 = h + sigma1 + ch + K[j] + W[j]
30617 var Kih = K[j]
30618 var Kil = K[j + 1]
8b095871 30619
9987f0c1
IC
30620 var chh = Ch(eh, fh, gh)
30621 var chl = Ch(el, fl, gl)
8b095871 30622
9987f0c1
IC
30623 var t1l = (hl + sigma1l) | 0
30624 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
30625 t1l = (t1l + chl) | 0
30626 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
30627 t1l = (t1l + Kil) | 0
30628 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
30629 t1l = (t1l + Wil) | 0
30630 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
8b095871 30631
9987f0c1
IC
30632 // t2 = sigma0 + maj
30633 var t2l = (sigma0l + majl) | 0
30634 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
30635
30636 hh = gh
30637 hl = gl
30638 gh = fh
30639 gl = fl
30640 fh = eh
30641 fl = el
30642 el = (dl + t1l) | 0
30643 eh = (dh + t1h + getCarry(el, dl)) | 0
30644 dh = ch
30645 dl = cl
30646 ch = bh
30647 cl = bl
30648 bh = ah
30649 bl = al
30650 al = (t1l + t2l) | 0
30651 ah = (t1h + t2h + getCarry(al, t1l)) | 0
30652 }
8b095871 30653
9987f0c1
IC
30654 this._al = (this._al + al) | 0
30655 this._bl = (this._bl + bl) | 0
30656 this._cl = (this._cl + cl) | 0
30657 this._dl = (this._dl + dl) | 0
30658 this._el = (this._el + el) | 0
30659 this._fl = (this._fl + fl) | 0
30660 this._gl = (this._gl + gl) | 0
30661 this._hl = (this._hl + hl) | 0
8b095871 30662
9987f0c1
IC
30663 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
30664 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
30665 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
30666 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
30667 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
30668 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
30669 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
30670 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
30671}
8b095871 30672
9987f0c1 30673Sha512.prototype._hash = function () {
cf6c2044 30674 var H = Buffer.allocUnsafe(64)
8b095871 30675
9987f0c1
IC
30676 function writeInt64BE (h, l, offset) {
30677 H.writeInt32BE(h, offset)
30678 H.writeInt32BE(l, offset + 4)
8b095871
IC
30679 }
30680
9987f0c1
IC
30681 writeInt64BE(this._ah, this._al, 0)
30682 writeInt64BE(this._bh, this._bl, 8)
30683 writeInt64BE(this._ch, this._cl, 16)
30684 writeInt64BE(this._dh, this._dl, 24)
30685 writeInt64BE(this._eh, this._el, 32)
30686 writeInt64BE(this._fh, this._fl, 40)
30687 writeInt64BE(this._gh, this._gl, 48)
30688 writeInt64BE(this._hh, this._hl, 56)
30689
30690 return H
8b095871
IC
30691}
30692
9987f0c1 30693module.exports = Sha512
8b095871 30694
cf6c2044 30695},{"./hash":129,"inherits":121,"safe-buffer":128}],137:[function(require,module,exports){
9987f0c1 30696var native = require('./native')
8b095871 30697
9987f0c1
IC
30698function getTypeName (fn) {
30699 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
30700}
8b095871 30701
9987f0c1
IC
30702function getValueTypeName (value) {
30703 return native.Nil(value) ? '' : getTypeName(value.constructor)
30704}
8b095871 30705
9987f0c1
IC
30706function getValue (value) {
30707 if (native.Function(value)) return ''
30708 if (native.String(value)) return JSON.stringify(value)
30709 if (value && native.Object(value)) return ''
30710 return value
30711}
8b095871 30712
9987f0c1
IC
30713function tfJSON (type) {
30714 if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
30715 if (native.Array(type)) return 'Array'
30716 if (type && native.Object(type)) return 'Object'
8b095871 30717
9987f0c1
IC
30718 return type !== undefined ? type : ''
30719}
8b095871 30720
9987f0c1
IC
30721function tfErrorString (type, value, valueTypeName) {
30722 var valueJson = getValue(value)
8b095871 30723
9987f0c1
IC
30724 return 'Expected ' + tfJSON(type) + ', got' +
30725 (valueTypeName !== '' ? ' ' + valueTypeName : '') +
30726 (valueJson !== '' ? ' ' + valueJson : '')
8b095871
IC
30727}
30728
cf6c2044
IC
30729function TfTypeError (type, value, valueTypeName) {
30730 valueTypeName = valueTypeName || getValueTypeName(value)
30731 this.message = tfErrorString(type, value, valueTypeName)
30732
30733 Error.captureStackTrace(this, TfTypeError)
30734 this.__type = type
30735 this.__value = value
30736 this.__valueTypeName = valueTypeName
30737}
30738
30739TfTypeError.prototype = Object.create(Error.prototype)
30740TfTypeError.prototype.constructor = TfTypeError
30741
9987f0c1
IC
30742function tfPropertyErrorString (type, label, name, value, valueTypeName) {
30743 var description = '" of type '
30744 if (label === 'key') description = '" with key type '
8b095871 30745
9987f0c1 30746 return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
8b095871
IC
30747}
30748
cf6c2044
IC
30749function TfPropertyTypeError (type, property, label, value, valueTypeName) {
30750 if (type) {
30751 valueTypeName = valueTypeName || getValueTypeName(value)
30752 this.message = tfPropertyErrorString(type, label, property, value, valueTypeName)
30753 } else {
30754 this.message = 'Unexpected property "' + property + '"'
30755 }
30756
30757 Error.captureStackTrace(this, TfTypeError)
30758 this.__label = label
30759 this.__property = property
30760 this.__type = type
30761 this.__value = value
30762 this.__valueTypeName = valueTypeName
30763}
30764
30765TfPropertyTypeError.prototype = Object.create(Error.prototype)
30766TfPropertyTypeError.prototype.constructor = TfTypeError
30767
30768function tfCustomError (expected, actual) {
30769 return new TfTypeError(expected, {}, actual)
30770}
30771
30772function tfSubError (e, property, label) {
30773 // sub child?
30774 if (e instanceof TfPropertyTypeError) {
30775 property = property + '.' + e.__property
30776
30777 e = new TfPropertyTypeError(
30778 e.__type, property, e.__label, e.__value, e.__valueTypeName
30779 )
30780
30781 // child?
30782 } else if (e instanceof TfTypeError) {
30783 e = new TfPropertyTypeError(
30784 e.__type, property, label, e.__value, e.__valueTypeName
30785 )
30786 }
30787
30788 Error.captureStackTrace(e)
30789 return e
30790}
30791
9987f0c1
IC
30792module.exports = {
30793 TfTypeError: TfTypeError,
30794 TfPropertyTypeError: TfPropertyTypeError,
30795 tfCustomError: tfCustomError,
30796 tfSubError: tfSubError,
30797 tfJSON: tfJSON,
30798 getValueTypeName: getValueTypeName
8b095871
IC
30799}
30800
cf6c2044 30801},{"./native":140}],138:[function(require,module,exports){
9987f0c1
IC
30802(function (Buffer){
30803var NATIVE = require('./native')
30804var ERRORS = require('./errors')
30805
30806function _Buffer (value) {
30807 return Buffer.isBuffer(value)
8b095871
IC
30808}
30809
9987f0c1
IC
30810function Hex (value) {
30811 return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
30812}
8b095871 30813
9987f0c1
IC
30814function _LengthN (type, length) {
30815 var name = type.toJSON()
8b095871 30816
9987f0c1
IC
30817 function Length (value) {
30818 if (!type(value)) return false
30819 if (value.length === length) return true
8b095871 30820
9987f0c1
IC
30821 throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
30822 }
30823 Length.toJSON = function () { return name }
8b095871 30824
9987f0c1
IC
30825 return Length
30826}
8b095871 30827
9987f0c1
IC
30828var _ArrayN = _LengthN.bind(null, NATIVE.Array)
30829var _BufferN = _LengthN.bind(null, _Buffer)
30830var _HexN = _LengthN.bind(null, Hex)
cf6c2044 30831var _StringN = _LengthN.bind(null, NATIVE.String)
8b095871 30832
9987f0c1 30833var UINT53_MAX = Math.pow(2, 53) - 1
8b095871 30834
9987f0c1
IC
30835function Finite (value) {
30836 return typeof value === 'number' && isFinite(value)
30837}
30838function Int8 (value) { return ((value << 24) >> 24) === value }
30839function Int16 (value) { return ((value << 16) >> 16) === value }
30840function Int32 (value) { return (value | 0) === value }
30841function UInt8 (value) { return (value & 0xff) === value }
30842function UInt16 (value) { return (value & 0xffff) === value }
30843function UInt32 (value) { return (value >>> 0) === value }
30844function UInt53 (value) {
30845 return typeof value === 'number' &&
30846 value >= 0 &&
30847 value <= UINT53_MAX &&
30848 Math.floor(value) === value
30849}
8b095871 30850
9987f0c1
IC
30851var types = {
30852 ArrayN: _ArrayN,
30853 Buffer: _Buffer,
30854 BufferN: _BufferN,
30855 Finite: Finite,
30856 Hex: Hex,
30857 HexN: _HexN,
30858 Int8: Int8,
30859 Int16: Int16,
30860 Int32: Int32,
cf6c2044 30861 StringN: _StringN,
9987f0c1
IC
30862 UInt8: UInt8,
30863 UInt16: UInt16,
30864 UInt32: UInt32,
30865 UInt53: UInt53
30866}
8b095871 30867
9987f0c1
IC
30868for (var typeName in types) {
30869 types[typeName].toJSON = function (t) {
30870 return t
30871 }.bind(null, typeName)
30872}
8b095871 30873
9987f0c1 30874module.exports = types
8b095871 30875
9987f0c1 30876}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
cf6c2044 30877},{"../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10,"./errors":137,"./native":140}],139:[function(require,module,exports){
9987f0c1
IC
30878var ERRORS = require('./errors')
30879var NATIVE = require('./native')
8b095871 30880
9987f0c1
IC
30881// short-hand
30882var tfJSON = ERRORS.tfJSON
30883var TfTypeError = ERRORS.TfTypeError
30884var TfPropertyTypeError = ERRORS.TfPropertyTypeError
30885var tfSubError = ERRORS.tfSubError
30886var getValueTypeName = ERRORS.getValueTypeName
8b095871 30887
9987f0c1
IC
30888var TYPES = {
30889 arrayOf: function arrayOf (type) {
30890 type = compile(type)
8b095871 30891
9987f0c1
IC
30892 function _arrayOf (array, strict) {
30893 if (!NATIVE.Array(array)) return false
cf6c2044 30894 if (NATIVE.Nil(array)) return false
8b095871 30895
9987f0c1
IC
30896 return array.every(function (value, i) {
30897 try {
30898 return typeforce(type, value, strict)
30899 } catch (e) {
30900 throw tfSubError(e, i)
30901 }
30902 })
8b095871 30903 }
9987f0c1 30904 _arrayOf.toJSON = function () { return '[' + tfJSON(type) + ']' }
8b095871 30905
9987f0c1
IC
30906 return _arrayOf
30907 },
8b095871 30908
9987f0c1
IC
30909 maybe: function maybe (type) {
30910 type = compile(type)
8b095871 30911
9987f0c1
IC
30912 function _maybe (value, strict) {
30913 return NATIVE.Nil(value) || type(value, strict, maybe)
30914 }
30915 _maybe.toJSON = function () { return '?' + tfJSON(type) }
8b095871 30916
9987f0c1
IC
30917 return _maybe
30918 },
8b095871 30919
9987f0c1
IC
30920 map: function map (propertyType, propertyKeyType) {
30921 propertyType = compile(propertyType)
30922 if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
8b095871 30923
9987f0c1 30924 function _map (value, strict) {
cf6c2044
IC
30925 if (!NATIVE.Object(value)) return false
30926 if (NATIVE.Nil(value)) return false
8b095871 30927
9987f0c1
IC
30928 for (var propertyName in value) {
30929 try {
30930 if (propertyKeyType) {
30931 typeforce(propertyKeyType, propertyName, strict)
30932 }
30933 } catch (e) {
30934 throw tfSubError(e, propertyName, 'key')
8b095871
IC
30935 }
30936
9987f0c1
IC
30937 try {
30938 var propertyValue = value[propertyName]
30939 typeforce(propertyType, propertyValue, strict)
30940 } catch (e) {
30941 throw tfSubError(e, propertyName)
8b095871
IC
30942 }
30943 }
30944
9987f0c1
IC
30945 return true
30946 }
8b095871 30947
9987f0c1
IC
30948 if (propertyKeyType) {
30949 _map.toJSON = function () {
30950 return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
8b095871 30951 }
9987f0c1
IC
30952 } else {
30953 _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
8b095871
IC
30954 }
30955
9987f0c1
IC
30956 return _map
30957 },
8b095871 30958
9987f0c1
IC
30959 object: function object (uncompiled) {
30960 var type = {}
8b095871 30961
9987f0c1
IC
30962 for (var typePropertyName in uncompiled) {
30963 type[typePropertyName] = compile(uncompiled[typePropertyName])
30964 }
8b095871 30965
9987f0c1
IC
30966 function _object (value, strict) {
30967 if (!NATIVE.Object(value)) return false
30968 if (NATIVE.Nil(value)) return false
8b095871 30969
9987f0c1 30970 var propertyName
8b095871 30971
9987f0c1
IC
30972 try {
30973 for (propertyName in type) {
30974 var propertyType = type[propertyName]
30975 var propertyValue = value[propertyName]
8b095871 30976
9987f0c1
IC
30977 typeforce(propertyType, propertyValue, strict)
30978 }
30979 } catch (e) {
30980 throw tfSubError(e, propertyName)
30981 }
8b095871 30982
9987f0c1
IC
30983 if (strict) {
30984 for (propertyName in value) {
30985 if (type[propertyName]) continue
8b095871 30986
9987f0c1
IC
30987 throw new TfPropertyTypeError(undefined, propertyName)
30988 }
30989 }
8b095871 30990
9987f0c1
IC
30991 return true
30992 }
30993 _object.toJSON = function () { return tfJSON(type) }
8b095871 30994
9987f0c1
IC
30995 return _object
30996 },
8b095871 30997
9987f0c1
IC
30998 oneOf: function oneOf () {
30999 var types = [].slice.call(arguments).map(compile)
8b095871 31000
9987f0c1
IC
31001 function _oneOf (value, strict) {
31002 return types.some(function (type) {
31003 try {
31004 return typeforce(type, value, strict)
31005 } catch (e) {
31006 return false
31007 }
31008 })
31009 }
31010 _oneOf.toJSON = function () { return types.map(tfJSON).join('|') }
8b095871 31011
9987f0c1
IC
31012 return _oneOf
31013 },
8b095871 31014
9987f0c1
IC
31015 quacksLike: function quacksLike (type) {
31016 function _quacksLike (value) {
31017 return type === getValueTypeName(value)
31018 }
31019 _quacksLike.toJSON = function () { return type }
8b095871 31020
9987f0c1
IC
31021 return _quacksLike
31022 },
8b095871 31023
9987f0c1
IC
31024 tuple: function tuple () {
31025 var types = [].slice.call(arguments).map(compile)
8b095871 31026
9987f0c1 31027 function _tuple (values, strict) {
cf6c2044
IC
31028 if (NATIVE.Nil(values)) return false
31029 if (NATIVE.Nil(values.length)) return false
31030 if (strict && (values.length !== types.length)) return false
31031
9987f0c1
IC
31032 return types.every(function (type, i) {
31033 try {
31034 return typeforce(type, values[i], strict)
31035 } catch (e) {
31036 throw tfSubError(e, i)
31037 }
cf6c2044 31038 })
9987f0c1
IC
31039 }
31040 _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
8b095871 31041
9987f0c1
IC
31042 return _tuple
31043 },
8b095871 31044
9987f0c1
IC
31045 value: function value (expected) {
31046 function _value (actual) {
31047 return actual === expected
31048 }
31049 _value.toJSON = function () { return expected }
8b095871 31050
9987f0c1 31051 return _value
8b095871
IC
31052 }
31053}
31054
9987f0c1
IC
31055function compile (type) {
31056 if (NATIVE.String(type)) {
cf6c2044 31057 if (type[0] === '?') return TYPES.maybe(type.slice(1))
8b095871 31058
9987f0c1
IC
31059 return NATIVE[type] || TYPES.quacksLike(type)
31060 } else if (type && NATIVE.Object(type)) {
cf6c2044 31061 if (NATIVE.Array(type)) return TYPES.arrayOf(type[0])
8b095871 31062
9987f0c1
IC
31063 return TYPES.object(type)
31064 } else if (NATIVE.Function(type)) {
31065 return type
31066 }
8b095871 31067
9987f0c1
IC
31068 return TYPES.value(type)
31069}
8b095871 31070
9987f0c1
IC
31071function typeforce (type, value, strict, surrogate) {
31072 if (NATIVE.Function(type)) {
31073 if (type(value, strict)) return true
8b095871 31074
9987f0c1 31075 throw new TfTypeError(surrogate || type, value)
ab78acc6 31076 }
8b095871 31077
9987f0c1
IC
31078 // JIT
31079 return typeforce(compile(type), value, strict)
31080}
8b095871 31081
9987f0c1
IC
31082// assign types to typeforce function
31083for (var typeName in NATIVE) {
31084 typeforce[typeName] = NATIVE[typeName]
8b095871
IC
31085}
31086
9987f0c1
IC
31087for (typeName in TYPES) {
31088 typeforce[typeName] = TYPES[typeName]
8b095871
IC
31089}
31090
9987f0c1
IC
31091var EXTRA = require('./extra')
31092for (typeName in EXTRA) {
31093 typeforce[typeName] = EXTRA[typeName]
8b095871
IC
31094}
31095
9987f0c1
IC
31096// async wrapper
31097function __async (type, value, strict, callback) {
31098 // default to falsy strict if using shorthand overload
31099 if (typeof strict === 'function') return __async(type, value, false, strict)
8b095871 31100
9987f0c1
IC
31101 try {
31102 typeforce(type, value, strict)
31103 } catch (e) {
31104 return callback(e)
31105 }
8b095871 31106
9987f0c1
IC
31107 callback()
31108}
8b095871 31109
9987f0c1
IC
31110typeforce.async = __async
31111typeforce.compile = compile
31112typeforce.TfTypeError = TfTypeError
31113typeforce.TfPropertyTypeError = TfPropertyTypeError
8b095871 31114
9987f0c1 31115module.exports = typeforce
8b095871 31116
cf6c2044 31117},{"./errors":137,"./extra":138,"./native":140}],140:[function(require,module,exports){
9987f0c1
IC
31118var types = {
31119 Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
31120 Boolean: function (value) { return typeof value === 'boolean' },
31121 Function: function (value) { return typeof value === 'function' },
31122 Nil: function (value) { return value === undefined || value === null },
31123 Number: function (value) { return typeof value === 'number' },
31124 Object: function (value) { return typeof value === 'object' },
31125 String: function (value) { return typeof value === 'string' },
31126 '': function () { return true }
31127}
8b095871 31128
9987f0c1
IC
31129// TODO: deprecate
31130types.Null = types.Nil
8b095871 31131
9987f0c1
IC
31132for (var typeName in types) {
31133 types[typeName].toJSON = function (t) {
31134 return t
31135 }.bind(null, typeName)
31136}
8b095871 31137
9987f0c1 31138module.exports = types
8b095871 31139
cf6c2044 31140},{}],141:[function(require,module,exports){
9987f0c1
IC
31141(function (Buffer){
31142'use strict'
8b095871 31143
9987f0c1
IC
31144// Number.MAX_SAFE_INTEGER
31145var MAX_SAFE_INTEGER = 9007199254740991
8b095871 31146
9987f0c1
IC
31147function checkUInt53 (n) {
31148 if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')
8b095871
IC
31149}
31150
9987f0c1
IC
31151function encode (number, buffer, offset) {
31152 checkUInt53(number)
8b095871 31153
9987f0c1
IC
31154 if (!buffer) buffer = new Buffer(encodingLength(number))
31155 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
31156 if (!offset) offset = 0
8b095871 31157
9987f0c1
IC
31158 // 8 bit
31159 if (number < 0xfd) {
31160 buffer.writeUInt8(number, offset)
31161 encode.bytes = 1
8b095871 31162
9987f0c1
IC
31163 // 16 bit
31164 } else if (number <= 0xffff) {
31165 buffer.writeUInt8(0xfd, offset)
31166 buffer.writeUInt16LE(number, offset + 1)
31167 encode.bytes = 3
8b095871 31168
9987f0c1
IC
31169 // 32 bit
31170 } else if (number <= 0xffffffff) {
31171 buffer.writeUInt8(0xfe, offset)
31172 buffer.writeUInt32LE(number, offset + 1)
31173 encode.bytes = 5
8b095871 31174
9987f0c1
IC
31175 // 64 bit
31176 } else {
31177 buffer.writeUInt8(0xff, offset)
31178 buffer.writeUInt32LE(number >>> 0, offset + 1)
31179 buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)
31180 encode.bytes = 9
ab78acc6 31181 }
8b095871 31182
9987f0c1 31183 return buffer
8b095871
IC
31184}
31185
9987f0c1
IC
31186function decode (buffer, offset) {
31187 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
31188 if (!offset) offset = 0
8b095871 31189
9987f0c1 31190 var first = buffer.readUInt8(offset)
8b095871 31191
9987f0c1
IC
31192 // 8 bit
31193 if (first < 0xfd) {
31194 decode.bytes = 1
31195 return first
8b095871 31196
9987f0c1
IC
31197 // 16 bit
31198 } else if (first === 0xfd) {
31199 decode.bytes = 3
31200 return buffer.readUInt16LE(offset + 1)
8b095871 31201
9987f0c1
IC
31202 // 32 bit
31203 } else if (first === 0xfe) {
31204 decode.bytes = 5
31205 return buffer.readUInt32LE(offset + 1)
8b095871 31206
9987f0c1
IC
31207 // 64 bit
31208 } else {
31209 decode.bytes = 9
31210 var lo = buffer.readUInt32LE(offset + 1)
31211 var hi = buffer.readUInt32LE(offset + 5)
31212 var number = hi * 0x0100000000 + lo
31213 checkUInt53(number)
8b095871 31214
9987f0c1 31215 return number
8b095871 31216 }
ab78acc6
IC
31217}
31218
9987f0c1
IC
31219function encodingLength (number) {
31220 checkUInt53(number)
8b095871 31221
9987f0c1
IC
31222 return (
31223 number < 0xfd ? 1
31224 : number <= 0xffff ? 3
31225 : number <= 0xffffffff ? 5
31226 : 9
31227 )
ab78acc6 31228}
3af2954a 31229
9987f0c1 31230module.exports = { encode: encode, decode: decode, encodingLength: encodingLength }
3af2954a 31231
9987f0c1 31232}).call(this,require("buffer").Buffer)
cf6c2044 31233},{"buffer":5}],142:[function(require,module,exports){
9987f0c1
IC
31234(function (Buffer){
31235var bs58check = require('bs58check')
3af2954a 31236
9987f0c1
IC
31237function decodeRaw (buffer, version) {
31238 // check version only if defined
31239 if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
3af2954a 31240
9987f0c1
IC
31241 // uncompressed
31242 if (buffer.length === 33) {
31243 return {
31244 version: buffer[0],
31245 privateKey: buffer.slice(1, 33),
31246 compressed: false
ab78acc6 31247 }
9987f0c1 31248 }
8b095871 31249
9987f0c1
IC
31250 // invalid length
31251 if (buffer.length !== 34) throw new Error('Invalid WIF length')
8b095871 31252
9987f0c1
IC
31253 // invalid compression flag
31254 if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
8b095871 31255
9987f0c1
IC
31256 return {
31257 version: buffer[0],
31258 privateKey: buffer.slice(1, 33),
31259 compressed: true
31260 }
31261}
3af2954a 31262
9987f0c1
IC
31263function encodeRaw (version, privateKey, compressed) {
31264 var result = new Buffer(compressed ? 34 : 33)
8b095871 31265
9987f0c1
IC
31266 result.writeUInt8(version, 0)
31267 privateKey.copy(result, 1)
3af2954a 31268
9987f0c1
IC
31269 if (compressed) {
31270 result[33] = 0x01
31271 }
8b095871 31272
9987f0c1
IC
31273 return result
31274}
8b095871 31275
9987f0c1
IC
31276function decode (string, version) {
31277 return decodeRaw(bs58check.decode(string), version)
ab78acc6 31278}
3af2954a 31279
9987f0c1
IC
31280function encode (version, privateKey, compressed) {
31281 if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
8b095871 31282
9987f0c1
IC
31283 return bs58check.encode(
31284 encodeRaw(
31285 version.version,
31286 version.privateKey,
31287 version.compressed
31288 )
31289 )
ab78acc6 31290}
3af2954a 31291
9987f0c1
IC
31292module.exports = {
31293 decode: decode,
31294 decodeRaw: decodeRaw,
31295 encode: encode,
31296 encodeRaw: encodeRaw
31297}
8b095871
IC
31298
31299}).call(this,require("buffer").Buffer)
cf6c2044
IC
31300},{"bs58check":85,"buffer":5}]},{},[34])(34)
31301});</script>
9987f0c1 31302 <script>bitcoinjs.bitcoin.networks.shadow = {
861750ae 31303 messagePrefix: 'unused',
8b095871
IC
31304 bip32: {
31305 public: 0xEE80286A,
31306 private: 0xEE8031E8
31307 },
31308 pubKeyHash: 0x3f,
31309 scriptHash: 0x7d,
861750ae 31310 wif: 0xbf
8b095871
IC
31311};
31312
9987f0c1 31313bitcoinjs.bitcoin.networks.shadowtn = {
861750ae 31314 messagePrefix: 'unused',
8b095871
IC
31315 bip32: {
31316 public: 0x76C0FDFB,
31317 private: 0x76C1077A
31318 },
31319 pubKeyHash: 0x7f,
31320 scriptHash: 0xc4,
861750ae 31321 wif: 0xff
8b095871 31322};
3af2954a 31323
9987f0c1 31324bitcoinjs.bitcoin.networks.clam = {
861750ae 31325 messagePrefix: 'unused',
8b095871
IC
31326 bip32: {
31327 public: 0xa8c26d64,
31328 private: 0xa8c17826
31329 },
31330 pubKeyHash: 0x89,
9987f0c1 31331 scriptHash: 0x00, // TODO set this correctly
861750ae 31332 wif: 0x85
8b095871 31333};
3af2954a 31334
9987f0c1 31335bitcoinjs.bitcoin.networks.crown = {
861750ae 31336 messagePrefix: 'unused',
0921f370 31337 bip32: {
31338 public: 0x0488b21e,
31339 private: 0x0488ade4
31340 },
31341 pubKeyHash: 0x00,
31342 scriptHash: 0x05,
861750ae 31343 wif: 0x80
0921f370 31344};
31345
9987f0c1 31346bitcoinjs.bitcoin.networks.dash = {
861750ae 31347 messagePrefix: 'unused',
8b095871
IC
31348 bip32: {
31349 public: 0x0488b21e,
31350 private: 0x0488ade4
31351 },
31352 pubKeyHash: 0x4c,
31353 scriptHash: 0x10,
861750ae 31354 wif: 0xcc
8b095871 31355};
ab78acc6 31356
56ad9601 31357bitcoinjs.bitcoin.networks.maza = {
861750ae 31358 messagePrefix: 'unused',
56ad9601
JS
31359 bip32: {
31360 public: 0x0488b21e,
31361 private: 0x0488ade4
31362 },
31363 pubKeyHash: 0x32,
31364 scriptHash: 0x09,
861750ae 31365 wif: 0xe0
56ad9601
JS
31366};
31367
9987f0c1 31368bitcoinjs.bitcoin.networks.dashtn = {
861750ae 31369 messagePrefix: 'unused',
c0386f3b
KR
31370 bip32: {
31371 public: 0x043587cf,
31372 private: 0x04358394
31373 },
31374 pubKeyHash: 0x8c,
31375 scriptHash: 0x13,
861750ae 31376 wif: 0xef
c0386f3b
KR
31377};
31378
9987f0c1 31379bitcoinjs.bitcoin.networks.game = {
861750ae 31380 messagePrefix: 'unused',
f88fab20 31381 bip32: {
31382 public: 0x0488b21e,
31383 private: 0x0488ade4
31384 },
31385 pubKeyHash: 0x26,
31386 scriptHash: 0x05,
861750ae 31387 wif: 0xa6
f88fab20 31388};
31389
9987f0c1 31390bitcoinjs.bitcoin.networks.namecoin = {
861750ae 31391 messagePrefix: 'unused',
8b095871
IC
31392 bip32: {
31393 public: 0x0488b21e,
31394 private: 0x0488ade4
31395 },
31396 pubKeyHash: 0x34,
9987f0c1 31397 scriptHash: 0x00, // TODO set this correctly
861750ae 31398 wif: 0x80
8b095871 31399};
3af2954a 31400
9987f0c1 31401bitcoinjs.bitcoin.networks.peercoin = {
861750ae 31402 messagePrefix: 'unused',
8b095871
IC
31403 bip32: {
31404 public: 0x0488b21e,
31405 private: 0x0488ade4
31406 },
31407 pubKeyHash: 0x37,
9987f0c1 31408 scriptHash: 0x00, // TODO set this correctly
861750ae 31409 wif: 0xb7
8b095871 31410};
3af2954a 31411
9987f0c1 31412bitcoinjs.bitcoin.networks.slimcoin = {
861750ae 31413 messagePrefix: 'unused',
01e81e53
GH
31414 bip32: {
31415 public: 0xef6adf10,
31416 private: 0xef69ea80
31417 },
31418 pubKeyHash: 0x3f,
31419 scriptHash: 0x7d,
861750ae 31420 wif: 0x46
01e81e53
GH
31421};
31422
9987f0c1 31423bitcoinjs.bitcoin.networks.slimcointn = {
861750ae 31424 messagePrefix: 'unused',
01e81e53
GH
31425 bip32: {
31426 public: 0x043587CF,
31427 private: 0x04358394
31428 },
31429 pubKeyHash: 0x6f,
31430 scriptHash: 0xc4,
861750ae 31431 wif: 0x57
01e81e53
GH
31432};
31433
9987f0c1
IC
31434bitcoinjs.bitcoin.networks.dogecoin = {
31435 messagePrefix: '\x19Dogecoin Signed Message:\n',
31436 bip32: {
31437 public: 0x02facafd,
31438 private: 0x02fac398
31439 },
31440 pubKeyHash: 0x1e,
31441 scriptHash: 0x16,
861750ae
JC
31442 wif: 0x9e
31443};
9987f0c1
IC
31444
31445bitcoinjs.bitcoin.networks.viacoin = {
31446 messagePrefix: '\x18Viacoin Signed Message:\n',
31447 bip32: {
31448 public: 0x0488b21e,
31449 private: 0x0488ade4
31450 },
31451 pubKeyHash: 0x47,
31452 scriptHash: 0x21,
861750ae
JC
31453 wif: 0xc7
31454};
9987f0c1
IC
31455
31456bitcoinjs.bitcoin.networks.viacointestnet = {
31457 messagePrefix: '\x18Viacoin Signed Message:\n',
31458 bip32: {
31459 public: 0x043587cf,
31460 private: 0x04358394
31461 },
31462 pubKeyHash: 0x7f,
31463 scriptHash: 0xc4,
861750ae
JC
31464 wif: 0xff
31465};
9987f0c1
IC
31466
31467bitcoinjs.bitcoin.networks.gamerscoin = {
31468 messagePrefix: '\x19Gamerscoin Signed Message:\n',
31469 bip32: {
31470 public: 0x019da462,
31471 private: 0x019d9cfe
31472 },
31473 pubKeyHash: 0x26,
31474 scriptHash: 0x05,
861750ae
JC
31475 wif: 0xA6
31476};
9987f0c1
IC
31477
31478bitcoinjs.bitcoin.networks.jumbucks = {
31479 messagePrefix: '\x19Jumbucks Signed Message:\n',
31480 bip32: {
31481 public: 0x037a689a,
31482 private: 0x037a6460
31483 },
31484 pubKeyHash: 0x2b,
31485 scriptHash: 0x05,
861750ae
JC
31486 wif: 0xab
31487};
9987f0c1
IC
31488
31489bitcoinjs.bitcoin.networks.zetacoin = {
31490 messagePrefix: '\x18Zetacoin Signed Message:\n',
31491 bip32: {
31492 public: 0x0488b21e,
31493 private: 0x0488ade4
31494 },
31495 pubKeyHash: 0x50,
31496 scriptHash: 0x09,
861750ae
JC
31497 wif: 0xe0
31498};
b3cc3930
IC
31499
31500bitcoinjs.bitcoin.networks.myriadcoin = {
861750ae 31501 messagePrefix: 'unused',
b3cc3930
IC
31502 bip32: {
31503 public: 0x0488b21e,
31504 private: 0x0488ade4
31505 },
31506 pubKeyHash: 0x32,
31507 scriptHash: 0x00, // TODO set this correctly
861750ae 31508 wif: 0xb2
b3cc3930 31509};
f128bd58
IC
31510
31511bitcoinjs.bitcoin.networks.pivx = {
861750ae 31512 messagePrefix: 'unused',
f128bd58
IC
31513 bip32: {
31514 public: 0x022d2533,
31515 private: 0x0221312b
31516 },
31517 pubKeyHash: 0x1e,
31518 scriptHash: 0x0d,
861750ae 31519 wif: 0xd4
f128bd58
IC
31520};
31521
31522bitcoinjs.bitcoin.networks.pivxtestnet = {
861750ae 31523 messagePrefix: 'unused',
f128bd58
IC
31524 bip32: {
31525 public: 0x3a8061a0,
31526 private: 0x3a805837
31527 },
31528 pubKeyHash: 0x8b,
31529 scriptHash: 0x13,
861750ae 31530 wif: 0xef
f128bd58 31531};
1102f201
IC
31532
31533bitcoinjs.bitcoin.networks.fujicoin = {
31534 messagePrefix: '\x19FujiCoin Signed Message:\n',
31535 bip32: {
31536 public: 0x0488b21e,
31537 private: 0x0488ade4
31538 },
31539 pubKeyHash: 0x24,
31540 scriptHash: 0x10,
31541 wif: 0xa4
31542};
0f6b34d6
IC
31543
31544bitcoinjs.bitcoin.networks.nubits = {
31545 messagePrefix: '\x18Nu Signed Message:\n',
31546 bip32: {
31547 public: 0x0488b21e,
31548 private: 0x0488ade4
31549 },
31550 pubKeyHash: 0x19,
31551 scriptHash: 0x1a,
31552 wif: 0x96,
31553};
31554
39608073
RS
31555bitcoinjs.bitcoin.networks.bgold = {
31556 messagePrefix: 'unused',
31557 bip32: {
31558 public: 0x0488b21e,
31559 private: 0x0488ade4
31560 },
31561 pubKeyHash: 38,
31562 scriptHash: 23,
31563 wif: 128
31564};
31565
0f6b34d6
IC
31566bitcoinjs.bitcoin.networks.bitcoinCashBitbpay = {
31567 messagePrefix: '\x18Bitcoin Signed Message:\n',
31568 bip32: {
31569 public: 0x0488b21e,
31570 private: 0x0488ade4
31571 },
31572 pubKeyHash: 0x1c,
31573 scriptHash: 0x28,
31574 wif: 0x80
31575};
31576
924727ed
IC
31577bitcoinjs.bitcoin.networks.monacoin = {
31578 messagePrefix: '\x18Monacoin Signed Message:\n',
31579 bip32: {
31580 public: 0x0488b21e,
31581 private: 0x0488ade4
31582 },
31583 pubKeyHash: 0x32,
31584 scriptHash: 0x37,
31585 wif: 0xb0
31586};
31587
cf6c2044
IC
31588bitcoinjs.bitcoin.networks.litecoinXprv = {
31589 messagePrefix: '\x19Litecoin Signed Message:\n',
31590 bip32: {
31591 public: 0x0488b21e,
31592 private: 0x0488ade4,
31593 },
31594 pubKeyHash: 0x30,
31595 scriptHash: 0x32,
31596 wif: 0xb0
31597};
31598</script>
31599 <script>(function() {
31600
31601// p2wpkh
31602
31603bitcoinjs.bitcoin.networks.bitcoin.p2wpkh = {
31604 baseNetwork: "bitcoin",
0f6b34d6 31605 messagePrefix: '\x18Bitcoin Signed Message:\n',
cf6c2044 31606 bech32: 'bc',
0f6b34d6 31607 bip32: {
cf6c2044
IC
31608 public: 0x04b24746,
31609 private: 0x04b2430c
0f6b34d6
IC
31610 },
31611 pubKeyHash: 0x00,
31612 scriptHash: 0x05,
31613 wif: 0x80
31614};
31615
cf6c2044
IC
31616// p2wpkh in p2sh
31617
31618bitcoinjs.bitcoin.networks.bitcoin.p2wpkhInP2sh = {
31619 baseNetwork: "bitcoin",
0f6b34d6 31620 messagePrefix: '\x18Bitcoin Signed Message:\n',
cf6c2044 31621 bech32: 'bc',
0f6b34d6 31622 bip32: {
cf6c2044
IC
31623 public: 0x049d7cb2,
31624 private: 0x049d7878
31625 },
31626 pubKeyHash: 0x00,
31627 scriptHash: 0x05,
31628 wif: 0x80
31629};
31630
31631bitcoinjs.bitcoin.networks.testnet.p2wpkhInP2sh = {
31632 baseNetwork: "testnet",
31633 messagePrefix: '\x18Bitcoin Signed Message:\n',
31634 bech32: 'tb',
31635 bip32: {
31636 public: 0x044a5262,
31637 private: 0x044a4e28
0f6b34d6
IC
31638 },
31639 pubKeyHash: 0x6f,
31640 scriptHash: 0xc4,
31641 wif: 0xef
31642};
31643
cf6c2044
IC
31644bitcoinjs.bitcoin.networks.litecoin.p2wpkhInP2sh = {
31645 baseNetwork: "litecoin",
0f6b34d6
IC
31646 messagePrefix: '\x19Litecoin Signed Message:\n',
31647 bip32: {
cf6c2044
IC
31648 public: 0x01b26ef6,
31649 private: 0x01b26792
0f6b34d6
IC
31650 },
31651 pubKeyHash: 0x30,
31652 scriptHash: 0x32,
31653 wif: 0xb0
31654};
cf6c2044
IC
31655
31656})();
8b095871
IC
31657</script>
31658 <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.ethUtil = 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){
31659(function (global){
31660'use strict';
3af2954a 31661
8b095871
IC
31662// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
31663// original notice:
3af2954a 31664
8b095871
IC
31665/*!
31666 * The buffer module from node.js, for the browser.
31667 *
31668 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
31669 * @license MIT
31670 */
31671function compare(a, b) {
31672 if (a === b) {
31673 return 0;
31674 }
3af2954a 31675
8b095871
IC
31676 var x = a.length;
31677 var y = b.length;
3af2954a 31678
8b095871
IC
31679 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
31680 if (a[i] !== b[i]) {
31681 x = a[i];
31682 y = b[i];
31683 break;
31684 }
31685 }
3af2954a 31686
8b095871
IC
31687 if (x < y) {
31688 return -1;
31689 }
31690 if (y < x) {
31691 return 1;
31692 }
31693 return 0;
ab78acc6 31694}
8b095871
IC
31695function isBuffer(b) {
31696 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
31697 return global.Buffer.isBuffer(b);
31698 }
31699 return !!(b != null && b._isBuffer);
ab78acc6 31700}
3af2954a 31701
8b095871
IC
31702// based on node assert, original notice:
31703
31704// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
31705//
31706// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
31707//
31708// Originally from narwhal.js (http://narwhaljs.org)
31709// Copyright (c) 2009 Thomas Robinson <280north.com>
31710//
31711// Permission is hereby granted, free of charge, to any person obtaining a copy
31712// of this software and associated documentation files (the 'Software'), to
31713// deal in the Software without restriction, including without limitation the
31714// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
31715// sell copies of the Software, and to permit persons to whom the Software is
31716// furnished to do so, subject to the following conditions:
31717//
31718// The above copyright notice and this permission notice shall be included in
31719// all copies or substantial portions of the Software.
31720//
31721// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
31722// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
31723// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
31724// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
31725// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31726// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31727
31728var util = require('util/');
31729var hasOwn = Object.prototype.hasOwnProperty;
31730var pSlice = Array.prototype.slice;
31731var functionsHaveNames = (function () {
31732 return function foo() {}.name === 'foo';
31733}());
31734function pToString (obj) {
31735 return Object.prototype.toString.call(obj);
31736}
31737function isView(arrbuf) {
31738 if (isBuffer(arrbuf)) {
31739 return false;
ab78acc6 31740 }
8b095871
IC
31741 if (typeof global.ArrayBuffer !== 'function') {
31742 return false;
31743 }
31744 if (typeof ArrayBuffer.isView === 'function') {
31745 return ArrayBuffer.isView(arrbuf);
31746 }
31747 if (!arrbuf) {
31748 return false;
31749 }
31750 if (arrbuf instanceof DataView) {
31751 return true;
31752 }
31753 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
31754 return true;
31755 }
31756 return false;
ab78acc6 31757}
8b095871
IC
31758// 1. The assert module provides functions that throw
31759// AssertionError's when particular conditions are not met. The
31760// assert module must conform to the following interface.
3af2954a 31761
8b095871 31762var assert = module.exports = ok;
3af2954a 31763
8b095871
IC
31764// 2. The AssertionError is defined in assert.
31765// new assert.AssertionError({ message: message,
31766// actual: actual,
31767// expected: expected })
31768
31769var regex = /\s*function\s+([^\(\s]*)\s*/;
31770// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
31771function getName(func) {
31772 if (!util.isFunction(func)) {
31773 return;
31774 }
31775 if (functionsHaveNames) {
31776 return func.name;
31777 }
31778 var str = func.toString();
31779 var match = str.match(regex);
31780 return match && match[1];
ab78acc6 31781}
8b095871
IC
31782assert.AssertionError = function AssertionError(options) {
31783 this.name = 'AssertionError';
31784 this.actual = options.actual;
31785 this.expected = options.expected;
31786 this.operator = options.operator;
31787 if (options.message) {
31788 this.message = options.message;
31789 this.generatedMessage = false;
31790 } else {
31791 this.message = getMessage(this);
31792 this.generatedMessage = true;
31793 }
31794 var stackStartFunction = options.stackStartFunction || fail;
31795 if (Error.captureStackTrace) {
31796 Error.captureStackTrace(this, stackStartFunction);
31797 } else {
31798 // non v8 browsers so we can have a stacktrace
31799 var err = new Error();
31800 if (err.stack) {
31801 var out = err.stack;
31802
31803 // try to strip useless frames
31804 var fn_name = getName(stackStartFunction);
31805 var idx = out.indexOf('\n' + fn_name);
31806 if (idx >= 0) {
31807 // once we have located the function frame
31808 // we need to strip out everything before it (and its line)
31809 var next_line = out.indexOf('\n', idx + 1);
31810 out = out.substring(next_line + 1);
31811 }
3af2954a 31812
8b095871
IC
31813 this.stack = out;
31814 }
31815 }
31816};
3af2954a 31817
8b095871
IC
31818// assert.AssertionError instanceof Error
31819util.inherits(assert.AssertionError, Error);
3af2954a 31820
8b095871
IC
31821function truncate(s, n) {
31822 if (typeof s === 'string') {
31823 return s.length < n ? s : s.slice(0, n);
31824 } else {
31825 return s;
3af2954a 31826 }
ab78acc6 31827}
8b095871
IC
31828function inspect(something) {
31829 if (functionsHaveNames || !util.isFunction(something)) {
31830 return util.inspect(something);
31831 }
31832 var rawname = getName(something);
31833 var name = rawname ? ': ' + rawname : '';
31834 return '[Function' + name + ']';
31835}
31836function getMessage(self) {
31837 return truncate(inspect(self.actual), 128) + ' ' +
31838 self.operator + ' ' +
31839 truncate(inspect(self.expected), 128);
ab78acc6 31840}
3af2954a 31841
8b095871
IC
31842// At present only the three keys mentioned above are used and
31843// understood by the spec. Implementations or sub modules can pass
31844// other keys to the AssertionError's constructor - they will be
31845// ignored.
3af2954a 31846
8b095871
IC
31847// 3. All of the following functions must throw an AssertionError
31848// when a corresponding condition is not met, with a message that
31849// may be undefined if not provided. All assertion methods provide
31850// both the actual and expected values to the assertion error for
31851// display purposes.
3af2954a 31852
8b095871
IC
31853function fail(actual, expected, message, operator, stackStartFunction) {
31854 throw new assert.AssertionError({
31855 message: message,
31856 actual: actual,
31857 expected: expected,
31858 operator: operator,
31859 stackStartFunction: stackStartFunction
31860 });
ab78acc6 31861}
3af2954a 31862
8b095871
IC
31863// EXTENSION! allows for well behaved errors defined elsewhere.
31864assert.fail = fail;
3af2954a 31865
8b095871
IC
31866// 4. Pure assertion tests whether a value is truthy, as determined
31867// by !!guard.
31868// assert.ok(guard, message_opt);
31869// This statement is equivalent to assert.equal(true, !!guard,
31870// message_opt);. To test strictly for the value true, use
31871// assert.strictEqual(true, guard, message_opt);.
3af2954a 31872
8b095871
IC
31873function ok(value, message) {
31874 if (!value) fail(value, true, message, '==', assert.ok);
ab78acc6 31875}
8b095871 31876assert.ok = ok;
3af2954a 31877
8b095871
IC
31878// 5. The equality assertion tests shallow, coercive equality with
31879// ==.
31880// assert.equal(actual, expected, message_opt);
3af2954a 31881
8b095871
IC
31882assert.equal = function equal(actual, expected, message) {
31883 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
31884};
3af2954a 31885
8b095871
IC
31886// 6. The non-equality assertion tests for whether two objects are not equal
31887// with != assert.notEqual(actual, expected, message_opt);
3af2954a 31888
8b095871
IC
31889assert.notEqual = function notEqual(actual, expected, message) {
31890 if (actual == expected) {
31891 fail(actual, expected, message, '!=', assert.notEqual);
ab78acc6 31892 }
8b095871
IC
31893};
31894
31895// 7. The equivalence assertion tests a deep equality relation.
31896// assert.deepEqual(actual, expected, message_opt);
31897
31898assert.deepEqual = function deepEqual(actual, expected, message) {
31899 if (!_deepEqual(actual, expected, false)) {
31900 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
ab78acc6 31901 }
8b095871 31902};
3af2954a 31903
8b095871
IC
31904assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
31905 if (!_deepEqual(actual, expected, true)) {
31906 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
3af2954a 31907 }
8b095871
IC
31908};
31909
31910function _deepEqual(actual, expected, strict, memos) {
31911 // 7.1. All identical values are equivalent, as determined by ===.
31912 if (actual === expected) {
31913 return true;
31914 } else if (isBuffer(actual) && isBuffer(expected)) {
31915 return compare(actual, expected) === 0;
31916
31917 // 7.2. If the expected value is a Date object, the actual value is
31918 // equivalent if it is also a Date object that refers to the same time.
31919 } else if (util.isDate(actual) && util.isDate(expected)) {
31920 return actual.getTime() === expected.getTime();
31921
31922 // 7.3 If the expected value is a RegExp object, the actual value is
31923 // equivalent if it is also a RegExp object with the same source and
31924 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
31925 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
31926 return actual.source === expected.source &&
31927 actual.global === expected.global &&
31928 actual.multiline === expected.multiline &&
31929 actual.lastIndex === expected.lastIndex &&
31930 actual.ignoreCase === expected.ignoreCase;
31931
31932 // 7.4. Other pairs that do not both pass typeof value == 'object',
31933 // equivalence is determined by ==.
31934 } else if ((actual === null || typeof actual !== 'object') &&
31935 (expected === null || typeof expected !== 'object')) {
31936 return strict ? actual === expected : actual == expected;
31937
31938 // If both values are instances of typed arrays, wrap their underlying
31939 // ArrayBuffers in a Buffer each to increase performance
31940 // This optimization requires the arrays to have the same type as checked by
31941 // Object.prototype.toString (aka pToString). Never perform binary
31942 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
31943 // bit patterns are not identical.
31944 } else if (isView(actual) && isView(expected) &&
31945 pToString(actual) === pToString(expected) &&
31946 !(actual instanceof Float32Array ||
31947 actual instanceof Float64Array)) {
31948 return compare(new Uint8Array(actual.buffer),
31949 new Uint8Array(expected.buffer)) === 0;
31950
31951 // 7.5 For all other Object pairs, including Array objects, equivalence is
31952 // determined by having the same number of owned properties (as verified
31953 // with Object.prototype.hasOwnProperty.call), the same set of keys
31954 // (although not necessarily the same order), equivalent values for every
31955 // corresponding key, and an identical 'prototype' property. Note: this
31956 // accounts for both named and indexed properties on Arrays.
31957 } else if (isBuffer(actual) !== isBuffer(expected)) {
31958 return false;
31959 } else {
31960 memos = memos || {actual: [], expected: []};
3af2954a 31961
8b095871
IC
31962 var actualIndex = memos.actual.indexOf(actual);
31963 if (actualIndex !== -1) {
31964 if (actualIndex === memos.expected.indexOf(expected)) {
31965 return true;
ab78acc6 31966 }
3af2954a 31967 }
8b095871
IC
31968
31969 memos.actual.push(actual);
31970 memos.expected.push(expected);
31971
31972 return objEquiv(actual, expected, strict, memos);
3af2954a 31973 }
ab78acc6 31974}
3af2954a 31975
8b095871
IC
31976function isArguments(object) {
31977 return Object.prototype.toString.call(object) == '[object Arguments]';
ab78acc6 31978}
3af2954a 31979
8b095871
IC
31980function objEquiv(a, b, strict, actualVisitedObjects) {
31981 if (a === null || a === undefined || b === null || b === undefined)
31982 return false;
31983 // if one is a primitive, the other must be same
31984 if (util.isPrimitive(a) || util.isPrimitive(b))
31985 return a === b;
31986 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
31987 return false;
31988 var aIsArgs = isArguments(a);
31989 var bIsArgs = isArguments(b);
31990 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
31991 return false;
31992 if (aIsArgs) {
31993 a = pSlice.call(a);
31994 b = pSlice.call(b);
31995 return _deepEqual(a, b, strict);
31996 }
31997 var ka = objectKeys(a);
31998 var kb = objectKeys(b);
31999 var key, i;
32000 // having the same number of owned properties (keys incorporates
32001 // hasOwnProperty)
32002 if (ka.length !== kb.length)
32003 return false;
32004 //the same set of keys (although not necessarily the same order),
32005 ka.sort();
32006 kb.sort();
32007 //~~~cheap key test
32008 for (i = ka.length - 1; i >= 0; i--) {
32009 if (ka[i] !== kb[i])
32010 return false;
32011 }
32012 //equivalent values for every corresponding key, and
32013 //~~~possibly expensive deep test
32014 for (i = ka.length - 1; i >= 0; i--) {
32015 key = ka[i];
32016 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
32017 return false;
32018 }
32019 return true;
ab78acc6 32020}
3af2954a 32021
8b095871
IC
32022// 8. The non-equivalence assertion tests for any deep inequality.
32023// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 32024
8b095871
IC
32025assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
32026 if (_deepEqual(actual, expected, false)) {
32027 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 32028 }
8b095871 32029};
3af2954a 32030
8b095871
IC
32031assert.notDeepStrictEqual = notDeepStrictEqual;
32032function notDeepStrictEqual(actual, expected, message) {
32033 if (_deepEqual(actual, expected, true)) {
32034 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
32035 }
ab78acc6 32036}
3af2954a 32037
3af2954a 32038
8b095871
IC
32039// 9. The strict equality assertion tests strict equality, as determined by ===.
32040// assert.strictEqual(actual, expected, message_opt);
3af2954a 32041
8b095871
IC
32042assert.strictEqual = function strictEqual(actual, expected, message) {
32043 if (actual !== expected) {
32044 fail(actual, expected, message, '===', assert.strictEqual);
32045 }
32046};
3af2954a 32047
8b095871
IC
32048// 10. The strict non-equality assertion tests for strict inequality, as
32049// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 32050
8b095871
IC
32051assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
32052 if (actual === expected) {
32053 fail(actual, expected, message, '!==', assert.notStrictEqual);
32054 }
32055};
3af2954a 32056
8b095871
IC
32057function expectedException(actual, expected) {
32058 if (!actual || !expected) {
32059 return false;
32060 }
3af2954a 32061
8b095871
IC
32062 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
32063 return expected.test(actual);
32064 }
3af2954a 32065
8b095871
IC
32066 try {
32067 if (actual instanceof expected) {
32068 return true;
32069 }
32070 } catch (e) {
32071 // Ignore. The instanceof check doesn't work for arrow functions.
32072 }
3af2954a 32073
8b095871
IC
32074 if (Error.isPrototypeOf(expected)) {
32075 return false;
32076 }
32077
32078 return expected.call({}, actual) === true;
ab78acc6 32079}
3af2954a 32080
8b095871
IC
32081function _tryBlock(block) {
32082 var error;
32083 try {
32084 block();
32085 } catch (e) {
32086 error = e;
32087 }
32088 return error;
ab78acc6 32089}
3af2954a 32090
8b095871
IC
32091function _throws(shouldThrow, block, expected, message) {
32092 var actual;
32093
32094 if (typeof block !== 'function') {
32095 throw new TypeError('"block" argument must be a function');
3af2954a 32096 }
8b095871
IC
32097
32098 if (typeof expected === 'string') {
32099 message = expected;
32100 expected = null;
ab78acc6 32101 }
8b095871
IC
32102
32103 actual = _tryBlock(block);
32104
32105 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
32106 (message ? ' ' + message : '.');
32107
32108 if (shouldThrow && !actual) {
32109 fail(actual, expected, 'Missing expected exception' + message);
ab78acc6 32110 }
8b095871
IC
32111
32112 var userProvidedMessage = typeof message === 'string';
32113 var isUnwantedException = !shouldThrow && util.isError(actual);
32114 var isUnexpectedException = !shouldThrow && actual && !expected;
32115
32116 if ((isUnwantedException &&
32117 userProvidedMessage &&
32118 expectedException(actual, expected)) ||
32119 isUnexpectedException) {
32120 fail(actual, expected, 'Got unwanted exception' + message);
ab78acc6 32121 }
3af2954a 32122
8b095871
IC
32123 if ((shouldThrow && actual && expected &&
32124 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
32125 throw actual;
32126 }
ab78acc6 32127}
3af2954a 32128
8b095871
IC
32129// 11. Expected to throw an error:
32130// assert.throws(block, Error_opt, message_opt);
32131
32132assert.throws = function(block, /*optional*/error, /*optional*/message) {
32133 _throws(true, block, error, message);
32134};
32135
32136// EXTENSION! This is annoying to write outside this module.
32137assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
32138 _throws(false, block, error, message);
32139};
32140
32141assert.ifError = function(err) { if (err) throw err; };
32142
32143var objectKeys = Object.keys || function (obj) {
32144 var keys = [];
32145 for (var key in obj) {
32146 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 32147 }
8b095871
IC
32148 return keys;
32149};
3af2954a 32150
8b095871
IC
32151}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
32152},{"util/":30}],2:[function(require,module,exports){
32153'use strict'
32154
32155exports.byteLength = byteLength
32156exports.toByteArray = toByteArray
32157exports.fromByteArray = fromByteArray
32158
32159var lookup = []
32160var revLookup = []
32161var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
32162
32163var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
32164for (var i = 0, len = code.length; i < len; ++i) {
32165 lookup[i] = code[i]
32166 revLookup[code.charCodeAt(i)] = i
32167}
32168
32169revLookup['-'.charCodeAt(0)] = 62
32170revLookup['_'.charCodeAt(0)] = 63
32171
32172function placeHoldersCount (b64) {
32173 var len = b64.length
32174 if (len % 4 > 0) {
32175 throw new Error('Invalid string. Length must be a multiple of 4')
32176 }
32177
32178 // the number of equal signs (place holders)
32179 // if there are two placeholders, than the two characters before it
32180 // represent one byte
32181 // if there is only one, then the three characters before it represent 2 bytes
32182 // this is just a cheap hack to not do indexOf twice
32183 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
ab78acc6
IC
32184}
32185
8b095871
IC
32186function byteLength (b64) {
32187 // base64 is 4/3 + up to two characters of the original data
32188 return b64.length * 3 / 4 - placeHoldersCount(b64)
ab78acc6 32189}
3af2954a 32190
8b095871
IC
32191function toByteArray (b64) {
32192 var i, j, l, tmp, placeHolders, arr
32193 var len = b64.length
32194 placeHolders = placeHoldersCount(b64)
32195
32196 arr = new Arr(len * 3 / 4 - placeHolders)
32197
32198 // if there are placeholders, only get up to the last complete 4 chars
32199 l = placeHolders > 0 ? len - 4 : len
32200
32201 var L = 0
32202
32203 for (i = 0, j = 0; i < l; i += 4, j += 3) {
32204 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
32205 arr[L++] = (tmp >> 16) & 0xFF
32206 arr[L++] = (tmp >> 8) & 0xFF
32207 arr[L++] = tmp & 0xFF
32208 }
32209
32210 if (placeHolders === 2) {
32211 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
32212 arr[L++] = tmp & 0xFF
32213 } else if (placeHolders === 1) {
32214 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
32215 arr[L++] = (tmp >> 8) & 0xFF
32216 arr[L++] = tmp & 0xFF
32217 }
32218
32219 return arr
ab78acc6 32220}
3af2954a 32221
8b095871
IC
32222function tripletToBase64 (num) {
32223 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
ab78acc6 32224}
3af2954a 32225
8b095871
IC
32226function encodeChunk (uint8, start, end) {
32227 var tmp
32228 var output = []
32229 for (var i = start; i < end; i += 3) {
32230 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
32231 output.push(tripletToBase64(tmp))
32232 }
32233 return output.join('')
ab78acc6 32234}
3af2954a 32235
8b095871
IC
32236function fromByteArray (uint8) {
32237 var tmp
32238 var len = uint8.length
32239 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
32240 var output = ''
32241 var parts = []
32242 var maxChunkLength = 16383 // must be multiple of 3
32243
32244 // go through the array every three bytes, we'll deal with trailing stuff later
32245 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
32246 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
32247 }
32248
32249 // pad the end with zeros, but make sure to not forget the extra bytes
32250 if (extraBytes === 1) {
32251 tmp = uint8[len - 1]
32252 output += lookup[tmp >> 2]
32253 output += lookup[(tmp << 4) & 0x3F]
32254 output += '=='
32255 } else if (extraBytes === 2) {
32256 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
32257 output += lookup[tmp >> 10]
32258 output += lookup[(tmp >> 4) & 0x3F]
32259 output += lookup[(tmp << 2) & 0x3F]
32260 output += '='
32261 }
32262
32263 parts.push(output)
32264
32265 return parts.join('')
ab78acc6 32266}
3af2954a 32267
8b095871 32268},{}],3:[function(require,module,exports){
3af2954a 32269
8b095871
IC
32270},{}],4:[function(require,module,exports){
32271(function (global){
32272'use strict';
32273
32274var buffer = require('buffer');
32275var Buffer = buffer.Buffer;
32276var SlowBuffer = buffer.SlowBuffer;
32277var MAX_LEN = buffer.kMaxLength || 2147483647;
32278exports.alloc = function alloc(size, fill, encoding) {
32279 if (typeof Buffer.alloc === 'function') {
32280 return Buffer.alloc(size, fill, encoding);
ab78acc6 32281 }
8b095871
IC
32282 if (typeof encoding === 'number') {
32283 throw new TypeError('encoding must not be number');
32284 }
32285 if (typeof size !== 'number') {
32286 throw new TypeError('size must be a number');
32287 }
32288 if (size > MAX_LEN) {
32289 throw new RangeError('size is too large');
32290 }
32291 var enc = encoding;
32292 var _fill = fill;
32293 if (_fill === undefined) {
32294 enc = undefined;
32295 _fill = 0;
32296 }
32297 var buf = new Buffer(size);
32298 if (typeof _fill === 'string') {
32299 var fillBuf = new Buffer(_fill, enc);
32300 var flen = fillBuf.length;
32301 var i = -1;
32302 while (++i < size) {
32303 buf[i] = fillBuf[i % flen];
ab78acc6 32304 }
ab78acc6 32305 } else {
8b095871 32306 buf.fill(_fill);
ab78acc6 32307 }
8b095871 32308 return buf;
ab78acc6 32309}
8b095871
IC
32310exports.allocUnsafe = function allocUnsafe(size) {
32311 if (typeof Buffer.allocUnsafe === 'function') {
32312 return Buffer.allocUnsafe(size);
32313 }
32314 if (typeof size !== 'number') {
32315 throw new TypeError('size must be a number');
32316 }
32317 if (size > MAX_LEN) {
32318 throw new RangeError('size is too large');
32319 }
32320 return new Buffer(size);
ab78acc6 32321}
8b095871
IC
32322exports.from = function from(value, encodingOrOffset, length) {
32323 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
32324 return Buffer.from(value, encodingOrOffset, length);
32325 }
32326 if (typeof value === 'number') {
32327 throw new TypeError('"value" argument must not be a number');
32328 }
32329 if (typeof value === 'string') {
32330 return new Buffer(value, encodingOrOffset);
32331 }
32332 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
32333 var offset = encodingOrOffset;
32334 if (arguments.length === 1) {
32335 return new Buffer(value);
32336 }
32337 if (typeof offset === 'undefined') {
32338 offset = 0;
32339 }
32340 var len = length;
32341 if (typeof len === 'undefined') {
32342 len = value.byteLength - offset;
32343 }
32344 if (offset >= value.byteLength) {
32345 throw new RangeError('\'offset\' is out of bounds');
32346 }
32347 if (len > value.byteLength - offset) {
32348 throw new RangeError('\'length\' is out of bounds');
32349 }
32350 return new Buffer(value.slice(offset, offset + len));
32351 }
32352 if (Buffer.isBuffer(value)) {
32353 var out = new Buffer(value.length);
32354 value.copy(out, 0, 0, value.length);
32355 return out;
32356 }
32357 if (value) {
32358 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
32359 return new Buffer(value);
32360 }
32361 if (value.type === 'Buffer' && Array.isArray(value.data)) {
32362 return new Buffer(value.data);
32363 }
32364 }
3af2954a 32365
8b095871 32366 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
ab78acc6 32367}
8b095871
IC
32368exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
32369 if (typeof Buffer.allocUnsafeSlow === 'function') {
32370 return Buffer.allocUnsafeSlow(size);
32371 }
32372 if (typeof size !== 'number') {
32373 throw new TypeError('size must be a number');
32374 }
32375 if (size >= MAX_LEN) {
32376 throw new RangeError('size is too large');
32377 }
32378 return new SlowBuffer(size);
ab78acc6 32379}
3af2954a 32380
8b095871
IC
32381}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
32382},{"buffer":5}],5:[function(require,module,exports){
32383/*!
32384 * The buffer module from node.js, for the browser.
32385 *
32386 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
32387 * @license MIT
32388 */
32389/* eslint-disable no-proto */
3af2954a 32390
8b095871 32391'use strict'
3af2954a 32392
8b095871
IC
32393var base64 = require('base64-js')
32394var ieee754 = require('ieee754')
3af2954a 32395
8b095871
IC
32396exports.Buffer = Buffer
32397exports.SlowBuffer = SlowBuffer
32398exports.INSPECT_MAX_BYTES = 50
32399
32400var K_MAX_LENGTH = 0x7fffffff
32401exports.kMaxLength = K_MAX_LENGTH
32402
32403/**
32404 * If `Buffer.TYPED_ARRAY_SUPPORT`:
32405 * === true Use Uint8Array implementation (fastest)
32406 * === false Print warning and recommend using `buffer` v4.x which has an Object
32407 * implementation (most compatible, even IE6)
32408 *
32409 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
32410 * Opera 11.6+, iOS 4.2+.
32411 *
32412 * We report that the browser does not support typed arrays if the are not subclassable
32413 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
32414 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
32415 * for __proto__ and has a buggy typed array implementation.
32416 */
32417Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
32418
32419if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
32420 typeof console.error === 'function') {
32421 console.error(
32422 'This browser lacks typed array (Uint8Array) support which is required by ' +
32423 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
32424 )
ab78acc6 32425}
3af2954a 32426
8b095871
IC
32427function typedArraySupport () {
32428 // Can typed array instances can be augmented?
32429 try {
32430 var arr = new Uint8Array(1)
32431 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
32432 return arr.foo() === 42
32433 } catch (e) {
32434 return false
32435 }
ab78acc6 32436}
3af2954a 32437
8b095871
IC
32438function createBuffer (length) {
32439 if (length > K_MAX_LENGTH) {
32440 throw new RangeError('Invalid typed array length')
3af2954a 32441 }
8b095871
IC
32442 // Return an augmented `Uint8Array` instance
32443 var buf = new Uint8Array(length)
32444 buf.__proto__ = Buffer.prototype
32445 return buf
ab78acc6 32446}
3af2954a 32447
8b095871
IC
32448/**
32449 * The Buffer constructor returns instances of `Uint8Array` that have their
32450 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
32451 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
32452 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
32453 * returns a single octet.
32454 *
32455 * The `Uint8Array` prototype remains unmodified.
32456 */
3af2954a 32457
8b095871
IC
32458function Buffer (arg, encodingOrOffset, length) {
32459 // Common case.
32460 if (typeof arg === 'number') {
32461 if (typeof encodingOrOffset === 'string') {
32462 throw new Error(
32463 'If encoding is specified then the first argument must be a string'
32464 )
32465 }
32466 return allocUnsafe(arg)
32467 }
32468 return from(arg, encodingOrOffset, length)
ab78acc6 32469}
3af2954a 32470
8b095871
IC
32471// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
32472if (typeof Symbol !== 'undefined' && Symbol.species &&
32473 Buffer[Symbol.species] === Buffer) {
32474 Object.defineProperty(Buffer, Symbol.species, {
32475 value: null,
32476 configurable: true,
32477 enumerable: false,
32478 writable: false
32479 })
ab78acc6 32480}
3af2954a 32481
8b095871 32482Buffer.poolSize = 8192 // not used by this implementation
3af2954a 32483
8b095871
IC
32484function from (value, encodingOrOffset, length) {
32485 if (typeof value === 'number') {
32486 throw new TypeError('"value" argument must not be a number')
32487 }
3af2954a 32488
8b095871
IC
32489 if (value instanceof ArrayBuffer) {
32490 return fromArrayBuffer(value, encodingOrOffset, length)
32491 }
3af2954a 32492
8b095871
IC
32493 if (typeof value === 'string') {
32494 return fromString(value, encodingOrOffset)
32495 }
3af2954a 32496
8b095871 32497 return fromObject(value)
ab78acc6 32498}
3af2954a 32499
8b095871
IC
32500/**
32501 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
32502 * if value is a number.
32503 * Buffer.from(str[, encoding])
32504 * Buffer.from(array)
32505 * Buffer.from(buffer)
32506 * Buffer.from(arrayBuffer[, byteOffset[, length]])
32507 **/
32508Buffer.from = function (value, encodingOrOffset, length) {
32509 return from(value, encodingOrOffset, length)
ab78acc6 32510}
3af2954a 32511
8b095871
IC
32512// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
32513// https://github.com/feross/buffer/pull/148
32514Buffer.prototype.__proto__ = Uint8Array.prototype
32515Buffer.__proto__ = Uint8Array
32516
32517function assertSize (size) {
32518 if (typeof size !== 'number') {
32519 throw new TypeError('"size" argument must be a number')
32520 } else if (size < 0) {
32521 throw new RangeError('"size" argument must not be negative')
32522 }
32523}
32524
32525function alloc (size, fill, encoding) {
32526 assertSize(size)
32527 if (size <= 0) {
32528 return createBuffer(size)
3af2954a 32529 }
8b095871
IC
32530 if (fill !== undefined) {
32531 // Only pay attention to encoding if it's a string. This
32532 // prevents accidentally sending in a number that would
32533 // be interpretted as a start offset.
32534 return typeof encoding === 'string'
32535 ? createBuffer(size).fill(fill, encoding)
32536 : createBuffer(size).fill(fill)
32537 }
32538 return createBuffer(size)
ab78acc6 32539}
3af2954a 32540
8b095871
IC
32541/**
32542 * Creates a new filled Buffer instance.
32543 * alloc(size[, fill[, encoding]])
32544 **/
32545Buffer.alloc = function (size, fill, encoding) {
32546 return alloc(size, fill, encoding)
ab78acc6 32547}
3af2954a 32548
8b095871
IC
32549function allocUnsafe (size) {
32550 assertSize(size)
32551 return createBuffer(size < 0 ? 0 : checked(size) | 0)
ab78acc6 32552}
3af2954a 32553
8b095871
IC
32554/**
32555 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
32556 * */
32557Buffer.allocUnsafe = function (size) {
32558 return allocUnsafe(size)
32559}
32560/**
32561 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
32562 */
32563Buffer.allocUnsafeSlow = function (size) {
32564 return allocUnsafe(size)
ab78acc6 32565}
3af2954a 32566
8b095871
IC
32567function fromString (string, encoding) {
32568 if (typeof encoding !== 'string' || encoding === '') {
32569 encoding = 'utf8'
32570 }
32571
32572 if (!Buffer.isEncoding(encoding)) {
32573 throw new TypeError('"encoding" must be a valid string encoding')
32574 }
32575
32576 var length = byteLength(string, encoding) | 0
32577 var buf = createBuffer(length)
32578
32579 var actual = buf.write(string, encoding)
32580
32581 if (actual !== length) {
32582 // Writing a hex string, for example, that contains invalid characters will
32583 // cause everything after the first invalid character to be ignored. (e.g.
32584 // 'abxxcd' will be treated as 'ab')
32585 buf = buf.slice(0, actual)
32586 }
32587
32588 return buf
ab78acc6 32589}
3af2954a 32590
8b095871
IC
32591function fromArrayLike (array) {
32592 var length = array.length < 0 ? 0 : checked(array.length) | 0
32593 var buf = createBuffer(length)
32594 for (var i = 0; i < length; i += 1) {
32595 buf[i] = array[i] & 255
32596 }
32597 return buf
32598}
3af2954a 32599
8b095871
IC
32600function fromArrayBuffer (array, byteOffset, length) {
32601 if (byteOffset < 0 || array.byteLength < byteOffset) {
32602 throw new RangeError('\'offset\' is out of bounds')
32603 }
3af2954a 32604
8b095871
IC
32605 if (array.byteLength < byteOffset + (length || 0)) {
32606 throw new RangeError('\'length\' is out of bounds')
ab78acc6
IC
32607 }
32608
8b095871
IC
32609 var buf
32610 if (byteOffset === undefined && length === undefined) {
32611 buf = new Uint8Array(array)
32612 } else if (length === undefined) {
32613 buf = new Uint8Array(array, byteOffset)
32614 } else {
32615 buf = new Uint8Array(array, byteOffset, length)
32616 }
3af2954a 32617
8b095871
IC
32618 // Return an augmented `Uint8Array` instance
32619 buf.__proto__ = Buffer.prototype
32620 return buf
32621}
32622
32623function fromObject (obj) {
32624 if (Buffer.isBuffer(obj)) {
32625 var len = checked(obj.length) | 0
32626 var buf = createBuffer(len)
32627
32628 if (buf.length === 0) {
32629 return buf
ab78acc6 32630 }
8b095871
IC
32631
32632 obj.copy(buf, 0, 0, len)
32633 return buf
32634 }
32635
32636 if (obj) {
32637 if (ArrayBuffer.isView(obj) || 'length' in obj) {
32638 if (typeof obj.length !== 'number' || isnan(obj.length)) {
32639 return createBuffer(0)
ab78acc6 32640 }
8b095871 32641 return fromArrayLike(obj)
ab78acc6 32642 }
3af2954a 32643
8b095871
IC
32644 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
32645 return fromArrayLike(obj.data)
3af2954a
IC
32646 }
32647 }
8b095871
IC
32648
32649 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
ab78acc6 32650}
3af2954a 32651
8b095871
IC
32652function checked (length) {
32653 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
32654 // length is NaN (which is otherwise coerced to zero.)
32655 if (length >= K_MAX_LENGTH) {
32656 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
32657 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
ab78acc6 32658 }
8b095871
IC
32659 return length | 0
32660}
32661
32662function SlowBuffer (length) {
32663 if (+length != length) { // eslint-disable-line eqeqeq
32664 length = 0
3af2954a 32665 }
8b095871 32666 return Buffer.alloc(+length)
ab78acc6 32667}
3af2954a 32668
8b095871
IC
32669Buffer.isBuffer = function isBuffer (b) {
32670 return b != null && b._isBuffer === true
ab78acc6 32671}
3af2954a 32672
8b095871
IC
32673Buffer.compare = function compare (a, b) {
32674 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
32675 throw new TypeError('Arguments must be Buffers')
32676 }
32677
32678 if (a === b) return 0
32679
32680 var x = a.length
32681 var y = b.length
32682
32683 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
32684 if (a[i] !== b[i]) {
32685 x = a[i]
32686 y = b[i]
32687 break
ab78acc6
IC
32688 }
32689 }
8b095871
IC
32690
32691 if (x < y) return -1
32692 if (y < x) return 1
32693 return 0
32694}
32695
32696Buffer.isEncoding = function isEncoding (encoding) {
32697 switch (String(encoding).toLowerCase()) {
32698 case 'hex':
32699 case 'utf8':
32700 case 'utf-8':
32701 case 'ascii':
32702 case 'latin1':
32703 case 'binary':
32704 case 'base64':
32705 case 'ucs2':
32706 case 'ucs-2':
32707 case 'utf16le':
32708 case 'utf-16le':
32709 return true
32710 default:
32711 return false
32712 }
ab78acc6
IC
32713}
32714
8b095871
IC
32715Buffer.concat = function concat (list, length) {
32716 if (!Array.isArray(list)) {
32717 throw new TypeError('"list" argument must be an Array of Buffers')
32718 }
ab78acc6 32719
8b095871
IC
32720 if (list.length === 0) {
32721 return Buffer.alloc(0)
32722 }
ab78acc6 32723
8b095871
IC
32724 var i
32725 if (length === undefined) {
32726 length = 0
32727 for (i = 0; i < list.length; ++i) {
32728 length += list[i].length
32729 }
3af2954a 32730 }
8b095871
IC
32731
32732 var buffer = Buffer.allocUnsafe(length)
32733 var pos = 0
32734 for (i = 0; i < list.length; ++i) {
32735 var buf = list[i]
32736 if (!Buffer.isBuffer(buf)) {
32737 throw new TypeError('"list" argument must be an Array of Buffers')
32738 }
32739 buf.copy(buffer, pos)
32740 pos += buf.length
ab78acc6 32741 }
8b095871 32742 return buffer
ab78acc6
IC
32743}
32744
8b095871
IC
32745function byteLength (string, encoding) {
32746 if (Buffer.isBuffer(string)) {
32747 return string.length
32748 }
32749 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
32750 return string.byteLength
32751 }
32752 if (typeof string !== 'string') {
32753 string = '' + string
32754 }
32755
32756 var len = string.length
32757 if (len === 0) return 0
32758
32759 // Use a for loop to avoid recursion
32760 var loweredCase = false
32761 for (;;) {
32762 switch (encoding) {
32763 case 'ascii':
32764 case 'latin1':
32765 case 'binary':
32766 return len
32767 case 'utf8':
32768 case 'utf-8':
32769 case undefined:
32770 return utf8ToBytes(string).length
32771 case 'ucs2':
32772 case 'ucs-2':
32773 case 'utf16le':
32774 case 'utf-16le':
32775 return len * 2
32776 case 'hex':
32777 return len >>> 1
32778 case 'base64':
32779 return base64ToBytes(string).length
32780 default:
32781 if (loweredCase) return utf8ToBytes(string).length // assume utf8
32782 encoding = ('' + encoding).toLowerCase()
32783 loweredCase = true
ab78acc6 32784 }
3af2954a 32785 }
ab78acc6 32786}
8b095871 32787Buffer.byteLength = byteLength
3af2954a 32788
8b095871
IC
32789function slowToString (encoding, start, end) {
32790 var loweredCase = false
3af2954a 32791
8b095871
IC
32792 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
32793 // property of a typed array.
3af2954a 32794
8b095871
IC
32795 // This behaves neither like String nor Uint8Array in that we set start/end
32796 // to their upper/lower bounds if the value passed is out of range.
32797 // undefined is handled specially as per ECMA-262 6th Edition,
32798 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
32799 if (start === undefined || start < 0) {
32800 start = 0
32801 }
32802 // Return early if start > this.length. Done here to prevent potential uint32
32803 // coercion fail below.
32804 if (start > this.length) {
32805 return ''
32806 }
3af2954a 32807
8b095871
IC
32808 if (end === undefined || end > this.length) {
32809 end = this.length
32810 }
3af2954a 32811
8b095871
IC
32812 if (end <= 0) {
32813 return ''
32814 }
3af2954a 32815
8b095871
IC
32816 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
32817 end >>>= 0
32818 start >>>= 0
3af2954a 32819
8b095871
IC
32820 if (end <= start) {
32821 return ''
3af2954a
IC
32822 }
32823
8b095871 32824 if (!encoding) encoding = 'utf8'
3af2954a 32825
8b095871
IC
32826 while (true) {
32827 switch (encoding) {
32828 case 'hex':
32829 return hexSlice(this, start, end)
32830
32831 case 'utf8':
32832 case 'utf-8':
32833 return utf8Slice(this, start, end)
32834
32835 case 'ascii':
32836 return asciiSlice(this, start, end)
32837
32838 case 'latin1':
32839 case 'binary':
32840 return latin1Slice(this, start, end)
32841
32842 case 'base64':
32843 return base64Slice(this, start, end)
32844
32845 case 'ucs2':
32846 case 'ucs-2':
32847 case 'utf16le':
32848 case 'utf-16le':
32849 return utf16leSlice(this, start, end)
32850
32851 default:
32852 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
32853 encoding = (encoding + '').toLowerCase()
32854 loweredCase = true
32855 }
32856 }
ab78acc6 32857}
3af2954a 32858
8b095871
IC
32859// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
32860// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
32861// reliably in a browserify context because there could be multiple different
32862// copies of the 'buffer' package in use. This method works even for Buffer
32863// instances that were created from another copy of the `buffer` package.
32864// See: https://github.com/feross/buffer/issues/154
32865Buffer.prototype._isBuffer = true
32866
32867function swap (b, n, m) {
32868 var i = b[n]
32869 b[n] = b[m]
32870 b[m] = i
ab78acc6 32871}
3af2954a 32872
8b095871
IC
32873Buffer.prototype.swap16 = function swap16 () {
32874 var len = this.length
32875 if (len % 2 !== 0) {
32876 throw new RangeError('Buffer size must be a multiple of 16-bits')
32877 }
32878 for (var i = 0; i < len; i += 2) {
32879 swap(this, i, i + 1)
32880 }
32881 return this
32882}
3af2954a 32883
8b095871
IC
32884Buffer.prototype.swap32 = function swap32 () {
32885 var len = this.length
32886 if (len % 4 !== 0) {
32887 throw new RangeError('Buffer size must be a multiple of 32-bits')
32888 }
32889 for (var i = 0; i < len; i += 4) {
32890 swap(this, i, i + 3)
32891 swap(this, i + 1, i + 2)
32892 }
32893 return this
32894}
3af2954a 32895
8b095871
IC
32896Buffer.prototype.swap64 = function swap64 () {
32897 var len = this.length
32898 if (len % 8 !== 0) {
32899 throw new RangeError('Buffer size must be a multiple of 64-bits')
3af2954a 32900 }
8b095871
IC
32901 for (var i = 0; i < len; i += 8) {
32902 swap(this, i, i + 7)
32903 swap(this, i + 1, i + 6)
32904 swap(this, i + 2, i + 5)
32905 swap(this, i + 3, i + 4)
32906 }
32907 return this
32908}
3af2954a 32909
8b095871
IC
32910Buffer.prototype.toString = function toString () {
32911 var length = this.length
32912 if (length === 0) return ''
32913 if (arguments.length === 0) return utf8Slice(this, 0, length)
32914 return slowToString.apply(this, arguments)
ab78acc6 32915}
3af2954a 32916
8b095871
IC
32917Buffer.prototype.equals = function equals (b) {
32918 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
32919 if (this === b) return true
32920 return Buffer.compare(this, b) === 0
32921}
3af2954a 32922
8b095871
IC
32923Buffer.prototype.inspect = function inspect () {
32924 var str = ''
32925 var max = exports.INSPECT_MAX_BYTES
32926 if (this.length > 0) {
32927 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
32928 if (this.length > max) str += ' ... '
32929 }
32930 return '<Buffer ' + str + '>'
ab78acc6 32931}
3af2954a 32932
8b095871
IC
32933Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
32934 if (!Buffer.isBuffer(target)) {
32935 throw new TypeError('Argument must be a Buffer')
32936 }
3af2954a 32937
8b095871
IC
32938 if (start === undefined) {
32939 start = 0
32940 }
32941 if (end === undefined) {
32942 end = target ? target.length : 0
32943 }
32944 if (thisStart === undefined) {
32945 thisStart = 0
32946 }
32947 if (thisEnd === undefined) {
32948 thisEnd = this.length
32949 }
3af2954a 32950
8b095871
IC
32951 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
32952 throw new RangeError('out of range index')
32953 }
3af2954a 32954
8b095871
IC
32955 if (thisStart >= thisEnd && start >= end) {
32956 return 0
32957 }
32958 if (thisStart >= thisEnd) {
32959 return -1
32960 }
32961 if (start >= end) {
32962 return 1
32963 }
3af2954a 32964
8b095871
IC
32965 start >>>= 0
32966 end >>>= 0
32967 thisStart >>>= 0
32968 thisEnd >>>= 0
3af2954a 32969
8b095871 32970 if (this === target) return 0
3af2954a 32971
8b095871
IC
32972 var x = thisEnd - thisStart
32973 var y = end - start
32974 var len = Math.min(x, y)
32975
32976 var thisCopy = this.slice(thisStart, thisEnd)
32977 var targetCopy = target.slice(start, end)
32978
32979 for (var i = 0; i < len; ++i) {
32980 if (thisCopy[i] !== targetCopy[i]) {
32981 x = thisCopy[i]
32982 y = targetCopy[i]
32983 break
3af2954a 32984 }
8b095871
IC
32985 }
32986
32987 if (x < y) return -1
32988 if (y < x) return 1
32989 return 0
ab78acc6 32990}
3af2954a 32991
8b095871
IC
32992// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
32993// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
ab78acc6 32994//
8b095871
IC
32995// Arguments:
32996// - buffer - a Buffer to search
32997// - val - a string, Buffer, or number
32998// - byteOffset - an index into `buffer`; will be clamped to an int32
32999// - encoding - an optional encoding, relevant is val is a string
33000// - dir - true for indexOf, false for lastIndexOf
33001function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
33002 // Empty buffer means no match
33003 if (buffer.length === 0) return -1
33004
33005 // Normalize byteOffset
33006 if (typeof byteOffset === 'string') {
33007 encoding = byteOffset
33008 byteOffset = 0
33009 } else if (byteOffset > 0x7fffffff) {
33010 byteOffset = 0x7fffffff
33011 } else if (byteOffset < -0x80000000) {
33012 byteOffset = -0x80000000
33013 }
33014 byteOffset = +byteOffset // Coerce to Number.
33015 if (isNaN(byteOffset)) {
33016 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
33017 byteOffset = dir ? 0 : (buffer.length - 1)
33018 }
33019
33020 // Normalize byteOffset: negative offsets start from the end of the buffer
33021 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
33022 if (byteOffset >= buffer.length) {
33023 if (dir) return -1
33024 else byteOffset = buffer.length - 1
33025 } else if (byteOffset < 0) {
33026 if (dir) byteOffset = 0
33027 else return -1
33028 }
33029
33030 // Normalize val
33031 if (typeof val === 'string') {
33032 val = Buffer.from(val, encoding)
33033 }
3af2954a 33034
8b095871
IC
33035 // Finally, search either indexOf (if dir is true) or lastIndexOf
33036 if (Buffer.isBuffer(val)) {
33037 // Special case: looking for empty string/buffer always fails
33038 if (val.length === 0) {
33039 return -1
33040 }
33041 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
33042 } else if (typeof val === 'number') {
33043 val = val & 0xFF // Search for a byte value [0-255]
33044 if (typeof Uint8Array.prototype.indexOf === 'function') {
33045 if (dir) {
33046 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
33047 } else {
33048 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
33049 }
33050 }
33051 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
33052 }
3af2954a 33053
8b095871
IC
33054 throw new TypeError('val must be string, number or Buffer')
33055}
3af2954a 33056
8b095871
IC
33057function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
33058 var indexSize = 1
33059 var arrLength = arr.length
33060 var valLength = val.length
3af2954a 33061
8b095871
IC
33062 if (encoding !== undefined) {
33063 encoding = String(encoding).toLowerCase()
33064 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
33065 encoding === 'utf16le' || encoding === 'utf-16le') {
33066 if (arr.length < 2 || val.length < 2) {
33067 return -1
33068 }
33069 indexSize = 2
33070 arrLength /= 2
33071 valLength /= 2
33072 byteOffset /= 2
33073 }
33074 }
3af2954a 33075
8b095871
IC
33076 function read (buf, i) {
33077 if (indexSize === 1) {
33078 return buf[i]
33079 } else {
33080 return buf.readUInt16BE(i * indexSize)
33081 }
33082 }
3af2954a 33083
8b095871
IC
33084 var i
33085 if (dir) {
33086 var foundIndex = -1
33087 for (i = byteOffset; i < arrLength; i++) {
33088 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
33089 if (foundIndex === -1) foundIndex = i
33090 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
33091 } else {
33092 if (foundIndex !== -1) i -= i - foundIndex
33093 foundIndex = -1
33094 }
33095 }
ab78acc6 33096 } else {
8b095871
IC
33097 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
33098 for (i = byteOffset; i >= 0; i--) {
33099 var found = true
33100 for (var j = 0; j < valLength; j++) {
33101 if (read(arr, i + j) !== read(val, j)) {
33102 found = false
33103 break
33104 }
33105 }
33106 if (found) return i
33107 }
ab78acc6 33108 }
3af2954a 33109
8b095871
IC
33110 return -1
33111}
3af2954a 33112
8b095871
IC
33113Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
33114 return this.indexOf(val, byteOffset, encoding) !== -1
33115}
33116
33117Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
33118 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
33119}
3af2954a 33120
8b095871
IC
33121Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
33122 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
33123}
33124
33125function hexWrite (buf, string, offset, length) {
33126 offset = Number(offset) || 0
33127 var remaining = buf.length - offset
33128 if (!length) {
33129 length = remaining
33130 } else {
33131 length = Number(length)
33132 if (length > remaining) {
33133 length = remaining
3af2954a 33134 }
3af2954a
IC
33135 }
33136
8b095871
IC
33137 // must be an even number of digits
33138 var strLen = string.length
33139 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
3af2954a 33140
8b095871
IC
33141 if (length > strLen / 2) {
33142 length = strLen / 2
ab78acc6 33143 }
8b095871
IC
33144 for (var i = 0; i < length; ++i) {
33145 var parsed = parseInt(string.substr(i * 2, 2), 16)
33146 if (isNaN(parsed)) return i
33147 buf[offset + i] = parsed
ab78acc6 33148 }
8b095871 33149 return i
ab78acc6 33150}
3af2954a 33151
8b095871
IC
33152function utf8Write (buf, string, offset, length) {
33153 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
ab78acc6 33154}
3af2954a 33155
8b095871
IC
33156function asciiWrite (buf, string, offset, length) {
33157 return blitBuffer(asciiToBytes(string), buf, offset, length)
ab78acc6 33158}
3af2954a 33159
8b095871
IC
33160function latin1Write (buf, string, offset, length) {
33161 return asciiWrite(buf, string, offset, length)
ab78acc6 33162}
3af2954a 33163
8b095871
IC
33164function base64Write (buf, string, offset, length) {
33165 return blitBuffer(base64ToBytes(string), buf, offset, length)
ab78acc6 33166}
3af2954a 33167
8b095871
IC
33168function ucs2Write (buf, string, offset, length) {
33169 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
33170}
3af2954a 33171
8b095871
IC
33172Buffer.prototype.write = function write (string, offset, length, encoding) {
33173 // Buffer#write(string)
33174 if (offset === undefined) {
33175 encoding = 'utf8'
33176 length = this.length
33177 offset = 0
33178 // Buffer#write(string, encoding)
33179 } else if (length === undefined && typeof offset === 'string') {
33180 encoding = offset
33181 length = this.length
33182 offset = 0
33183 // Buffer#write(string, offset[, length][, encoding])
33184 } else if (isFinite(offset)) {
33185 offset = offset >>> 0
33186 if (isFinite(length)) {
33187 length = length >>> 0
33188 if (encoding === undefined) encoding = 'utf8'
33189 } else {
33190 encoding = length
33191 length = undefined
33192 }
33193 } else {
33194 throw new Error(
33195 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
33196 )
3af2954a
IC
33197 }
33198
8b095871
IC
33199 var remaining = this.length - offset
33200 if (length === undefined || length > remaining) length = remaining
3af2954a 33201
8b095871
IC
33202 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
33203 throw new RangeError('Attempt to write outside buffer bounds')
ab78acc6 33204 }
3af2954a 33205
8b095871 33206 if (!encoding) encoding = 'utf8'
3af2954a 33207
8b095871
IC
33208 var loweredCase = false
33209 for (;;) {
33210 switch (encoding) {
33211 case 'hex':
33212 return hexWrite(this, string, offset, length)
3af2954a 33213
8b095871
IC
33214 case 'utf8':
33215 case 'utf-8':
33216 return utf8Write(this, string, offset, length)
3af2954a 33217
8b095871
IC
33218 case 'ascii':
33219 return asciiWrite(this, string, offset, length)
3af2954a 33220
8b095871
IC
33221 case 'latin1':
33222 case 'binary':
33223 return latin1Write(this, string, offset, length)
3af2954a 33224
8b095871
IC
33225 case 'base64':
33226 // Warning: maxLength not taken into account in base64Write
33227 return base64Write(this, string, offset, length)
3af2954a 33228
8b095871
IC
33229 case 'ucs2':
33230 case 'ucs-2':
33231 case 'utf16le':
33232 case 'utf-16le':
33233 return ucs2Write(this, string, offset, length)
3af2954a 33234
8b095871
IC
33235 default:
33236 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
33237 encoding = ('' + encoding).toLowerCase()
33238 loweredCase = true
33239 }
3af2954a 33240 }
ab78acc6 33241}
3af2954a 33242
8b095871
IC
33243Buffer.prototype.toJSON = function toJSON () {
33244 return {
33245 type: 'Buffer',
33246 data: Array.prototype.slice.call(this._arr || this, 0)
3af2954a 33247 }
ab78acc6
IC
33248}
33249
8b095871
IC
33250function base64Slice (buf, start, end) {
33251 if (start === 0 && end === buf.length) {
33252 return base64.fromByteArray(buf)
33253 } else {
33254 return base64.fromByteArray(buf.slice(start, end))
3af2954a 33255 }
8b095871 33256}
3af2954a 33257
8b095871
IC
33258function utf8Slice (buf, start, end) {
33259 end = Math.min(buf.length, end)
33260 var res = []
3af2954a 33261
8b095871
IC
33262 var i = start
33263 while (i < end) {
33264 var firstByte = buf[i]
33265 var codePoint = null
33266 var bytesPerSequence = (firstByte > 0xEF) ? 4
33267 : (firstByte > 0xDF) ? 3
33268 : (firstByte > 0xBF) ? 2
33269 : 1
3af2954a 33270
8b095871
IC
33271 if (i + bytesPerSequence <= end) {
33272 var secondByte, thirdByte, fourthByte, tempCodePoint
3af2954a 33273
8b095871
IC
33274 switch (bytesPerSequence) {
33275 case 1:
33276 if (firstByte < 0x80) {
33277 codePoint = firstByte
33278 }
33279 break
33280 case 2:
33281 secondByte = buf[i + 1]
33282 if ((secondByte & 0xC0) === 0x80) {
33283 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
33284 if (tempCodePoint > 0x7F) {
33285 codePoint = tempCodePoint
33286 }
33287 }
33288 break
33289 case 3:
33290 secondByte = buf[i + 1]
33291 thirdByte = buf[i + 2]
33292 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
33293 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
33294 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
33295 codePoint = tempCodePoint
33296 }
33297 }
33298 break
33299 case 4:
33300 secondByte = buf[i + 1]
33301 thirdByte = buf[i + 2]
33302 fourthByte = buf[i + 3]
33303 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
33304 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
33305 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
33306 codePoint = tempCodePoint
33307 }
33308 }
33309 }
33310 }
3af2954a 33311
8b095871
IC
33312 if (codePoint === null) {
33313 // we did not generate a valid codePoint so insert a
33314 // replacement char (U+FFFD) and advance only 1 byte
33315 codePoint = 0xFFFD
33316 bytesPerSequence = 1
33317 } else if (codePoint > 0xFFFF) {
33318 // encode to utf16 (surrogate pair dance)
33319 codePoint -= 0x10000
33320 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
33321 codePoint = 0xDC00 | codePoint & 0x3FF
33322 }
33323
33324 res.push(codePoint)
33325 i += bytesPerSequence
3af2954a
IC
33326 }
33327
8b095871 33328 return decodeCodePointsArray(res)
ab78acc6 33329}
3af2954a 33330
8b095871
IC
33331// Based on http://stackoverflow.com/a/22747272/680742, the browser with
33332// the lowest limit is Chrome, with 0x10000 args.
33333// We go 1 magnitude less, for safety
33334var MAX_ARGUMENTS_LENGTH = 0x1000
3af2954a 33335
8b095871
IC
33336function decodeCodePointsArray (codePoints) {
33337 var len = codePoints.length
33338 if (len <= MAX_ARGUMENTS_LENGTH) {
33339 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
3af2954a
IC
33340 }
33341
8b095871
IC
33342 // Decode in chunks to avoid "call stack size exceeded".
33343 var res = ''
33344 var i = 0
33345 while (i < len) {
33346 res += String.fromCharCode.apply(
33347 String,
33348 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
33349 )
3af2954a 33350 }
8b095871
IC
33351 return res
33352}
3af2954a 33353
8b095871
IC
33354function asciiSlice (buf, start, end) {
33355 var ret = ''
33356 end = Math.min(buf.length, end)
3af2954a 33357
8b095871
IC
33358 for (var i = start; i < end; ++i) {
33359 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 33360 }
8b095871
IC
33361 return ret
33362}
3af2954a 33363
8b095871
IC
33364function latin1Slice (buf, start, end) {
33365 var ret = ''
33366 end = Math.min(buf.length, end)
3af2954a 33367
8b095871
IC
33368 for (var i = start; i < end; ++i) {
33369 ret += String.fromCharCode(buf[i])
3af2954a 33370 }
8b095871 33371 return ret
ab78acc6 33372}
3af2954a 33373
8b095871
IC
33374function hexSlice (buf, start, end) {
33375 var len = buf.length
3af2954a 33376
8b095871
IC
33377 if (!start || start < 0) start = 0
33378 if (!end || end < 0 || end > len) end = len
3af2954a 33379
8b095871
IC
33380 var out = ''
33381 for (var i = start; i < end; ++i) {
33382 out += toHex(buf[i])
3af2954a 33383 }
8b095871
IC
33384 return out
33385}
3af2954a 33386
8b095871
IC
33387function utf16leSlice (buf, start, end) {
33388 var bytes = buf.slice(start, end)
33389 var res = ''
33390 for (var i = 0; i < bytes.length; i += 2) {
33391 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
33392 }
33393 return res
33394}
3af2954a 33395
8b095871
IC
33396Buffer.prototype.slice = function slice (start, end) {
33397 var len = this.length
33398 start = ~~start
33399 end = end === undefined ? len : ~~end
3af2954a 33400
8b095871
IC
33401 if (start < 0) {
33402 start += len
33403 if (start < 0) start = 0
33404 } else if (start > len) {
33405 start = len
33406 }
3af2954a 33407
8b095871
IC
33408 if (end < 0) {
33409 end += len
33410 if (end < 0) end = 0
33411 } else if (end > len) {
33412 end = len
33413 }
3af2954a 33414
8b095871 33415 if (end < start) end = start
3af2954a 33416
8b095871
IC
33417 var newBuf = this.subarray(start, end)
33418 // Return an augmented `Uint8Array` instance
33419 newBuf.__proto__ = Buffer.prototype
33420 return newBuf
33421}
3af2954a 33422
8b095871
IC
33423/*
33424 * Need to make sure that buffer isn't trying to write out of bounds.
ab78acc6 33425 */
8b095871
IC
33426function checkOffset (offset, ext, length) {
33427 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
33428 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
ab78acc6 33429}
3af2954a 33430
8b095871
IC
33431Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
33432 offset = offset >>> 0
33433 byteLength = byteLength >>> 0
33434 if (!noAssert) checkOffset(offset, byteLength, this.length)
33435
33436 var val = this[offset]
33437 var mul = 1
33438 var i = 0
33439 while (++i < byteLength && (mul *= 0x100)) {
33440 val += this[offset + i] * mul
3af2954a
IC
33441 }
33442
8b095871
IC
33443 return val
33444}
3af2954a 33445
8b095871
IC
33446Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
33447 offset = offset >>> 0
33448 byteLength = byteLength >>> 0
33449 if (!noAssert) {
33450 checkOffset(offset, byteLength, this.length)
ab78acc6 33451 }
3af2954a 33452
8b095871
IC
33453 var val = this[offset + --byteLength]
33454 var mul = 1
33455 while (byteLength > 0 && (mul *= 0x100)) {
33456 val += this[offset + --byteLength] * mul
ab78acc6 33457 }
3af2954a 33458
8b095871 33459 return val
ab78acc6 33460}
3af2954a 33461
8b095871
IC
33462Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
33463 offset = offset >>> 0
33464 if (!noAssert) checkOffset(offset, 1, this.length)
33465 return this[offset]
ab78acc6 33466}
3af2954a 33467
8b095871
IC
33468Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
33469 offset = offset >>> 0
33470 if (!noAssert) checkOffset(offset, 2, this.length)
33471 return this[offset] | (this[offset + 1] << 8)
33472}
3af2954a 33473
8b095871
IC
33474Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
33475 offset = offset >>> 0
33476 if (!noAssert) checkOffset(offset, 2, this.length)
33477 return (this[offset] << 8) | this[offset + 1]
33478}
3af2954a 33479
8b095871
IC
33480Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
33481 offset = offset >>> 0
33482 if (!noAssert) checkOffset(offset, 4, this.length)
33483
33484 return ((this[offset]) |
33485 (this[offset + 1] << 8) |
33486 (this[offset + 2] << 16)) +
33487 (this[offset + 3] * 0x1000000)
ab78acc6 33488}
3af2954a 33489
8b095871
IC
33490Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
33491 offset = offset >>> 0
33492 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 33493
8b095871
IC
33494 return (this[offset] * 0x1000000) +
33495 ((this[offset + 1] << 16) |
33496 (this[offset + 2] << 8) |
33497 this[offset + 3])
33498}
3af2954a 33499
8b095871
IC
33500Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
33501 offset = offset >>> 0
33502 byteLength = byteLength >>> 0
33503 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 33504
8b095871
IC
33505 var val = this[offset]
33506 var mul = 1
33507 var i = 0
33508 while (++i < byteLength && (mul *= 0x100)) {
33509 val += this[offset + i] * mul
3af2954a 33510 }
8b095871 33511 mul *= 0x80
3af2954a 33512
8b095871 33513 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3af2954a 33514
8b095871 33515 return val
ab78acc6 33516}
3af2954a 33517
8b095871
IC
33518Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
33519 offset = offset >>> 0
33520 byteLength = byteLength >>> 0
33521 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 33522
8b095871
IC
33523 var i = byteLength
33524 var mul = 1
33525 var val = this[offset + --i]
33526 while (i > 0 && (mul *= 0x100)) {
33527 val += this[offset + --i] * mul
3af2954a 33528 }
8b095871 33529 mul *= 0x80
3af2954a 33530
8b095871
IC
33531 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
33532
33533 return val
ab78acc6 33534}
3af2954a 33535
8b095871
IC
33536Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
33537 offset = offset >>> 0
33538 if (!noAssert) checkOffset(offset, 1, this.length)
33539 if (!(this[offset] & 0x80)) return (this[offset])
33540 return ((0xff - this[offset] + 1) * -1)
ab78acc6 33541}
3af2954a 33542
8b095871
IC
33543Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
33544 offset = offset >>> 0
33545 if (!noAssert) checkOffset(offset, 2, this.length)
33546 var val = this[offset] | (this[offset + 1] << 8)
33547 return (val & 0x8000) ? val | 0xFFFF0000 : val
ab78acc6 33548}
3af2954a 33549
8b095871
IC
33550Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
33551 offset = offset >>> 0
33552 if (!noAssert) checkOffset(offset, 2, this.length)
33553 var val = this[offset + 1] | (this[offset] << 8)
33554 return (val & 0x8000) ? val | 0xFFFF0000 : val
33555}
ab78acc6 33556
8b095871
IC
33557Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
33558 offset = offset >>> 0
33559 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 33560
8b095871
IC
33561 return (this[offset]) |
33562 (this[offset + 1] << 8) |
33563 (this[offset + 2] << 16) |
33564 (this[offset + 3] << 24)
ab78acc6 33565}
3af2954a 33566
8b095871
IC
33567Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
33568 offset = offset >>> 0
33569 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 33570
8b095871
IC
33571 return (this[offset] << 24) |
33572 (this[offset + 1] << 16) |
33573 (this[offset + 2] << 8) |
33574 (this[offset + 3])
33575}
3af2954a 33576
8b095871
IC
33577Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
33578 offset = offset >>> 0
33579 if (!noAssert) checkOffset(offset, 4, this.length)
33580 return ieee754.read(this, offset, true, 23, 4)
ab78acc6 33581}
3af2954a 33582
8b095871
IC
33583Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
33584 offset = offset >>> 0
33585 if (!noAssert) checkOffset(offset, 4, this.length)
33586 return ieee754.read(this, offset, false, 23, 4)
ab78acc6 33587}
3af2954a 33588
8b095871
IC
33589Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
33590 offset = offset >>> 0
33591 if (!noAssert) checkOffset(offset, 8, this.length)
33592 return ieee754.read(this, offset, true, 52, 8)
33593}
3af2954a 33594
8b095871
IC
33595Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
33596 offset = offset >>> 0
33597 if (!noAssert) checkOffset(offset, 8, this.length)
33598 return ieee754.read(this, offset, false, 52, 8)
ab78acc6 33599}
3af2954a 33600
8b095871
IC
33601function checkInt (buf, value, offset, ext, max, min) {
33602 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
33603 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
33604 if (offset + ext > buf.length) throw new RangeError('Index out of range')
ab78acc6 33605}
3af2954a 33606
8b095871
IC
33607Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
33608 value = +value
33609 offset = offset >>> 0
33610 byteLength = byteLength >>> 0
33611 if (!noAssert) {
33612 var maxBytes = Math.pow(2, 8 * byteLength) - 1
33613 checkInt(this, value, offset, byteLength, maxBytes, 0)
3af2954a
IC
33614 }
33615
8b095871 33616 var mul = 1
ab78acc6 33617 var i = 0
8b095871
IC
33618 this[offset] = value & 0xFF
33619 while (++i < byteLength && (mul *= 0x100)) {
33620 this[offset + i] = (value / mul) & 0xFF
33621 }
3af2954a 33622
8b095871
IC
33623 return offset + byteLength
33624}
33625
33626Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
33627 value = +value
33628 offset = offset >>> 0
33629 byteLength = byteLength >>> 0
33630 if (!noAssert) {
33631 var maxBytes = Math.pow(2, 8 * byteLength) - 1
33632 checkInt(this, value, offset, byteLength, maxBytes, 0)
ab78acc6 33633 }
3af2954a 33634
8b095871
IC
33635 var i = byteLength - 1
33636 var mul = 1
33637 this[offset + i] = value & 0xFF
33638 while (--i >= 0 && (mul *= 0x100)) {
33639 this[offset + i] = (value / mul) & 0xFF
ab78acc6 33640 }
3af2954a 33641
8b095871
IC
33642 return offset + byteLength
33643}
33644
33645Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
33646 value = +value
33647 offset = offset >>> 0
33648 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
33649 this[offset] = (value & 0xff)
33650 return offset + 1
33651}
33652
33653Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
33654 value = +value
33655 offset = offset >>> 0
33656 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
33657 this[offset] = (value & 0xff)
33658 this[offset + 1] = (value >>> 8)
33659 return offset + 2
33660}
33661
33662Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
33663 value = +value
33664 offset = offset >>> 0
33665 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
33666 this[offset] = (value >>> 8)
33667 this[offset + 1] = (value & 0xff)
33668 return offset + 2
ab78acc6 33669}
3af2954a 33670
8b095871
IC
33671Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
33672 value = +value
33673 offset = offset >>> 0
33674 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
33675 this[offset + 3] = (value >>> 24)
33676 this[offset + 2] = (value >>> 16)
33677 this[offset + 1] = (value >>> 8)
33678 this[offset] = (value & 0xff)
33679 return offset + 4
ab78acc6 33680}
3af2954a 33681
8b095871
IC
33682Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
33683 value = +value
33684 offset = offset >>> 0
33685 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
33686 this[offset] = (value >>> 24)
33687 this[offset + 1] = (value >>> 16)
33688 this[offset + 2] = (value >>> 8)
33689 this[offset + 3] = (value & 0xff)
33690 return offset + 4
33691}
3af2954a 33692
8b095871
IC
33693Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
33694 value = +value
33695 offset = offset >>> 0
33696 if (!noAssert) {
33697 var limit = Math.pow(2, (8 * byteLength) - 1)
33698
33699 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3af2954a
IC
33700 }
33701
8b095871
IC
33702 var i = 0
33703 var mul = 1
33704 var sub = 0
33705 this[offset] = value & 0xFF
33706 while (++i < byteLength && (mul *= 0x100)) {
33707 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
33708 sub = 1
ab78acc6 33709 }
8b095871 33710 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a
IC
33711 }
33712
8b095871 33713 return offset + byteLength
ab78acc6 33714}
3af2954a 33715
8b095871
IC
33716Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
33717 value = +value
33718 offset = offset >>> 0
33719 if (!noAssert) {
33720 var limit = Math.pow(2, (8 * byteLength) - 1)
ab78acc6 33721
8b095871
IC
33722 checkInt(this, value, offset, byteLength, limit - 1, -limit)
33723 }
ab78acc6 33724
8b095871
IC
33725 var i = byteLength - 1
33726 var mul = 1
33727 var sub = 0
33728 this[offset + i] = value & 0xFF
33729 while (--i >= 0 && (mul *= 0x100)) {
33730 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
33731 sub = 1
3af2954a 33732 }
8b095871 33733 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a 33734 }
3af2954a 33735
8b095871
IC
33736 return offset + byteLength
33737}
3af2954a 33738
8b095871
IC
33739Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
33740 value = +value
33741 offset = offset >>> 0
33742 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
33743 if (value < 0) value = 0xff + value + 1
33744 this[offset] = (value & 0xff)
33745 return offset + 1
33746}
3af2954a 33747
8b095871
IC
33748Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
33749 value = +value
33750 offset = offset >>> 0
33751 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
33752 this[offset] = (value & 0xff)
33753 this[offset + 1] = (value >>> 8)
33754 return offset + 2
33755}
3af2954a 33756
8b095871
IC
33757Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
33758 value = +value
33759 offset = offset >>> 0
33760 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
33761 this[offset] = (value >>> 8)
33762 this[offset + 1] = (value & 0xff)
33763 return offset + 2
33764}
3af2954a 33765
8b095871
IC
33766Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
33767 value = +value
33768 offset = offset >>> 0
33769 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
33770 this[offset] = (value & 0xff)
33771 this[offset + 1] = (value >>> 8)
33772 this[offset + 2] = (value >>> 16)
33773 this[offset + 3] = (value >>> 24)
33774 return offset + 4
33775}
3af2954a 33776
8b095871
IC
33777Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
33778 value = +value
33779 offset = offset >>> 0
33780 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
33781 if (value < 0) value = 0xffffffff + value + 1
33782 this[offset] = (value >>> 24)
33783 this[offset + 1] = (value >>> 16)
33784 this[offset + 2] = (value >>> 8)
33785 this[offset + 3] = (value & 0xff)
33786 return offset + 4
33787}
3af2954a 33788
8b095871
IC
33789function checkIEEE754 (buf, value, offset, ext, max, min) {
33790 if (offset + ext > buf.length) throw new RangeError('Index out of range')
33791 if (offset < 0) throw new RangeError('Index out of range')
33792}
3af2954a 33793
8b095871
IC
33794function writeFloat (buf, value, offset, littleEndian, noAssert) {
33795 value = +value
33796 offset = offset >>> 0
33797 if (!noAssert) {
33798 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3af2954a 33799 }
8b095871
IC
33800 ieee754.write(buf, value, offset, littleEndian, 23, 4)
33801 return offset + 4
ab78acc6 33802}
3af2954a 33803
8b095871
IC
33804Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
33805 return writeFloat(this, value, offset, true, noAssert)
ab78acc6 33806}
3af2954a 33807
8b095871
IC
33808Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
33809 return writeFloat(this, value, offset, false, noAssert)
ab78acc6 33810}
3af2954a 33811
8b095871
IC
33812function writeDouble (buf, value, offset, littleEndian, noAssert) {
33813 value = +value
33814 offset = offset >>> 0
33815 if (!noAssert) {
33816 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3af2954a 33817 }
8b095871
IC
33818 ieee754.write(buf, value, offset, littleEndian, 52, 8)
33819 return offset + 8
ab78acc6 33820}
3af2954a 33821
8b095871
IC
33822Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
33823 return writeDouble(this, value, offset, true, noAssert)
ab78acc6 33824}
3af2954a 33825
8b095871
IC
33826Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
33827 return writeDouble(this, value, offset, false, noAssert)
33828}
3af2954a 33829
8b095871
IC
33830// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
33831Buffer.prototype.copy = function copy (target, targetStart, start, end) {
33832 if (!start) start = 0
33833 if (!end && end !== 0) end = this.length
33834 if (targetStart >= target.length) targetStart = target.length
33835 if (!targetStart) targetStart = 0
33836 if (end > 0 && end < start) end = start
3af2954a 33837
8b095871
IC
33838 // Copy 0 bytes; we're done
33839 if (end === start) return 0
33840 if (target.length === 0 || this.length === 0) return 0
3af2954a 33841
8b095871
IC
33842 // Fatal error conditions
33843 if (targetStart < 0) {
33844 throw new RangeError('targetStart out of bounds')
3af2954a 33845 }
8b095871
IC
33846 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
33847 if (end < 0) throw new RangeError('sourceEnd out of bounds')
33848
33849 // Are we oob?
33850 if (end > this.length) end = this.length
33851 if (target.length - targetStart < end - start) {
33852 end = target.length - targetStart + start
3af2954a 33853 }
8b095871
IC
33854
33855 var len = end - start
33856 var i
33857
33858 if (this === target && start < targetStart && targetStart < end) {
33859 // descending copy from end
33860 for (i = len - 1; i >= 0; --i) {
33861 target[i + targetStart] = this[i + start]
3af2954a 33862 }
8b095871
IC
33863 } else if (len < 1000) {
33864 // ascending copy from start
33865 for (i = 0; i < len; ++i) {
33866 target[i + targetStart] = this[i + start]
33867 }
33868 } else {
33869 Uint8Array.prototype.set.call(
33870 target,
33871 this.subarray(start, start + len),
33872 targetStart
33873 )
3af2954a
IC
33874 }
33875
8b095871
IC
33876 return len
33877}
33878
33879// Usage:
33880// buffer.fill(number[, offset[, end]])
33881// buffer.fill(buffer[, offset[, end]])
33882// buffer.fill(string[, offset[, end]][, encoding])
33883Buffer.prototype.fill = function fill (val, start, end, encoding) {
33884 // Handle string cases:
33885 if (typeof val === 'string') {
33886 if (typeof start === 'string') {
33887 encoding = start
33888 start = 0
33889 end = this.length
33890 } else if (typeof end === 'string') {
33891 encoding = end
33892 end = this.length
33893 }
33894 if (val.length === 1) {
33895 var code = val.charCodeAt(0)
33896 if (code < 256) {
33897 val = code
3af2954a 33898 }
3af2954a 33899 }
8b095871
IC
33900 if (encoding !== undefined && typeof encoding !== 'string') {
33901 throw new TypeError('encoding must be a string')
33902 }
33903 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
33904 throw new TypeError('Unknown encoding: ' + encoding)
33905 }
33906 } else if (typeof val === 'number') {
33907 val = val & 255
ab78acc6 33908 }
3af2954a 33909
8b095871
IC
33910 // Invalid ranges are not set to a default, so can range check early.
33911 if (start < 0 || this.length < start || this.length < end) {
33912 throw new RangeError('Out of range index')
33913 }
3af2954a 33914
8b095871
IC
33915 if (end <= start) {
33916 return this
33917 }
3af2954a 33918
8b095871
IC
33919 start = start >>> 0
33920 end = end === undefined ? this.length : end >>> 0
3af2954a 33921
8b095871
IC
33922 if (!val) val = 0
33923
33924 var i
33925 if (typeof val === 'number') {
33926 for (i = start; i < end; ++i) {
33927 this[i] = val
33928 }
ab78acc6 33929 } else {
8b095871
IC
33930 var bytes = Buffer.isBuffer(val)
33931 ? val
33932 : new Buffer(val, encoding)
33933 var len = bytes.length
33934 for (i = 0; i < end - start; ++i) {
33935 this[i + start] = bytes[i % len]
ab78acc6
IC
33936 }
33937 }
3af2954a 33938
8b095871
IC
33939 return this
33940}
3af2954a 33941
8b095871
IC
33942// HELPER FUNCTIONS
33943// ================
33944
33945var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
33946
33947function base64clean (str) {
33948 // Node strips out invalid characters like \n and \t from the string, base64-js does not
33949 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
33950 // Node converts strings with length < 2 to ''
33951 if (str.length < 2) return ''
33952 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
33953 while (str.length % 4 !== 0) {
33954 str = str + '='
3af2954a 33955 }
8b095871 33956 return str
ab78acc6
IC
33957}
33958
8b095871
IC
33959function stringtrim (str) {
33960 if (str.trim) return str.trim()
33961 return str.replace(/^\s+|\s+$/g, '')
ab78acc6 33962}
3af2954a 33963
8b095871
IC
33964function toHex (n) {
33965 if (n < 16) return '0' + n.toString(16)
33966 return n.toString(16)
ab78acc6 33967}
3af2954a 33968
8b095871
IC
33969function utf8ToBytes (string, units) {
33970 units = units || Infinity
33971 var codePoint
33972 var length = string.length
33973 var leadSurrogate = null
33974 var bytes = []
3af2954a 33975
8b095871
IC
33976 for (var i = 0; i < length; ++i) {
33977 codePoint = string.charCodeAt(i)
3af2954a 33978
8b095871
IC
33979 // is surrogate component
33980 if (codePoint > 0xD7FF && codePoint < 0xE000) {
33981 // last char was a lead
33982 if (!leadSurrogate) {
33983 // no lead yet
33984 if (codePoint > 0xDBFF) {
33985 // unexpected trail
33986 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
33987 continue
33988 } else if (i + 1 === length) {
33989 // unpaired lead
33990 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
33991 continue
33992 }
3af2954a 33993
8b095871
IC
33994 // valid lead
33995 leadSurrogate = codePoint
33996
33997 continue
33998 }
33999
34000 // 2 leads in a row
34001 if (codePoint < 0xDC00) {
34002 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
34003 leadSurrogate = codePoint
34004 continue
34005 }
34006
34007 // valid surrogate pair
34008 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
34009 } else if (leadSurrogate) {
34010 // valid bmp char, but last char was a lead
34011 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
34012 }
34013
34014 leadSurrogate = null
34015
34016 // encode utf8
34017 if (codePoint < 0x80) {
34018 if ((units -= 1) < 0) break
34019 bytes.push(codePoint)
34020 } else if (codePoint < 0x800) {
34021 if ((units -= 2) < 0) break
34022 bytes.push(
34023 codePoint >> 0x6 | 0xC0,
34024 codePoint & 0x3F | 0x80
34025 )
34026 } else if (codePoint < 0x10000) {
34027 if ((units -= 3) < 0) break
34028 bytes.push(
34029 codePoint >> 0xC | 0xE0,
34030 codePoint >> 0x6 & 0x3F | 0x80,
34031 codePoint & 0x3F | 0x80
34032 )
34033 } else if (codePoint < 0x110000) {
34034 if ((units -= 4) < 0) break
34035 bytes.push(
34036 codePoint >> 0x12 | 0xF0,
34037 codePoint >> 0xC & 0x3F | 0x80,
34038 codePoint >> 0x6 & 0x3F | 0x80,
34039 codePoint & 0x3F | 0x80
34040 )
ab78acc6 34041 } else {
8b095871 34042 throw new Error('Invalid code point')
ab78acc6 34043 }
3af2954a
IC
34044 }
34045
8b095871
IC
34046 return bytes
34047}
3af2954a 34048
8b095871
IC
34049function asciiToBytes (str) {
34050 var byteArray = []
34051 for (var i = 0; i < str.length; ++i) {
34052 // Node's code seems to be doing this and not & 0x7F..
34053 byteArray.push(str.charCodeAt(i) & 0xFF)
ab78acc6 34054 }
8b095871
IC
34055 return byteArray
34056}
3af2954a 34057
8b095871
IC
34058function utf16leToBytes (str, units) {
34059 var c, hi, lo
34060 var byteArray = []
34061 for (var i = 0; i < str.length; ++i) {
34062 if ((units -= 2) < 0) break
3af2954a 34063
8b095871
IC
34064 c = str.charCodeAt(i)
34065 hi = c >> 8
34066 lo = c % 256
34067 byteArray.push(lo)
34068 byteArray.push(hi)
34069 }
ebd8d4e8 34070
8b095871
IC
34071 return byteArray
34072}
34073
34074function base64ToBytes (str) {
34075 return base64.toByteArray(base64clean(str))
34076}
34077
34078function blitBuffer (src, dst, offset, length) {
34079 for (var i = 0; i < length; ++i) {
34080 if ((i + offset >= dst.length) || (i >= src.length)) break
34081 dst[i + offset] = src[i]
34082 }
34083 return i
34084}
34085
34086function isnan (val) {
34087 return val !== val // eslint-disable-line no-self-compare
34088}
34089
34090},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
34091(function (Buffer){
34092// Copyright Joyent, Inc. and other Node contributors.
34093//
34094// Permission is hereby granted, free of charge, to any person obtaining a
34095// copy of this software and associated documentation files (the
34096// "Software"), to deal in the Software without restriction, including
34097// without limitation the rights to use, copy, modify, merge, publish,
34098// distribute, sublicense, and/or sell copies of the Software, and to permit
34099// persons to whom the Software is furnished to do so, subject to the
34100// following conditions:
34101//
34102// The above copyright notice and this permission notice shall be included
34103// in all copies or substantial portions of the Software.
34104//
34105// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
34106// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
34107// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
34108// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
34109// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
34110// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
34111// USE OR OTHER DEALINGS IN THE SOFTWARE.
34112
34113// NOTE: These type checking functions intentionally don't use `instanceof`
34114// because it is fragile and can be easily faked with `Object.create()`.
ebd8d4e8 34115
8b095871
IC
34116function isArray(arg) {
34117 if (Array.isArray) {
34118 return Array.isArray(arg);
34119 }
34120 return objectToString(arg) === '[object Array]';
34121}
34122exports.isArray = isArray;
ebd8d4e8 34123
8b095871
IC
34124function isBoolean(arg) {
34125 return typeof arg === 'boolean';
34126}
34127exports.isBoolean = isBoolean;
ebd8d4e8 34128
8b095871
IC
34129function isNull(arg) {
34130 return arg === null;
34131}
34132exports.isNull = isNull;
ebd8d4e8 34133
8b095871
IC
34134function isNullOrUndefined(arg) {
34135 return arg == null;
34136}
34137exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 34138
8b095871
IC
34139function isNumber(arg) {
34140 return typeof arg === 'number';
ab78acc6 34141}
8b095871 34142exports.isNumber = isNumber;
212b1b46 34143
8b095871
IC
34144function isString(arg) {
34145 return typeof arg === 'string';
ab78acc6 34146}
8b095871 34147exports.isString = isString;
212b1b46 34148
8b095871
IC
34149function isSymbol(arg) {
34150 return typeof arg === 'symbol';
ab78acc6 34151}
8b095871 34152exports.isSymbol = isSymbol;
ab78acc6 34153
8b095871
IC
34154function isUndefined(arg) {
34155 return arg === void 0;
34156}
34157exports.isUndefined = isUndefined;
ab78acc6 34158
8b095871
IC
34159function isRegExp(re) {
34160 return objectToString(re) === '[object RegExp]';
34161}
34162exports.isRegExp = isRegExp;
ab78acc6 34163
8b095871
IC
34164function isObject(arg) {
34165 return typeof arg === 'object' && arg !== null;
34166}
34167exports.isObject = isObject;
212b1b46 34168
8b095871
IC
34169function isDate(d) {
34170 return objectToString(d) === '[object Date]';
34171}
34172exports.isDate = isDate;
212b1b46 34173
8b095871
IC
34174function isError(e) {
34175 return (objectToString(e) === '[object Error]' || e instanceof Error);
34176}
34177exports.isError = isError;
212b1b46 34178
8b095871
IC
34179function isFunction(arg) {
34180 return typeof arg === 'function';
34181}
34182exports.isFunction = isFunction;
212b1b46 34183
8b095871
IC
34184function isPrimitive(arg) {
34185 return arg === null ||
34186 typeof arg === 'boolean' ||
34187 typeof arg === 'number' ||
34188 typeof arg === 'string' ||
34189 typeof arg === 'symbol' || // ES6 symbol
34190 typeof arg === 'undefined';
ab78acc6 34191}
8b095871 34192exports.isPrimitive = isPrimitive;
212b1b46 34193
8b095871 34194exports.isBuffer = Buffer.isBuffer;
ab78acc6 34195
8b095871
IC
34196function objectToString(o) {
34197 return Object.prototype.toString.call(o);
ab78acc6 34198}
212b1b46 34199
8b095871
IC
34200}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
34201},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
34202// Copyright Joyent, Inc. and other Node contributors.
34203//
34204// Permission is hereby granted, free of charge, to any person obtaining a
34205// copy of this software and associated documentation files (the
34206// "Software"), to deal in the Software without restriction, including
34207// without limitation the rights to use, copy, modify, merge, publish,
34208// distribute, sublicense, and/or sell copies of the Software, and to permit
34209// persons to whom the Software is furnished to do so, subject to the
34210// following conditions:
34211//
34212// The above copyright notice and this permission notice shall be included
34213// in all copies or substantial portions of the Software.
34214//
34215// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
34216// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
34217// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
34218// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
34219// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
34220// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
34221// USE OR OTHER DEALINGS IN THE SOFTWARE.
212b1b46 34222
8b095871
IC
34223function EventEmitter() {
34224 this._events = this._events || {};
34225 this._maxListeners = this._maxListeners || undefined;
ab78acc6 34226}
8b095871 34227module.exports = EventEmitter;
212b1b46 34228
8b095871
IC
34229// Backwards-compat with node 0.10.x
34230EventEmitter.EventEmitter = EventEmitter;
212b1b46 34231
8b095871
IC
34232EventEmitter.prototype._events = undefined;
34233EventEmitter.prototype._maxListeners = undefined;
212b1b46 34234
8b095871
IC
34235// By default EventEmitters will print a warning if more than 10 listeners are
34236// added to it. This is a useful default which helps finding memory leaks.
34237EventEmitter.defaultMaxListeners = 10;
212b1b46 34238
8b095871
IC
34239// Obviously not all Emitters should be limited to 10. This function allows
34240// that to be increased. Set to zero for unlimited.
34241EventEmitter.prototype.setMaxListeners = function(n) {
34242 if (!isNumber(n) || n < 0 || isNaN(n))
34243 throw TypeError('n must be a positive number');
34244 this._maxListeners = n;
34245 return this;
34246};
212b1b46 34247
8b095871
IC
34248EventEmitter.prototype.emit = function(type) {
34249 var er, handler, len, args, i, listeners;
212b1b46 34250
8b095871
IC
34251 if (!this._events)
34252 this._events = {};
212b1b46 34253
8b095871
IC
34254 // If there is no 'error' event listener then throw.
34255 if (type === 'error') {
34256 if (!this._events.error ||
34257 (isObject(this._events.error) && !this._events.error.length)) {
34258 er = arguments[1];
34259 if (er instanceof Error) {
34260 throw er; // Unhandled 'error' event
34261 } else {
34262 // At least give some kind of context to the user
34263 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
34264 err.context = er;
34265 throw err;
34266 }
34267 }
ab78acc6 34268 }
212b1b46 34269
8b095871 34270 handler = this._events[type];
212b1b46 34271
8b095871
IC
34272 if (isUndefined(handler))
34273 return false;
34274
34275 if (isFunction(handler)) {
34276 switch (arguments.length) {
34277 // fast cases
34278 case 1:
34279 handler.call(this);
34280 break;
34281 case 2:
34282 handler.call(this, arguments[1]);
34283 break;
34284 case 3:
34285 handler.call(this, arguments[1], arguments[2]);
34286 break;
34287 // slower
34288 default:
34289 args = Array.prototype.slice.call(arguments, 1);
34290 handler.apply(this, args);
3af2954a 34291 }
8b095871
IC
34292 } else if (isObject(handler)) {
34293 args = Array.prototype.slice.call(arguments, 1);
34294 listeners = handler.slice();
34295 len = listeners.length;
34296 for (i = 0; i < len; i++)
34297 listeners[i].apply(this, args);
3af2954a 34298 }
212b1b46 34299
8b095871
IC
34300 return true;
34301};
ebd8d4e8 34302
8b095871
IC
34303EventEmitter.prototype.addListener = function(type, listener) {
34304 var m;
ebd8d4e8 34305
8b095871
IC
34306 if (!isFunction(listener))
34307 throw TypeError('listener must be a function');
ebd8d4e8 34308
8b095871
IC
34309 if (!this._events)
34310 this._events = {};
3af2954a 34311
8b095871
IC
34312 // To avoid recursion in the case that type === "newListener"! Before
34313 // adding it to the listeners, first emit "newListener".
34314 if (this._events.newListener)
34315 this.emit('newListener', type,
34316 isFunction(listener.listener) ?
34317 listener.listener : listener);
3af2954a 34318
8b095871
IC
34319 if (!this._events[type])
34320 // Optimize the case of one listener. Don't need the extra array object.
34321 this._events[type] = listener;
34322 else if (isObject(this._events[type]))
34323 // If we've already got an array, just append.
34324 this._events[type].push(listener);
34325 else
34326 // Adding the second element, need to change to array.
34327 this._events[type] = [this._events[type], listener];
3af2954a 34328
8b095871
IC
34329 // Check for listener leak
34330 if (isObject(this._events[type]) && !this._events[type].warned) {
34331 if (!isUndefined(this._maxListeners)) {
34332 m = this._maxListeners;
34333 } else {
34334 m = EventEmitter.defaultMaxListeners;
34335 }
3af2954a 34336
8b095871
IC
34337 if (m && m > 0 && this._events[type].length > m) {
34338 this._events[type].warned = true;
34339 console.error('(node) warning: possible EventEmitter memory ' +
34340 'leak detected. %d listeners added. ' +
34341 'Use emitter.setMaxListeners() to increase limit.',
34342 this._events[type].length);
34343 if (typeof console.trace === 'function') {
34344 // not supported in IE 10
34345 console.trace();
34346 }
34347 }
3af2954a
IC
34348 }
34349
8b095871
IC
34350 return this;
34351};
3af2954a 34352
8b095871 34353EventEmitter.prototype.on = EventEmitter.prototype.addListener;
3af2954a 34354
8b095871
IC
34355EventEmitter.prototype.once = function(type, listener) {
34356 if (!isFunction(listener))
34357 throw TypeError('listener must be a function');
3af2954a 34358
8b095871 34359 var fired = false;
ebd8d4e8 34360
8b095871
IC
34361 function g() {
34362 this.removeListener(type, g);
3af2954a 34363
8b095871
IC
34364 if (!fired) {
34365 fired = true;
34366 listener.apply(this, arguments);
34367 }
34368 }
3af2954a 34369
8b095871
IC
34370 g.listener = listener;
34371 this.on(type, g);
ebd8d4e8 34372
8b095871
IC
34373 return this;
34374};
ebd8d4e8 34375
8b095871
IC
34376// emits a 'removeListener' event iff the listener was removed
34377EventEmitter.prototype.removeListener = function(type, listener) {
34378 var list, position, length, i;
ebd8d4e8 34379
8b095871
IC
34380 if (!isFunction(listener))
34381 throw TypeError('listener must be a function');
ebd8d4e8 34382
8b095871
IC
34383 if (!this._events || !this._events[type])
34384 return this;
ab78acc6 34385
8b095871
IC
34386 list = this._events[type];
34387 length = list.length;
34388 position = -1;
ebd8d4e8 34389
8b095871
IC
34390 if (list === listener ||
34391 (isFunction(list.listener) && list.listener === listener)) {
34392 delete this._events[type];
34393 if (this._events.removeListener)
34394 this.emit('removeListener', type, listener);
ebd8d4e8 34395
8b095871
IC
34396 } else if (isObject(list)) {
34397 for (i = length; i-- > 0;) {
34398 if (list[i] === listener ||
34399 (list[i].listener && list[i].listener === listener)) {
34400 position = i;
34401 break;
34402 }
34403 }
34404
34405 if (position < 0)
34406 return this;
34407
34408 if (list.length === 1) {
34409 list.length = 0;
34410 delete this._events[type];
34411 } else {
34412 list.splice(position, 1);
34413 }
34414
34415 if (this._events.removeListener)
34416 this.emit('removeListener', type, listener);
ab78acc6 34417 }
ebd8d4e8 34418
8b095871
IC
34419 return this;
34420};
ebd8d4e8 34421
8b095871
IC
34422EventEmitter.prototype.removeAllListeners = function(type) {
34423 var key, listeners;
ebd8d4e8 34424
8b095871
IC
34425 if (!this._events)
34426 return this;
ab78acc6 34427
8b095871
IC
34428 // not listening for removeListener, no need to emit
34429 if (!this._events.removeListener) {
34430 if (arguments.length === 0)
34431 this._events = {};
34432 else if (this._events[type])
34433 delete this._events[type];
34434 return this;
34435 }
ab78acc6 34436
8b095871
IC
34437 // emit removeListener for all listeners on all events
34438 if (arguments.length === 0) {
34439 for (key in this._events) {
34440 if (key === 'removeListener') continue;
34441 this.removeAllListeners(key);
34442 }
34443 this.removeAllListeners('removeListener');
34444 this._events = {};
34445 return this;
34446 }
ebd8d4e8 34447
8b095871 34448 listeners = this._events[type];
ebd8d4e8 34449
8b095871
IC
34450 if (isFunction(listeners)) {
34451 this.removeListener(type, listeners);
34452 } else if (listeners) {
34453 // LIFO order
34454 while (listeners.length)
34455 this.removeListener(type, listeners[listeners.length - 1]);
34456 }
34457 delete this._events[type];
ebd8d4e8 34458
8b095871
IC
34459 return this;
34460};
ebd8d4e8 34461
8b095871
IC
34462EventEmitter.prototype.listeners = function(type) {
34463 var ret;
34464 if (!this._events || !this._events[type])
34465 ret = [];
34466 else if (isFunction(this._events[type]))
34467 ret = [this._events[type]];
34468 else
34469 ret = this._events[type].slice();
34470 return ret;
34471};
ebd8d4e8 34472
8b095871
IC
34473EventEmitter.prototype.listenerCount = function(type) {
34474 if (this._events) {
34475 var evlistener = this._events[type];
ebd8d4e8 34476
8b095871
IC
34477 if (isFunction(evlistener))
34478 return 1;
34479 else if (evlistener)
34480 return evlistener.length;
34481 }
34482 return 0;
34483};
34484
34485EventEmitter.listenerCount = function(emitter, type) {
34486 return emitter.listenerCount(type);
34487};
34488
34489function isFunction(arg) {
34490 return typeof arg === 'function';
ebd8d4e8
IC
34491}
34492
8b095871
IC
34493function isNumber(arg) {
34494 return typeof arg === 'number';
ebd8d4e8
IC
34495}
34496
8b095871
IC
34497function isObject(arg) {
34498 return typeof arg === 'object' && arg !== null;
ebd8d4e8
IC
34499}
34500
8b095871
IC
34501function isUndefined(arg) {
34502 return arg === void 0;
ebd8d4e8
IC
34503}
34504
8b095871
IC
34505},{}],8:[function(require,module,exports){
34506exports.read = function (buffer, offset, isLE, mLen, nBytes) {
34507 var e, m
34508 var eLen = nBytes * 8 - mLen - 1
34509 var eMax = (1 << eLen) - 1
34510 var eBias = eMax >> 1
34511 var nBits = -7
34512 var i = isLE ? (nBytes - 1) : 0
34513 var d = isLE ? -1 : 1
34514 var s = buffer[offset + i]
ebd8d4e8 34515
8b095871 34516 i += d
ebd8d4e8 34517
8b095871
IC
34518 e = s & ((1 << (-nBits)) - 1)
34519 s >>= (-nBits)
34520 nBits += eLen
34521 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 34522
8b095871
IC
34523 m = e & ((1 << (-nBits)) - 1)
34524 e >>= (-nBits)
34525 nBits += mLen
34526 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 34527
8b095871
IC
34528 if (e === 0) {
34529 e = 1 - eBias
34530 } else if (e === eMax) {
34531 return m ? NaN : ((s ? -1 : 1) * Infinity)
34532 } else {
34533 m = m + Math.pow(2, mLen)
34534 e = e - eBias
ab78acc6 34535 }
8b095871 34536 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
34537}
34538
8b095871
IC
34539exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
34540 var e, m, c
34541 var eLen = nBytes * 8 - mLen - 1
34542 var eMax = (1 << eLen) - 1
34543 var eBias = eMax >> 1
34544 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
34545 var i = isLE ? 0 : (nBytes - 1)
34546 var d = isLE ? 1 : -1
34547 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 34548
8b095871 34549 value = Math.abs(value)
ebd8d4e8 34550
8b095871
IC
34551 if (isNaN(value) || value === Infinity) {
34552 m = isNaN(value) ? 1 : 0
34553 e = eMax
ab78acc6 34554 } else {
8b095871
IC
34555 e = Math.floor(Math.log(value) / Math.LN2)
34556 if (value * (c = Math.pow(2, -e)) < 1) {
34557 e--
34558 c *= 2
34559 }
34560 if (e + eBias >= 1) {
34561 value += rt / c
34562 } else {
34563 value += rt * Math.pow(2, 1 - eBias)
34564 }
34565 if (value * c >= 2) {
34566 e++
34567 c /= 2
34568 }
ebd8d4e8 34569
8b095871
IC
34570 if (e + eBias >= eMax) {
34571 m = 0
34572 e = eMax
34573 } else if (e + eBias >= 1) {
34574 m = (value * c - 1) * Math.pow(2, mLen)
34575 e = e + eBias
34576 } else {
34577 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
34578 e = 0
34579 }
ebd8d4e8 34580 }
ebd8d4e8 34581
8b095871 34582 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 34583
8b095871
IC
34584 e = (e << mLen) | m
34585 eLen += mLen
34586 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 34587
8b095871 34588 buffer[offset + i - d] |= s * 128
ab78acc6
IC
34589}
34590
8b095871
IC
34591},{}],9:[function(require,module,exports){
34592if (typeof Object.create === 'function') {
34593 // implementation from standard node.js 'util' module
34594 module.exports = function inherits(ctor, superCtor) {
34595 ctor.super_ = superCtor
34596 ctor.prototype = Object.create(superCtor.prototype, {
34597 constructor: {
34598 value: ctor,
34599 enumerable: false,
34600 writable: true,
34601 configurable: true
34602 }
34603 });
34604 };
34605} else {
34606 // old school shim for old browsers
34607 module.exports = function inherits(ctor, superCtor) {
34608 ctor.super_ = superCtor
34609 var TempCtor = function () {}
34610 TempCtor.prototype = superCtor.prototype
34611 ctor.prototype = new TempCtor()
34612 ctor.prototype.constructor = ctor
ebd8d4e8 34613 }
8b095871 34614}
ab78acc6 34615
8b095871
IC
34616},{}],10:[function(require,module,exports){
34617/*!
34618 * Determine if an object is a Buffer
34619 *
34620 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
34621 * @license MIT
34622 */
ebd8d4e8 34623
8b095871
IC
34624// The _isBuffer check is for Safari 5-7 support, because it's missing
34625// Object.prototype.constructor. Remove this eventually
34626module.exports = function (obj) {
34627 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
ebd8d4e8
IC
34628}
34629
8b095871
IC
34630function isBuffer (obj) {
34631 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
34632}
ebd8d4e8 34633
8b095871
IC
34634// For Node v0.10 support. Remove this eventually.
34635function isSlowBuffer (obj) {
34636 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
34637}
ebd8d4e8 34638
8b095871
IC
34639},{}],11:[function(require,module,exports){
34640var toString = {}.toString;
ab78acc6 34641
8b095871
IC
34642module.exports = Array.isArray || function (arr) {
34643 return toString.call(arr) == '[object Array]';
34644};
ebd8d4e8 34645
8b095871
IC
34646},{}],12:[function(require,module,exports){
34647(function (process){
34648'use strict';
ebd8d4e8 34649
8b095871
IC
34650if (!process.version ||
34651 process.version.indexOf('v0.') === 0 ||
34652 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
34653 module.exports = nextTick;
34654} else {
34655 module.exports = process.nextTick;
34656}
34657
34658function nextTick(fn, arg1, arg2, arg3) {
34659 if (typeof fn !== 'function') {
34660 throw new TypeError('"callback" argument must be a function');
34661 }
34662 var len = arguments.length;
34663 var args, i;
34664 switch (len) {
34665 case 0:
34666 case 1:
34667 return process.nextTick(fn);
34668 case 2:
34669 return process.nextTick(function afterTickOne() {
34670 fn.call(null, arg1);
34671 });
34672 case 3:
34673 return process.nextTick(function afterTickTwo() {
34674 fn.call(null, arg1, arg2);
34675 });
34676 case 4:
34677 return process.nextTick(function afterTickThree() {
34678 fn.call(null, arg1, arg2, arg3);
34679 });
34680 default:
34681 args = new Array(len - 1);
34682 i = 0;
34683 while (i < args.length) {
34684 args[i++] = arguments[i];
34685 }
34686 return process.nextTick(function afterTick() {
34687 fn.apply(null, args);
34688 });
ab78acc6 34689 }
ebd8d4e8
IC
34690}
34691
8b095871
IC
34692}).call(this,require('_process'))
34693},{"_process":13}],13:[function(require,module,exports){
34694// shim for using process in browser
34695var process = module.exports = {};
ebd8d4e8 34696
8b095871
IC
34697// cached from whatever global is present so that test runners that stub it
34698// don't break things. But we need to wrap it in a try catch in case it is
34699// wrapped in strict mode code which doesn't define any globals. It's inside a
34700// function because try/catches deoptimize in certain engines.
ab78acc6 34701
8b095871
IC
34702var cachedSetTimeout;
34703var cachedClearTimeout;
ebd8d4e8 34704
8b095871
IC
34705function defaultSetTimout() {
34706 throw new Error('setTimeout has not been defined');
ab78acc6 34707}
8b095871
IC
34708function defaultClearTimeout () {
34709 throw new Error('clearTimeout has not been defined');
ab78acc6 34710}
8b095871
IC
34711(function () {
34712 try {
34713 if (typeof setTimeout === 'function') {
34714 cachedSetTimeout = setTimeout;
34715 } else {
34716 cachedSetTimeout = defaultSetTimout;
34717 }
34718 } catch (e) {
34719 cachedSetTimeout = defaultSetTimout;
34720 }
34721 try {
34722 if (typeof clearTimeout === 'function') {
34723 cachedClearTimeout = clearTimeout;
34724 } else {
34725 cachedClearTimeout = defaultClearTimeout;
34726 }
34727 } catch (e) {
34728 cachedClearTimeout = defaultClearTimeout;
34729 }
34730} ())
34731function runTimeout(fun) {
34732 if (cachedSetTimeout === setTimeout) {
34733 //normal enviroments in sane situations
34734 return setTimeout(fun, 0);
34735 }
34736 // if setTimeout wasn't available but was latter defined
34737 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
34738 cachedSetTimeout = setTimeout;
34739 return setTimeout(fun, 0);
34740 }
34741 try {
34742 // when when somebody has screwed with setTimeout but no I.E. maddness
34743 return cachedSetTimeout(fun, 0);
34744 } catch(e){
34745 try {
34746 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
34747 return cachedSetTimeout.call(null, fun, 0);
34748 } catch(e){
34749 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
34750 return cachedSetTimeout.call(this, fun, 0);
34751 }
34752 }
34753
ebd8d4e8 34754
ab78acc6 34755}
8b095871
IC
34756function runClearTimeout(marker) {
34757 if (cachedClearTimeout === clearTimeout) {
34758 //normal enviroments in sane situations
34759 return clearTimeout(marker);
34760 }
34761 // if clearTimeout wasn't available but was latter defined
34762 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
34763 cachedClearTimeout = clearTimeout;
34764 return clearTimeout(marker);
34765 }
34766 try {
34767 // when when somebody has screwed with setTimeout but no I.E. maddness
34768 return cachedClearTimeout(marker);
34769 } catch (e){
34770 try {
34771 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
34772 return cachedClearTimeout.call(null, marker);
34773 } catch (e){
34774 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
34775 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
34776 return cachedClearTimeout.call(this, marker);
34777 }
34778 }
34779
34780
ebd8d4e8 34781
ab78acc6 34782}
8b095871
IC
34783var queue = [];
34784var draining = false;
34785var currentQueue;
34786var queueIndex = -1;
ebd8d4e8 34787
8b095871
IC
34788function cleanUpNextTick() {
34789 if (!draining || !currentQueue) {
34790 return;
34791 }
34792 draining = false;
34793 if (currentQueue.length) {
34794 queue = currentQueue.concat(queue);
34795 } else {
34796 queueIndex = -1;
34797 }
34798 if (queue.length) {
34799 drainQueue();
34800 }
ebd8d4e8
IC
34801}
34802
8b095871
IC
34803function drainQueue() {
34804 if (draining) {
34805 return;
34806 }
34807 var timeout = runTimeout(cleanUpNextTick);
34808 draining = true;
34809
34810 var len = queue.length;
34811 while(len) {
34812 currentQueue = queue;
34813 queue = [];
34814 while (++queueIndex < len) {
34815 if (currentQueue) {
34816 currentQueue[queueIndex].run();
34817 }
34818 }
34819 queueIndex = -1;
34820 len = queue.length;
34821 }
34822 currentQueue = null;
34823 draining = false;
34824 runClearTimeout(timeout);
ebd8d4e8
IC
34825}
34826
8b095871
IC
34827process.nextTick = function (fun) {
34828 var args = new Array(arguments.length - 1);
34829 if (arguments.length > 1) {
34830 for (var i = 1; i < arguments.length; i++) {
34831 args[i - 1] = arguments[i];
34832 }
34833 }
34834 queue.push(new Item(fun, args));
34835 if (queue.length === 1 && !draining) {
34836 runTimeout(drainQueue);
34837 }
34838};
34839
34840// v8 likes predictible objects
34841function Item(fun, array) {
34842 this.fun = fun;
34843 this.array = array;
ab78acc6 34844}
8b095871
IC
34845Item.prototype.run = function () {
34846 this.fun.apply(null, this.array);
34847};
34848process.title = 'browser';
34849process.browser = true;
34850process.env = {};
34851process.argv = [];
34852process.version = ''; // empty string to avoid regexp issues
34853process.versions = {};
ebd8d4e8 34854
8b095871
IC
34855function noop() {}
34856
34857process.on = noop;
34858process.addListener = noop;
34859process.once = noop;
34860process.off = noop;
34861process.removeListener = noop;
34862process.removeAllListeners = noop;
34863process.emit = noop;
34864
34865process.binding = function (name) {
34866 throw new Error('process.binding is not supported');
34867};
34868
34869process.cwd = function () { return '/' };
34870process.chdir = function (dir) {
34871 throw new Error('process.chdir is not supported');
34872};
34873process.umask = function() { return 0; };
34874
34875},{}],14:[function(require,module,exports){
34876module.exports = require("./lib/_stream_duplex.js")
34877
34878},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
34879// a duplex stream is just a stream that is both readable and writable.
34880// Since JS doesn't have multiple prototypal inheritance, this class
34881// prototypally inherits from Readable, and then parasitically from
34882// Writable.
34883
34884'use strict';
34885
34886/*<replacement>*/
ab78acc6 34887
8b095871
IC
34888var objectKeys = Object.keys || function (obj) {
34889 var keys = [];
34890 for (var key in obj) {
34891 keys.push(key);
34892 }return keys;
34893};
34894/*</replacement>*/
ebd8d4e8 34895
8b095871 34896module.exports = Duplex;
ebd8d4e8 34897
8b095871
IC
34898/*<replacement>*/
34899var processNextTick = require('process-nextick-args');
34900/*</replacement>*/
ebd8d4e8 34901
8b095871
IC
34902/*<replacement>*/
34903var util = require('core-util-is');
34904util.inherits = require('inherits');
34905/*</replacement>*/
ebd8d4e8 34906
8b095871
IC
34907var Readable = require('./_stream_readable');
34908var Writable = require('./_stream_writable');
ebd8d4e8 34909
8b095871
IC
34910util.inherits(Duplex, Readable);
34911
34912var keys = objectKeys(Writable.prototype);
34913for (var v = 0; v < keys.length; v++) {
34914 var method = keys[v];
34915 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
ab78acc6 34916}
ebd8d4e8 34917
8b095871
IC
34918function Duplex(options) {
34919 if (!(this instanceof Duplex)) return new Duplex(options);
ebd8d4e8 34920
8b095871
IC
34921 Readable.call(this, options);
34922 Writable.call(this, options);
ebd8d4e8 34923
8b095871 34924 if (options && options.readable === false) this.readable = false;
ebd8d4e8 34925
8b095871 34926 if (options && options.writable === false) this.writable = false;
ebd8d4e8 34927
8b095871
IC
34928 this.allowHalfOpen = true;
34929 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
ebd8d4e8 34930
8b095871 34931 this.once('end', onend);
ebd8d4e8
IC
34932}
34933
8b095871
IC
34934// the no-half-open enforcer
34935function onend() {
34936 // if we allow half-open state, or if the writable side ended,
34937 // then we're ok.
34938 if (this.allowHalfOpen || this._writableState.ended) return;
34939
34940 // no more data can be written.
34941 // But allow more writes to happen in this tick.
34942 processNextTick(onEndNT, this);
ebd8d4e8
IC
34943}
34944
8b095871
IC
34945function onEndNT(self) {
34946 self.end();
34947}
ebd8d4e8 34948
8b095871
IC
34949function forEach(xs, f) {
34950 for (var i = 0, l = xs.length; i < l; i++) {
34951 f(xs[i], i);
34952 }
34953}
34954},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
34955// a passthrough stream.
34956// basically just the most minimal sort of Transform stream.
34957// Every written chunk gets output as-is.
ebd8d4e8 34958
8b095871 34959'use strict';
ebd8d4e8 34960
8b095871 34961module.exports = PassThrough;
ebd8d4e8 34962
8b095871 34963var Transform = require('./_stream_transform');
ebd8d4e8 34964
8b095871
IC
34965/*<replacement>*/
34966var util = require('core-util-is');
34967util.inherits = require('inherits');
34968/*</replacement>*/
ebd8d4e8 34969
8b095871 34970util.inherits(PassThrough, Transform);
ebd8d4e8 34971
8b095871
IC
34972function PassThrough(options) {
34973 if (!(this instanceof PassThrough)) return new PassThrough(options);
ebd8d4e8 34974
8b095871 34975 Transform.call(this, options);
ebd8d4e8
IC
34976}
34977
8b095871
IC
34978PassThrough.prototype._transform = function (chunk, encoding, cb) {
34979 cb(null, chunk);
34980};
34981},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
34982(function (process){
34983'use strict';
ebd8d4e8 34984
8b095871 34985module.exports = Readable;
ebd8d4e8 34986
8b095871
IC
34987/*<replacement>*/
34988var processNextTick = require('process-nextick-args');
34989/*</replacement>*/
ebd8d4e8 34990
8b095871
IC
34991/*<replacement>*/
34992var isArray = require('isarray');
34993/*</replacement>*/
ebd8d4e8 34994
8b095871
IC
34995/*<replacement>*/
34996var Duplex;
34997/*</replacement>*/
ebd8d4e8 34998
8b095871 34999Readable.ReadableState = ReadableState;
ebd8d4e8 35000
8b095871
IC
35001/*<replacement>*/
35002var EE = require('events').EventEmitter;
ebd8d4e8 35003
8b095871
IC
35004var EElistenerCount = function (emitter, type) {
35005 return emitter.listeners(type).length;
35006};
35007/*</replacement>*/
ebd8d4e8 35008
8b095871
IC
35009/*<replacement>*/
35010var Stream;
35011(function () {
35012 try {
35013 Stream = require('st' + 'ream');
35014 } catch (_) {} finally {
35015 if (!Stream) Stream = require('events').EventEmitter;
35016 }
35017})();
35018/*</replacement>*/
ebd8d4e8 35019
8b095871
IC
35020var Buffer = require('buffer').Buffer;
35021/*<replacement>*/
35022var bufferShim = require('buffer-shims');
35023/*</replacement>*/
ab78acc6 35024
8b095871
IC
35025/*<replacement>*/
35026var util = require('core-util-is');
35027util.inherits = require('inherits');
35028/*</replacement>*/
ab78acc6 35029
8b095871
IC
35030/*<replacement>*/
35031var debugUtil = require('util');
35032var debug = void 0;
35033if (debugUtil && debugUtil.debuglog) {
35034 debug = debugUtil.debuglog('stream');
35035} else {
35036 debug = function () {};
35037}
35038/*</replacement>*/
ab78acc6 35039
8b095871
IC
35040var BufferList = require('./internal/streams/BufferList');
35041var StringDecoder;
ab78acc6 35042
8b095871 35043util.inherits(Readable, Stream);
ab78acc6 35044
8b095871
IC
35045function prependListener(emitter, event, fn) {
35046 // Sadly this is not cacheable as some libraries bundle their own
35047 // event emitter implementation with them.
35048 if (typeof emitter.prependListener === 'function') {
35049 return emitter.prependListener(event, fn);
35050 } else {
35051 // This is a hack to make sure that our error handler is attached before any
35052 // userland ones. NEVER DO THIS. This is here only because this code needs
35053 // to continue to work with older versions of Node.js that do not include
35054 // the prependListener() method. The goal is to eventually remove this hack.
35055 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
ebd8d4e8 35056 }
ebd8d4e8
IC
35057}
35058
8b095871
IC
35059function ReadableState(options, stream) {
35060 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 35061
8b095871 35062 options = options || {};
ebd8d4e8 35063
8b095871
IC
35064 // object stream flag. Used to make read(n) ignore n and to
35065 // make all the buffer merging and length checks go away
35066 this.objectMode = !!options.objectMode;
ebd8d4e8 35067
8b095871 35068 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
ebd8d4e8 35069
8b095871
IC
35070 // the point at which it stops calling _read() to fill the buffer
35071 // Note: 0 is a valid value, means "don't call _read preemptively ever"
35072 var hwm = options.highWaterMark;
35073 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
35074 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6 35075
8b095871
IC
35076 // cast to ints.
35077 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 35078
8b095871
IC
35079 // A linked list is used to store data chunks instead of an array because the
35080 // linked list can remove elements from the beginning faster than
35081 // array.shift()
35082 this.buffer = new BufferList();
35083 this.length = 0;
35084 this.pipes = null;
35085 this.pipesCount = 0;
35086 this.flowing = null;
35087 this.ended = false;
35088 this.endEmitted = false;
35089 this.reading = false;
ab78acc6 35090
8b095871
IC
35091 // a flag to be able to tell if the onwrite cb is called immediately,
35092 // or on a later tick. We set this to true at first, because any
35093 // actions that shouldn't happen until "later" should generally also
35094 // not happen before the first write call.
35095 this.sync = true;
ebd8d4e8 35096
8b095871
IC
35097 // whenever we return null, then we set a flag to say
35098 // that we're awaiting a 'readable' event emission.
35099 this.needReadable = false;
35100 this.emittedReadable = false;
35101 this.readableListening = false;
35102 this.resumeScheduled = false;
ebd8d4e8 35103
8b095871
IC
35104 // Crypto is kind of old and crusty. Historically, its default string
35105 // encoding is 'binary' so we have to make this configurable.
35106 // Everything else in the universe uses 'utf8', though.
35107 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 35108
8b095871
IC
35109 // when piping, we only care about 'readable' events that happen
35110 // after read()ing all the bytes and not getting any pushback.
35111 this.ranOut = false;
ebd8d4e8 35112
8b095871
IC
35113 // the number of writers that are awaiting a drain event in .pipe()s
35114 this.awaitDrain = 0;
ebd8d4e8 35115
8b095871
IC
35116 // if true, a maybeReadMore has been scheduled
35117 this.readingMore = false;
ebd8d4e8 35118
8b095871
IC
35119 this.decoder = null;
35120 this.encoding = null;
35121 if (options.encoding) {
35122 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
35123 this.decoder = new StringDecoder(options.encoding);
35124 this.encoding = options.encoding;
35125 }
35126}
ebd8d4e8 35127
8b095871
IC
35128function Readable(options) {
35129 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 35130
8b095871 35131 if (!(this instanceof Readable)) return new Readable(options);
ebd8d4e8 35132
8b095871 35133 this._readableState = new ReadableState(options, this);
ebd8d4e8 35134
8b095871
IC
35135 // legacy
35136 this.readable = true;
ebd8d4e8 35137
8b095871 35138 if (options && typeof options.read === 'function') this._read = options.read;
ebd8d4e8 35139
8b095871
IC
35140 Stream.call(this);
35141}
ebd8d4e8 35142
8b095871
IC
35143// Manually shove something into the read() buffer.
35144// This returns true if the highWaterMark has not been hit yet,
35145// similar to how Writable.write() returns true if you should
35146// write() some more.
35147Readable.prototype.push = function (chunk, encoding) {
35148 var state = this._readableState;
ebd8d4e8 35149
8b095871
IC
35150 if (!state.objectMode && typeof chunk === 'string') {
35151 encoding = encoding || state.defaultEncoding;
35152 if (encoding !== state.encoding) {
35153 chunk = bufferShim.from(chunk, encoding);
35154 encoding = '';
35155 }
35156 }
ebd8d4e8 35157
8b095871
IC
35158 return readableAddChunk(this, state, chunk, encoding, false);
35159};
ebd8d4e8 35160
8b095871
IC
35161// Unshift should *always* be something directly out of read()
35162Readable.prototype.unshift = function (chunk) {
35163 var state = this._readableState;
35164 return readableAddChunk(this, state, chunk, '', true);
35165};
ebd8d4e8 35166
8b095871
IC
35167Readable.prototype.isPaused = function () {
35168 return this._readableState.flowing === false;
35169};
35170
35171function readableAddChunk(stream, state, chunk, encoding, addToFront) {
35172 var er = chunkInvalid(state, chunk);
35173 if (er) {
35174 stream.emit('error', er);
35175 } else if (chunk === null) {
35176 state.reading = false;
35177 onEofChunk(stream, state);
35178 } else if (state.objectMode || chunk && chunk.length > 0) {
35179 if (state.ended && !addToFront) {
35180 var e = new Error('stream.push() after EOF');
35181 stream.emit('error', e);
35182 } else if (state.endEmitted && addToFront) {
35183 var _e = new Error('stream.unshift() after end event');
35184 stream.emit('error', _e);
35185 } else {
35186 var skipAdd;
35187 if (state.decoder && !addToFront && !encoding) {
35188 chunk = state.decoder.write(chunk);
35189 skipAdd = !state.objectMode && chunk.length === 0;
35190 }
ebd8d4e8 35191
8b095871 35192 if (!addToFront) state.reading = false;
ebd8d4e8 35193
8b095871
IC
35194 // Don't add to the buffer if we've decoded to an empty string chunk and
35195 // we're not in object mode
35196 if (!skipAdd) {
35197 // if we want the data now, just emit it.
35198 if (state.flowing && state.length === 0 && !state.sync) {
35199 stream.emit('data', chunk);
35200 stream.read(0);
35201 } else {
35202 // update the buffer info.
35203 state.length += state.objectMode ? 1 : chunk.length;
35204 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
ebd8d4e8 35205
8b095871
IC
35206 if (state.needReadable) emitReadable(stream);
35207 }
35208 }
ab78acc6 35209
8b095871
IC
35210 maybeReadMore(stream, state);
35211 }
35212 } else if (!addToFront) {
35213 state.reading = false;
35214 }
ab78acc6 35215
8b095871
IC
35216 return needMoreData(state);
35217}
ab78acc6 35218
8b095871
IC
35219// if it's past the high water mark, we can push in some more.
35220// Also, if we have no data yet, we can stand some
35221// more bytes. This is to work around cases where hwm=0,
35222// such as the repl. Also, if the push() triggered a
35223// readable event, and the user called read(largeNumber) such that
35224// needReadable was set, then we ought to push more, so that another
35225// 'readable' event will be triggered.
35226function needMoreData(state) {
35227 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
35228}
ebd8d4e8 35229
8b095871
IC
35230// backwards compatibility.
35231Readable.prototype.setEncoding = function (enc) {
35232 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
35233 this._readableState.decoder = new StringDecoder(enc);
35234 this._readableState.encoding = enc;
35235 return this;
35236};
35237
35238// Don't raise the hwm > 8MB
35239var MAX_HWM = 0x800000;
35240function computeNewHighWaterMark(n) {
35241 if (n >= MAX_HWM) {
35242 n = MAX_HWM;
ab78acc6 35243 } else {
8b095871
IC
35244 // Get the next highest power of 2 to prevent increasing hwm excessively in
35245 // tiny amounts
35246 n--;
35247 n |= n >>> 1;
35248 n |= n >>> 2;
35249 n |= n >>> 4;
35250 n |= n >>> 8;
35251 n |= n >>> 16;
35252 n++;
ebd8d4e8 35253 }
8b095871 35254 return n;
ebd8d4e8
IC
35255}
35256
8b095871
IC
35257// This function is designed to be inlinable, so please take care when making
35258// changes to the function body.
35259function howMuchToRead(n, state) {
35260 if (n <= 0 || state.length === 0 && state.ended) return 0;
35261 if (state.objectMode) return 1;
35262 if (n !== n) {
35263 // Only flow one buffer at a time
35264 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
35265 }
35266 // If we're asking for more than the current hwm, then raise the hwm.
35267 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
35268 if (n <= state.length) return n;
35269 // Don't have enough
35270 if (!state.ended) {
35271 state.needReadable = true;
35272 return 0;
35273 }
35274 return state.length;
35275}
ebd8d4e8 35276
8b095871
IC
35277// you can override either this method, or the async _read(n) below.
35278Readable.prototype.read = function (n) {
35279 debug('read', n);
35280 n = parseInt(n, 10);
35281 var state = this._readableState;
35282 var nOrig = n;
ebd8d4e8 35283
8b095871 35284 if (n !== 0) state.emittedReadable = false;
ab78acc6 35285
8b095871
IC
35286 // if we're doing read(0) to trigger a readable event, but we
35287 // already have a bunch of data in the buffer, then just trigger
35288 // the 'readable' event and move on.
35289 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
35290 debug('read: emitReadable', state.length, state.ended);
35291 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
35292 return null;
ebd8d4e8 35293 }
ebd8d4e8 35294
8b095871 35295 n = howMuchToRead(n, state);
ebd8d4e8 35296
8b095871
IC
35297 // if we've ended, and we're now clear, then finish it up.
35298 if (n === 0 && state.ended) {
35299 if (state.length === 0) endReadable(this);
35300 return null;
35301 }
ebd8d4e8 35302
8b095871
IC
35303 // All the actual chunk generation logic needs to be
35304 // *below* the call to _read. The reason is that in certain
35305 // synthetic stream cases, such as passthrough streams, _read
35306 // may be a completely synchronous operation which may change
35307 // the state of the read buffer, providing enough data when
35308 // before there was *not* enough.
35309 //
35310 // So, the steps are:
35311 // 1. Figure out what the state of things will be after we do
35312 // a read from the buffer.
35313 //
35314 // 2. If that resulting state will trigger a _read, then call _read.
35315 // Note that this may be asynchronous, or synchronous. Yes, it is
35316 // deeply ugly to write APIs this way, but that still doesn't mean
35317 // that the Readable class should behave improperly, as streams are
35318 // designed to be sync/async agnostic.
35319 // Take note if the _read call is sync or async (ie, if the read call
35320 // has returned yet), so that we know whether or not it's safe to emit
35321 // 'readable' etc.
35322 //
35323 // 3. Actually pull the requested chunks out of the buffer and return.
ebd8d4e8 35324
8b095871
IC
35325 // if we need a readable event, then we need to do some reading.
35326 var doRead = state.needReadable;
35327 debug('need readable', doRead);
ebd8d4e8 35328
8b095871
IC
35329 // if we currently have less than the highWaterMark, then also read some
35330 if (state.length === 0 || state.length - n < state.highWaterMark) {
35331 doRead = true;
35332 debug('length less than watermark', doRead);
35333 }
ebd8d4e8 35334
8b095871
IC
35335 // however, if we've ended, then there's no point, and if we're already
35336 // reading, then it's unnecessary.
35337 if (state.ended || state.reading) {
35338 doRead = false;
35339 debug('reading or ended', doRead);
35340 } else if (doRead) {
35341 debug('do read');
35342 state.reading = true;
35343 state.sync = true;
35344 // if the length is currently zero, then we *need* a readable event.
35345 if (state.length === 0) state.needReadable = true;
35346 // call internal read method
35347 this._read(state.highWaterMark);
35348 state.sync = false;
35349 // If _read pushed data synchronously, then `reading` will be false,
35350 // and we need to re-evaluate how much data we can return to the user.
35351 if (!state.reading) n = howMuchToRead(nOrig, state);
35352 }
ebd8d4e8 35353
8b095871
IC
35354 var ret;
35355 if (n > 0) ret = fromList(n, state);else ret = null;
ebd8d4e8 35356
8b095871
IC
35357 if (ret === null) {
35358 state.needReadable = true;
35359 n = 0;
35360 } else {
35361 state.length -= n;
35362 }
ebd8d4e8 35363
8b095871
IC
35364 if (state.length === 0) {
35365 // If we have nothing in the buffer, then we want to know
35366 // as soon as we *do* get something into the buffer.
35367 if (!state.ended) state.needReadable = true;
ebd8d4e8 35368
8b095871
IC
35369 // If we tried to read() past the EOF, then emit end on the next tick.
35370 if (nOrig !== n && state.ended) endReadable(this);
35371 }
35372
35373 if (ret !== null) this.emit('data', ret);
35374
35375 return ret;
ab78acc6
IC
35376};
35377
8b095871
IC
35378function chunkInvalid(state, chunk) {
35379 var er = null;
35380 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
35381 er = new TypeError('Invalid non-string/buffer chunk');
35382 }
35383 return er;
35384}
ab78acc6 35385
8b095871
IC
35386function onEofChunk(stream, state) {
35387 if (state.ended) return;
35388 if (state.decoder) {
35389 var chunk = state.decoder.end();
35390 if (chunk && chunk.length) {
35391 state.buffer.push(chunk);
35392 state.length += state.objectMode ? 1 : chunk.length;
35393 }
35394 }
35395 state.ended = true;
35396
35397 // emit 'readable' now to make sure it gets picked up.
35398 emitReadable(stream);
35399}
35400
35401// Don't emit readable right away in sync mode, because this can trigger
35402// another read() call => stack overflow. This way, it might trigger
35403// a nextTick recursion warning, but that's not so bad.
35404function emitReadable(stream) {
35405 var state = stream._readableState;
35406 state.needReadable = false;
35407 if (!state.emittedReadable) {
35408 debug('emitReadable', state.flowing);
35409 state.emittedReadable = true;
35410 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
35411 }
ebd8d4e8
IC
35412}
35413
8b095871
IC
35414function emitReadable_(stream) {
35415 debug('emit readable');
35416 stream.emit('readable');
35417 flow(stream);
35418}
ebd8d4e8 35419
8b095871
IC
35420// at this point, the user has presumably seen the 'readable' event,
35421// and called read() to consume some data. that may have triggered
35422// in turn another _read(n) call, in which case reading = true if
35423// it's in progress.
35424// However, if we're not ended, or reading, and the length < hwm,
35425// then go ahead and try to read some more preemptively.
35426function maybeReadMore(stream, state) {
35427 if (!state.readingMore) {
35428 state.readingMore = true;
35429 processNextTick(maybeReadMore_, stream, state);
35430 }
35431}
ab78acc6 35432
8b095871
IC
35433function maybeReadMore_(stream, state) {
35434 var len = state.length;
35435 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
35436 debug('maybeReadMore read 0');
35437 stream.read(0);
35438 if (len === state.length)
35439 // didn't get any data, stop spinning.
35440 break;else len = state.length;
35441 }
35442 state.readingMore = false;
35443}
ab78acc6 35444
8b095871
IC
35445// abstract method. to be overridden in specific implementation classes.
35446// call cb(er, data) where data is <= n in length.
35447// for virtual (non-string, non-buffer) streams, "length" is somewhat
35448// arbitrary, and perhaps not very meaningful.
35449Readable.prototype._read = function (n) {
35450 this.emit('error', new Error('_read() is not implemented'));
ab78acc6
IC
35451};
35452
8b095871
IC
35453Readable.prototype.pipe = function (dest, pipeOpts) {
35454 var src = this;
35455 var state = this._readableState;
ab78acc6 35456
8b095871
IC
35457 switch (state.pipesCount) {
35458 case 0:
35459 state.pipes = dest;
35460 break;
35461 case 1:
35462 state.pipes = [state.pipes, dest];
35463 break;
35464 default:
35465 state.pipes.push(dest);
35466 break;
ab78acc6 35467 }
8b095871
IC
35468 state.pipesCount += 1;
35469 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ab78acc6 35470
8b095871 35471 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
ab78acc6 35472
8b095871
IC
35473 var endFn = doEnd ? onend : cleanup;
35474 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
ab78acc6 35475
8b095871
IC
35476 dest.on('unpipe', onunpipe);
35477 function onunpipe(readable) {
35478 debug('onunpipe');
35479 if (readable === src) {
35480 cleanup();
ab78acc6 35481 }
8b095871 35482 }
ebd8d4e8 35483
8b095871
IC
35484 function onend() {
35485 debug('onend');
35486 dest.end();
ebd8d4e8
IC
35487 }
35488
8b095871
IC
35489 // when the dest drains, it reduces the awaitDrain counter
35490 // on the source. This would be more elegant with a .once()
35491 // handler in flow(), but adding and removing repeatedly is
35492 // too slow.
35493 var ondrain = pipeOnDrain(src);
35494 dest.on('drain', ondrain);
ebd8d4e8 35495
8b095871
IC
35496 var cleanedUp = false;
35497 function cleanup() {
35498 debug('cleanup');
35499 // cleanup event handlers once the pipe is broken
35500 dest.removeListener('close', onclose);
35501 dest.removeListener('finish', onfinish);
35502 dest.removeListener('drain', ondrain);
35503 dest.removeListener('error', onerror);
35504 dest.removeListener('unpipe', onunpipe);
35505 src.removeListener('end', onend);
35506 src.removeListener('end', cleanup);
35507 src.removeListener('data', ondata);
ebd8d4e8 35508
8b095871 35509 cleanedUp = true;
ebd8d4e8 35510
8b095871
IC
35511 // if the reader is waiting for a drain event from this
35512 // specific writer, then it would cause it to never start
35513 // flowing again.
35514 // So, if this is awaiting a drain, then we just call it now.
35515 // If we don't know, then assume that we are waiting for one.
35516 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
35517 }
ebd8d4e8 35518
8b095871
IC
35519 // If the user pushes more data while we're writing to dest then we'll end up
35520 // in ondata again. However, we only want to increase awaitDrain once because
35521 // dest will only emit one 'drain' event for the multiple writes.
35522 // => Introduce a guard on increasing awaitDrain.
35523 var increasedAwaitDrain = false;
35524 src.on('data', ondata);
35525 function ondata(chunk) {
35526 debug('ondata');
35527 increasedAwaitDrain = false;
35528 var ret = dest.write(chunk);
35529 if (false === ret && !increasedAwaitDrain) {
35530 // If the user unpiped during `dest.write()`, it is possible
35531 // to get stuck in a permanently paused state if that write
35532 // also returned false.
35533 // => Check whether `dest` is still a piping destination.
35534 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
35535 debug('false write response, pause', src._readableState.awaitDrain);
35536 src._readableState.awaitDrain++;
35537 increasedAwaitDrain = true;
35538 }
35539 src.pause();
35540 }
35541 }
ebd8d4e8 35542
8b095871
IC
35543 // if the dest has an error, then stop piping into it.
35544 // however, don't suppress the throwing behavior for this.
35545 function onerror(er) {
35546 debug('onerror', er);
35547 unpipe();
35548 dest.removeListener('error', onerror);
35549 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
35550 }
ab78acc6 35551
8b095871
IC
35552 // Make sure our error handler is attached before userland ones.
35553 prependListener(dest, 'error', onerror);
ab78acc6 35554
8b095871
IC
35555 // Both close and finish should trigger unpipe, but only once.
35556 function onclose() {
35557 dest.removeListener('finish', onfinish);
35558 unpipe();
35559 }
35560 dest.once('close', onclose);
35561 function onfinish() {
35562 debug('onfinish');
35563 dest.removeListener('close', onclose);
35564 unpipe();
ab78acc6 35565 }
8b095871 35566 dest.once('finish', onfinish);
ebd8d4e8 35567
8b095871
IC
35568 function unpipe() {
35569 debug('unpipe');
35570 src.unpipe(dest);
35571 }
35572
35573 // tell the dest that it's being piped to
35574 dest.emit('pipe', src);
35575
35576 // start the flow if it hasn't been started already.
35577 if (!state.flowing) {
35578 debug('pipe resume');
35579 src.resume();
35580 }
35581
35582 return dest;
ab78acc6 35583};
ebd8d4e8 35584
8b095871
IC
35585function pipeOnDrain(src) {
35586 return function () {
35587 var state = src._readableState;
35588 debug('pipeOnDrain', state.awaitDrain);
35589 if (state.awaitDrain) state.awaitDrain--;
35590 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
35591 state.flowing = true;
35592 flow(src);
35593 }
35594 };
35595}
ebd8d4e8 35596
8b095871
IC
35597Readable.prototype.unpipe = function (dest) {
35598 var state = this._readableState;
ebd8d4e8 35599
8b095871
IC
35600 // if we're not piping anywhere, then do nothing.
35601 if (state.pipesCount === 0) return this;
ebd8d4e8 35602
8b095871
IC
35603 // just one destination. most common case.
35604 if (state.pipesCount === 1) {
35605 // passed in one, but it's not the right one.
35606 if (dest && dest !== state.pipes) return this;
ebd8d4e8 35607
8b095871
IC
35608 if (!dest) dest = state.pipes;
35609
35610 // got a match.
35611 state.pipes = null;
35612 state.pipesCount = 0;
35613 state.flowing = false;
35614 if (dest) dest.emit('unpipe', this);
35615 return this;
ab78acc6 35616 }
ebd8d4e8 35617
8b095871 35618 // slow case. multiple pipe destinations.
ebd8d4e8 35619
8b095871
IC
35620 if (!dest) {
35621 // remove all.
35622 var dests = state.pipes;
35623 var len = state.pipesCount;
35624 state.pipes = null;
35625 state.pipesCount = 0;
35626 state.flowing = false;
ebd8d4e8 35627
8b095871
IC
35628 for (var i = 0; i < len; i++) {
35629 dests[i].emit('unpipe', this);
35630 }return this;
35631 }
ebd8d4e8 35632
8b095871
IC
35633 // try to find the right one.
35634 var index = indexOf(state.pipes, dest);
35635 if (index === -1) return this;
ebd8d4e8 35636
8b095871
IC
35637 state.pipes.splice(index, 1);
35638 state.pipesCount -= 1;
35639 if (state.pipesCount === 1) state.pipes = state.pipes[0];
ebd8d4e8 35640
8b095871 35641 dest.emit('unpipe', this);
ab78acc6 35642
8b095871
IC
35643 return this;
35644};
ab78acc6 35645
8b095871
IC
35646// set up data events if they are asked for
35647// Ensure readable listeners eventually get something
35648Readable.prototype.on = function (ev, fn) {
35649 var res = Stream.prototype.on.call(this, ev, fn);
35650
35651 if (ev === 'data') {
35652 // Start flowing on next tick if stream isn't explicitly paused
35653 if (this._readableState.flowing !== false) this.resume();
35654 } else if (ev === 'readable') {
35655 var state = this._readableState;
35656 if (!state.endEmitted && !state.readableListening) {
35657 state.readableListening = state.needReadable = true;
35658 state.emittedReadable = false;
35659 if (!state.reading) {
35660 processNextTick(nReadingNextTick, this);
35661 } else if (state.length) {
35662 emitReadable(this, state);
ebd8d4e8 35663 }
ab78acc6 35664 }
8b095871 35665 }
ebd8d4e8 35666
8b095871
IC
35667 return res;
35668};
35669Readable.prototype.addListener = Readable.prototype.on;
ab78acc6 35670
8b095871
IC
35671function nReadingNextTick(self) {
35672 debug('readable nexttick read 0');
35673 self.read(0);
35674}
ab78acc6 35675
8b095871
IC
35676// pause() and resume() are remnants of the legacy readable stream API
35677// If the user uses them, then switch into old mode.
35678Readable.prototype.resume = function () {
35679 var state = this._readableState;
35680 if (!state.flowing) {
35681 debug('resume');
35682 state.flowing = true;
35683 resume(this, state);
ebd8d4e8 35684 }
ab78acc6 35685 return this;
ebd8d4e8
IC
35686};
35687
8b095871
IC
35688function resume(stream, state) {
35689 if (!state.resumeScheduled) {
35690 state.resumeScheduled = true;
35691 processNextTick(resume_, stream, state);
ebd8d4e8 35692 }
8b095871 35693}
ab78acc6 35694
8b095871
IC
35695function resume_(stream, state) {
35696 if (!state.reading) {
35697 debug('resume read 0');
35698 stream.read(0);
ebd8d4e8 35699 }
ebd8d4e8 35700
8b095871
IC
35701 state.resumeScheduled = false;
35702 state.awaitDrain = 0;
35703 stream.emit('resume');
35704 flow(stream);
35705 if (state.flowing && !state.reading) stream.read(0);
35706}
ab78acc6 35707
8b095871
IC
35708Readable.prototype.pause = function () {
35709 debug('call pause flowing=%j', this._readableState.flowing);
35710 if (false !== this._readableState.flowing) {
35711 debug('pause');
35712 this._readableState.flowing = false;
35713 this.emit('pause');
ebd8d4e8 35714 }
ab78acc6
IC
35715 return this;
35716};
ebd8d4e8 35717
8b095871
IC
35718function flow(stream) {
35719 var state = stream._readableState;
35720 debug('flow', state.flowing);
35721 while (state.flowing && stream.read() !== null) {}
35722}
ebd8d4e8 35723
8b095871
IC
35724// wrap an old-style stream as the async data source.
35725// This is *not* part of the readable stream interface.
35726// It is an ugly unfortunate mess of history.
35727Readable.prototype.wrap = function (stream) {
35728 var state = this._readableState;
35729 var paused = false;
ebd8d4e8 35730
8b095871
IC
35731 var self = this;
35732 stream.on('end', function () {
35733 debug('wrapped end');
35734 if (state.decoder && !state.ended) {
35735 var chunk = state.decoder.end();
35736 if (chunk && chunk.length) self.push(chunk);
35737 }
ebd8d4e8 35738
8b095871
IC
35739 self.push(null);
35740 });
ebd8d4e8 35741
8b095871
IC
35742 stream.on('data', function (chunk) {
35743 debug('wrapped data');
35744 if (state.decoder) chunk = state.decoder.write(chunk);
ebd8d4e8 35745
8b095871
IC
35746 // don't skip over falsy values in objectMode
35747 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
ebd8d4e8 35748
8b095871
IC
35749 var ret = self.push(chunk);
35750 if (!ret) {
35751 paused = true;
35752 stream.pause();
35753 }
35754 });
35755
35756 // proxy all the other methods.
35757 // important when wrapping filters and duplexes.
35758 for (var i in stream) {
35759 if (this[i] === undefined && typeof stream[i] === 'function') {
35760 this[i] = function (method) {
35761 return function () {
35762 return stream[method].apply(stream, arguments);
35763 };
35764 }(i);
35765 }
ab78acc6 35766 }
ebd8d4e8 35767
8b095871
IC
35768 // proxy certain important events.
35769 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
35770 forEach(events, function (ev) {
35771 stream.on(ev, self.emit.bind(self, ev));
35772 });
35773
35774 // when we try to consume some more bytes, simply unpause the
35775 // underlying stream.
35776 self._read = function (n) {
35777 debug('wrapped _read', n);
35778 if (paused) {
35779 paused = false;
35780 stream.resume();
35781 }
35782 };
35783
35784 return self;
ebd8d4e8
IC
35785};
35786
8b095871
IC
35787// exposed for testing purposes only.
35788Readable._fromList = fromList;
ebd8d4e8 35789
8b095871
IC
35790// Pluck off n bytes from an array of buffers.
35791// Length is the combined lengths of all the buffers in the list.
35792// This function is designed to be inlinable, so please take care when making
35793// changes to the function body.
35794function fromList(n, state) {
35795 // nothing buffered
35796 if (state.length === 0) return null;
ab78acc6 35797
8b095871
IC
35798 var ret;
35799 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
35800 // read it all, truncate the list
35801 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
35802 state.buffer.clear();
35803 } else {
35804 // read part of list
35805 ret = fromListPartial(n, state.buffer, state.decoder);
35806 }
35807
35808 return ret;
35809}
35810
35811// Extracts only enough buffered data to satisfy the amount requested.
35812// This function is designed to be inlinable, so please take care when making
35813// changes to the function body.
35814function fromListPartial(n, list, hasStrings) {
35815 var ret;
35816 if (n < list.head.data.length) {
35817 // slice is the same for buffers and strings
35818 ret = list.head.data.slice(0, n);
35819 list.head.data = list.head.data.slice(n);
35820 } else if (n === list.head.data.length) {
35821 // first chunk is a perfect match
35822 ret = list.shift();
35823 } else {
35824 // result spans more than one buffer
35825 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
35826 }
35827 return ret;
ab78acc6 35828}
ebd8d4e8 35829
8b095871
IC
35830// Copies a specified amount of characters from the list of buffered data
35831// chunks.
35832// This function is designed to be inlinable, so please take care when making
35833// changes to the function body.
35834function copyFromBufferString(n, list) {
35835 var p = list.head;
35836 var c = 1;
35837 var ret = p.data;
35838 n -= ret.length;
35839 while (p = p.next) {
35840 var str = p.data;
35841 var nb = n > str.length ? str.length : n;
35842 if (nb === str.length) ret += str;else ret += str.slice(0, n);
35843 n -= nb;
35844 if (n === 0) {
35845 if (nb === str.length) {
35846 ++c;
35847 if (p.next) list.head = p.next;else list.head = list.tail = null;
35848 } else {
35849 list.head = p;
35850 p.data = str.slice(nb);
35851 }
35852 break;
ab78acc6 35853 }
8b095871
IC
35854 ++c;
35855 }
35856 list.length -= c;
35857 return ret;
ab78acc6
IC
35858}
35859
8b095871
IC
35860// Copies a specified amount of bytes from the list of buffered data chunks.
35861// This function is designed to be inlinable, so please take care when making
35862// changes to the function body.
35863function copyFromBuffer(n, list) {
35864 var ret = bufferShim.allocUnsafe(n);
35865 var p = list.head;
35866 var c = 1;
35867 p.data.copy(ret);
35868 n -= p.data.length;
35869 while (p = p.next) {
35870 var buf = p.data;
35871 var nb = n > buf.length ? buf.length : n;
35872 buf.copy(ret, ret.length - n, 0, nb);
35873 n -= nb;
35874 if (n === 0) {
35875 if (nb === buf.length) {
35876 ++c;
35877 if (p.next) list.head = p.next;else list.head = list.tail = null;
35878 } else {
35879 list.head = p;
35880 p.data = buf.slice(nb);
35881 }
35882 break;
ab78acc6 35883 }
8b095871
IC
35884 ++c;
35885 }
35886 list.length -= c;
35887 return ret;
ab78acc6 35888}
ebd8d4e8 35889
8b095871
IC
35890function endReadable(stream) {
35891 var state = stream._readableState;
ab78acc6 35892
8b095871
IC
35893 // If we get here before consuming all the bytes, then that is a
35894 // bug in node. Should never happen.
35895 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
ab78acc6 35896
8b095871
IC
35897 if (!state.endEmitted) {
35898 state.ended = true;
35899 processNextTick(endReadableNT, state, stream);
35900 }
35901}
ebd8d4e8 35902
8b095871
IC
35903function endReadableNT(state, stream) {
35904 // Check that we didn't get one last unshift.
35905 if (!state.endEmitted && state.length === 0) {
35906 state.endEmitted = true;
35907 stream.readable = false;
35908 stream.emit('end');
35909 }
35910}
ebd8d4e8 35911
8b095871
IC
35912function forEach(xs, f) {
35913 for (var i = 0, l = xs.length; i < l; i++) {
35914 f(xs[i], i);
35915 }
35916}
ebd8d4e8 35917
8b095871
IC
35918function indexOf(xs, x) {
35919 for (var i = 0, l = xs.length; i < l; i++) {
35920 if (xs[i] === x) return i;
35921 }
35922 return -1;
35923}
35924}).call(this,require('_process'))
35925},{"./_stream_duplex":15,"./internal/streams/BufferList":20,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":26,"util":3}],18:[function(require,module,exports){
35926// a transform stream is a readable/writable stream where you do
35927// something with the data. Sometimes it's called a "filter",
35928// but that's not a great name for it, since that implies a thing where
35929// some bits pass through, and others are simply ignored. (That would
35930// be a valid example of a transform, of course.)
ab78acc6 35931//
8b095871
IC
35932// While the output is causally related to the input, it's not a
35933// necessarily symmetric or synchronous transformation. For example,
35934// a zlib stream might take multiple plain-text writes(), and then
35935// emit a single compressed chunk some time in the future.
ab78acc6 35936//
8b095871 35937// Here's how this works:
ab78acc6 35938//
8b095871
IC
35939// The Transform stream has all the aspects of the readable and writable
35940// stream classes. When you write(chunk), that calls _write(chunk,cb)
35941// internally, and returns false if there's a lot of pending writes
35942// buffered up. When you call read(), that calls _read(n) until
35943// there's enough pending readable data buffered up.
35944//
35945// In a transform stream, the written data is placed in a buffer. When
35946// _read(n) is called, it transforms the queued up data, calling the
35947// buffered _write cb's as it consumes chunks. If consuming a single
35948// written chunk would result in multiple output chunks, then the first
35949// outputted bit calls the readcb, and subsequent chunks just go into
35950// the read buffer, and will cause it to emit 'readable' if necessary.
35951//
35952// This way, back-pressure is actually determined by the reading side,
35953// since _read has to be called to start processing a new chunk. However,
35954// a pathological inflate type of transform can cause excessive buffering
35955// here. For example, imagine a stream where every byte of input is
35956// interpreted as an integer from 0-255, and then results in that many
35957// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
35958// 1kb of data being output. In this case, you could write a very small
35959// amount of input, and end up with a very large amount of output. In
35960// such a pathological inflating mechanism, there'd be no way to tell
35961// the system to stop doing the transform. A single 4MB write could
35962// cause the system to run out of memory.
35963//
35964// However, even in such a pathological case, only a single written chunk
35965// would be consumed, and then the rest would wait (un-transformed) until
35966// the results of the previous transformed chunk were consumed.
ebd8d4e8 35967
8b095871 35968'use strict';
ebd8d4e8 35969
8b095871 35970module.exports = Transform;
ebd8d4e8 35971
8b095871 35972var Duplex = require('./_stream_duplex');
ebd8d4e8 35973
ab78acc6
IC
35974/*<replacement>*/
35975var util = require('core-util-is');
35976util.inherits = require('inherits');
35977/*</replacement>*/
ebd8d4e8 35978
8b095871 35979util.inherits(Transform, Duplex);
ebd8d4e8 35980
8b095871
IC
35981function TransformState(stream) {
35982 this.afterTransform = function (er, data) {
35983 return afterTransform(stream, er, data);
35984 };
ebd8d4e8 35985
8b095871
IC
35986 this.needTransform = false;
35987 this.transforming = false;
35988 this.writecb = null;
35989 this.writechunk = null;
35990 this.writeencoding = null;
35991}
ebd8d4e8 35992
8b095871
IC
35993function afterTransform(stream, er, data) {
35994 var ts = stream._transformState;
35995 ts.transforming = false;
ebd8d4e8 35996
8b095871 35997 var cb = ts.writecb;
ebd8d4e8 35998
8b095871 35999 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
ebd8d4e8 36000
8b095871
IC
36001 ts.writechunk = null;
36002 ts.writecb = null;
ebd8d4e8 36003
8b095871 36004 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 36005
8b095871
IC
36006 cb(er);
36007
36008 var rs = stream._readableState;
36009 rs.reading = false;
36010 if (rs.needReadable || rs.length < rs.highWaterMark) {
36011 stream._read(rs.highWaterMark);
36012 }
ebd8d4e8
IC
36013}
36014
8b095871
IC
36015function Transform(options) {
36016 if (!(this instanceof Transform)) return new Transform(options);
ebd8d4e8 36017
8b095871 36018 Duplex.call(this, options);
ebd8d4e8 36019
8b095871
IC
36020 this._transformState = new TransformState(this);
36021
36022 var stream = this;
36023
36024 // start out asking for a readable event once data is transformed.
36025 this._readableState.needReadable = true;
36026
36027 // we have implemented the _read method, and done the other things
36028 // that Readable wants before the first _read call, so unset the
36029 // sync guard flag.
36030 this._readableState.sync = false;
36031
36032 if (options) {
36033 if (typeof options.transform === 'function') this._transform = options.transform;
36034
36035 if (typeof options.flush === 'function') this._flush = options.flush;
ebd8d4e8 36036 }
8b095871
IC
36037
36038 // When the writable side finishes, then flush out anything remaining.
36039 this.once('prefinish', function () {
36040 if (typeof this._flush === 'function') this._flush(function (er, data) {
36041 done(stream, er, data);
36042 });else done(stream);
36043 });
ab78acc6 36044}
ebd8d4e8 36045
8b095871
IC
36046Transform.prototype.push = function (chunk, encoding) {
36047 this._transformState.needTransform = false;
36048 return Duplex.prototype.push.call(this, chunk, encoding);
36049};
36050
36051// This is the part where you do stuff!
36052// override this function in implementation classes.
36053// 'chunk' is an input chunk.
ab78acc6 36054//
8b095871
IC
36055// Call `push(newChunk)` to pass along transformed output
36056// to the readable side. You may call 'push' zero or more times.
ab78acc6 36057//
8b095871
IC
36058// Call `cb(err)` when you are done with this chunk. If you pass
36059// an error, then that'll put the hurt on the whole operation. If you
36060// never call cb(), then you'll never get another chunk.
36061Transform.prototype._transform = function (chunk, encoding, cb) {
36062 throw new Error('_transform() is not implemented');
36063};
ebd8d4e8 36064
8b095871
IC
36065Transform.prototype._write = function (chunk, encoding, cb) {
36066 var ts = this._transformState;
36067 ts.writecb = cb;
36068 ts.writechunk = chunk;
36069 ts.writeencoding = encoding;
36070 if (!ts.transforming) {
36071 var rs = this._readableState;
36072 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
36073 }
36074};
ebd8d4e8 36075
8b095871
IC
36076// Doesn't matter what the args are here.
36077// _transform does all the work.
36078// That we got here means that the readable side wants more data.
36079Transform.prototype._read = function (n) {
36080 var ts = this._transformState;
ebd8d4e8 36081
8b095871
IC
36082 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
36083 ts.transforming = true;
36084 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
36085 } else {
36086 // mark that we need a transform, so that any data that comes in
36087 // will get processed, now that we've asked for it.
36088 ts.needTransform = true;
36089 }
36090};
ebd8d4e8 36091
8b095871
IC
36092function done(stream, er, data) {
36093 if (er) return stream.emit('error', er);
ebd8d4e8 36094
8b095871 36095 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 36096
8b095871
IC
36097 // if there's nothing in the write buffer, then that means
36098 // that nothing more will ever be provided
36099 var ws = stream._writableState;
36100 var ts = stream._transformState;
ebd8d4e8 36101
8b095871 36102 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
ebd8d4e8 36103
8b095871 36104 if (ts.transforming) throw new Error('Calling transform done when still transforming');
ebd8d4e8 36105
8b095871
IC
36106 return stream.push(null);
36107}
36108},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
ab78acc6 36109(function (process){
8b095871
IC
36110// A bit simpler than readable streams.
36111// Implement an async ._write(chunk, encoding, cb), and it'll handle all
36112// the drain event emission and buffering.
ebd8d4e8 36113
8b095871
IC
36114'use strict';
36115
36116module.exports = Writable;
ebd8d4e8 36117
ab78acc6 36118/*<replacement>*/
8b095871 36119var processNextTick = require('process-nextick-args');
ab78acc6
IC
36120/*</replacement>*/
36121
ab78acc6 36122/*<replacement>*/
8b095871 36123var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
ab78acc6
IC
36124/*</replacement>*/
36125
ab78acc6 36126/*<replacement>*/
8b095871 36127var Duplex;
ab78acc6
IC
36128/*</replacement>*/
36129
8b095871 36130Writable.WritableState = WritableState;
ab78acc6
IC
36131
36132/*<replacement>*/
36133var util = require('core-util-is');
36134util.inherits = require('inherits');
36135/*</replacement>*/
36136
8b095871
IC
36137/*<replacement>*/
36138var internalUtil = {
36139 deprecate: require('util-deprecate')
36140};
36141/*</replacement>*/
ab78acc6 36142
8b095871
IC
36143/*<replacement>*/
36144var Stream;
36145(function () {
36146 try {
36147 Stream = require('st' + 'ream');
36148 } catch (_) {} finally {
36149 if (!Stream) Stream = require('events').EventEmitter;
36150 }
36151})();
36152/*</replacement>*/
ab78acc6 36153
8b095871 36154var Buffer = require('buffer').Buffer;
ab78acc6 36155/*<replacement>*/
8b095871 36156var bufferShim = require('buffer-shims');
ab78acc6
IC
36157/*</replacement>*/
36158
8b095871
IC
36159util.inherits(Writable, Stream);
36160
36161function nop() {}
ab78acc6 36162
8b095871
IC
36163function WriteReq(chunk, encoding, cb) {
36164 this.chunk = chunk;
36165 this.encoding = encoding;
36166 this.callback = cb;
36167 this.next = null;
36168}
ab78acc6 36169
8b095871
IC
36170function WritableState(options, stream) {
36171 Duplex = Duplex || require('./_stream_duplex');
ab78acc6
IC
36172
36173 options = options || {};
36174
8b095871
IC
36175 // object stream flag to indicate whether or not this stream
36176 // contains buffers or objects.
36177 this.objectMode = !!options.objectMode;
36178
36179 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
36180
36181 // the point at which write() starts returning false
36182 // Note: 0 is a valid value, means that we always return false if
36183 // the entire buffer is not flushed immediately on write()
ab78acc6 36184 var hwm = options.highWaterMark;
8b095871
IC
36185 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
36186 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6
IC
36187
36188 // cast to ints.
8b095871 36189 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 36190
8b095871
IC
36191 // drain event flag.
36192 this.needDrain = false;
36193 // at the start of calling end()
36194 this.ending = false;
36195 // when end() has been called, and returned
ab78acc6 36196 this.ended = false;
8b095871
IC
36197 // when 'finish' is emitted
36198 this.finished = false;
36199
36200 // should we decode strings into buffers before passing to _write?
36201 // this is here so that some node-core streams can optimize string
36202 // handling at a lower level.
36203 var noDecode = options.decodeStrings === false;
36204 this.decodeStrings = !noDecode;
36205
36206 // Crypto is kind of old and crusty. Historically, its default string
36207 // encoding is 'binary' so we have to make this configurable.
36208 // Everything else in the universe uses 'utf8', though.
36209 this.defaultEncoding = options.defaultEncoding || 'utf8';
36210
36211 // not an actual buffer we keep track of, but a measurement
36212 // of how much we're waiting to get pushed to some underlying
36213 // socket or file.
36214 this.length = 0;
36215
36216 // a flag to see when we're in the middle of a write.
36217 this.writing = false;
36218
36219 // when true all writes will be buffered until .uncork() call
36220 this.corked = 0;
ebd8d4e8 36221
ab78acc6
IC
36222 // a flag to be able to tell if the onwrite cb is called immediately,
36223 // or on a later tick. We set this to true at first, because any
36224 // actions that shouldn't happen until "later" should generally also
36225 // not happen before the first write call.
36226 this.sync = true;
ebd8d4e8 36227
8b095871
IC
36228 // a flag to know if we're processing previously buffered items, which
36229 // may call the _write() callback in the same tick, so that we don't
36230 // end up in an overlapped onwrite situation.
36231 this.bufferProcessing = false;
36232
36233 // the callback that's passed to _write(chunk,cb)
36234 this.onwrite = function (er) {
36235 onwrite(stream, er);
36236 };
36237
36238 // the callback that the user supplies to write(chunk,encoding,cb)
36239 this.writecb = null;
36240
36241 // the amount that is being written when _write is called.
36242 this.writelen = 0;
36243
36244 this.bufferedRequest = null;
36245 this.lastBufferedRequest = null;
36246
36247 // number of pending user-supplied write callbacks
36248 // this must be 0 before 'finish' can be emitted
36249 this.pendingcb = 0;
36250
36251 // emit prefinish if the only thing we're waiting for is _write cbs
36252 // This is relevant for synchronous Transform streams
36253 this.prefinished = false;
36254
36255 // True if the error was already emitted and should not be thrown again
36256 this.errorEmitted = false;
36257
36258 // count buffered requests
36259 this.bufferedRequestCount = 0;
36260
36261 // allocate the first CorkedRequest, there is always
36262 // one allocated and free to use, and we maintain at most two
36263 this.corkedRequestsFree = new CorkedRequest(this);
36264}
36265
36266WritableState.prototype.getBuffer = function getBuffer() {
36267 var current = this.bufferedRequest;
36268 var out = [];
36269 while (current) {
36270 out.push(current);
36271 current = current.next;
36272 }
36273 return out;
36274};
36275
36276(function () {
36277 try {
36278 Object.defineProperty(WritableState.prototype, 'buffer', {
36279 get: internalUtil.deprecate(function () {
36280 return this.getBuffer();
36281 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
36282 });
36283 } catch (_) {}
36284})();
36285
36286// Test _writableState for inheritance to account for Duplex streams,
36287// whose prototype chain only points to Readable.
36288var realHasInstance;
36289if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
36290 realHasInstance = Function.prototype[Symbol.hasInstance];
36291 Object.defineProperty(Writable, Symbol.hasInstance, {
36292 value: function (object) {
36293 if (realHasInstance.call(this, object)) return true;
36294
36295 return object && object._writableState instanceof WritableState;
36296 }
36297 });
36298} else {
36299 realHasInstance = function (object) {
36300 return object instanceof this;
36301 };
36302}
36303
36304function Writable(options) {
36305 Duplex = Duplex || require('./_stream_duplex');
36306
36307 // Writable ctor is applied to Duplexes, too.
36308 // `realHasInstance` is necessary because using plain `instanceof`
36309 // would return false, as no `_writableState` property is attached.
36310
36311 // Trying to use the custom `instanceof` for Writable here will also break the
36312 // Node.js LazyTransform implementation, which has a non-trivial getter for
36313 // `_writableState` that would lead to infinite recursion.
36314 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
36315 return new Writable(options);
36316 }
36317
36318 this._writableState = new WritableState(options, this);
36319
36320 // legacy.
36321 this.writable = true;
36322
36323 if (options) {
36324 if (typeof options.write === 'function') this._write = options.write;
36325
36326 if (typeof options.writev === 'function') this._writev = options.writev;
36327 }
36328
36329 Stream.call(this);
36330}
36331
36332// Otherwise people can pipe Writable streams, which is just wrong.
36333Writable.prototype.pipe = function () {
36334 this.emit('error', new Error('Cannot pipe, not readable'));
36335};
36336
36337function writeAfterEnd(stream, cb) {
36338 var er = new Error('write after end');
36339 // TODO: defer error events consistently everywhere, not just the cb
36340 stream.emit('error', er);
36341 processNextTick(cb, er);
36342}
36343
36344// If we get something that is not a buffer, string, null, or undefined,
36345// and we're not in objectMode, then that's an error.
36346// Otherwise stream chunks are all considered to be of length=1, and the
36347// watermarks determine how many objects to keep in the buffer, rather than
36348// how many bytes or characters.
36349function validChunk(stream, state, chunk, cb) {
36350 var valid = true;
36351 var er = false;
36352 // Always throw error if a null is written
36353 // if we are not in object mode then throw
36354 // if it is not a buffer, string, or undefined.
36355 if (chunk === null) {
36356 er = new TypeError('May not write null values to stream');
36357 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
36358 er = new TypeError('Invalid non-string/buffer chunk');
36359 }
36360 if (er) {
36361 stream.emit('error', er);
36362 processNextTick(cb, er);
36363 valid = false;
36364 }
36365 return valid;
36366}
ebd8d4e8 36367
8b095871
IC
36368Writable.prototype.write = function (chunk, encoding, cb) {
36369 var state = this._writableState;
36370 var ret = false;
ab78acc6 36371
8b095871
IC
36372 if (typeof encoding === 'function') {
36373 cb = encoding;
36374 encoding = null;
36375 }
ab78acc6 36376
8b095871 36377 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
ab78acc6 36378
8b095871 36379 if (typeof cb !== 'function') cb = nop;
ab78acc6 36380
8b095871
IC
36381 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
36382 state.pendingcb++;
36383 ret = writeOrBuffer(this, state, chunk, encoding, cb);
36384 }
ab78acc6 36385
8b095871
IC
36386 return ret;
36387};
ab78acc6 36388
8b095871
IC
36389Writable.prototype.cork = function () {
36390 var state = this._writableState;
ab78acc6 36391
8b095871
IC
36392 state.corked++;
36393};
ebd8d4e8 36394
8b095871
IC
36395Writable.prototype.uncork = function () {
36396 var state = this._writableState;
ab78acc6 36397
8b095871
IC
36398 if (state.corked) {
36399 state.corked--;
ab78acc6 36400
8b095871
IC
36401 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
36402 }
36403};
ab78acc6 36404
8b095871
IC
36405Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
36406 // node::ParseEncoding() requires lower case.
36407 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
36408 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
36409 this._writableState.defaultEncoding = encoding;
36410 return this;
36411};
ab78acc6 36412
8b095871
IC
36413function decodeChunk(state, chunk, encoding) {
36414 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
36415 chunk = bufferShim.from(chunk, encoding);
36416 }
36417 return chunk;
ab78acc6
IC
36418}
36419
8b095871
IC
36420// if we're already writing something, then just put this
36421// in the queue, and wait our turn. Otherwise, call _write
36422// If we return false, then we need a drain event, so set that flag.
36423function writeOrBuffer(stream, state, chunk, encoding, cb) {
36424 chunk = decodeChunk(state, chunk, encoding);
ab78acc6 36425
8b095871
IC
36426 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
36427 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 36428
8b095871 36429 state.length += len;
ebd8d4e8 36430
8b095871
IC
36431 var ret = state.length < state.highWaterMark;
36432 // we must ensure that previous needDrain will not be reset to false.
36433 if (!ret) state.needDrain = true;
ebd8d4e8 36434
8b095871
IC
36435 if (state.writing || state.corked) {
36436 var last = state.lastBufferedRequest;
36437 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
36438 if (last) {
36439 last.next = state.lastBufferedRequest;
ebd8d4e8 36440 } else {
8b095871
IC
36441 state.bufferedRequest = state.lastBufferedRequest;
36442 }
36443 state.bufferedRequestCount += 1;
36444 } else {
36445 doWrite(stream, state, false, len, chunk, encoding, cb);
36446 }
ab78acc6 36447
8b095871
IC
36448 return ret;
36449}
ab78acc6 36450
8b095871
IC
36451function doWrite(stream, state, writev, len, chunk, encoding, cb) {
36452 state.writelen = len;
36453 state.writecb = cb;
36454 state.writing = true;
36455 state.sync = true;
36456 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
36457 state.sync = false;
36458}
ab78acc6 36459
8b095871
IC
36460function onwriteError(stream, state, sync, er, cb) {
36461 --state.pendingcb;
36462 if (sync) processNextTick(cb, er);else cb(er);
ab78acc6 36463
8b095871
IC
36464 stream._writableState.errorEmitted = true;
36465 stream.emit('error', er);
36466}
ebd8d4e8 36467
8b095871
IC
36468function onwriteStateUpdate(state) {
36469 state.writing = false;
36470 state.writecb = null;
36471 state.length -= state.writelen;
36472 state.writelen = 0;
ab78acc6 36473}
ebd8d4e8 36474
8b095871
IC
36475function onwrite(stream, er) {
36476 var state = stream._writableState;
36477 var sync = state.sync;
36478 var cb = state.writecb;
ab78acc6 36479
8b095871 36480 onwriteStateUpdate(state);
ab78acc6 36481
8b095871
IC
36482 if (er) onwriteError(stream, state, sync, er, cb);else {
36483 // Check if we're actually ready to finish, but don't emit yet
36484 var finished = needFinish(state);
36485
36486 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
36487 clearBuffer(stream, state);
36488 }
36489
36490 if (sync) {
36491 /*<replacement>*/
36492 asyncWrite(afterWrite, stream, state, finished, cb);
36493 /*</replacement>*/
36494 } else {
36495 afterWrite(stream, state, finished, cb);
36496 }
36497 }
ab78acc6
IC
36498}
36499
8b095871
IC
36500function afterWrite(stream, state, finished, cb) {
36501 if (!finished) onwriteDrain(stream, state);
36502 state.pendingcb--;
36503 cb();
36504 finishMaybe(stream, state);
36505}
ab78acc6 36506
8b095871
IC
36507// Must force callback to be called on nextTick, so that we don't
36508// emit 'drain' before the write() consumer gets the 'false' return
36509// value, and has a chance to attach a 'drain' listener.
36510function onwriteDrain(stream, state) {
36511 if (state.length === 0 && state.needDrain) {
36512 state.needDrain = false;
36513 stream.emit('drain');
ebd8d4e8 36514 }
ebd8d4e8 36515}
ebd8d4e8 36516
8b095871
IC
36517// if there's something in the buffer waiting, then process it
36518function clearBuffer(stream, state) {
36519 state.bufferProcessing = true;
36520 var entry = state.bufferedRequest;
ebd8d4e8 36521
8b095871
IC
36522 if (stream._writev && entry && entry.next) {
36523 // Fast case, write everything using _writev()
36524 var l = state.bufferedRequestCount;
36525 var buffer = new Array(l);
36526 var holder = state.corkedRequestsFree;
36527 holder.entry = entry;
ebd8d4e8 36528
8b095871
IC
36529 var count = 0;
36530 while (entry) {
36531 buffer[count] = entry;
36532 entry = entry.next;
36533 count += 1;
36534 }
ebd8d4e8 36535
8b095871 36536 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
ebd8d4e8 36537
8b095871
IC
36538 // doWrite is almost always async, defer these to save a bit of time
36539 // as the hot path ends with doWrite
36540 state.pendingcb++;
36541 state.lastBufferedRequest = null;
36542 if (holder.next) {
36543 state.corkedRequestsFree = holder.next;
36544 holder.next = null;
36545 } else {
36546 state.corkedRequestsFree = new CorkedRequest(state);
36547 }
36548 } else {
36549 // Slow case, write chunks one-by-one
36550 while (entry) {
36551 var chunk = entry.chunk;
36552 var encoding = entry.encoding;
36553 var cb = entry.callback;
36554 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 36555
8b095871
IC
36556 doWrite(stream, state, false, len, chunk, encoding, cb);
36557 entry = entry.next;
36558 // if we didn't call the onwrite immediately, then
36559 // it means that we need to wait until it does.
36560 // also, that means that the chunk and cb are currently
36561 // being processed, so move the buffer counter past them.
36562 if (state.writing) {
36563 break;
36564 }
36565 }
36566
36567 if (entry === null) state.lastBufferedRequest = null;
ebd8d4e8 36568 }
ab78acc6 36569
8b095871
IC
36570 state.bufferedRequestCount = 0;
36571 state.bufferedRequest = entry;
36572 state.bufferProcessing = false;
ebd8d4e8
IC
36573}
36574
8b095871
IC
36575Writable.prototype._write = function (chunk, encoding, cb) {
36576 cb(new Error('_write() is not implemented'));
36577};
ebd8d4e8 36578
8b095871 36579Writable.prototype._writev = null;
ab78acc6 36580
8b095871
IC
36581Writable.prototype.end = function (chunk, encoding, cb) {
36582 var state = this._writableState;
36583
36584 if (typeof chunk === 'function') {
36585 cb = chunk;
36586 chunk = null;
36587 encoding = null;
36588 } else if (typeof encoding === 'function') {
36589 cb = encoding;
36590 encoding = null;
ab78acc6
IC
36591 }
36592
8b095871 36593 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
ab78acc6 36594
8b095871
IC
36595 // .end() fully uncorks
36596 if (state.corked) {
36597 state.corked = 1;
36598 this.uncork();
ab78acc6
IC
36599 }
36600
8b095871
IC
36601 // ignore unnecessary end() calls.
36602 if (!state.ending && !state.finished) endWritable(this, state, cb);
36603};
ab78acc6 36604
8b095871
IC
36605function needFinish(state) {
36606 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
36607}
ab78acc6 36608
8b095871
IC
36609function prefinish(stream, state) {
36610 if (!state.prefinished) {
36611 state.prefinished = true;
36612 stream.emit('prefinish');
ab78acc6 36613 }
8b095871 36614}
ab78acc6 36615
8b095871
IC
36616function finishMaybe(stream, state) {
36617 var need = needFinish(state);
36618 if (need) {
36619 if (state.pendingcb === 0) {
36620 prefinish(stream, state);
36621 state.finished = true;
36622 stream.emit('finish');
36623 } else {
36624 prefinish(stream, state);
36625 }
ab78acc6 36626 }
8b095871
IC
36627 return need;
36628}
ab78acc6 36629
8b095871
IC
36630function endWritable(stream, state, cb) {
36631 state.ending = true;
36632 finishMaybe(stream, state);
36633 if (cb) {
36634 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
ab78acc6 36635 }
8b095871
IC
36636 state.ended = true;
36637 stream.writable = false;
36638}
ab78acc6 36639
8b095871
IC
36640// It seems a linked list but it is not
36641// there will be only 2 of these for each stream
36642function CorkedRequest(state) {
36643 var _this = this;
ab78acc6 36644
8b095871
IC
36645 this.next = null;
36646 this.entry = null;
ebd8d4e8 36647
8b095871
IC
36648 this.finish = function (err) {
36649 var entry = _this.entry;
36650 _this.entry = null;
36651 while (entry) {
36652 var cb = entry.callback;
36653 state.pendingcb--;
36654 cb(err);
36655 entry = entry.next;
36656 }
36657 if (state.corkedRequestsFree) {
36658 state.corkedRequestsFree.next = _this;
36659 } else {
36660 state.corkedRequestsFree = _this;
36661 }
36662 };
36663}
36664}).call(this,require('_process'))
36665},{"./_stream_duplex":15,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"process-nextick-args":12,"util-deprecate":27}],20:[function(require,module,exports){
36666'use strict';
ebd8d4e8 36667
8b095871
IC
36668var Buffer = require('buffer').Buffer;
36669/*<replacement>*/
36670var bufferShim = require('buffer-shims');
36671/*</replacement>*/
ebd8d4e8 36672
8b095871 36673module.exports = BufferList;
ebd8d4e8 36674
8b095871
IC
36675function BufferList() {
36676 this.head = null;
36677 this.tail = null;
36678 this.length = 0;
36679}
ab78acc6 36680
8b095871
IC
36681BufferList.prototype.push = function (v) {
36682 var entry = { data: v, next: null };
36683 if (this.length > 0) this.tail.next = entry;else this.head = entry;
36684 this.tail = entry;
36685 ++this.length;
36686};
36687
36688BufferList.prototype.unshift = function (v) {
36689 var entry = { data: v, next: this.head };
36690 if (this.length === 0) this.tail = entry;
36691 this.head = entry;
36692 ++this.length;
36693};
ab78acc6 36694
8b095871
IC
36695BufferList.prototype.shift = function () {
36696 if (this.length === 0) return;
36697 var ret = this.head.data;
36698 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
36699 --this.length;
ab78acc6
IC
36700 return ret;
36701};
36702
8b095871
IC
36703BufferList.prototype.clear = function () {
36704 this.head = this.tail = null;
36705 this.length = 0;
36706};
ebd8d4e8 36707
8b095871
IC
36708BufferList.prototype.join = function (s) {
36709 if (this.length === 0) return '';
36710 var p = this.head;
36711 var ret = '' + p.data;
36712 while (p = p.next) {
36713 ret += s + p.data;
36714 }return ret;
36715};
ebd8d4e8 36716
8b095871
IC
36717BufferList.prototype.concat = function (n) {
36718 if (this.length === 0) return bufferShim.alloc(0);
36719 if (this.length === 1) return this.head.data;
36720 var ret = bufferShim.allocUnsafe(n >>> 0);
36721 var p = this.head;
36722 var i = 0;
36723 while (p) {
36724 p.data.copy(ret, i);
36725 i += p.data.length;
36726 p = p.next;
ebd8d4e8 36727 }
8b095871
IC
36728 return ret;
36729};
36730},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
36731module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 36732
8b095871
IC
36733},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
36734(function (process){
36735var Stream = (function (){
36736 try {
36737 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
36738 } catch(_){}
36739}());
36740exports = module.exports = require('./lib/_stream_readable.js');
36741exports.Stream = Stream || exports;
36742exports.Readable = exports;
36743exports.Writable = require('./lib/_stream_writable.js');
36744exports.Duplex = require('./lib/_stream_duplex.js');
36745exports.Transform = require('./lib/_stream_transform.js');
36746exports.PassThrough = require('./lib/_stream_passthrough.js');
ab78acc6 36747
8b095871
IC
36748if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
36749 module.exports = Stream;
ab78acc6 36750}
ebd8d4e8 36751
8b095871
IC
36752}).call(this,require('_process'))
36753},{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19,"_process":13}],23:[function(require,module,exports){
36754module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 36755
8b095871
IC
36756},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
36757module.exports = require("./lib/_stream_writable.js")
ab78acc6 36758
8b095871
IC
36759},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
36760// Copyright Joyent, Inc. and other Node contributors.
36761//
36762// Permission is hereby granted, free of charge, to any person obtaining a
36763// copy of this software and associated documentation files (the
36764// "Software"), to deal in the Software without restriction, including
36765// without limitation the rights to use, copy, modify, merge, publish,
36766// distribute, sublicense, and/or sell copies of the Software, and to permit
36767// persons to whom the Software is furnished to do so, subject to the
36768// following conditions:
36769//
36770// The above copyright notice and this permission notice shall be included
36771// in all copies or substantial portions of the Software.
36772//
36773// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
36774// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
36775// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
36776// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
36777// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
36778// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
36779// USE OR OTHER DEALINGS IN THE SOFTWARE.
36780
36781module.exports = Stream;
36782
36783var EE = require('events').EventEmitter;
36784var inherits = require('inherits');
36785
36786inherits(Stream, EE);
36787Stream.Readable = require('readable-stream/readable.js');
36788Stream.Writable = require('readable-stream/writable.js');
36789Stream.Duplex = require('readable-stream/duplex.js');
36790Stream.Transform = require('readable-stream/transform.js');
36791Stream.PassThrough = require('readable-stream/passthrough.js');
ebd8d4e8 36792
8b095871
IC
36793// Backwards-compat with node 0.4.x
36794Stream.Stream = Stream;
ebd8d4e8 36795
ab78acc6 36796
ab78acc6 36797
8b095871
IC
36798// old-style streams. Note that the pipe method (the only relevant
36799// part of this class) is overridden in the Readable class.
ebd8d4e8 36800
8b095871
IC
36801function Stream() {
36802 EE.call(this);
36803}
ebd8d4e8 36804
8b095871
IC
36805Stream.prototype.pipe = function(dest, options) {
36806 var source = this;
ab78acc6 36807
8b095871
IC
36808 function ondata(chunk) {
36809 if (dest.writable) {
36810 if (false === dest.write(chunk) && source.pause) {
36811 source.pause();
36812 }
ab78acc6
IC
36813 }
36814 }
36815
8b095871
IC
36816 source.on('data', ondata);
36817
36818 function ondrain() {
36819 if (source.readable && source.resume) {
36820 source.resume();
36821 }
ab78acc6
IC
36822 }
36823
ab78acc6
IC
36824 dest.on('drain', ondrain);
36825
8b095871
IC
36826 // If the 'end' option is not supplied, dest.end() will be called when
36827 // source gets the 'end' or 'close' events. Only dest.end() once.
36828 if (!dest._isStdio && (!options || options.end !== false)) {
36829 source.on('end', onend);
36830 source.on('close', onclose);
ab78acc6
IC
36831 }
36832
8b095871
IC
36833 var didOnEnd = false;
36834 function onend() {
36835 if (didOnEnd) return;
36836 didOnEnd = true;
ab78acc6 36837
8b095871 36838 dest.end();
ab78acc6 36839 }
ab78acc6
IC
36840
36841
ab78acc6 36842 function onclose() {
8b095871
IC
36843 if (didOnEnd) return;
36844 didOnEnd = true;
ebd8d4e8 36845
8b095871 36846 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
36847 }
36848
8b095871
IC
36849 // don't leave dangling pipes when there are errors.
36850 function onerror(er) {
36851 cleanup();
36852 if (EE.listenerCount(this, 'error') === 0) {
36853 throw er; // Unhandled stream error in pipe.
36854 }
ebd8d4e8
IC
36855 }
36856
8b095871
IC
36857 source.on('error', onerror);
36858 dest.on('error', onerror);
ab78acc6 36859
8b095871
IC
36860 // remove all the event listeners that were added.
36861 function cleanup() {
36862 source.removeListener('data', ondata);
36863 dest.removeListener('drain', ondrain);
ab78acc6 36864
8b095871
IC
36865 source.removeListener('end', onend);
36866 source.removeListener('close', onclose);
ab78acc6 36867
8b095871
IC
36868 source.removeListener('error', onerror);
36869 dest.removeListener('error', onerror);
ab78acc6 36870
8b095871
IC
36871 source.removeListener('end', cleanup);
36872 source.removeListener('close', cleanup);
ab78acc6 36873
8b095871
IC
36874 dest.removeListener('close', cleanup);
36875 }
ab78acc6 36876
8b095871
IC
36877 source.on('end', cleanup);
36878 source.on('close', cleanup);
ab78acc6 36879
8b095871 36880 dest.on('close', cleanup);
ebd8d4e8 36881
8b095871 36882 dest.emit('pipe', source);
ab78acc6 36883
8b095871
IC
36884 // Allow for unix-like usage: A.pipe(B).pipe(C)
36885 return dest;
36886};
ab78acc6 36887
8b095871
IC
36888},{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":21,"readable-stream/readable.js":22,"readable-stream/transform.js":23,"readable-stream/writable.js":24}],26:[function(require,module,exports){
36889// Copyright Joyent, Inc. and other Node contributors.
36890//
36891// Permission is hereby granted, free of charge, to any person obtaining a
36892// copy of this software and associated documentation files (the
36893// "Software"), to deal in the Software without restriction, including
36894// without limitation the rights to use, copy, modify, merge, publish,
36895// distribute, sublicense, and/or sell copies of the Software, and to permit
36896// persons to whom the Software is furnished to do so, subject to the
36897// following conditions:
36898//
36899// The above copyright notice and this permission notice shall be included
36900// in all copies or substantial portions of the Software.
36901//
36902// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
36903// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
36904// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
36905// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
36906// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
36907// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
36908// USE OR OTHER DEALINGS IN THE SOFTWARE.
36909
36910var Buffer = require('buffer').Buffer;
ebd8d4e8 36911
8b095871
IC
36912var isBufferEncoding = Buffer.isEncoding
36913 || function(encoding) {
36914 switch (encoding && encoding.toLowerCase()) {
36915 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;
36916 default: return false;
36917 }
36918 }
ab78acc6 36919
ab78acc6 36920
8b095871
IC
36921function assertEncoding(encoding) {
36922 if (encoding && !isBufferEncoding(encoding)) {
36923 throw new Error('Unknown encoding: ' + encoding);
36924 }
36925}
ebd8d4e8 36926
8b095871
IC
36927// StringDecoder provides an interface for efficiently splitting a series of
36928// buffers into a series of JS strings without breaking apart multi-byte
36929// characters. CESU-8 is handled as part of the UTF-8 encoding.
36930//
36931// @TODO Handling all encodings inside a single object makes it very difficult
36932// to reason about this code, so it should be split up in the future.
36933// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
36934// points as used by CESU-8.
36935var StringDecoder = exports.StringDecoder = function(encoding) {
36936 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
36937 assertEncoding(encoding);
36938 switch (this.encoding) {
36939 case 'utf8':
36940 // CESU-8 represents each of Surrogate Pair by 3-bytes
36941 this.surrogateSize = 3;
36942 break;
36943 case 'ucs2':
36944 case 'utf16le':
36945 // UTF-16 represents each of Surrogate Pair by 2-bytes
36946 this.surrogateSize = 2;
36947 this.detectIncompleteChar = utf16DetectIncompleteChar;
36948 break;
36949 case 'base64':
36950 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
36951 this.surrogateSize = 3;
36952 this.detectIncompleteChar = base64DetectIncompleteChar;
36953 break;
36954 default:
36955 this.write = passThroughWrite;
36956 return;
36957 }
36958
36959 // Enough space to store all bytes of a single character. UTF-8 needs 4
36960 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
36961 this.charBuffer = new Buffer(6);
36962 // Number of bytes received for the current incomplete multi-byte character.
36963 this.charReceived = 0;
36964 // Number of bytes expected for the current incomplete multi-byte character.
36965 this.charLength = 0;
ab78acc6
IC
36966};
36967
ab78acc6 36968
8b095871
IC
36969// write decodes the given buffer and returns it as JS string that is
36970// guaranteed to not contain any partial multi-byte characters. Any partial
36971// character found at the end of the buffer is buffered up, and will be
36972// returned when calling write again with the remaining bytes.
36973//
36974// Note: Converting a Buffer containing an orphan surrogate to a String
36975// currently works, but converting a String to a Buffer (via `new Buffer`, or
36976// Buffer#write) will replace incomplete surrogates with the unicode
36977// replacement character. See https://codereview.chromium.org/121173009/ .
36978StringDecoder.prototype.write = function(buffer) {
36979 var charStr = '';
36980 // if our last write ended with an incomplete multibyte character
36981 while (this.charLength) {
36982 // determine how many remaining bytes this buffer has to offer for this char
36983 var available = (buffer.length >= this.charLength - this.charReceived) ?
36984 this.charLength - this.charReceived :
36985 buffer.length;
ab78acc6 36986
8b095871
IC
36987 // add the new bytes to the char buffer
36988 buffer.copy(this.charBuffer, this.charReceived, 0, available);
36989 this.charReceived += available;
36990
36991 if (this.charReceived < this.charLength) {
36992 // still not enough chars in this buffer? wait for more ...
36993 return '';
ebd8d4e8 36994 }
ebd8d4e8 36995
8b095871
IC
36996 // remove bytes belonging to the current character from the buffer
36997 buffer = buffer.slice(available, buffer.length);
ab78acc6 36998
8b095871
IC
36999 // get the character that was split
37000 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
37001
37002 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
37003 var charCode = charStr.charCodeAt(charStr.length - 1);
37004 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
37005 this.charLength += this.surrogateSize;
37006 charStr = '';
37007 continue;
ab78acc6 37008 }
8b095871 37009 this.charReceived = this.charLength = 0;
ebd8d4e8 37010
8b095871
IC
37011 // if there are no more bytes in this buffer, just emit our char
37012 if (buffer.length === 0) {
37013 return charStr;
37014 }
37015 break;
ebd8d4e8 37016 }
ebd8d4e8 37017
8b095871
IC
37018 // determine and set charLength / charReceived
37019 this.detectIncompleteChar(buffer);
ebd8d4e8 37020
8b095871
IC
37021 var end = buffer.length;
37022 if (this.charLength) {
37023 // buffer the incomplete character bytes we got
37024 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
37025 end -= this.charReceived;
ab78acc6 37026 }
ebd8d4e8 37027
8b095871
IC
37028 charStr += buffer.toString(this.encoding, 0, end);
37029
37030 var end = charStr.length - 1;
37031 var charCode = charStr.charCodeAt(end);
37032 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
37033 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
37034 var size = this.surrogateSize;
37035 this.charLength += size;
37036 this.charReceived += size;
37037 this.charBuffer.copy(this.charBuffer, size, 0, size);
37038 buffer.copy(this.charBuffer, 0, 0, size);
37039 return charStr.substring(0, end);
ab78acc6 37040 }
ebd8d4e8 37041
8b095871
IC
37042 // or just emit the charStr
37043 return charStr;
37044};
ebd8d4e8 37045
8b095871
IC
37046// detectIncompleteChar determines if there is an incomplete UTF-8 character at
37047// the end of the given buffer. If so, it sets this.charLength to the byte
37048// length that character, and sets this.charReceived to the number of bytes
37049// that are available for this character.
37050StringDecoder.prototype.detectIncompleteChar = function(buffer) {
37051 // determine how many bytes we have to check at the end of this buffer
37052 var i = (buffer.length >= 3) ? 3 : buffer.length;
ab78acc6 37053
8b095871
IC
37054 // Figure out if one of the last i bytes of our buffer announces an
37055 // incomplete char.
37056 for (; i > 0; i--) {
37057 var c = buffer[buffer.length - i];
ebd8d4e8 37058
8b095871 37059 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 37060
8b095871
IC
37061 // 110XXXXX
37062 if (i == 1 && c >> 5 == 0x06) {
37063 this.charLength = 2;
37064 break;
ebd8d4e8 37065 }
ab78acc6 37066
8b095871
IC
37067 // 1110XXXX
37068 if (i <= 2 && c >> 4 == 0x0E) {
37069 this.charLength = 3;
37070 break;
37071 }
37072
37073 // 11110XXX
37074 if (i <= 3 && c >> 3 == 0x1E) {
37075 this.charLength = 4;
37076 break;
ebd8d4e8
IC
37077 }
37078 }
8b095871
IC
37079 this.charReceived = i;
37080};
ab78acc6 37081
8b095871
IC
37082StringDecoder.prototype.end = function(buffer) {
37083 var res = '';
37084 if (buffer && buffer.length)
37085 res = this.write(buffer);
ab78acc6 37086
8b095871
IC
37087 if (this.charReceived) {
37088 var cr = this.charReceived;
37089 var buf = this.charBuffer;
37090 var enc = this.encoding;
37091 res += buf.slice(0, cr).toString(enc);
37092 }
ab78acc6 37093
8b095871 37094 return res;
ab78acc6
IC
37095};
37096
8b095871
IC
37097function passThroughWrite(buffer) {
37098 return buffer.toString(this.encoding);
37099}
ab78acc6 37100
8b095871
IC
37101function utf16DetectIncompleteChar(buffer) {
37102 this.charReceived = buffer.length % 2;
37103 this.charLength = this.charReceived ? 2 : 0;
37104}
ab78acc6 37105
8b095871
IC
37106function base64DetectIncompleteChar(buffer) {
37107 this.charReceived = buffer.length % 3;
37108 this.charLength = this.charReceived ? 3 : 0;
37109}
ab78acc6 37110
8b095871
IC
37111},{"buffer":5}],27:[function(require,module,exports){
37112(function (global){
ab78acc6 37113
8b095871
IC
37114/**
37115 * Module exports.
37116 */
ebd8d4e8 37117
8b095871 37118module.exports = deprecate;
ebd8d4e8 37119
8b095871
IC
37120/**
37121 * Mark that a method should not be used.
37122 * Returns a modified function which warns once by default.
37123 *
37124 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
37125 *
37126 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
37127 * will throw an Error when invoked.
37128 *
37129 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
37130 * will invoke `console.trace()` instead of `console.error()`.
37131 *
37132 * @param {Function} fn - the function to deprecate
37133 * @param {String} msg - the string to print to the console when `fn` is invoked
37134 * @returns {Function} a new "deprecated" version of `fn`
37135 * @api public
37136 */
ebd8d4e8 37137
8b095871
IC
37138function deprecate (fn, msg) {
37139 if (config('noDeprecation')) {
37140 return fn;
37141 }
ebd8d4e8 37142
8b095871
IC
37143 var warned = false;
37144 function deprecated() {
37145 if (!warned) {
37146 if (config('throwDeprecation')) {
37147 throw new Error(msg);
37148 } else if (config('traceDeprecation')) {
37149 console.trace(msg);
37150 } else {
37151 console.warn(msg);
ab78acc6 37152 }
8b095871 37153 warned = true;
ab78acc6 37154 }
8b095871 37155 return fn.apply(this, arguments);
ebd8d4e8
IC
37156 }
37157
8b095871 37158 return deprecated;
ebd8d4e8
IC
37159}
37160
8b095871
IC
37161/**
37162 * Checks `localStorage` for boolean values for the given `name`.
37163 *
37164 * @param {String} name
37165 * @returns {Boolean}
37166 * @api private
37167 */
ebd8d4e8 37168
8b095871
IC
37169function config (name) {
37170 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
37171 try {
37172 if (!global.localStorage) return false;
37173 } catch (_) {
37174 return false;
ab78acc6 37175 }
8b095871
IC
37176 var val = global.localStorage[name];
37177 if (null == val) return false;
37178 return String(val).toLowerCase() === 'true';
ebd8d4e8 37179}
ebd8d4e8 37180
8b095871
IC
37181}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
37182},{}],28:[function(require,module,exports){
37183arguments[4][9][0].apply(exports,arguments)
37184},{"dup":9}],29:[function(require,module,exports){
37185module.exports = function isBuffer(arg) {
37186 return arg && typeof arg === 'object'
37187 && typeof arg.copy === 'function'
37188 && typeof arg.fill === 'function'
37189 && typeof arg.readUInt8 === 'function';
ebd8d4e8 37190}
8b095871
IC
37191},{}],30:[function(require,module,exports){
37192(function (process,global){
ab78acc6
IC
37193// Copyright Joyent, Inc. and other Node contributors.
37194//
37195// Permission is hereby granted, free of charge, to any person obtaining a
37196// copy of this software and associated documentation files (the
37197// "Software"), to deal in the Software without restriction, including
37198// without limitation the rights to use, copy, modify, merge, publish,
37199// distribute, sublicense, and/or sell copies of the Software, and to permit
37200// persons to whom the Software is furnished to do so, subject to the
37201// following conditions:
37202//
37203// The above copyright notice and this permission notice shall be included
37204// in all copies or substantial portions of the Software.
37205//
37206// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
37207// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
37208// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
37209// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
37210// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
37211// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
37212// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 37213
8b095871
IC
37214var formatRegExp = /%[sdj%]/g;
37215exports.format = function(f) {
37216 if (!isString(f)) {
37217 var objects = [];
37218 for (var i = 0; i < arguments.length; i++) {
37219 objects.push(inspect(arguments[i]));
37220 }
37221 return objects.join(' ');
37222 }
ebd8d4e8 37223
8b095871
IC
37224 var i = 1;
37225 var args = arguments;
37226 var len = args.length;
37227 var str = String(f).replace(formatRegExp, function(x) {
37228 if (x === '%%') return '%';
37229 if (i >= len) return x;
37230 switch (x) {
37231 case '%s': return String(args[i++]);
37232 case '%d': return Number(args[i++]);
37233 case '%j':
37234 try {
37235 return JSON.stringify(args[i++]);
37236 } catch (_) {
37237 return '[Circular]';
37238 }
37239 default:
37240 return x;
37241 }
37242 });
37243 for (var x = args[i]; i < len; x = args[++i]) {
37244 if (isNull(x) || !isObject(x)) {
37245 str += ' ' + x;
37246 } else {
37247 str += ' ' + inspect(x);
37248 }
37249 }
37250 return str;
37251};
ebd8d4e8 37252
ebd8d4e8 37253
8b095871
IC
37254// Mark that a method should not be used.
37255// Returns a modified function which warns once by default.
37256// If --no-deprecation is set, then it is a no-op.
37257exports.deprecate = function(fn, msg) {
37258 // Allow for deprecating things in the process of starting up.
37259 if (isUndefined(global.process)) {
37260 return function() {
37261 return exports.deprecate(fn, msg).apply(this, arguments);
37262 };
37263 }
37264
37265 if (process.noDeprecation === true) {
37266 return fn;
37267 }
37268
37269 var warned = false;
37270 function deprecated() {
37271 if (!warned) {
37272 if (process.throwDeprecation) {
37273 throw new Error(msg);
37274 } else if (process.traceDeprecation) {
37275 console.trace(msg);
37276 } else {
37277 console.error(msg);
37278 }
37279 warned = true;
37280 }
37281 return fn.apply(this, arguments);
37282 }
37283
37284 return deprecated;
37285};
ebd8d4e8 37286
ab78acc6 37287
8b095871
IC
37288var debugs = {};
37289var debugEnviron;
37290exports.debuglog = function(set) {
37291 if (isUndefined(debugEnviron))
37292 debugEnviron = process.env.NODE_DEBUG || '';
37293 set = set.toUpperCase();
37294 if (!debugs[set]) {
37295 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
37296 var pid = process.pid;
37297 debugs[set] = function() {
37298 var msg = exports.format.apply(exports, arguments);
37299 console.error('%s %d: %s', set, pid, msg);
37300 };
37301 } else {
37302 debugs[set] = function() {};
37303 }
37304 }
37305 return debugs[set];
37306};
ab78acc6
IC
37307
37308
8b095871
IC
37309/**
37310 * Echos the value of a value. Trys to print the value out
37311 * in the best way possible given the different types.
37312 *
37313 * @param {Object} obj The object to print out.
37314 * @param {Object} opts Optional options object that alters the output.
37315 */
37316/* legacy: obj, showHidden, depth, colors*/
37317function inspect(obj, opts) {
37318 // default options
37319 var ctx = {
37320 seen: [],
37321 stylize: stylizeNoColor
ab78acc6 37322 };
8b095871
IC
37323 // legacy...
37324 if (arguments.length >= 3) ctx.depth = arguments[2];
37325 if (arguments.length >= 4) ctx.colors = arguments[3];
37326 if (isBoolean(opts)) {
37327 // legacy...
37328 ctx.showHidden = opts;
37329 } else if (opts) {
37330 // got an "options" object
37331 exports._extend(ctx, opts);
37332 }
37333 // set default options
37334 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
37335 if (isUndefined(ctx.depth)) ctx.depth = 2;
37336 if (isUndefined(ctx.colors)) ctx.colors = false;
37337 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
37338 if (ctx.colors) ctx.stylize = stylizeWithColor;
37339 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 37340}
8b095871 37341exports.inspect = inspect;
ebd8d4e8 37342
ab78acc6 37343
8b095871
IC
37344// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
37345inspect.colors = {
37346 'bold' : [1, 22],
37347 'italic' : [3, 23],
37348 'underline' : [4, 24],
37349 'inverse' : [7, 27],
37350 'white' : [37, 39],
37351 'grey' : [90, 39],
37352 'black' : [30, 39],
37353 'blue' : [34, 39],
37354 'cyan' : [36, 39],
37355 'green' : [32, 39],
37356 'magenta' : [35, 39],
37357 'red' : [31, 39],
37358 'yellow' : [33, 39]
37359};
ab78acc6 37360
8b095871
IC
37361// Don't use 'blue' not visible on cmd.exe
37362inspect.styles = {
37363 'special': 'cyan',
37364 'number': 'yellow',
37365 'boolean': 'yellow',
37366 'undefined': 'grey',
37367 'null': 'bold',
37368 'string': 'green',
37369 'date': 'magenta',
37370 // "name": intentionally not styling
37371 'regexp': 'red'
37372};
ab78acc6 37373
ab78acc6 37374
8b095871
IC
37375function stylizeWithColor(str, styleType) {
37376 var style = inspect.styles[styleType];
ab78acc6 37377
8b095871
IC
37378 if (style) {
37379 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
37380 '\u001b[' + inspect.colors[style][1] + 'm';
37381 } else {
37382 return str;
ab78acc6 37383 }
ebd8d4e8 37384}
ebd8d4e8 37385
ab78acc6 37386
8b095871
IC
37387function stylizeNoColor(str, styleType) {
37388 return str;
37389}
ab78acc6 37390
ab78acc6 37391
8b095871
IC
37392function arrayToHash(array) {
37393 var hash = {};
ab78acc6 37394
8b095871
IC
37395 array.forEach(function(val, idx) {
37396 hash[val] = true;
ab78acc6 37397 });
ebd8d4e8 37398
8b095871
IC
37399 return hash;
37400}
ab78acc6 37401
ab78acc6 37402
8b095871
IC
37403function formatValue(ctx, value, recurseTimes) {
37404 // Provide a hook for user-specified inspect functions.
37405 // Check that value is an object with an inspect function on it
37406 if (ctx.customInspect &&
37407 value &&
37408 isFunction(value.inspect) &&
37409 // Filter out the util module, it's inspect function is special
37410 value.inspect !== exports.inspect &&
37411 // Also filter out any prototype objects using the circular check.
37412 !(value.constructor && value.constructor.prototype === value)) {
37413 var ret = value.inspect(recurseTimes, ctx);
37414 if (!isString(ret)) {
37415 ret = formatValue(ctx, ret, recurseTimes);
37416 }
37417 return ret;
ab78acc6 37418 }
ebd8d4e8 37419
8b095871
IC
37420 // Primitive types cannot have properties
37421 var primitive = formatPrimitive(ctx, value);
37422 if (primitive) {
37423 return primitive;
ab78acc6 37424 }
ebd8d4e8 37425
8b095871
IC
37426 // Look up the keys of the object.
37427 var keys = Object.keys(value);
37428 var visibleKeys = arrayToHash(keys);
ebd8d4e8 37429
8b095871
IC
37430 if (ctx.showHidden) {
37431 keys = Object.getOwnPropertyNames(value);
37432 }
ebd8d4e8 37433
8b095871
IC
37434 // IE doesn't make error fields non-enumerable
37435 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
37436 if (isError(value)
37437 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
37438 return formatError(value);
37439 }
ebd8d4e8 37440
8b095871
IC
37441 // Some type of object without properties can be shortcutted.
37442 if (keys.length === 0) {
37443 if (isFunction(value)) {
37444 var name = value.name ? ': ' + value.name : '';
37445 return ctx.stylize('[Function' + name + ']', 'special');
37446 }
37447 if (isRegExp(value)) {
37448 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
37449 }
37450 if (isDate(value)) {
37451 return ctx.stylize(Date.prototype.toString.call(value), 'date');
37452 }
37453 if (isError(value)) {
37454 return formatError(value);
37455 }
37456 }
ab78acc6 37457
8b095871 37458 var base = '', array = false, braces = ['{', '}'];
ab78acc6 37459
8b095871
IC
37460 // Make Array say that they are Array
37461 if (isArray(value)) {
37462 array = true;
37463 braces = ['[', ']'];
37464 }
ebd8d4e8 37465
8b095871
IC
37466 // Make functions say that they are functions
37467 if (isFunction(value)) {
37468 var n = value.name ? ': ' + value.name : '';
37469 base = ' [Function' + n + ']';
37470 }
ebd8d4e8 37471
8b095871
IC
37472 // Make RegExps say that they are RegExps
37473 if (isRegExp(value)) {
37474 base = ' ' + RegExp.prototype.toString.call(value);
37475 }
ebd8d4e8 37476
8b095871
IC
37477 // Make dates with properties first say the date
37478 if (isDate(value)) {
37479 base = ' ' + Date.prototype.toUTCString.call(value);
37480 }
ebd8d4e8 37481
8b095871
IC
37482 // Make error with message first say the error
37483 if (isError(value)) {
37484 base = ' ' + formatError(value);
37485 }
ebd8d4e8 37486
8b095871
IC
37487 if (keys.length === 0 && (!array || value.length == 0)) {
37488 return braces[0] + base + braces[1];
37489 }
ebd8d4e8 37490
8b095871
IC
37491 if (recurseTimes < 0) {
37492 if (isRegExp(value)) {
37493 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
37494 } else {
37495 return ctx.stylize('[Object]', 'special');
37496 }
37497 }
ebd8d4e8 37498
8b095871 37499 ctx.seen.push(value);
ebd8d4e8 37500
8b095871
IC
37501 var output;
37502 if (array) {
37503 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
37504 } else {
37505 output = keys.map(function(key) {
37506 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
37507 });
37508 }
ebd8d4e8 37509
8b095871 37510 ctx.seen.pop();
ebd8d4e8 37511
8b095871 37512 return reduceToSingleString(output, base, braces);
ebd8d4e8
IC
37513}
37514
ebd8d4e8 37515
8b095871
IC
37516function formatPrimitive(ctx, value) {
37517 if (isUndefined(value))
37518 return ctx.stylize('undefined', 'undefined');
37519 if (isString(value)) {
37520 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
37521 .replace(/'/g, "\\'")
37522 .replace(/\\"/g, '"') + '\'';
37523 return ctx.stylize(simple, 'string');
37524 }
37525 if (isNumber(value))
37526 return ctx.stylize('' + value, 'number');
37527 if (isBoolean(value))
37528 return ctx.stylize('' + value, 'boolean');
37529 // For some reason typeof null is "object", so special case here.
37530 if (isNull(value))
37531 return ctx.stylize('null', 'null');
37532}
ebd8d4e8 37533
ebd8d4e8 37534
8b095871
IC
37535function formatError(value) {
37536 return '[' + Error.prototype.toString.call(value) + ']';
37537}
ebd8d4e8 37538
ebd8d4e8 37539
8b095871
IC
37540function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
37541 var output = [];
37542 for (var i = 0, l = value.length; i < l; ++i) {
37543 if (hasOwnProperty(value, String(i))) {
37544 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
37545 String(i), true));
37546 } else {
37547 output.push('');
37548 }
37549 }
37550 keys.forEach(function(key) {
37551 if (!key.match(/^\d+$/)) {
37552 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
37553 key, true));
37554 }
37555 });
37556 return output;
37557}
ebd8d4e8 37558
ebd8d4e8 37559
8b095871
IC
37560function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
37561 var name, str, desc;
37562 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
37563 if (desc.get) {
37564 if (desc.set) {
37565 str = ctx.stylize('[Getter/Setter]', 'special');
37566 } else {
37567 str = ctx.stylize('[Getter]', 'special');
37568 }
37569 } else {
37570 if (desc.set) {
37571 str = ctx.stylize('[Setter]', 'special');
37572 }
37573 }
37574 if (!hasOwnProperty(visibleKeys, key)) {
37575 name = '[' + key + ']';
37576 }
37577 if (!str) {
37578 if (ctx.seen.indexOf(desc.value) < 0) {
37579 if (isNull(recurseTimes)) {
37580 str = formatValue(ctx, desc.value, null);
37581 } else {
37582 str = formatValue(ctx, desc.value, recurseTimes - 1);
37583 }
37584 if (str.indexOf('\n') > -1) {
37585 if (array) {
37586 str = str.split('\n').map(function(line) {
37587 return ' ' + line;
37588 }).join('\n').substr(2);
37589 } else {
37590 str = '\n' + str.split('\n').map(function(line) {
37591 return ' ' + line;
37592 }).join('\n');
37593 }
37594 }
37595 } else {
37596 str = ctx.stylize('[Circular]', 'special');
37597 }
37598 }
37599 if (isUndefined(name)) {
37600 if (array && key.match(/^\d+$/)) {
37601 return str;
37602 }
37603 name = JSON.stringify('' + key);
37604 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
37605 name = name.substr(1, name.length - 2);
37606 name = ctx.stylize(name, 'name');
37607 } else {
37608 name = name.replace(/'/g, "\\'")
37609 .replace(/\\"/g, '"')
37610 .replace(/(^"|"$)/g, "'");
37611 name = ctx.stylize(name, 'string');
37612 }
37613 }
ebd8d4e8 37614
8b095871
IC
37615 return name + ': ' + str;
37616}
ebd8d4e8 37617
ebd8d4e8 37618
8b095871
IC
37619function reduceToSingleString(output, base, braces) {
37620 var numLinesEst = 0;
37621 var length = output.reduce(function(prev, cur) {
37622 numLinesEst++;
37623 if (cur.indexOf('\n') >= 0) numLinesEst++;
37624 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
37625 }, 0);
ebd8d4e8 37626
8b095871
IC
37627 if (length > 60) {
37628 return braces[0] +
37629 (base === '' ? '' : base + '\n ') +
37630 ' ' +
37631 output.join(',\n ') +
37632 ' ' +
37633 braces[1];
37634 }
ebd8d4e8 37635
8b095871
IC
37636 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
37637}
ebd8d4e8 37638
ebd8d4e8 37639
8b095871
IC
37640// NOTE: These type checking functions intentionally don't use `instanceof`
37641// because it is fragile and can be easily faked with `Object.create()`.
37642function isArray(ar) {
37643 return Array.isArray(ar);
37644}
37645exports.isArray = isArray;
ebd8d4e8 37646
8b095871
IC
37647function isBoolean(arg) {
37648 return typeof arg === 'boolean';
37649}
37650exports.isBoolean = isBoolean;
ebd8d4e8 37651
8b095871
IC
37652function isNull(arg) {
37653 return arg === null;
37654}
37655exports.isNull = isNull;
ebd8d4e8 37656
8b095871
IC
37657function isNullOrUndefined(arg) {
37658 return arg == null;
ebd8d4e8 37659}
8b095871 37660exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 37661
8b095871
IC
37662function isNumber(arg) {
37663 return typeof arg === 'number';
37664}
37665exports.isNumber = isNumber;
ebd8d4e8 37666
8b095871
IC
37667function isString(arg) {
37668 return typeof arg === 'string';
37669}
37670exports.isString = isString;
ebd8d4e8 37671
8b095871
IC
37672function isSymbol(arg) {
37673 return typeof arg === 'symbol';
37674}
37675exports.isSymbol = isSymbol;
ebd8d4e8 37676
8b095871
IC
37677function isUndefined(arg) {
37678 return arg === void 0;
37679}
37680exports.isUndefined = isUndefined;
ebd8d4e8 37681
8b095871
IC
37682function isRegExp(re) {
37683 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 37684}
8b095871 37685exports.isRegExp = isRegExp;
ebd8d4e8 37686
8b095871
IC
37687function isObject(arg) {
37688 return typeof arg === 'object' && arg !== null;
37689}
37690exports.isObject = isObject;
ebd8d4e8 37691
8b095871
IC
37692function isDate(d) {
37693 return isObject(d) && objectToString(d) === '[object Date]';
37694}
37695exports.isDate = isDate;
ebd8d4e8 37696
8b095871
IC
37697function isError(e) {
37698 return isObject(e) &&
37699 (objectToString(e) === '[object Error]' || e instanceof Error);
ebd8d4e8 37700}
8b095871 37701exports.isError = isError;
ebd8d4e8 37702
8b095871
IC
37703function isFunction(arg) {
37704 return typeof arg === 'function';
ebd8d4e8 37705}
8b095871 37706exports.isFunction = isFunction;
ebd8d4e8 37707
8b095871
IC
37708function isPrimitive(arg) {
37709 return arg === null ||
37710 typeof arg === 'boolean' ||
37711 typeof arg === 'number' ||
37712 typeof arg === 'string' ||
37713 typeof arg === 'symbol' || // ES6 symbol
37714 typeof arg === 'undefined';
37715}
37716exports.isPrimitive = isPrimitive;
ebd8d4e8 37717
8b095871 37718exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 37719
8b095871
IC
37720function objectToString(o) {
37721 return Object.prototype.toString.call(o);
37722}
ab78acc6 37723
ab78acc6 37724
8b095871
IC
37725function pad(n) {
37726 return n < 10 ? '0' + n.toString(10) : n.toString(10);
37727}
ebd8d4e8 37728
ab78acc6 37729
8b095871
IC
37730var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
37731 'Oct', 'Nov', 'Dec'];
ab78acc6 37732
8b095871
IC
37733// 26 Feb 16:19:34
37734function timestamp() {
37735 var d = new Date();
37736 var time = [pad(d.getHours()),
37737 pad(d.getMinutes()),
37738 pad(d.getSeconds())].join(':');
37739 return [d.getDate(), months[d.getMonth()], time].join(' ');
37740}
37741
37742
37743// log is just a thin wrapper to console.log that prepends a timestamp
37744exports.log = function() {
37745 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ab78acc6 37746};
ebd8d4e8 37747
ebd8d4e8 37748
8b095871
IC
37749/**
37750 * Inherit the prototype methods from one constructor into another.
37751 *
37752 * The Function.prototype.inherits from lang.js rewritten as a standalone
37753 * function (not on Function.prototype). NOTE: If this file is to be loaded
37754 * during bootstrapping this function needs to be rewritten using some native
37755 * functions as prototype setup using normal JavaScript does not work as
37756 * expected during bootstrapping (see mirror.js in r114903).
37757 *
37758 * @param {function} ctor Constructor function which needs to inherit the
37759 * prototype.
37760 * @param {function} superCtor Constructor function to inherit prototype from.
37761 */
37762exports.inherits = require('inherits');
ebd8d4e8 37763
8b095871
IC
37764exports._extend = function(origin, add) {
37765 // Don't do anything if add isn't an object
37766 if (!add || !isObject(add)) return origin;
37767
37768 var keys = Object.keys(add);
37769 var i = keys.length;
37770 while (i--) {
37771 origin[keys[i]] = add[keys[i]];
ebd8d4e8 37772 }
8b095871 37773 return origin;
ab78acc6 37774};
ebd8d4e8 37775
8b095871
IC
37776function hasOwnProperty(obj, prop) {
37777 return Object.prototype.hasOwnProperty.call(obj, prop);
ebd8d4e8
IC
37778}
37779
8b095871
IC
37780}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
37781},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
37782(function (Buffer){
37783const createKeccakHash = require('keccak')
37784const secp256k1 = require('secp256k1')
37785const assert = require('assert')
37786const rlp = require('rlp')
37787const BN = require('bn.js')
37788const createHash = require('create-hash')
37789Object.assign(exports, require('ethjs-util'))
ab78acc6 37790
8b095871
IC
37791/**
37792 * the max integer that this VM can handle (a ```BN```)
37793 * @var {BN} MAX_INTEGER
37794 */
37795exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
ab78acc6 37796
8b095871
IC
37797/**
37798 * 2^256 (a ```BN```)
37799 * @var {BN} TWO_POW256
37800 */
37801exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
ab78acc6 37802
8b095871
IC
37803/**
37804 * SHA3-256 hash of null (a ```String```)
37805 * @var {String} SHA3_NULL_S
37806 */
37807exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
ebd8d4e8 37808
8b095871
IC
37809/**
37810 * SHA3-256 hash of null (a ```Buffer```)
37811 * @var {Buffer} SHA3_NULL
37812 */
37813exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
ebd8d4e8 37814
8b095871
IC
37815/**
37816 * SHA3-256 of an RLP of an empty array (a ```String```)
37817 * @var {String} SHA3_RLP_ARRAY_S
37818 */
37819exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
ebd8d4e8 37820
8b095871
IC
37821/**
37822 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
37823 * @var {Buffer} SHA3_RLP_ARRAY
37824 */
37825exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
ebd8d4e8 37826
8b095871
IC
37827/**
37828 * SHA3-256 hash of the RLP of null (a ```String```)
37829 * @var {String} SHA3_RLP_S
37830 */
37831exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
ebd8d4e8 37832
8b095871
IC
37833/**
37834 * SHA3-256 hash of the RLP of null (a ```Buffer```)
37835 * @var {Buffer} SHA3_RLP
37836 */
37837exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
ebd8d4e8 37838
8b095871
IC
37839/**
37840 * [`BN`](https://github.com/indutny/bn.js)
37841 * @var {Function}
37842 */
37843exports.BN = BN
ebd8d4e8 37844
8b095871
IC
37845/**
37846 * [`rlp`](https://github.com/ethereumjs/rlp)
37847 * @var {Function}
37848 */
37849exports.rlp = rlp
ebd8d4e8 37850
8b095871
IC
37851/**
37852 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
37853 * @var {Object}
37854 */
37855exports.secp256k1 = secp256k1
ab78acc6 37856
8b095871
IC
37857/**
37858 * Returns a buffer filled with 0s
37859 * @method zeros
37860 * @param {Number} bytes the number of bytes the buffer should be
37861 * @return {Buffer}
37862 */
37863exports.zeros = function (bytes) {
37864 return Buffer.allocUnsafe(bytes).fill(0)
37865}
37866
37867/**
37868 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
37869 * Or it truncates the beginning if it exceeds.
37870 * @method lsetLength
37871 * @param {Buffer|Array} msg the value to pad
37872 * @param {Number} length the number of bytes the output should be
37873 * @param {Boolean} [right=false] whether to start padding form the left or right
37874 * @return {Buffer|Array}
37875 */
37876exports.setLengthLeft = exports.setLength = function (msg, length, right) {
37877 var buf = exports.zeros(length)
37878 msg = exports.toBuffer(msg)
37879 if (right) {
37880 if (msg.length < length) {
37881 msg.copy(buf)
37882 return buf
37883 }
37884 return msg.slice(0, length)
37885 } else {
37886 if (msg.length < length) {
37887 msg.copy(buf, length - msg.length)
37888 return buf
ebd8d4e8 37889 }
8b095871 37890 return msg.slice(-length)
ebd8d4e8
IC
37891 }
37892}
37893
8b095871
IC
37894/**
37895 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
37896 * Or it truncates the beginning if it exceeds.
37897 * @param {Buffer|Array} msg the value to pad
37898 * @param {Number} length the number of bytes the output should be
37899 * @return {Buffer|Array}
37900 */
37901exports.setLengthRight = function (msg, length) {
37902 return exports.setLength(msg, length, true)
ab78acc6
IC
37903}
37904
8b095871
IC
37905/**
37906 * Trims leading zeros from a `Buffer` or an `Array`
37907 * @param {Buffer|Array|String} a
37908 * @return {Buffer|Array|String}
37909 */
37910exports.unpad = exports.stripZeros = function (a) {
37911 a = exports.stripHexPrefix(a)
37912 var first = a[0]
37913 while (a.length > 0 && first.toString() === '0') {
37914 a = a.slice(1)
37915 first = a[0]
37916 }
37917 return a
37918}
37919/**
37920 * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.
37921 * @param {*} v the value
37922 */
37923exports.toBuffer = function (v) {
37924 if (!Buffer.isBuffer(v)) {
37925 if (Array.isArray(v)) {
37926 v = Buffer.from(v)
37927 } else if (typeof v === 'string') {
37928 if (exports.isHexPrefixed(v)) {
37929 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
37930 } else {
37931 v = Buffer.from(v)
37932 }
37933 } else if (typeof v === 'number') {
37934 v = exports.intToBuffer(v)
37935 } else if (v === null || v === undefined) {
37936 v = Buffer.allocUnsafe(0)
37937 } else if (v.toArray) {
37938 // converts a BN to a Buffer
37939 v = Buffer.from(v.toArray())
37940 } else {
37941 throw new Error('invalid type')
37942 }
ebd8d4e8 37943 }
8b095871 37944 return v
ebd8d4e8
IC
37945}
37946
8b095871
IC
37947/**
37948 * Converts a `Buffer` to a `Number`
37949 * @param {Buffer} buf
37950 * @return {Number}
37951 * @throws If the input number exceeds 53 bits.
37952 */
37953exports.bufferToInt = function (buf) {
37954 return new BN(exports.toBuffer(buf)).toNumber()
37955}
ebd8d4e8 37956
8b095871
IC
37957/**
37958 * Converts a `Buffer` into a hex `String`
37959 * @param {Buffer} buf
37960 * @return {String}
37961 */
37962exports.bufferToHex = function (buf) {
37963 buf = exports.toBuffer(buf)
37964 return '0x' + buf.toString('hex')
37965}
ab78acc6 37966
8b095871
IC
37967/**
37968 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
37969 * @param {Buffer} num
37970 * @return {BN}
37971 */
37972exports.fromSigned = function (num) {
37973 return new BN(num).fromTwos(256)
37974}
ab78acc6 37975
8b095871
IC
37976/**
37977 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
37978 * @param {BN} num
37979 * @return {Buffer}
37980 */
37981exports.toUnsigned = function (num) {
37982 return Buffer.from(num.toTwos(256).toArray())
37983}
ab78acc6 37984
8b095871
IC
37985/**
37986 * Creates SHA-3 hash of the input
37987 * @param {Buffer|Array|String|Number} a the input data
37988 * @param {Number} [bits=256] the SHA width
37989 * @return {Buffer}
37990 */
37991exports.sha3 = function (a, bits) {
37992 a = exports.toBuffer(a)
37993 if (!bits) bits = 256
ab78acc6 37994
8b095871
IC
37995 return createKeccakHash('keccak' + bits).update(a).digest()
37996}
ab78acc6 37997
8b095871
IC
37998/**
37999 * Creates SHA256 hash of the input
38000 * @param {Buffer|Array|String|Number} a the input data
38001 * @return {Buffer}
38002 */
38003exports.sha256 = function (a) {
38004 a = exports.toBuffer(a)
38005 return createHash('sha256').update(a).digest()
38006}
ab78acc6 38007
8b095871
IC
38008/**
38009 * Creates RIPEMD160 hash of the input
38010 * @param {Buffer|Array|String|Number} a the input data
38011 * @param {Boolean} padded whether it should be padded to 256 bits or not
38012 * @return {Buffer}
38013 */
38014exports.ripemd160 = function (a, padded) {
38015 a = exports.toBuffer(a)
38016 var hash = createHash('rmd160').update(a).digest()
38017 if (padded === true) {
38018 return exports.setLength(hash, 32)
38019 } else {
38020 return hash
ebd8d4e8 38021 }
8b095871 38022}
ebd8d4e8 38023
8b095871
IC
38024/**
38025 * Creates SHA-3 hash of the RLP encoded version of the input
38026 * @param {Buffer|Array|String|Number} a the input data
38027 * @return {Buffer}
38028 */
38029exports.rlphash = function (a) {
38030 return exports.sha3(rlp.encode(a))
ebd8d4e8
IC
38031}
38032
8b095871
IC
38033/**
38034 * Checks if the private key satisfies the rules of the curve secp256k1.
38035 * @param {Buffer} privateKey
38036 * @return {Boolean}
38037 */
38038exports.isValidPrivate = function (privateKey) {
38039 return secp256k1.privateKeyVerify(privateKey)
38040}
ebd8d4e8 38041
8b095871
IC
38042/**
38043 * Checks if the public key satisfies the rules of the curve secp256k1
38044 * and the requirements of Ethereum.
38045 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
38046 * @param {Boolean} [sanitize=false] Accept public keys in other formats
38047 * @return {Boolean}
38048 */
38049exports.isValidPublic = function (publicKey, sanitize) {
38050 if (publicKey.length === 64) {
38051 // Convert to SEC1 for secp256k1
38052 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
38053 }
ebd8d4e8 38054
8b095871
IC
38055 if (!sanitize) {
38056 return false
38057 }
ebd8d4e8 38058
8b095871
IC
38059 return secp256k1.publicKeyVerify(publicKey)
38060}
ebd8d4e8 38061
8b095871
IC
38062/**
38063 * Returns the ethereum address of a given public key.
38064 * Accepts "Ethereum public keys" and SEC1 encoded keys.
38065 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
38066 * @param {Boolean} [sanitize=false] Accept public keys in other formats
38067 * @return {Buffer}
38068 */
38069exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
38070 pubKey = exports.toBuffer(pubKey)
38071 if (sanitize && (pubKey.length !== 64)) {
38072 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
ab78acc6 38073 }
8b095871
IC
38074 assert(pubKey.length === 64)
38075 // Only take the lower 160bits of the hash
38076 return exports.sha3(pubKey).slice(-20)
38077}
ebd8d4e8 38078
8b095871
IC
38079/**
38080 * Returns the ethereum public key of a given private key
38081 * @param {Buffer} privateKey A private key must be 256 bits wide
38082 * @return {Buffer}
38083 */
38084var privateToPublic = exports.privateToPublic = function (privateKey) {
38085 privateKey = exports.toBuffer(privateKey)
38086 // skip the type flag and use the X, Y points
38087 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
38088}
ab78acc6 38089
8b095871
IC
38090/**
38091 * Converts a public key to the Ethereum format.
38092 * @param {Buffer} publicKey
38093 * @return {Buffer}
38094 */
38095exports.importPublic = function (publicKey) {
38096 publicKey = exports.toBuffer(publicKey)
38097 if (publicKey.length !== 64) {
38098 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
ebd8d4e8 38099 }
8b095871
IC
38100 return publicKey
38101}
ab78acc6 38102
8b095871
IC
38103/**
38104 * ECDSA sign
38105 * @param {Buffer} msgHash
38106 * @param {Buffer} privateKey
38107 * @return {Object}
38108 */
38109exports.ecsign = function (msgHash, privateKey) {
38110 var sig = secp256k1.sign(msgHash, privateKey)
ab78acc6 38111
8b095871
IC
38112 var ret = {}
38113 ret.r = sig.signature.slice(0, 32)
38114 ret.s = sig.signature.slice(32, 64)
38115 ret.v = sig.recovery + 27
38116 return ret
ebd8d4e8
IC
38117}
38118
8b095871
IC
38119/**
38120 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
38121 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
38122 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
38123 * used to produce the signature.
38124 * @param message
38125 * @returns {Buffer} hash
38126 */
38127exports.hashPersonalMessage = function (message) {
38128 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
38129 return exports.sha3(Buffer.concat([prefix, message]))
ebd8d4e8
IC
38130}
38131
8b095871
IC
38132/**
38133 * ECDSA public key recovery from signature
38134 * @param {Buffer} msgHash
38135 * @param {Number} v
38136 * @param {Buffer} r
38137 * @param {Buffer} s
38138 * @return {Buffer} publicKey
38139 */
38140exports.ecrecover = function (msgHash, v, r, s) {
38141 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
38142 var recovery = v - 27
38143 if (recovery !== 0 && recovery !== 1) {
38144 throw new Error('Invalid signature v value')
ab78acc6 38145 }
8b095871
IC
38146 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
38147 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
ab78acc6 38148}
ebd8d4e8 38149
8b095871
IC
38150/**
38151 * Convert signature parameters into the format of `eth_sign` RPC method
38152 * @param {Number} v
38153 * @param {Buffer} r
38154 * @param {Buffer} s
38155 * @return {String} sig
38156 */
38157exports.toRpcSig = function (v, r, s) {
38158 // NOTE: with potential introduction of chainId this might need to be updated
38159 if (v !== 27 && v !== 28) {
38160 throw new Error('Invalid recovery id')
38161 }
38162
38163 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
38164 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
38165 return exports.bufferToHex(Buffer.concat([
38166 exports.setLengthLeft(r, 32),
38167 exports.setLengthLeft(s, 32),
38168 exports.toBuffer(v - 27)
38169 ]))
ebd8d4e8
IC
38170}
38171
8b095871
IC
38172/**
38173 * Convert signature format of the `eth_sign` RPC method to signature parameters
38174 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
38175 * @param {String} sig
38176 * @return {Object}
38177 */
38178exports.fromRpcSig = function (sig) {
38179 sig = exports.toBuffer(sig)
ebd8d4e8 38180
8b095871
IC
38181 // NOTE: with potential introduction of chainId this might need to be updated
38182 if (sig.length !== 65) {
38183 throw new Error('Invalid signature length')
38184 }
38185
38186 var v = sig[64]
38187 // support both versions of `eth_sign` responses
38188 if (v < 27) {
38189 v += 27
38190 }
38191
38192 return {
38193 v: v,
38194 r: sig.slice(0, 32),
38195 s: sig.slice(32, 64)
38196 }
ebd8d4e8
IC
38197}
38198
8b095871
IC
38199/**
38200 * Returns the ethereum address of a given private key
38201 * @param {Buffer} privateKey A private key must be 256 bits wide
38202 * @return {Buffer}
38203 */
38204exports.privateToAddress = function (privateKey) {
38205 return exports.publicToAddress(privateToPublic(privateKey))
ab78acc6 38206}
ebd8d4e8 38207
8b095871
IC
38208/**
38209 * Checks if the address is a valid. Accepts checksummed addresses too
38210 * @param {String} address
38211 * @return {Boolean}
38212 */
38213exports.isValidAddress = function (address) {
38214 return /^0x[0-9a-fA-F]{40}$/i.test(address)
ab78acc6 38215}
ebd8d4e8 38216
8b095871
IC
38217/**
38218 * Returns a checksummed address
38219 * @param {String} address
38220 * @return {String}
38221 */
38222exports.toChecksumAddress = function (address) {
38223 address = exports.stripHexPrefix(address).toLowerCase()
38224 var hash = exports.sha3(address).toString('hex')
38225 var ret = '0x'
38226
38227 for (var i = 0; i < address.length; i++) {
38228 if (parseInt(hash[i], 16) >= 8) {
38229 ret += address[i].toUpperCase()
38230 } else {
38231 ret += address[i]
38232 }
38233 }
38234
38235 return ret
ebd8d4e8
IC
38236}
38237
8b095871
IC
38238/**
38239 * Checks if the address is a valid checksummed address
38240 * @param {Buffer} address
38241 * @return {Boolean}
38242 */
38243exports.isValidChecksumAddress = function (address) {
38244 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
ab78acc6 38245}
ebd8d4e8 38246
8b095871
IC
38247/**
38248 * Generates an address of a newly created contract
38249 * @param {Buffer} from the address which is creating this new address
38250 * @param {Buffer} nonce the nonce of the from account
38251 * @return {Buffer}
38252 */
38253exports.generateAddress = function (from, nonce) {
38254 from = exports.toBuffer(from)
38255 nonce = new BN(nonce)
38256
38257 if (nonce.isZero()) {
38258 // in RLP we want to encode null in the case of zero nonce
38259 // read the RLP documentation for an answer if you dare
38260 nonce = null
38261 } else {
38262 nonce = Buffer.from(nonce.toArray())
38263 }
38264
38265 // Only take the lower 160bits of the hash
38266 return exports.rlphash([from, nonce]).slice(-20)
ab78acc6 38267}
ebd8d4e8 38268
8b095871
IC
38269/**
38270 * Returns true if the supplied address belongs to a precompiled account
38271 * @param {Buffer|String} address
38272 * @return {Boolean}
38273 */
38274exports.isPrecompiled = function (address) {
38275 var a = exports.unpad(address)
38276 return a.length === 1 && a[0] > 0 && a[0] < 5
ebd8d4e8
IC
38277}
38278
8b095871
IC
38279/**
38280 * Adds "0x" to a given `String` if it does not already start with "0x"
38281 * @param {String} str
38282 * @return {String}
38283 */
38284exports.addHexPrefix = function (str) {
38285 if (typeof str !== 'string') {
38286 return str
38287 }
38288
38289 return exports.isHexPrefixed(str) ? str : '0x' + str
ebd8d4e8
IC
38290}
38291
8b095871
IC
38292/**
38293 * Validate ECDSA signature
38294 * @method isValidSignature
38295 * @param {Buffer} v
38296 * @param {Buffer} r
38297 * @param {Buffer} s
38298 * @param {Boolean} [homestead=true]
38299 * @return {Boolean}
38300 */
38301
38302exports.isValidSignature = function (v, r, s, homestead) {
38303 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
38304 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
38305
38306 if (r.length !== 32 || s.length !== 32) {
38307 return false
38308 }
38309
38310 if (v !== 27 && v !== 28) {
38311 return false
38312 }
38313
38314 r = new BN(r)
38315 s = new BN(s)
38316
38317 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
38318 return false
38319 }
38320
38321 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
38322 return false
38323 }
38324
38325 return true
ebd8d4e8
IC
38326}
38327
8b095871
IC
38328/**
38329 * Converts a `Buffer` or `Array` to JSON
38330 * @param {Buffer|Array} ba
38331 * @return {Array|String|null}
38332 */
38333exports.baToJSON = function (ba) {
38334 if (Buffer.isBuffer(ba)) {
38335 return '0x' + ba.toString('hex')
38336 } else if (ba instanceof Array) {
38337 var array = []
38338 for (var i = 0; i < ba.length; i++) {
38339 array.push(exports.baToJSON(ba[i]))
38340 }
38341 return array
38342 }
ab78acc6 38343}
ebd8d4e8 38344
8b095871
IC
38345/**
38346 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
38347 * @param {Object} self the `Object` to define properties on
38348 * @param {Array} fields an array fields to define. Fields can contain:
38349 * * `name` - the name of the properties
38350 * * `length` - the number of bytes the field can have
38351 * * `allowLess` - if the field can be less than the length
38352 * * `allowEmpty`
38353 * @param {*} data data to be validated against the definitions
38354 */
38355exports.defineProperties = function (self, fields, data) {
38356 self.raw = []
38357 self._fields = []
38358
38359 // attach the `toJSON`
38360 self.toJSON = function (label) {
38361 if (label) {
38362 var obj = {}
38363 self._fields.forEach(function (field) {
38364 obj[field] = '0x' + self[field].toString('hex')
38365 })
38366 return obj
38367 }
38368 return exports.baToJSON(this.raw)
38369 }
38370
38371 self.serialize = function serialize () {
38372 return rlp.encode(self.raw)
38373 }
38374
38375 fields.forEach(function (field, i) {
38376 self._fields.push(field.name)
38377 function getter () {
38378 return self.raw[i]
38379 }
38380 function setter (v) {
38381 v = exports.toBuffer(v)
38382
38383 if (v.toString('hex') === '00' && !field.allowZero) {
38384 v = Buffer.allocUnsafe(0)
38385 }
38386
38387 if (field.allowLess && field.length) {
38388 v = exports.stripZeros(v)
38389 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
38390 } else if (!(field.allowZero && v.length === 0) && field.length) {
38391 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
38392 }
38393
38394 self.raw[i] = v
38395 }
38396
38397 Object.defineProperty(self, field.name, {
38398 enumerable: true,
38399 configurable: true,
38400 get: getter,
38401 set: setter
38402 })
38403
38404 if (field.default) {
38405 self[field.name] = field.default
38406 }
38407
38408 // attach alias
38409 if (field.alias) {
38410 Object.defineProperty(self, field.alias, {
38411 enumerable: false,
38412 configurable: true,
38413 set: setter,
38414 get: getter
38415 })
38416 }
38417 })
38418
38419 // if the constuctor is passed data
38420 if (data) {
38421 if (typeof data === 'string') {
38422 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
38423 }
38424
38425 if (Buffer.isBuffer(data)) {
38426 data = rlp.decode(data)
38427 }
38428
38429 if (Array.isArray(data)) {
38430 if (data.length > self._fields.length) {
38431 throw (new Error('wrong number of fields in data'))
38432 }
38433
38434 // make sure all the items are buffers
38435 data.forEach(function (d, i) {
38436 self[self._fields[i]] = exports.toBuffer(d)
38437 })
38438 } else if (typeof data === 'object') {
38439 const keys = Object.keys(data)
38440 fields.forEach(function (field) {
38441 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
38442 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
38443 })
38444 } else {
38445 throw new Error('invalid data')
38446 }
38447 }
ab78acc6 38448}
ebd8d4e8 38449
8b095871
IC
38450}).call(this,require("buffer").Buffer)
38451},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
38452(function (Buffer){
38453// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
38454// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
38455// NOTE: SIGHASH byte ignored AND restricted, truncate before use
38456
38457function check (buffer) {
38458 if (buffer.length < 8) return false
38459 if (buffer.length > 72) return false
38460 if (buffer[0] !== 0x30) return false
38461 if (buffer[1] !== buffer.length - 2) return false
38462 if (buffer[2] !== 0x02) return false
38463
38464 var lenR = buffer[3]
38465 if (lenR === 0) return false
38466 if (5 + lenR >= buffer.length) return false
38467 if (buffer[4 + lenR] !== 0x02) return false
38468
38469 var lenS = buffer[5 + lenR]
38470 if (lenS === 0) return false
38471 if ((6 + lenR + lenS) !== buffer.length) return false
38472
38473 if (buffer[4] & 0x80) return false
38474 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
38475
38476 if (buffer[lenR + 6] & 0x80) return false
38477 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
38478 return true
ab78acc6 38479}
ab78acc6 38480
8b095871
IC
38481function decode (buffer) {
38482 if (buffer.length < 8) throw new Error('DER sequence length is too short')
38483 if (buffer.length > 72) throw new Error('DER sequence length is too long')
38484 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
38485 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
38486 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
38487
38488 var lenR = buffer[3]
38489 if (lenR === 0) throw new Error('R length is zero')
38490 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
38491 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
38492
38493 var lenS = buffer[5 + lenR]
38494 if (lenS === 0) throw new Error('S length is zero')
38495 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
38496
38497 if (buffer[4] & 0x80) throw new Error('R value is negative')
38498 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
38499
38500 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
38501 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
38502
38503 // non-BIP66 - extract R, S values
38504 return {
38505 r: buffer.slice(4, 4 + lenR),
38506 s: buffer.slice(6 + lenR)
38507 }
ebd8d4e8
IC
38508}
38509
8b095871
IC
38510/*
38511 * Expects r and s to be positive DER integers.
38512 *
38513 * The DER format uses the most significant bit as a sign bit (& 0x80).
38514 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
38515 *
38516 * Examples:
38517 *
38518 * 0 => 0x00
38519 * 1 => 0x01
38520 * -1 => 0xff
38521 * 127 => 0x7f
38522 * -127 => 0x81
38523 * 128 => 0x0080
38524 * -128 => 0x80
38525 * 255 => 0x00ff
38526 * -255 => 0xff01
38527 * 16300 => 0x3fac
38528 * -16300 => 0xc054
38529 * 62300 => 0x00f35c
38530 * -62300 => 0xff0ca4
38531*/
38532function encode (r, s) {
38533 var lenR = r.length
38534 var lenS = s.length
38535 if (lenR === 0) throw new Error('R length is zero')
38536 if (lenS === 0) throw new Error('S length is zero')
38537 if (lenR > 33) throw new Error('R length is too long')
38538 if (lenS > 33) throw new Error('S length is too long')
38539 if (r[0] & 0x80) throw new Error('R value is negative')
38540 if (s[0] & 0x80) throw new Error('S value is negative')
38541 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
38542 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
38543
38544 var signature = new Buffer(6 + lenR + lenS)
38545
38546 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
38547 signature[0] = 0x30
38548 signature[1] = signature.length - 2
38549 signature[2] = 0x02
38550 signature[3] = r.length
38551 r.copy(signature, 4)
38552 signature[4 + lenR] = 0x02
38553 signature[5 + lenR] = s.length
38554 s.copy(signature, 6 + lenR)
38555
38556 return signature
ebd8d4e8
IC
38557}
38558
8b095871
IC
38559module.exports = {
38560 check: check,
38561 decode: decode,
38562 encode: encode
ebd8d4e8 38563}
8b095871 38564
ab78acc6 38565}).call(this,require("buffer").Buffer)
8b095871
IC
38566},{"buffer":5}],33:[function(require,module,exports){
38567(function (module, exports) {
38568 'use strict';
ebd8d4e8 38569
8b095871
IC
38570 // Utils
38571 function assert (val, msg) {
38572 if (!val) throw new Error(msg || 'Assertion failed');
38573 }
ebd8d4e8 38574
8b095871
IC
38575 // Could use `inherits` module, but don't want to move from single file
38576 // architecture yet.
38577 function inherits (ctor, superCtor) {
38578 ctor.super_ = superCtor;
38579 var TempCtor = function () {};
38580 TempCtor.prototype = superCtor.prototype;
38581 ctor.prototype = new TempCtor();
38582 ctor.prototype.constructor = ctor;
38583 }
ebd8d4e8 38584
8b095871 38585 // BN
ab78acc6 38586
8b095871
IC
38587 function BN (number, base, endian) {
38588 if (BN.isBN(number)) {
38589 return number;
38590 }
ab78acc6 38591
8b095871
IC
38592 this.negative = 0;
38593 this.words = null;
38594 this.length = 0;
ab78acc6 38595
8b095871
IC
38596 // Reduction context
38597 this.red = null;
ab78acc6 38598
8b095871
IC
38599 if (number !== null) {
38600 if (base === 'le' || base === 'be') {
38601 endian = base;
38602 base = 10;
38603 }
ab78acc6 38604
8b095871
IC
38605 this._init(number || 0, base || 10, endian || 'be');
38606 }
38607 }
38608 if (typeof module === 'object') {
38609 module.exports = BN;
38610 } else {
38611 exports.BN = BN;
38612 }
ab78acc6 38613
8b095871
IC
38614 BN.BN = BN;
38615 BN.wordSize = 26;
ab78acc6 38616
8b095871
IC
38617 var Buffer;
38618 try {
38619 Buffer = require('buf' + 'fer').Buffer;
38620 } catch (e) {
38621 }
ab78acc6 38622
8b095871
IC
38623 BN.isBN = function isBN (num) {
38624 if (num instanceof BN) {
38625 return true;
38626 }
ab78acc6 38627
8b095871
IC
38628 return num !== null && typeof num === 'object' &&
38629 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
38630 };
ebd8d4e8 38631
8b095871
IC
38632 BN.max = function max (left, right) {
38633 if (left.cmp(right) > 0) return left;
38634 return right;
38635 };
ebd8d4e8 38636
8b095871
IC
38637 BN.min = function min (left, right) {
38638 if (left.cmp(right) < 0) return left;
38639 return right;
38640 };
38641
38642 BN.prototype._init = function init (number, base, endian) {
38643 if (typeof number === 'number') {
38644 return this._initNumber(number, base, endian);
ab78acc6 38645 }
ebd8d4e8 38646
8b095871
IC
38647 if (typeof number === 'object') {
38648 return this._initArray(number, base, endian);
38649 }
ebd8d4e8 38650
8b095871
IC
38651 if (base === 'hex') {
38652 base = 16;
38653 }
38654 assert(base === (base | 0) && base >= 2 && base <= 36);
38655
38656 number = number.toString().replace(/\s+/g, '');
38657 var start = 0;
38658 if (number[0] === '-') {
38659 start++;
38660 }
38661
38662 if (base === 16) {
38663 this._parseHex(number, start);
38664 } else {
38665 this._parseBase(number, base, start);
ab78acc6 38666 }
ebd8d4e8 38667
8b095871
IC
38668 if (number[0] === '-') {
38669 this.negative = 1;
38670 }
ebd8d4e8 38671
8b095871 38672 this.strip();
ebd8d4e8 38673
8b095871 38674 if (endian !== 'le') return;
ebd8d4e8 38675
8b095871
IC
38676 this._initArray(this.toArray(), base, endian);
38677 };
ebd8d4e8 38678
8b095871
IC
38679 BN.prototype._initNumber = function _initNumber (number, base, endian) {
38680 if (number < 0) {
38681 this.negative = 1;
38682 number = -number;
38683 }
38684 if (number < 0x4000000) {
38685 this.words = [ number & 0x3ffffff ];
38686 this.length = 1;
38687 } else if (number < 0x10000000000000) {
38688 this.words = [
38689 number & 0x3ffffff,
38690 (number / 0x4000000) & 0x3ffffff
38691 ];
38692 this.length = 2;
38693 } else {
38694 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
38695 this.words = [
38696 number & 0x3ffffff,
38697 (number / 0x4000000) & 0x3ffffff,
38698 1
38699 ];
38700 this.length = 3;
38701 }
ebd8d4e8 38702
8b095871 38703 if (endian !== 'le') return;
ebd8d4e8 38704
8b095871
IC
38705 // Reverse the bytes
38706 this._initArray(this.toArray(), base, endian);
38707 };
ebd8d4e8 38708
8b095871
IC
38709 BN.prototype._initArray = function _initArray (number, base, endian) {
38710 // Perhaps a Uint8Array
38711 assert(typeof number.length === 'number');
38712 if (number.length <= 0) {
38713 this.words = [ 0 ];
38714 this.length = 1;
38715 return this;
ab78acc6 38716 }
ebd8d4e8 38717
8b095871
IC
38718 this.length = Math.ceil(number.length / 3);
38719 this.words = new Array(this.length);
38720 for (var i = 0; i < this.length; i++) {
38721 this.words[i] = 0;
38722 }
ebd8d4e8 38723
8b095871
IC
38724 var j, w;
38725 var off = 0;
38726 if (endian === 'be') {
38727 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
38728 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
38729 this.words[j] |= (w << off) & 0x3ffffff;
38730 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
38731 off += 24;
38732 if (off >= 26) {
38733 off -= 26;
38734 j++;
38735 }
38736 }
38737 } else if (endian === 'le') {
38738 for (i = 0, j = 0; i < number.length; i += 3) {
38739 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
38740 this.words[j] |= (w << off) & 0x3ffffff;
38741 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
38742 off += 24;
38743 if (off >= 26) {
38744 off -= 26;
38745 j++;
38746 }
38747 }
38748 }
38749 return this.strip();
38750 };
ebd8d4e8 38751
8b095871
IC
38752 function parseHex (str, start, end) {
38753 var r = 0;
38754 var len = Math.min(str.length, end);
38755 for (var i = start; i < len; i++) {
38756 var c = str.charCodeAt(i) - 48;
ab78acc6 38757
8b095871 38758 r <<= 4;
ab78acc6 38759
8b095871
IC
38760 // 'a' - 'f'
38761 if (c >= 49 && c <= 54) {
38762 r |= c - 49 + 0xa;
ab78acc6 38763
8b095871
IC
38764 // 'A' - 'F'
38765 } else if (c >= 17 && c <= 22) {
38766 r |= c - 17 + 0xa;
ebd8d4e8 38767
8b095871
IC
38768 // '0' - '9'
38769 } else {
38770 r |= c & 0xf;
38771 }
38772 }
38773 return r;
38774 }
38775
38776 BN.prototype._parseHex = function _parseHex (number, start) {
38777 // Create possibly bigger array to ensure that it fits the number
38778 this.length = Math.ceil((number.length - start) / 6);
38779 this.words = new Array(this.length);
38780 for (var i = 0; i < this.length; i++) {
38781 this.words[i] = 0;
38782 }
38783
38784 var j, w;
38785 // Scan 24-bit chunks and add them to the number
38786 var off = 0;
38787 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
38788 w = parseHex(number, i, i + 6);
38789 this.words[j] |= (w << off) & 0x3ffffff;
38790 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
38791 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
38792 off += 24;
38793 if (off >= 26) {
38794 off -= 26;
38795 j++;
38796 }
38797 }
38798 if (i + 6 !== start) {
38799 w = parseHex(number, start, i + 6);
38800 this.words[j] |= (w << off) & 0x3ffffff;
38801 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
38802 }
38803 this.strip();
38804 };
ebd8d4e8 38805
8b095871
IC
38806 function parseBase (str, start, end, mul) {
38807 var r = 0;
38808 var len = Math.min(str.length, end);
38809 for (var i = start; i < len; i++) {
38810 var c = str.charCodeAt(i) - 48;
ebd8d4e8 38811
8b095871 38812 r *= mul;
ebd8d4e8 38813
8b095871
IC
38814 // 'a'
38815 if (c >= 49) {
38816 r += c - 49 + 0xa;
ebd8d4e8 38817
8b095871
IC
38818 // 'A'
38819 } else if (c >= 17) {
38820 r += c - 17 + 0xa;
ebd8d4e8 38821
8b095871
IC
38822 // '0' - '9'
38823 } else {
38824 r += c;
38825 }
38826 }
38827 return r;
38828 }
ebd8d4e8 38829
8b095871
IC
38830 BN.prototype._parseBase = function _parseBase (number, base, start) {
38831 // Initialize as zero
38832 this.words = [ 0 ];
38833 this.length = 1;
ebd8d4e8 38834
8b095871
IC
38835 // Find length of limb in base
38836 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
38837 limbLen++;
38838 }
38839 limbLen--;
38840 limbPow = (limbPow / base) | 0;
ebd8d4e8 38841
8b095871
IC
38842 var total = number.length - start;
38843 var mod = total % limbLen;
38844 var end = Math.min(total, total - mod) + start;
ebd8d4e8 38845
8b095871
IC
38846 var word = 0;
38847 for (var i = start; i < end; i += limbLen) {
38848 word = parseBase(number, i, i + limbLen, base);
ebd8d4e8 38849
8b095871
IC
38850 this.imuln(limbPow);
38851 if (this.words[0] + word < 0x4000000) {
38852 this.words[0] += word;
38853 } else {
38854 this._iaddn(word);
38855 }
38856 }
ebd8d4e8 38857
8b095871
IC
38858 if (mod !== 0) {
38859 var pow = 1;
38860 word = parseBase(number, i, number.length, base);
ebd8d4e8 38861
8b095871
IC
38862 for (i = 0; i < mod; i++) {
38863 pow *= base;
38864 }
ab78acc6 38865
8b095871
IC
38866 this.imuln(pow);
38867 if (this.words[0] + word < 0x4000000) {
38868 this.words[0] += word;
38869 } else {
38870 this._iaddn(word);
38871 }
38872 }
38873 };
ab78acc6 38874
8b095871
IC
38875 BN.prototype.copy = function copy (dest) {
38876 dest.words = new Array(this.length);
38877 for (var i = 0; i < this.length; i++) {
38878 dest.words[i] = this.words[i];
ab78acc6 38879 }
8b095871
IC
38880 dest.length = this.length;
38881 dest.negative = this.negative;
38882 dest.red = this.red;
38883 };
ab78acc6 38884
8b095871
IC
38885 BN.prototype.clone = function clone () {
38886 var r = new BN(null);
38887 this.copy(r);
38888 return r;
38889 };
ab78acc6 38890
8b095871
IC
38891 BN.prototype._expand = function _expand (size) {
38892 while (this.length < size) {
38893 this.words[this.length++] = 0;
38894 }
38895 return this;
38896 };
ab78acc6 38897
8b095871
IC
38898 // Remove leading `0` from `this`
38899 BN.prototype.strip = function strip () {
38900 while (this.length > 1 && this.words[this.length - 1] === 0) {
38901 this.length--;
ab78acc6 38902 }
8b095871
IC
38903 return this._normSign();
38904 };
ebd8d4e8 38905
8b095871
IC
38906 BN.prototype._normSign = function _normSign () {
38907 // -0 = 0
38908 if (this.length === 1 && this.words[0] === 0) {
38909 this.negative = 0;
ab78acc6 38910 }
8b095871
IC
38911 return this;
38912 };
ebd8d4e8 38913
8b095871
IC
38914 BN.prototype.inspect = function inspect () {
38915 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
38916 };
ebd8d4e8 38917
8b095871 38918 /*
ebd8d4e8 38919
8b095871
IC
38920 var zeros = [];
38921 var groupSizes = [];
38922 var groupBases = [];
ebd8d4e8 38923
8b095871
IC
38924 var s = '';
38925 var i = -1;
38926 while (++i < BN.wordSize) {
38927 zeros[i] = s;
38928 s += '0';
38929 }
38930 groupSizes[0] = 0;
38931 groupSizes[1] = 0;
38932 groupBases[0] = 0;
38933 groupBases[1] = 0;
38934 var base = 2 - 1;
38935 while (++base < 36 + 1) {
38936 var groupSize = 0;
38937 var groupBase = 1;
38938 while (groupBase < (1 << BN.wordSize) / base) {
38939 groupBase *= base;
38940 groupSize += 1;
38941 }
38942 groupSizes[base] = groupSize;
38943 groupBases[base] = groupBase;
ebd8d4e8
IC
38944 }
38945
8b095871 38946 */
ebd8d4e8 38947
8b095871
IC
38948 var zeros = [
38949 '',
38950 '0',
38951 '00',
38952 '000',
38953 '0000',
38954 '00000',
38955 '000000',
38956 '0000000',
38957 '00000000',
38958 '000000000',
38959 '0000000000',
38960 '00000000000',
38961 '000000000000',
38962 '0000000000000',
38963 '00000000000000',
38964 '000000000000000',
38965 '0000000000000000',
38966 '00000000000000000',
38967 '000000000000000000',
38968 '0000000000000000000',
38969 '00000000000000000000',
38970 '000000000000000000000',
38971 '0000000000000000000000',
38972 '00000000000000000000000',
38973 '000000000000000000000000',
38974 '0000000000000000000000000'
38975 ];
38976
38977 var groupSizes = [
38978 0, 0,
38979 25, 16, 12, 11, 10, 9, 8,
38980 8, 7, 7, 7, 7, 6, 6,
38981 6, 6, 6, 6, 6, 5, 5,
38982 5, 5, 5, 5, 5, 5, 5,
38983 5, 5, 5, 5, 5, 5, 5
38984 ];
38985
38986 var groupBases = [
38987 0, 0,
38988 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
38989 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
38990 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
38991 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
38992 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
38993 ];
38994
38995 BN.prototype.toString = function toString (base, padding) {
38996 base = base || 10;
38997 padding = padding | 0 || 1;
38998
38999 var out;
39000 if (base === 16 || base === 'hex') {
39001 out = '';
39002 var off = 0;
39003 var carry = 0;
39004 for (var i = 0; i < this.length; i++) {
39005 var w = this.words[i];
39006 var word = (((w << off) | carry) & 0xffffff).toString(16);
39007 carry = (w >>> (24 - off)) & 0xffffff;
39008 if (carry !== 0 || i !== this.length - 1) {
39009 out = zeros[6 - word.length] + word + out;
39010 } else {
39011 out = word + out;
39012 }
39013 off += 2;
39014 if (off >= 26) {
39015 off -= 26;
39016 i--;
39017 }
39018 }
39019 if (carry !== 0) {
39020 out = carry.toString(16) + out;
39021 }
39022 while (out.length % padding !== 0) {
39023 out = '0' + out;
39024 }
39025 if (this.negative !== 0) {
39026 out = '-' + out;
39027 }
39028 return out;
39029 }
39030
39031 if (base === (base | 0) && base >= 2 && base <= 36) {
39032 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
39033 var groupSize = groupSizes[base];
39034 // var groupBase = Math.pow(base, groupSize);
39035 var groupBase = groupBases[base];
39036 out = '';
39037 var c = this.clone();
39038 c.negative = 0;
39039 while (!c.isZero()) {
39040 var r = c.modn(groupBase).toString(base);
39041 c = c.idivn(groupBase);
39042
39043 if (!c.isZero()) {
39044 out = zeros[groupSize - r.length] + r + out;
39045 } else {
39046 out = r + out;
39047 }
39048 }
39049 if (this.isZero()) {
39050 out = '0' + out;
39051 }
39052 while (out.length % padding !== 0) {
39053 out = '0' + out;
39054 }
39055 if (this.negative !== 0) {
39056 out = '-' + out;
39057 }
39058 return out;
39059 }
39060
39061 assert(false, 'Base should be between 2 and 36');
39062 };
39063
39064 BN.prototype.toNumber = function toNumber () {
39065 var ret = this.words[0];
39066 if (this.length === 2) {
39067 ret += this.words[1] * 0x4000000;
39068 } else if (this.length === 3 && this.words[2] === 0x01) {
39069 // NOTE: at this stage it is known that the top bit is set
39070 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
39071 } else if (this.length > 2) {
39072 assert(false, 'Number can only safely store up to 53 bits');
39073 }
39074 return (this.negative !== 0) ? -ret : ret;
39075 };
39076
39077 BN.prototype.toJSON = function toJSON () {
39078 return this.toString(16);
39079 };
39080
39081 BN.prototype.toBuffer = function toBuffer (endian, length) {
39082 assert(typeof Buffer !== 'undefined');
39083 return this.toArrayLike(Buffer, endian, length);
39084 };
ebd8d4e8 39085
8b095871
IC
39086 BN.prototype.toArray = function toArray (endian, length) {
39087 return this.toArrayLike(Array, endian, length);
39088 };
ebd8d4e8 39089
8b095871
IC
39090 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
39091 var byteLength = this.byteLength();
39092 var reqLength = length || Math.max(1, byteLength);
39093 assert(byteLength <= reqLength, 'byte array longer than desired length');
39094 assert(reqLength > 0, 'Requested array length <= 0');
39095
39096 this.strip();
39097 var littleEndian = endian === 'le';
39098 var res = new ArrayType(reqLength);
39099
39100 var b, i;
39101 var q = this.clone();
39102 if (!littleEndian) {
39103 // Assume big-endian
39104 for (i = 0; i < reqLength - byteLength; i++) {
39105 res[i] = 0;
39106 }
ebd8d4e8 39107
8b095871
IC
39108 for (i = 0; !q.isZero(); i++) {
39109 b = q.andln(0xff);
39110 q.iushrn(8);
ebd8d4e8 39111
8b095871
IC
39112 res[reqLength - i - 1] = b;
39113 }
39114 } else {
39115 for (i = 0; !q.isZero(); i++) {
39116 b = q.andln(0xff);
39117 q.iushrn(8);
ebd8d4e8 39118
8b095871
IC
39119 res[i] = b;
39120 }
39121
39122 for (; i < reqLength; i++) {
39123 res[i] = 0;
39124 }
ab78acc6 39125 }
ebd8d4e8 39126
8b095871
IC
39127 return res;
39128 };
ebd8d4e8 39129
8b095871
IC
39130 if (Math.clz32) {
39131 BN.prototype._countBits = function _countBits (w) {
39132 return 32 - Math.clz32(w);
39133 };
39134 } else {
39135 BN.prototype._countBits = function _countBits (w) {
39136 var t = w;
39137 var r = 0;
39138 if (t >= 0x1000) {
39139 r += 13;
39140 t >>>= 13;
39141 }
39142 if (t >= 0x40) {
39143 r += 7;
39144 t >>>= 7;
39145 }
39146 if (t >= 0x8) {
39147 r += 4;
39148 t >>>= 4;
39149 }
39150 if (t >= 0x02) {
39151 r += 2;
39152 t >>>= 2;
39153 }
39154 return r + t;
39155 };
ebd8d4e8
IC
39156 }
39157
8b095871
IC
39158 BN.prototype._zeroBits = function _zeroBits (w) {
39159 // Short-cut
39160 if (w === 0) return 26;
ebd8d4e8 39161
8b095871
IC
39162 var t = w;
39163 var r = 0;
39164 if ((t & 0x1fff) === 0) {
39165 r += 13;
39166 t >>>= 13;
39167 }
39168 if ((t & 0x7f) === 0) {
39169 r += 7;
39170 t >>>= 7;
39171 }
39172 if ((t & 0xf) === 0) {
39173 r += 4;
39174 t >>>= 4;
39175 }
39176 if ((t & 0x3) === 0) {
39177 r += 2;
39178 t >>>= 2;
39179 }
39180 if ((t & 0x1) === 0) {
39181 r++;
39182 }
39183 return r;
39184 };
ebd8d4e8 39185
8b095871
IC
39186 // Return number of used bits in a BN
39187 BN.prototype.bitLength = function bitLength () {
39188 var w = this.words[this.length - 1];
39189 var hi = this._countBits(w);
39190 return (this.length - 1) * 26 + hi;
39191 };
ebd8d4e8 39192
8b095871
IC
39193 function toBitArray (num) {
39194 var w = new Array(num.bitLength());
ebd8d4e8 39195
8b095871
IC
39196 for (var bit = 0; bit < w.length; bit++) {
39197 var off = (bit / 26) | 0;
39198 var wbit = bit % 26;
ebd8d4e8 39199
8b095871 39200 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
ab78acc6 39201 }
8b095871
IC
39202
39203 return w;
ab78acc6 39204 }
ebd8d4e8 39205
8b095871
IC
39206 // Number of trailing zero bits
39207 BN.prototype.zeroBits = function zeroBits () {
39208 if (this.isZero()) return 0;
39209
39210 var r = 0;
39211 for (var i = 0; i < this.length; i++) {
39212 var b = this._zeroBits(this.words[i]);
39213 r += b;
39214 if (b !== 26) break;
ab78acc6 39215 }
8b095871
IC
39216 return r;
39217 };
39218
39219 BN.prototype.byteLength = function byteLength () {
39220 return Math.ceil(this.bitLength() / 8);
39221 };
39222
39223 BN.prototype.toTwos = function toTwos (width) {
39224 if (this.negative !== 0) {
39225 return this.abs().inotn(width).iaddn(1);
ab78acc6 39226 }
8b095871
IC
39227 return this.clone();
39228 };
ebd8d4e8 39229
8b095871
IC
39230 BN.prototype.fromTwos = function fromTwos (width) {
39231 if (this.testn(width - 1)) {
39232 return this.notn(width).iaddn(1).ineg();
39233 }
39234 return this.clone();
39235 };
ebd8d4e8 39236
8b095871
IC
39237 BN.prototype.isNeg = function isNeg () {
39238 return this.negative !== 0;
39239 };
ebd8d4e8 39240
8b095871
IC
39241 // Return negative clone of `this`
39242 BN.prototype.neg = function neg () {
39243 return this.clone().ineg();
39244 };
ebd8d4e8 39245
8b095871
IC
39246 BN.prototype.ineg = function ineg () {
39247 if (!this.isZero()) {
39248 this.negative ^= 1;
ab78acc6 39249 }
ebd8d4e8 39250
8b095871
IC
39251 return this;
39252 };
ebd8d4e8 39253
8b095871
IC
39254 // Or `num` with `this` in-place
39255 BN.prototype.iuor = function iuor (num) {
39256 while (this.length < num.length) {
39257 this.words[this.length++] = 0;
39258 }
ebd8d4e8 39259
8b095871
IC
39260 for (var i = 0; i < num.length; i++) {
39261 this.words[i] = this.words[i] | num.words[i];
ebd8d4e8 39262 }
ebd8d4e8 39263
8b095871
IC
39264 return this.strip();
39265 };
ebd8d4e8 39266
8b095871
IC
39267 BN.prototype.ior = function ior (num) {
39268 assert((this.negative | num.negative) === 0);
39269 return this.iuor(num);
ab78acc6 39270 };
ebd8d4e8 39271
8b095871
IC
39272 // Or `num` with `this`
39273 BN.prototype.or = function or (num) {
39274 if (this.length > num.length) return this.clone().ior(num);
39275 return num.clone().ior(this);
39276 };
ebd8d4e8 39277
8b095871
IC
39278 BN.prototype.uor = function uor (num) {
39279 if (this.length > num.length) return this.clone().iuor(num);
39280 return num.clone().iuor(this);
39281 };
ebd8d4e8 39282
8b095871
IC
39283 // And `num` with `this` in-place
39284 BN.prototype.iuand = function iuand (num) {
39285 // b = min-length(num, this)
39286 var b;
39287 if (this.length > num.length) {
39288 b = num;
39289 } else {
39290 b = this;
39291 }
39292
39293 for (var i = 0; i < b.length; i++) {
39294 this.words[i] = this.words[i] & num.words[i];
39295 }
ebd8d4e8 39296
8b095871 39297 this.length = b.length;
ebd8d4e8 39298
8b095871
IC
39299 return this.strip();
39300 };
ebd8d4e8 39301
8b095871
IC
39302 BN.prototype.iand = function iand (num) {
39303 assert((this.negative | num.negative) === 0);
39304 return this.iuand(num);
39305 };
ebd8d4e8 39306
8b095871
IC
39307 // And `num` with `this`
39308 BN.prototype.and = function and (num) {
39309 if (this.length > num.length) return this.clone().iand(num);
39310 return num.clone().iand(this);
39311 };
ebd8d4e8 39312
8b095871
IC
39313 BN.prototype.uand = function uand (num) {
39314 if (this.length > num.length) return this.clone().iuand(num);
39315 return num.clone().iuand(this);
39316 };
ebd8d4e8 39317
8b095871
IC
39318 // Xor `num` with `this` in-place
39319 BN.prototype.iuxor = function iuxor (num) {
39320 // a.length > b.length
39321 var a;
39322 var b;
39323 if (this.length > num.length) {
39324 a = this;
39325 b = num;
39326 } else {
39327 a = num;
39328 b = this;
39329 }
ebd8d4e8 39330
8b095871
IC
39331 for (var i = 0; i < b.length; i++) {
39332 this.words[i] = a.words[i] ^ b.words[i];
39333 }
ebd8d4e8 39334
8b095871
IC
39335 if (this !== a) {
39336 for (; i < a.length; i++) {
39337 this.words[i] = a.words[i];
39338 }
39339 }
ebd8d4e8 39340
8b095871 39341 this.length = a.length;
ebd8d4e8 39342
8b095871
IC
39343 return this.strip();
39344 };
ebd8d4e8 39345
8b095871
IC
39346 BN.prototype.ixor = function ixor (num) {
39347 assert((this.negative | num.negative) === 0);
39348 return this.iuxor(num);
39349 };
ebd8d4e8 39350
8b095871
IC
39351 // Xor `num` with `this`
39352 BN.prototype.xor = function xor (num) {
39353 if (this.length > num.length) return this.clone().ixor(num);
39354 return num.clone().ixor(this);
39355 };
ebd8d4e8 39356
8b095871
IC
39357 BN.prototype.uxor = function uxor (num) {
39358 if (this.length > num.length) return this.clone().iuxor(num);
39359 return num.clone().iuxor(this);
39360 };
ebd8d4e8 39361
8b095871
IC
39362 // Not ``this`` with ``width`` bitwidth
39363 BN.prototype.inotn = function inotn (width) {
39364 assert(typeof width === 'number' && width >= 0);
ebd8d4e8 39365
8b095871
IC
39366 var bytesNeeded = Math.ceil(width / 26) | 0;
39367 var bitsLeft = width % 26;
ebd8d4e8 39368
8b095871
IC
39369 // Extend the buffer with leading zeroes
39370 this._expand(bytesNeeded);
39371
39372 if (bitsLeft > 0) {
39373 bytesNeeded--;
ab78acc6 39374 }
8b095871
IC
39375
39376 // Handle complete words
39377 for (var i = 0; i < bytesNeeded; i++) {
39378 this.words[i] = ~this.words[i] & 0x3ffffff;
ab78acc6 39379 }
8b095871
IC
39380
39381 // Handle the residue
39382 if (bitsLeft > 0) {
39383 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
ab78acc6 39384 }
ebd8d4e8 39385
8b095871
IC
39386 // And remove leading zeroes
39387 return this.strip();
39388 };
ebd8d4e8 39389
8b095871
IC
39390 BN.prototype.notn = function notn (width) {
39391 return this.clone().inotn(width);
39392 };
ebd8d4e8 39393
8b095871
IC
39394 // Set `bit` of `this`
39395 BN.prototype.setn = function setn (bit, val) {
39396 assert(typeof bit === 'number' && bit >= 0);
ebd8d4e8 39397
8b095871
IC
39398 var off = (bit / 26) | 0;
39399 var wbit = bit % 26;
ebd8d4e8 39400
8b095871 39401 this._expand(off + 1);
ebd8d4e8 39402
8b095871
IC
39403 if (val) {
39404 this.words[off] = this.words[off] | (1 << wbit);
39405 } else {
39406 this.words[off] = this.words[off] & ~(1 << wbit);
39407 }
ebd8d4e8 39408
8b095871
IC
39409 return this.strip();
39410 };
ebd8d4e8 39411
8b095871
IC
39412 // Add `num` to `this` in-place
39413 BN.prototype.iadd = function iadd (num) {
39414 var r;
39415
39416 // negative + positive
39417 if (this.negative !== 0 && num.negative === 0) {
39418 this.negative = 0;
39419 r = this.isub(num);
39420 this.negative ^= 1;
39421 return this._normSign();
39422
39423 // positive + negative
39424 } else if (this.negative === 0 && num.negative !== 0) {
39425 num.negative = 0;
39426 r = this.isub(num);
39427 num.negative = 1;
39428 return r._normSign();
39429 }
39430
39431 // a.length > b.length
39432 var a, b;
39433 if (this.length > num.length) {
39434 a = this;
39435 b = num;
ab78acc6 39436 } else {
8b095871
IC
39437 a = num;
39438 b = this;
39439 }
39440
39441 var carry = 0;
39442 for (var i = 0; i < b.length; i++) {
39443 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
39444 this.words[i] = r & 0x3ffffff;
39445 carry = r >>> 26;
39446 }
39447 for (; carry !== 0 && i < a.length; i++) {
39448 r = (a.words[i] | 0) + carry;
39449 this.words[i] = r & 0x3ffffff;
39450 carry = r >>> 26;
39451 }
39452
39453 this.length = a.length;
39454 if (carry !== 0) {
39455 this.words[this.length] = carry;
39456 this.length++;
39457 // Copy the rest of the words
39458 } else if (a !== this) {
39459 for (; i < a.length; i++) {
39460 this.words[i] = a.words[i];
39461 }
ab78acc6 39462 }
ebd8d4e8 39463
8b095871
IC
39464 return this;
39465 };
ebd8d4e8 39466
8b095871
IC
39467 // Add `num` to `this`
39468 BN.prototype.add = function add (num) {
39469 var res;
39470 if (num.negative !== 0 && this.negative === 0) {
39471 num.negative = 0;
39472 res = this.sub(num);
39473 num.negative ^= 1;
39474 return res;
39475 } else if (num.negative === 0 && this.negative !== 0) {
39476 this.negative = 0;
39477 res = num.sub(this);
39478 this.negative = 1;
39479 return res;
39480 }
ebd8d4e8 39481
8b095871 39482 if (this.length > num.length) return this.clone().iadd(num);
ebd8d4e8 39483
8b095871
IC
39484 return num.clone().iadd(this);
39485 };
ebd8d4e8 39486
8b095871
IC
39487 // Subtract `num` from `this` in-place
39488 BN.prototype.isub = function isub (num) {
39489 // this - (-num) = this + num
39490 if (num.negative !== 0) {
39491 num.negative = 0;
39492 var r = this.iadd(num);
39493 num.negative = 1;
39494 return r._normSign();
39495
39496 // -this - num = -(this + num)
39497 } else if (this.negative !== 0) {
39498 this.negative = 0;
39499 this.iadd(num);
39500 this.negative = 1;
39501 return this._normSign();
39502 }
39503
39504 // At this point both numbers are positive
39505 var cmp = this.cmp(num);
39506
39507 // Optimization - zeroify
39508 if (cmp === 0) {
39509 this.negative = 0;
39510 this.length = 1;
39511 this.words[0] = 0;
39512 return this;
39513 }
ebd8d4e8 39514
8b095871
IC
39515 // a > b
39516 var a, b;
39517 if (cmp > 0) {
39518 a = this;
39519 b = num;
39520 } else {
39521 a = num;
39522 b = this;
39523 }
ebd8d4e8 39524
8b095871
IC
39525 var carry = 0;
39526 for (var i = 0; i < b.length; i++) {
39527 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
39528 carry = r >> 26;
39529 this.words[i] = r & 0x3ffffff;
39530 }
39531 for (; carry !== 0 && i < a.length; i++) {
39532 r = (a.words[i] | 0) + carry;
39533 carry = r >> 26;
39534 this.words[i] = r & 0x3ffffff;
39535 }
ebd8d4e8 39536
8b095871
IC
39537 // Copy rest of the words
39538 if (carry === 0 && i < a.length && a !== this) {
39539 for (; i < a.length; i++) {
39540 this.words[i] = a.words[i];
39541 }
39542 }
ebd8d4e8 39543
8b095871 39544 this.length = Math.max(this.length, i);
ebd8d4e8 39545
8b095871
IC
39546 if (a !== this) {
39547 this.negative = 1;
ab78acc6 39548 }
ebd8d4e8 39549
8b095871
IC
39550 return this.strip();
39551 };
ebd8d4e8 39552
8b095871
IC
39553 // Subtract `num` from `this`
39554 BN.prototype.sub = function sub (num) {
39555 return this.clone().isub(num);
39556 };
39557
39558 function smallMulTo (self, num, out) {
39559 out.negative = num.negative ^ self.negative;
39560 var len = (self.length + num.length) | 0;
39561 out.length = len;
39562 len = (len - 1) | 0;
39563
39564 // Peel one iteration (compiler can't do it, because of code complexity)
39565 var a = self.words[0] | 0;
39566 var b = num.words[0] | 0;
39567 var r = a * b;
39568
39569 var lo = r & 0x3ffffff;
39570 var carry = (r / 0x4000000) | 0;
39571 out.words[0] = lo;
39572
39573 for (var k = 1; k < len; k++) {
39574 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
39575 // note that ncarry could be >= 0x3ffffff
39576 var ncarry = carry >>> 26;
39577 var rword = carry & 0x3ffffff;
39578 var maxJ = Math.min(k, num.length - 1);
39579 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
39580 var i = (k - j) | 0;
39581 a = self.words[i] | 0;
39582 b = num.words[j] | 0;
39583 r = a * b + rword;
39584 ncarry += (r / 0x4000000) | 0;
39585 rword = r & 0x3ffffff;
39586 }
39587 out.words[k] = rword | 0;
39588 carry = ncarry | 0;
39589 }
39590 if (carry !== 0) {
39591 out.words[k] = carry | 0;
ab78acc6 39592 } else {
8b095871
IC
39593 out.length--;
39594 }
39595
39596 return out.strip();
39597 }
39598
39599 // TODO(indutny): it may be reasonable to omit it for users who don't need
39600 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
39601 // multiplication (like elliptic secp256k1).
39602 var comb10MulTo = function comb10MulTo (self, num, out) {
39603 var a = self.words;
39604 var b = num.words;
39605 var o = out.words;
39606 var c = 0;
39607 var lo;
39608 var mid;
39609 var hi;
39610 var a0 = a[0] | 0;
39611 var al0 = a0 & 0x1fff;
39612 var ah0 = a0 >>> 13;
39613 var a1 = a[1] | 0;
39614 var al1 = a1 & 0x1fff;
39615 var ah1 = a1 >>> 13;
39616 var a2 = a[2] | 0;
39617 var al2 = a2 & 0x1fff;
39618 var ah2 = a2 >>> 13;
39619 var a3 = a[3] | 0;
39620 var al3 = a3 & 0x1fff;
39621 var ah3 = a3 >>> 13;
39622 var a4 = a[4] | 0;
39623 var al4 = a4 & 0x1fff;
39624 var ah4 = a4 >>> 13;
39625 var a5 = a[5] | 0;
39626 var al5 = a5 & 0x1fff;
39627 var ah5 = a5 >>> 13;
39628 var a6 = a[6] | 0;
39629 var al6 = a6 & 0x1fff;
39630 var ah6 = a6 >>> 13;
39631 var a7 = a[7] | 0;
39632 var al7 = a7 & 0x1fff;
39633 var ah7 = a7 >>> 13;
39634 var a8 = a[8] | 0;
39635 var al8 = a8 & 0x1fff;
39636 var ah8 = a8 >>> 13;
39637 var a9 = a[9] | 0;
39638 var al9 = a9 & 0x1fff;
39639 var ah9 = a9 >>> 13;
39640 var b0 = b[0] | 0;
39641 var bl0 = b0 & 0x1fff;
39642 var bh0 = b0 >>> 13;
39643 var b1 = b[1] | 0;
39644 var bl1 = b1 & 0x1fff;
39645 var bh1 = b1 >>> 13;
39646 var b2 = b[2] | 0;
39647 var bl2 = b2 & 0x1fff;
39648 var bh2 = b2 >>> 13;
39649 var b3 = b[3] | 0;
39650 var bl3 = b3 & 0x1fff;
39651 var bh3 = b3 >>> 13;
39652 var b4 = b[4] | 0;
39653 var bl4 = b4 & 0x1fff;
39654 var bh4 = b4 >>> 13;
39655 var b5 = b[5] | 0;
39656 var bl5 = b5 & 0x1fff;
39657 var bh5 = b5 >>> 13;
39658 var b6 = b[6] | 0;
39659 var bl6 = b6 & 0x1fff;
39660 var bh6 = b6 >>> 13;
39661 var b7 = b[7] | 0;
39662 var bl7 = b7 & 0x1fff;
39663 var bh7 = b7 >>> 13;
39664 var b8 = b[8] | 0;
39665 var bl8 = b8 & 0x1fff;
39666 var bh8 = b8 >>> 13;
39667 var b9 = b[9] | 0;
39668 var bl9 = b9 & 0x1fff;
39669 var bh9 = b9 >>> 13;
39670
39671 out.negative = self.negative ^ num.negative;
39672 out.length = 19;
39673 /* k = 0 */
39674 lo = Math.imul(al0, bl0);
39675 mid = Math.imul(al0, bh0);
39676 mid = (mid + Math.imul(ah0, bl0)) | 0;
39677 hi = Math.imul(ah0, bh0);
39678 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
39679 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
39680 w0 &= 0x3ffffff;
39681 /* k = 1 */
39682 lo = Math.imul(al1, bl0);
39683 mid = Math.imul(al1, bh0);
39684 mid = (mid + Math.imul(ah1, bl0)) | 0;
39685 hi = Math.imul(ah1, bh0);
39686 lo = (lo + Math.imul(al0, bl1)) | 0;
39687 mid = (mid + Math.imul(al0, bh1)) | 0;
39688 mid = (mid + Math.imul(ah0, bl1)) | 0;
39689 hi = (hi + Math.imul(ah0, bh1)) | 0;
39690 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
39691 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
39692 w1 &= 0x3ffffff;
39693 /* k = 2 */
39694 lo = Math.imul(al2, bl0);
39695 mid = Math.imul(al2, bh0);
39696 mid = (mid + Math.imul(ah2, bl0)) | 0;
39697 hi = Math.imul(ah2, bh0);
39698 lo = (lo + Math.imul(al1, bl1)) | 0;
39699 mid = (mid + Math.imul(al1, bh1)) | 0;
39700 mid = (mid + Math.imul(ah1, bl1)) | 0;
39701 hi = (hi + Math.imul(ah1, bh1)) | 0;
39702 lo = (lo + Math.imul(al0, bl2)) | 0;
39703 mid = (mid + Math.imul(al0, bh2)) | 0;
39704 mid = (mid + Math.imul(ah0, bl2)) | 0;
39705 hi = (hi + Math.imul(ah0, bh2)) | 0;
39706 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
39707 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
39708 w2 &= 0x3ffffff;
39709 /* k = 3 */
39710 lo = Math.imul(al3, bl0);
39711 mid = Math.imul(al3, bh0);
39712 mid = (mid + Math.imul(ah3, bl0)) | 0;
39713 hi = Math.imul(ah3, bh0);
39714 lo = (lo + Math.imul(al2, bl1)) | 0;
39715 mid = (mid + Math.imul(al2, bh1)) | 0;
39716 mid = (mid + Math.imul(ah2, bl1)) | 0;
39717 hi = (hi + Math.imul(ah2, bh1)) | 0;
39718 lo = (lo + Math.imul(al1, bl2)) | 0;
39719 mid = (mid + Math.imul(al1, bh2)) | 0;
39720 mid = (mid + Math.imul(ah1, bl2)) | 0;
39721 hi = (hi + Math.imul(ah1, bh2)) | 0;
39722 lo = (lo + Math.imul(al0, bl3)) | 0;
39723 mid = (mid + Math.imul(al0, bh3)) | 0;
39724 mid = (mid + Math.imul(ah0, bl3)) | 0;
39725 hi = (hi + Math.imul(ah0, bh3)) | 0;
39726 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
39727 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
39728 w3 &= 0x3ffffff;
39729 /* k = 4 */
39730 lo = Math.imul(al4, bl0);
39731 mid = Math.imul(al4, bh0);
39732 mid = (mid + Math.imul(ah4, bl0)) | 0;
39733 hi = Math.imul(ah4, bh0);
39734 lo = (lo + Math.imul(al3, bl1)) | 0;
39735 mid = (mid + Math.imul(al3, bh1)) | 0;
39736 mid = (mid + Math.imul(ah3, bl1)) | 0;
39737 hi = (hi + Math.imul(ah3, bh1)) | 0;
39738 lo = (lo + Math.imul(al2, bl2)) | 0;
39739 mid = (mid + Math.imul(al2, bh2)) | 0;
39740 mid = (mid + Math.imul(ah2, bl2)) | 0;
39741 hi = (hi + Math.imul(ah2, bh2)) | 0;
39742 lo = (lo + Math.imul(al1, bl3)) | 0;
39743 mid = (mid + Math.imul(al1, bh3)) | 0;
39744 mid = (mid + Math.imul(ah1, bl3)) | 0;
39745 hi = (hi + Math.imul(ah1, bh3)) | 0;
39746 lo = (lo + Math.imul(al0, bl4)) | 0;
39747 mid = (mid + Math.imul(al0, bh4)) | 0;
39748 mid = (mid + Math.imul(ah0, bl4)) | 0;
39749 hi = (hi + Math.imul(ah0, bh4)) | 0;
39750 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
39751 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
39752 w4 &= 0x3ffffff;
39753 /* k = 5 */
39754 lo = Math.imul(al5, bl0);
39755 mid = Math.imul(al5, bh0);
39756 mid = (mid + Math.imul(ah5, bl0)) | 0;
39757 hi = Math.imul(ah5, bh0);
39758 lo = (lo + Math.imul(al4, bl1)) | 0;
39759 mid = (mid + Math.imul(al4, bh1)) | 0;
39760 mid = (mid + Math.imul(ah4, bl1)) | 0;
39761 hi = (hi + Math.imul(ah4, bh1)) | 0;
39762 lo = (lo + Math.imul(al3, bl2)) | 0;
39763 mid = (mid + Math.imul(al3, bh2)) | 0;
39764 mid = (mid + Math.imul(ah3, bl2)) | 0;
39765 hi = (hi + Math.imul(ah3, bh2)) | 0;
39766 lo = (lo + Math.imul(al2, bl3)) | 0;
39767 mid = (mid + Math.imul(al2, bh3)) | 0;
39768 mid = (mid + Math.imul(ah2, bl3)) | 0;
39769 hi = (hi + Math.imul(ah2, bh3)) | 0;
39770 lo = (lo + Math.imul(al1, bl4)) | 0;
39771 mid = (mid + Math.imul(al1, bh4)) | 0;
39772 mid = (mid + Math.imul(ah1, bl4)) | 0;
39773 hi = (hi + Math.imul(ah1, bh4)) | 0;
39774 lo = (lo + Math.imul(al0, bl5)) | 0;
39775 mid = (mid + Math.imul(al0, bh5)) | 0;
39776 mid = (mid + Math.imul(ah0, bl5)) | 0;
39777 hi = (hi + Math.imul(ah0, bh5)) | 0;
39778 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
39779 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
39780 w5 &= 0x3ffffff;
39781 /* k = 6 */
39782 lo = Math.imul(al6, bl0);
39783 mid = Math.imul(al6, bh0);
39784 mid = (mid + Math.imul(ah6, bl0)) | 0;
39785 hi = Math.imul(ah6, bh0);
39786 lo = (lo + Math.imul(al5, bl1)) | 0;
39787 mid = (mid + Math.imul(al5, bh1)) | 0;
39788 mid = (mid + Math.imul(ah5, bl1)) | 0;
39789 hi = (hi + Math.imul(ah5, bh1)) | 0;
39790 lo = (lo + Math.imul(al4, bl2)) | 0;
39791 mid = (mid + Math.imul(al4, bh2)) | 0;
39792 mid = (mid + Math.imul(ah4, bl2)) | 0;
39793 hi = (hi + Math.imul(ah4, bh2)) | 0;
39794 lo = (lo + Math.imul(al3, bl3)) | 0;
39795 mid = (mid + Math.imul(al3, bh3)) | 0;
39796 mid = (mid + Math.imul(ah3, bl3)) | 0;
39797 hi = (hi + Math.imul(ah3, bh3)) | 0;
39798 lo = (lo + Math.imul(al2, bl4)) | 0;
39799 mid = (mid + Math.imul(al2, bh4)) | 0;
39800 mid = (mid + Math.imul(ah2, bl4)) | 0;
39801 hi = (hi + Math.imul(ah2, bh4)) | 0;
39802 lo = (lo + Math.imul(al1, bl5)) | 0;
39803 mid = (mid + Math.imul(al1, bh5)) | 0;
39804 mid = (mid + Math.imul(ah1, bl5)) | 0;
39805 hi = (hi + Math.imul(ah1, bh5)) | 0;
39806 lo = (lo + Math.imul(al0, bl6)) | 0;
39807 mid = (mid + Math.imul(al0, bh6)) | 0;
39808 mid = (mid + Math.imul(ah0, bl6)) | 0;
39809 hi = (hi + Math.imul(ah0, bh6)) | 0;
39810 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
39811 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
39812 w6 &= 0x3ffffff;
39813 /* k = 7 */
39814 lo = Math.imul(al7, bl0);
39815 mid = Math.imul(al7, bh0);
39816 mid = (mid + Math.imul(ah7, bl0)) | 0;
39817 hi = Math.imul(ah7, bh0);
39818 lo = (lo + Math.imul(al6, bl1)) | 0;
39819 mid = (mid + Math.imul(al6, bh1)) | 0;
39820 mid = (mid + Math.imul(ah6, bl1)) | 0;
39821 hi = (hi + Math.imul(ah6, bh1)) | 0;
39822 lo = (lo + Math.imul(al5, bl2)) | 0;
39823 mid = (mid + Math.imul(al5, bh2)) | 0;
39824 mid = (mid + Math.imul(ah5, bl2)) | 0;
39825 hi = (hi + Math.imul(ah5, bh2)) | 0;
39826 lo = (lo + Math.imul(al4, bl3)) | 0;
39827 mid = (mid + Math.imul(al4, bh3)) | 0;
39828 mid = (mid + Math.imul(ah4, bl3)) | 0;
39829 hi = (hi + Math.imul(ah4, bh3)) | 0;
39830 lo = (lo + Math.imul(al3, bl4)) | 0;
39831 mid = (mid + Math.imul(al3, bh4)) | 0;
39832 mid = (mid + Math.imul(ah3, bl4)) | 0;
39833 hi = (hi + Math.imul(ah3, bh4)) | 0;
39834 lo = (lo + Math.imul(al2, bl5)) | 0;
39835 mid = (mid + Math.imul(al2, bh5)) | 0;
39836 mid = (mid + Math.imul(ah2, bl5)) | 0;
39837 hi = (hi + Math.imul(ah2, bh5)) | 0;
39838 lo = (lo + Math.imul(al1, bl6)) | 0;
39839 mid = (mid + Math.imul(al1, bh6)) | 0;
39840 mid = (mid + Math.imul(ah1, bl6)) | 0;
39841 hi = (hi + Math.imul(ah1, bh6)) | 0;
39842 lo = (lo + Math.imul(al0, bl7)) | 0;
39843 mid = (mid + Math.imul(al0, bh7)) | 0;
39844 mid = (mid + Math.imul(ah0, bl7)) | 0;
39845 hi = (hi + Math.imul(ah0, bh7)) | 0;
39846 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
39847 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
39848 w7 &= 0x3ffffff;
39849 /* k = 8 */
39850 lo = Math.imul(al8, bl0);
39851 mid = Math.imul(al8, bh0);
39852 mid = (mid + Math.imul(ah8, bl0)) | 0;
39853 hi = Math.imul(ah8, bh0);
39854 lo = (lo + Math.imul(al7, bl1)) | 0;
39855 mid = (mid + Math.imul(al7, bh1)) | 0;
39856 mid = (mid + Math.imul(ah7, bl1)) | 0;
39857 hi = (hi + Math.imul(ah7, bh1)) | 0;
39858 lo = (lo + Math.imul(al6, bl2)) | 0;
39859 mid = (mid + Math.imul(al6, bh2)) | 0;
39860 mid = (mid + Math.imul(ah6, bl2)) | 0;
39861 hi = (hi + Math.imul(ah6, bh2)) | 0;
39862 lo = (lo + Math.imul(al5, bl3)) | 0;
39863 mid = (mid + Math.imul(al5, bh3)) | 0;
39864 mid = (mid + Math.imul(ah5, bl3)) | 0;
39865 hi = (hi + Math.imul(ah5, bh3)) | 0;
39866 lo = (lo + Math.imul(al4, bl4)) | 0;
39867 mid = (mid + Math.imul(al4, bh4)) | 0;
39868 mid = (mid + Math.imul(ah4, bl4)) | 0;
39869 hi = (hi + Math.imul(ah4, bh4)) | 0;
39870 lo = (lo + Math.imul(al3, bl5)) | 0;
39871 mid = (mid + Math.imul(al3, bh5)) | 0;
39872 mid = (mid + Math.imul(ah3, bl5)) | 0;
39873 hi = (hi + Math.imul(ah3, bh5)) | 0;
39874 lo = (lo + Math.imul(al2, bl6)) | 0;
39875 mid = (mid + Math.imul(al2, bh6)) | 0;
39876 mid = (mid + Math.imul(ah2, bl6)) | 0;
39877 hi = (hi + Math.imul(ah2, bh6)) | 0;
39878 lo = (lo + Math.imul(al1, bl7)) | 0;
39879 mid = (mid + Math.imul(al1, bh7)) | 0;
39880 mid = (mid + Math.imul(ah1, bl7)) | 0;
39881 hi = (hi + Math.imul(ah1, bh7)) | 0;
39882 lo = (lo + Math.imul(al0, bl8)) | 0;
39883 mid = (mid + Math.imul(al0, bh8)) | 0;
39884 mid = (mid + Math.imul(ah0, bl8)) | 0;
39885 hi = (hi + Math.imul(ah0, bh8)) | 0;
39886 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
39887 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
39888 w8 &= 0x3ffffff;
39889 /* k = 9 */
39890 lo = Math.imul(al9, bl0);
39891 mid = Math.imul(al9, bh0);
39892 mid = (mid + Math.imul(ah9, bl0)) | 0;
39893 hi = Math.imul(ah9, bh0);
39894 lo = (lo + Math.imul(al8, bl1)) | 0;
39895 mid = (mid + Math.imul(al8, bh1)) | 0;
39896 mid = (mid + Math.imul(ah8, bl1)) | 0;
39897 hi = (hi + Math.imul(ah8, bh1)) | 0;
39898 lo = (lo + Math.imul(al7, bl2)) | 0;
39899 mid = (mid + Math.imul(al7, bh2)) | 0;
39900 mid = (mid + Math.imul(ah7, bl2)) | 0;
39901 hi = (hi + Math.imul(ah7, bh2)) | 0;
39902 lo = (lo + Math.imul(al6, bl3)) | 0;
39903 mid = (mid + Math.imul(al6, bh3)) | 0;
39904 mid = (mid + Math.imul(ah6, bl3)) | 0;
39905 hi = (hi + Math.imul(ah6, bh3)) | 0;
39906 lo = (lo + Math.imul(al5, bl4)) | 0;
39907 mid = (mid + Math.imul(al5, bh4)) | 0;
39908 mid = (mid + Math.imul(ah5, bl4)) | 0;
39909 hi = (hi + Math.imul(ah5, bh4)) | 0;
39910 lo = (lo + Math.imul(al4, bl5)) | 0;
39911 mid = (mid + Math.imul(al4, bh5)) | 0;
39912 mid = (mid + Math.imul(ah4, bl5)) | 0;
39913 hi = (hi + Math.imul(ah4, bh5)) | 0;
39914 lo = (lo + Math.imul(al3, bl6)) | 0;
39915 mid = (mid + Math.imul(al3, bh6)) | 0;
39916 mid = (mid + Math.imul(ah3, bl6)) | 0;
39917 hi = (hi + Math.imul(ah3, bh6)) | 0;
39918 lo = (lo + Math.imul(al2, bl7)) | 0;
39919 mid = (mid + Math.imul(al2, bh7)) | 0;
39920 mid = (mid + Math.imul(ah2, bl7)) | 0;
39921 hi = (hi + Math.imul(ah2, bh7)) | 0;
39922 lo = (lo + Math.imul(al1, bl8)) | 0;
39923 mid = (mid + Math.imul(al1, bh8)) | 0;
39924 mid = (mid + Math.imul(ah1, bl8)) | 0;
39925 hi = (hi + Math.imul(ah1, bh8)) | 0;
39926 lo = (lo + Math.imul(al0, bl9)) | 0;
39927 mid = (mid + Math.imul(al0, bh9)) | 0;
39928 mid = (mid + Math.imul(ah0, bl9)) | 0;
39929 hi = (hi + Math.imul(ah0, bh9)) | 0;
39930 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
39931 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
39932 w9 &= 0x3ffffff;
39933 /* k = 10 */
39934 lo = Math.imul(al9, bl1);
39935 mid = Math.imul(al9, bh1);
39936 mid = (mid + Math.imul(ah9, bl1)) | 0;
39937 hi = Math.imul(ah9, bh1);
39938 lo = (lo + Math.imul(al8, bl2)) | 0;
39939 mid = (mid + Math.imul(al8, bh2)) | 0;
39940 mid = (mid + Math.imul(ah8, bl2)) | 0;
39941 hi = (hi + Math.imul(ah8, bh2)) | 0;
39942 lo = (lo + Math.imul(al7, bl3)) | 0;
39943 mid = (mid + Math.imul(al7, bh3)) | 0;
39944 mid = (mid + Math.imul(ah7, bl3)) | 0;
39945 hi = (hi + Math.imul(ah7, bh3)) | 0;
39946 lo = (lo + Math.imul(al6, bl4)) | 0;
39947 mid = (mid + Math.imul(al6, bh4)) | 0;
39948 mid = (mid + Math.imul(ah6, bl4)) | 0;
39949 hi = (hi + Math.imul(ah6, bh4)) | 0;
39950 lo = (lo + Math.imul(al5, bl5)) | 0;
39951 mid = (mid + Math.imul(al5, bh5)) | 0;
39952 mid = (mid + Math.imul(ah5, bl5)) | 0;
39953 hi = (hi + Math.imul(ah5, bh5)) | 0;
39954 lo = (lo + Math.imul(al4, bl6)) | 0;
39955 mid = (mid + Math.imul(al4, bh6)) | 0;
39956 mid = (mid + Math.imul(ah4, bl6)) | 0;
39957 hi = (hi + Math.imul(ah4, bh6)) | 0;
39958 lo = (lo + Math.imul(al3, bl7)) | 0;
39959 mid = (mid + Math.imul(al3, bh7)) | 0;
39960 mid = (mid + Math.imul(ah3, bl7)) | 0;
39961 hi = (hi + Math.imul(ah3, bh7)) | 0;
39962 lo = (lo + Math.imul(al2, bl8)) | 0;
39963 mid = (mid + Math.imul(al2, bh8)) | 0;
39964 mid = (mid + Math.imul(ah2, bl8)) | 0;
39965 hi = (hi + Math.imul(ah2, bh8)) | 0;
39966 lo = (lo + Math.imul(al1, bl9)) | 0;
39967 mid = (mid + Math.imul(al1, bh9)) | 0;
39968 mid = (mid + Math.imul(ah1, bl9)) | 0;
39969 hi = (hi + Math.imul(ah1, bh9)) | 0;
39970 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
39971 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
39972 w10 &= 0x3ffffff;
39973 /* k = 11 */
39974 lo = Math.imul(al9, bl2);
39975 mid = Math.imul(al9, bh2);
39976 mid = (mid + Math.imul(ah9, bl2)) | 0;
39977 hi = Math.imul(ah9, bh2);
39978 lo = (lo + Math.imul(al8, bl3)) | 0;
39979 mid = (mid + Math.imul(al8, bh3)) | 0;
39980 mid = (mid + Math.imul(ah8, bl3)) | 0;
39981 hi = (hi + Math.imul(ah8, bh3)) | 0;
39982 lo = (lo + Math.imul(al7, bl4)) | 0;
39983 mid = (mid + Math.imul(al7, bh4)) | 0;
39984 mid = (mid + Math.imul(ah7, bl4)) | 0;
39985 hi = (hi + Math.imul(ah7, bh4)) | 0;
39986 lo = (lo + Math.imul(al6, bl5)) | 0;
39987 mid = (mid + Math.imul(al6, bh5)) | 0;
39988 mid = (mid + Math.imul(ah6, bl5)) | 0;
39989 hi = (hi + Math.imul(ah6, bh5)) | 0;
39990 lo = (lo + Math.imul(al5, bl6)) | 0;
39991 mid = (mid + Math.imul(al5, bh6)) | 0;
39992 mid = (mid + Math.imul(ah5, bl6)) | 0;
39993 hi = (hi + Math.imul(ah5, bh6)) | 0;
39994 lo = (lo + Math.imul(al4, bl7)) | 0;
39995 mid = (mid + Math.imul(al4, bh7)) | 0;
39996 mid = (mid + Math.imul(ah4, bl7)) | 0;
39997 hi = (hi + Math.imul(ah4, bh7)) | 0;
39998 lo = (lo + Math.imul(al3, bl8)) | 0;
39999 mid = (mid + Math.imul(al3, bh8)) | 0;
40000 mid = (mid + Math.imul(ah3, bl8)) | 0;
40001 hi = (hi + Math.imul(ah3, bh8)) | 0;
40002 lo = (lo + Math.imul(al2, bl9)) | 0;
40003 mid = (mid + Math.imul(al2, bh9)) | 0;
40004 mid = (mid + Math.imul(ah2, bl9)) | 0;
40005 hi = (hi + Math.imul(ah2, bh9)) | 0;
40006 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40007 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
40008 w11 &= 0x3ffffff;
40009 /* k = 12 */
40010 lo = Math.imul(al9, bl3);
40011 mid = Math.imul(al9, bh3);
40012 mid = (mid + Math.imul(ah9, bl3)) | 0;
40013 hi = Math.imul(ah9, bh3);
40014 lo = (lo + Math.imul(al8, bl4)) | 0;
40015 mid = (mid + Math.imul(al8, bh4)) | 0;
40016 mid = (mid + Math.imul(ah8, bl4)) | 0;
40017 hi = (hi + Math.imul(ah8, bh4)) | 0;
40018 lo = (lo + Math.imul(al7, bl5)) | 0;
40019 mid = (mid + Math.imul(al7, bh5)) | 0;
40020 mid = (mid + Math.imul(ah7, bl5)) | 0;
40021 hi = (hi + Math.imul(ah7, bh5)) | 0;
40022 lo = (lo + Math.imul(al6, bl6)) | 0;
40023 mid = (mid + Math.imul(al6, bh6)) | 0;
40024 mid = (mid + Math.imul(ah6, bl6)) | 0;
40025 hi = (hi + Math.imul(ah6, bh6)) | 0;
40026 lo = (lo + Math.imul(al5, bl7)) | 0;
40027 mid = (mid + Math.imul(al5, bh7)) | 0;
40028 mid = (mid + Math.imul(ah5, bl7)) | 0;
40029 hi = (hi + Math.imul(ah5, bh7)) | 0;
40030 lo = (lo + Math.imul(al4, bl8)) | 0;
40031 mid = (mid + Math.imul(al4, bh8)) | 0;
40032 mid = (mid + Math.imul(ah4, bl8)) | 0;
40033 hi = (hi + Math.imul(ah4, bh8)) | 0;
40034 lo = (lo + Math.imul(al3, bl9)) | 0;
40035 mid = (mid + Math.imul(al3, bh9)) | 0;
40036 mid = (mid + Math.imul(ah3, bl9)) | 0;
40037 hi = (hi + Math.imul(ah3, bh9)) | 0;
40038 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40039 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
40040 w12 &= 0x3ffffff;
40041 /* k = 13 */
40042 lo = Math.imul(al9, bl4);
40043 mid = Math.imul(al9, bh4);
40044 mid = (mid + Math.imul(ah9, bl4)) | 0;
40045 hi = Math.imul(ah9, bh4);
40046 lo = (lo + Math.imul(al8, bl5)) | 0;
40047 mid = (mid + Math.imul(al8, bh5)) | 0;
40048 mid = (mid + Math.imul(ah8, bl5)) | 0;
40049 hi = (hi + Math.imul(ah8, bh5)) | 0;
40050 lo = (lo + Math.imul(al7, bl6)) | 0;
40051 mid = (mid + Math.imul(al7, bh6)) | 0;
40052 mid = (mid + Math.imul(ah7, bl6)) | 0;
40053 hi = (hi + Math.imul(ah7, bh6)) | 0;
40054 lo = (lo + Math.imul(al6, bl7)) | 0;
40055 mid = (mid + Math.imul(al6, bh7)) | 0;
40056 mid = (mid + Math.imul(ah6, bl7)) | 0;
40057 hi = (hi + Math.imul(ah6, bh7)) | 0;
40058 lo = (lo + Math.imul(al5, bl8)) | 0;
40059 mid = (mid + Math.imul(al5, bh8)) | 0;
40060 mid = (mid + Math.imul(ah5, bl8)) | 0;
40061 hi = (hi + Math.imul(ah5, bh8)) | 0;
40062 lo = (lo + Math.imul(al4, bl9)) | 0;
40063 mid = (mid + Math.imul(al4, bh9)) | 0;
40064 mid = (mid + Math.imul(ah4, bl9)) | 0;
40065 hi = (hi + Math.imul(ah4, bh9)) | 0;
40066 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40067 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
40068 w13 &= 0x3ffffff;
40069 /* k = 14 */
40070 lo = Math.imul(al9, bl5);
40071 mid = Math.imul(al9, bh5);
40072 mid = (mid + Math.imul(ah9, bl5)) | 0;
40073 hi = Math.imul(ah9, bh5);
40074 lo = (lo + Math.imul(al8, bl6)) | 0;
40075 mid = (mid + Math.imul(al8, bh6)) | 0;
40076 mid = (mid + Math.imul(ah8, bl6)) | 0;
40077 hi = (hi + Math.imul(ah8, bh6)) | 0;
40078 lo = (lo + Math.imul(al7, bl7)) | 0;
40079 mid = (mid + Math.imul(al7, bh7)) | 0;
40080 mid = (mid + Math.imul(ah7, bl7)) | 0;
40081 hi = (hi + Math.imul(ah7, bh7)) | 0;
40082 lo = (lo + Math.imul(al6, bl8)) | 0;
40083 mid = (mid + Math.imul(al6, bh8)) | 0;
40084 mid = (mid + Math.imul(ah6, bl8)) | 0;
40085 hi = (hi + Math.imul(ah6, bh8)) | 0;
40086 lo = (lo + Math.imul(al5, bl9)) | 0;
40087 mid = (mid + Math.imul(al5, bh9)) | 0;
40088 mid = (mid + Math.imul(ah5, bl9)) | 0;
40089 hi = (hi + Math.imul(ah5, bh9)) | 0;
40090 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40091 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
40092 w14 &= 0x3ffffff;
40093 /* k = 15 */
40094 lo = Math.imul(al9, bl6);
40095 mid = Math.imul(al9, bh6);
40096 mid = (mid + Math.imul(ah9, bl6)) | 0;
40097 hi = Math.imul(ah9, bh6);
40098 lo = (lo + Math.imul(al8, bl7)) | 0;
40099 mid = (mid + Math.imul(al8, bh7)) | 0;
40100 mid = (mid + Math.imul(ah8, bl7)) | 0;
40101 hi = (hi + Math.imul(ah8, bh7)) | 0;
40102 lo = (lo + Math.imul(al7, bl8)) | 0;
40103 mid = (mid + Math.imul(al7, bh8)) | 0;
40104 mid = (mid + Math.imul(ah7, bl8)) | 0;
40105 hi = (hi + Math.imul(ah7, bh8)) | 0;
40106 lo = (lo + Math.imul(al6, bl9)) | 0;
40107 mid = (mid + Math.imul(al6, bh9)) | 0;
40108 mid = (mid + Math.imul(ah6, bl9)) | 0;
40109 hi = (hi + Math.imul(ah6, bh9)) | 0;
40110 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40111 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
40112 w15 &= 0x3ffffff;
40113 /* k = 16 */
40114 lo = Math.imul(al9, bl7);
40115 mid = Math.imul(al9, bh7);
40116 mid = (mid + Math.imul(ah9, bl7)) | 0;
40117 hi = Math.imul(ah9, bh7);
40118 lo = (lo + Math.imul(al8, bl8)) | 0;
40119 mid = (mid + Math.imul(al8, bh8)) | 0;
40120 mid = (mid + Math.imul(ah8, bl8)) | 0;
40121 hi = (hi + Math.imul(ah8, bh8)) | 0;
40122 lo = (lo + Math.imul(al7, bl9)) | 0;
40123 mid = (mid + Math.imul(al7, bh9)) | 0;
40124 mid = (mid + Math.imul(ah7, bl9)) | 0;
40125 hi = (hi + Math.imul(ah7, bh9)) | 0;
40126 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40127 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
40128 w16 &= 0x3ffffff;
40129 /* k = 17 */
40130 lo = Math.imul(al9, bl8);
40131 mid = Math.imul(al9, bh8);
40132 mid = (mid + Math.imul(ah9, bl8)) | 0;
40133 hi = Math.imul(ah9, bh8);
40134 lo = (lo + Math.imul(al8, bl9)) | 0;
40135 mid = (mid + Math.imul(al8, bh9)) | 0;
40136 mid = (mid + Math.imul(ah8, bl9)) | 0;
40137 hi = (hi + Math.imul(ah8, bh9)) | 0;
40138 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40139 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
40140 w17 &= 0x3ffffff;
40141 /* k = 18 */
40142 lo = Math.imul(al9, bl9);
40143 mid = Math.imul(al9, bh9);
40144 mid = (mid + Math.imul(ah9, bl9)) | 0;
40145 hi = Math.imul(ah9, bh9);
40146 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40147 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
40148 w18 &= 0x3ffffff;
40149 o[0] = w0;
40150 o[1] = w1;
40151 o[2] = w2;
40152 o[3] = w3;
40153 o[4] = w4;
40154 o[5] = w5;
40155 o[6] = w6;
40156 o[7] = w7;
40157 o[8] = w8;
40158 o[9] = w9;
40159 o[10] = w10;
40160 o[11] = w11;
40161 o[12] = w12;
40162 o[13] = w13;
40163 o[14] = w14;
40164 o[15] = w15;
40165 o[16] = w16;
40166 o[17] = w17;
40167 o[18] = w18;
40168 if (c !== 0) {
40169 o[19] = c;
40170 out.length++;
ab78acc6 40171 }
8b095871
IC
40172 return out;
40173 };
40174
40175 // Polyfill comb
40176 if (!Math.imul) {
40177 comb10MulTo = smallMulTo;
40178 }
40179
40180 function bigMulTo (self, num, out) {
40181 out.negative = num.negative ^ self.negative;
40182 out.length = self.length + num.length;
40183
40184 var carry = 0;
40185 var hncarry = 0;
40186 for (var k = 0; k < out.length - 1; k++) {
40187 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
40188 // note that ncarry could be >= 0x3ffffff
40189 var ncarry = hncarry;
40190 hncarry = 0;
40191 var rword = carry & 0x3ffffff;
40192 var maxJ = Math.min(k, num.length - 1);
40193 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
40194 var i = k - j;
40195 var a = self.words[i] | 0;
40196 var b = num.words[j] | 0;
40197 var r = a * b;
40198
40199 var lo = r & 0x3ffffff;
40200 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
40201 lo = (lo + rword) | 0;
40202 rword = lo & 0x3ffffff;
40203 ncarry = (ncarry + (lo >>> 26)) | 0;
40204
40205 hncarry += ncarry >>> 26;
40206 ncarry &= 0x3ffffff;
40207 }
40208 out.words[k] = rword;
40209 carry = ncarry;
40210 ncarry = hncarry;
40211 }
40212 if (carry !== 0) {
40213 out.words[k] = carry;
40214 } else {
40215 out.length--;
ab78acc6 40216 }
8b095871
IC
40217
40218 return out.strip();
ab78acc6 40219 }
8b095871
IC
40220
40221 function jumboMulTo (self, num, out) {
40222 var fftm = new FFTM();
40223 return fftm.mulp(self, num, out);
ab78acc6 40224 }
8b095871
IC
40225
40226 BN.prototype.mulTo = function mulTo (num, out) {
40227 var res;
40228 var len = this.length + num.length;
40229 if (this.length === 10 && num.length === 10) {
40230 res = comb10MulTo(this, num, out);
40231 } else if (len < 63) {
40232 res = smallMulTo(this, num, out);
40233 } else if (len < 1024) {
40234 res = bigMulTo(this, num, out);
ab78acc6 40235 } else {
8b095871 40236 res = jumboMulTo(this, num, out);
ab78acc6 40237 }
8b095871
IC
40238
40239 return res;
40240 };
40241
40242 // Cooley-Tukey algorithm for FFT
40243 // slightly revisited to rely on looping instead of recursion
40244
40245 function FFTM (x, y) {
40246 this.x = x;
40247 this.y = y;
ab78acc6 40248 }
8b095871
IC
40249
40250 FFTM.prototype.makeRBT = function makeRBT (N) {
40251 var t = new Array(N);
40252 var l = BN.prototype._countBits(N) - 1;
40253 for (var i = 0; i < N; i++) {
40254 t[i] = this.revBin(i, l, N);
40255 }
40256
40257 return t;
40258 };
40259
40260 // Returns binary-reversed representation of `x`
40261 FFTM.prototype.revBin = function revBin (x, l, N) {
40262 if (x === 0 || x === N - 1) return x;
40263
40264 var rb = 0;
40265 for (var i = 0; i < l; i++) {
40266 rb |= (x & 1) << (l - i - 1);
40267 x >>= 1;
40268 }
40269
40270 return rb;
40271 };
40272
40273 // Performs "tweedling" phase, therefore 'emulating'
40274 // behaviour of the recursive algorithm
40275 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
40276 for (var i = 0; i < N; i++) {
40277 rtws[i] = rws[rbt[i]];
40278 itws[i] = iws[rbt[i]];
40279 }
40280 };
40281
40282 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
40283 this.permute(rbt, rws, iws, rtws, itws, N);
40284
40285 for (var s = 1; s < N; s <<= 1) {
40286 var l = s << 1;
40287
40288 var rtwdf = Math.cos(2 * Math.PI / l);
40289 var itwdf = Math.sin(2 * Math.PI / l);
40290
40291 for (var p = 0; p < N; p += l) {
40292 var rtwdf_ = rtwdf;
40293 var itwdf_ = itwdf;
40294
40295 for (var j = 0; j < s; j++) {
40296 var re = rtws[p + j];
40297 var ie = itws[p + j];
40298
40299 var ro = rtws[p + j + s];
40300 var io = itws[p + j + s];
40301
40302 var rx = rtwdf_ * ro - itwdf_ * io;
40303
40304 io = rtwdf_ * io + itwdf_ * ro;
40305 ro = rx;
40306
40307 rtws[p + j] = re + ro;
40308 itws[p + j] = ie + io;
40309
40310 rtws[p + j + s] = re - ro;
40311 itws[p + j + s] = ie - io;
40312
40313 /* jshint maxdepth : false */
40314 if (j !== l) {
40315 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
40316
40317 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
40318 rtwdf_ = rx;
40319 }
40320 }
40321 }
ab78acc6 40322 }
8b095871
IC
40323 };
40324
40325 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
40326 var N = Math.max(m, n) | 1;
40327 var odd = N & 1;
40328 var i = 0;
40329 for (N = N / 2 | 0; N; N = N >>> 1) {
40330 i++;
ab78acc6 40331 }
ebd8d4e8 40332
8b095871
IC
40333 return 1 << i + 1 + odd;
40334 };
ebd8d4e8 40335
8b095871
IC
40336 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
40337 if (N <= 1) return;
ebd8d4e8 40338
8b095871
IC
40339 for (var i = 0; i < N / 2; i++) {
40340 var t = rws[i];
ebd8d4e8 40341
8b095871
IC
40342 rws[i] = rws[N - i - 1];
40343 rws[N - i - 1] = t;
ebd8d4e8 40344
8b095871 40345 t = iws[i];
ebd8d4e8 40346
8b095871
IC
40347 iws[i] = -iws[N - i - 1];
40348 iws[N - i - 1] = -t;
40349 }
40350 };
ebd8d4e8 40351
8b095871
IC
40352 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
40353 var carry = 0;
40354 for (var i = 0; i < N / 2; i++) {
40355 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
40356 Math.round(ws[2 * i] / N) +
40357 carry;
ebd8d4e8 40358
8b095871 40359 ws[i] = w & 0x3ffffff;
ebd8d4e8 40360
8b095871
IC
40361 if (w < 0x4000000) {
40362 carry = 0;
40363 } else {
40364 carry = w / 0x4000000 | 0;
40365 }
40366 }
ebd8d4e8 40367
8b095871
IC
40368 return ws;
40369 };
ebd8d4e8 40370
8b095871
IC
40371 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
40372 var carry = 0;
40373 for (var i = 0; i < len; i++) {
40374 carry = carry + (ws[i] | 0);
ebd8d4e8 40375
8b095871
IC
40376 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
40377 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
40378 }
ebd8d4e8 40379
8b095871
IC
40380 // Pad with zeroes
40381 for (i = 2 * len; i < N; ++i) {
40382 rws[i] = 0;
40383 }
ebd8d4e8 40384
8b095871
IC
40385 assert(carry === 0);
40386 assert((carry & ~0x1fff) === 0);
40387 };
ebd8d4e8 40388
8b095871
IC
40389 FFTM.prototype.stub = function stub (N) {
40390 var ph = new Array(N);
40391 for (var i = 0; i < N; i++) {
40392 ph[i] = 0;
40393 }
ebd8d4e8 40394
8b095871
IC
40395 return ph;
40396 };
ebd8d4e8 40397
8b095871
IC
40398 FFTM.prototype.mulp = function mulp (x, y, out) {
40399 var N = 2 * this.guessLen13b(x.length, y.length);
ebd8d4e8 40400
8b095871 40401 var rbt = this.makeRBT(N);
ebd8d4e8 40402
8b095871 40403 var _ = this.stub(N);
ebd8d4e8 40404
8b095871
IC
40405 var rws = new Array(N);
40406 var rwst = new Array(N);
40407 var iwst = new Array(N);
ebd8d4e8 40408
8b095871
IC
40409 var nrws = new Array(N);
40410 var nrwst = new Array(N);
40411 var niwst = new Array(N);
ebd8d4e8 40412
8b095871
IC
40413 var rmws = out.words;
40414 rmws.length = N;
ebd8d4e8 40415
8b095871
IC
40416 this.convert13b(x.words, x.length, rws, N);
40417 this.convert13b(y.words, y.length, nrws, N);
ebd8d4e8 40418
8b095871
IC
40419 this.transform(rws, _, rwst, iwst, N, rbt);
40420 this.transform(nrws, _, nrwst, niwst, N, rbt);
ebd8d4e8 40421
8b095871
IC
40422 for (var i = 0; i < N; i++) {
40423 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
40424 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
40425 rwst[i] = rx;
40426 }
ebd8d4e8 40427
8b095871
IC
40428 this.conjugate(rwst, iwst, N);
40429 this.transform(rwst, iwst, rmws, _, N, rbt);
40430 this.conjugate(rmws, _, N);
40431 this.normalize13b(rmws, N);
ebd8d4e8 40432
8b095871
IC
40433 out.negative = x.negative ^ y.negative;
40434 out.length = x.length + y.length;
40435 return out.strip();
40436 };
ebd8d4e8 40437
8b095871
IC
40438 // Multiply `this` by `num`
40439 BN.prototype.mul = function mul (num) {
40440 var out = new BN(null);
40441 out.words = new Array(this.length + num.length);
40442 return this.mulTo(num, out);
40443 };
ab78acc6 40444
8b095871
IC
40445 // Multiply employing FFT
40446 BN.prototype.mulf = function mulf (num) {
40447 var out = new BN(null);
40448 out.words = new Array(this.length + num.length);
40449 return jumboMulTo(this, num, out);
40450 };
ebd8d4e8 40451
8b095871
IC
40452 // In-place Multiplication
40453 BN.prototype.imul = function imul (num) {
40454 return this.clone().mulTo(num, this);
40455 };
ab78acc6 40456
8b095871
IC
40457 BN.prototype.imuln = function imuln (num) {
40458 assert(typeof num === 'number');
40459 assert(num < 0x4000000);
ab78acc6 40460
8b095871
IC
40461 // Carry
40462 var carry = 0;
40463 for (var i = 0; i < this.length; i++) {
40464 var w = (this.words[i] | 0) * num;
40465 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
40466 carry >>= 26;
40467 carry += (w / 0x4000000) | 0;
40468 // NOTE: lo is 27bit maximum
40469 carry += lo >>> 26;
40470 this.words[i] = lo & 0x3ffffff;
40471 }
ab78acc6 40472
8b095871
IC
40473 if (carry !== 0) {
40474 this.words[i] = carry;
40475 this.length++;
40476 }
ab78acc6 40477
8b095871
IC
40478 return this;
40479 };
ab78acc6 40480
8b095871
IC
40481 BN.prototype.muln = function muln (num) {
40482 return this.clone().imuln(num);
40483 };
ebd8d4e8 40484
8b095871
IC
40485 // `this` * `this`
40486 BN.prototype.sqr = function sqr () {
40487 return this.mul(this);
40488 };
ebd8d4e8 40489
8b095871
IC
40490 // `this` * `this` in-place
40491 BN.prototype.isqr = function isqr () {
40492 return this.imul(this.clone());
40493 };
ab78acc6 40494
8b095871
IC
40495 // Math.pow(`this`, `num`)
40496 BN.prototype.pow = function pow (num) {
40497 var w = toBitArray(num);
40498 if (w.length === 0) return new BN(1);
ab78acc6 40499
8b095871
IC
40500 // Skip leading zeroes
40501 var res = this;
40502 for (var i = 0; i < w.length; i++, res = res.sqr()) {
40503 if (w[i] !== 0) break;
40504 }
ebd8d4e8 40505
8b095871
IC
40506 if (++i < w.length) {
40507 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
40508 if (w[i] === 0) continue;
ebd8d4e8 40509
8b095871
IC
40510 res = res.mul(q);
40511 }
ab78acc6
IC
40512 }
40513
8b095871
IC
40514 return res;
40515 };
ab78acc6 40516
8b095871
IC
40517 // Shift-left in-place
40518 BN.prototype.iushln = function iushln (bits) {
40519 assert(typeof bits === 'number' && bits >= 0);
40520 var r = bits % 26;
40521 var s = (bits - r) / 26;
40522 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
40523 var i;
40524
40525 if (r !== 0) {
40526 var carry = 0;
40527
40528 for (i = 0; i < this.length; i++) {
40529 var newCarry = this.words[i] & carryMask;
40530 var c = ((this.words[i] | 0) - newCarry) << r;
40531 this.words[i] = c | carry;
40532 carry = newCarry >>> (26 - r);
40533 }
40534
40535 if (carry) {
40536 this.words[i] = carry;
40537 this.length++;
40538 }
ab78acc6 40539 }
ebd8d4e8 40540
8b095871
IC
40541 if (s !== 0) {
40542 for (i = this.length - 1; i >= 0; i--) {
40543 this.words[i + s] = this.words[i];
40544 }
ebd8d4e8 40545
8b095871
IC
40546 for (i = 0; i < s; i++) {
40547 this.words[i] = 0;
40548 }
ebd8d4e8 40549
8b095871
IC
40550 this.length += s;
40551 }
ebd8d4e8 40552
8b095871
IC
40553 return this.strip();
40554 };
ebd8d4e8 40555
8b095871
IC
40556 BN.prototype.ishln = function ishln (bits) {
40557 // TODO(indutny): implement me
40558 assert(this.negative === 0);
40559 return this.iushln(bits);
40560 };
ebd8d4e8 40561
8b095871
IC
40562 // Shift-right in-place
40563 // NOTE: `hint` is a lowest bit before trailing zeroes
40564 // NOTE: if `extended` is present - it will be filled with destroyed bits
40565 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
40566 assert(typeof bits === 'number' && bits >= 0);
40567 var h;
40568 if (hint) {
40569 h = (hint - (hint % 26)) / 26;
40570 } else {
40571 h = 0;
40572 }
ebd8d4e8 40573
8b095871
IC
40574 var r = bits % 26;
40575 var s = Math.min((bits - r) / 26, this.length);
40576 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
40577 var maskedWords = extended;
40578
40579 h -= s;
40580 h = Math.max(0, h);
40581
40582 // Extended mode, copy masked part
40583 if (maskedWords) {
40584 for (var i = 0; i < s; i++) {
40585 maskedWords.words[i] = this.words[i];
40586 }
40587 maskedWords.length = s;
ab78acc6 40588 }
ebd8d4e8 40589
8b095871
IC
40590 if (s === 0) {
40591 // No-op, we should not move anything at all
40592 } else if (this.length > s) {
40593 this.length -= s;
40594 for (i = 0; i < this.length; i++) {
40595 this.words[i] = this.words[i + s];
40596 }
40597 } else {
40598 this.words[0] = 0;
40599 this.length = 1;
40600 }
ab78acc6 40601
8b095871
IC
40602 var carry = 0;
40603 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
40604 var word = this.words[i] | 0;
40605 this.words[i] = (carry << (26 - r)) | (word >>> r);
40606 carry = word & mask;
ab78acc6 40607 }
ebd8d4e8 40608
8b095871
IC
40609 // Push carried bits as a mask
40610 if (maskedWords && carry !== 0) {
40611 maskedWords.words[maskedWords.length++] = carry;
40612 }
40613
40614 if (this.length === 0) {
40615 this.words[0] = 0;
40616 this.length = 1;
40617 }
40618
40619 return this.strip();
40620 };
40621
40622 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
40623 // TODO(indutny): implement me
40624 assert(this.negative === 0);
40625 return this.iushrn(bits, hint, extended);
40626 };
40627
40628 // Shift-left
40629 BN.prototype.shln = function shln (bits) {
40630 return this.clone().ishln(bits);
40631 };
40632
40633 BN.prototype.ushln = function ushln (bits) {
40634 return this.clone().iushln(bits);
40635 };
40636
40637 // Shift-right
40638 BN.prototype.shrn = function shrn (bits) {
40639 return this.clone().ishrn(bits);
40640 };
ebd8d4e8 40641
8b095871
IC
40642 BN.prototype.ushrn = function ushrn (bits) {
40643 return this.clone().iushrn(bits);
40644 };
ebd8d4e8 40645
8b095871
IC
40646 // Test if n bit is set
40647 BN.prototype.testn = function testn (bit) {
40648 assert(typeof bit === 'number' && bit >= 0);
40649 var r = bit % 26;
40650 var s = (bit - r) / 26;
40651 var q = 1 << r;
ebd8d4e8 40652
8b095871
IC
40653 // Fast case: bit is much higher than all existing words
40654 if (this.length <= s) return false;
ab78acc6 40655
8b095871
IC
40656 // Check bit and return
40657 var w = this.words[s];
ab78acc6 40658
8b095871
IC
40659 return !!(w & q);
40660 };
ab78acc6 40661
8b095871
IC
40662 // Return only lowers bits of number (in-place)
40663 BN.prototype.imaskn = function imaskn (bits) {
40664 assert(typeof bits === 'number' && bits >= 0);
40665 var r = bits % 26;
40666 var s = (bits - r) / 26;
ab78acc6 40667
8b095871 40668 assert(this.negative === 0, 'imaskn works only with positive numbers');
ab78acc6 40669
8b095871
IC
40670 if (this.length <= s) {
40671 return this;
40672 }
ab78acc6 40673
8b095871
IC
40674 if (r !== 0) {
40675 s++;
40676 }
40677 this.length = Math.min(s, this.length);
ab78acc6 40678
8b095871
IC
40679 if (r !== 0) {
40680 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
40681 this.words[this.length - 1] &= mask;
40682 }
ab78acc6 40683
8b095871
IC
40684 return this.strip();
40685 };
ab78acc6 40686
8b095871
IC
40687 // Return only lowers bits of number
40688 BN.prototype.maskn = function maskn (bits) {
40689 return this.clone().imaskn(bits);
40690 };
ebd8d4e8 40691
8b095871
IC
40692 // Add plain number `num` to `this`
40693 BN.prototype.iaddn = function iaddn (num) {
40694 assert(typeof num === 'number');
40695 assert(num < 0x4000000);
40696 if (num < 0) return this.isubn(-num);
40697
40698 // Possible sign change
40699 if (this.negative !== 0) {
40700 if (this.length === 1 && (this.words[0] | 0) < num) {
40701 this.words[0] = num - (this.words[0] | 0);
40702 this.negative = 0;
40703 return this;
40704 }
ebd8d4e8 40705
8b095871
IC
40706 this.negative = 0;
40707 this.isubn(num);
40708 this.negative = 1;
40709 return this;
40710 }
ebd8d4e8 40711
8b095871
IC
40712 // Add without checks
40713 return this._iaddn(num);
40714 };
ebd8d4e8 40715
8b095871
IC
40716 BN.prototype._iaddn = function _iaddn (num) {
40717 this.words[0] += num;
ebd8d4e8 40718
8b095871
IC
40719 // Carry
40720 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
40721 this.words[i] -= 0x4000000;
40722 if (i === this.length - 1) {
40723 this.words[i + 1] = 1;
40724 } else {
40725 this.words[i + 1]++;
40726 }
40727 }
40728 this.length = Math.max(this.length, i + 1);
ebd8d4e8 40729
8b095871
IC
40730 return this;
40731 };
ebd8d4e8 40732
8b095871
IC
40733 // Subtract plain number `num` from `this`
40734 BN.prototype.isubn = function isubn (num) {
40735 assert(typeof num === 'number');
40736 assert(num < 0x4000000);
40737 if (num < 0) return this.iaddn(-num);
ebd8d4e8 40738
8b095871
IC
40739 if (this.negative !== 0) {
40740 this.negative = 0;
40741 this.iaddn(num);
40742 this.negative = 1;
40743 return this;
40744 }
ebd8d4e8 40745
8b095871 40746 this.words[0] -= num;
ab78acc6 40747
8b095871
IC
40748 if (this.length === 1 && this.words[0] < 0) {
40749 this.words[0] = -this.words[0];
40750 this.negative = 1;
40751 } else {
40752 // Carry
40753 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
40754 this.words[i] += 0x4000000;
40755 this.words[i + 1] -= 1;
40756 }
40757 }
ebd8d4e8 40758
8b095871
IC
40759 return this.strip();
40760 };
ab78acc6 40761
8b095871
IC
40762 BN.prototype.addn = function addn (num) {
40763 return this.clone().iaddn(num);
40764 };
ab78acc6 40765
8b095871
IC
40766 BN.prototype.subn = function subn (num) {
40767 return this.clone().isubn(num);
40768 };
ab78acc6 40769
8b095871
IC
40770 BN.prototype.iabs = function iabs () {
40771 this.negative = 0;
ab78acc6 40772
8b095871
IC
40773 return this;
40774 };
ab78acc6 40775
8b095871
IC
40776 BN.prototype.abs = function abs () {
40777 return this.clone().iabs();
40778 };
ab78acc6 40779
8b095871
IC
40780 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
40781 var len = num.length + shift;
40782 var i;
ab78acc6 40783
8b095871 40784 this._expand(len);
ab78acc6 40785
8b095871
IC
40786 var w;
40787 var carry = 0;
40788 for (i = 0; i < num.length; i++) {
40789 w = (this.words[i + shift] | 0) + carry;
40790 var right = (num.words[i] | 0) * mul;
40791 w -= right & 0x3ffffff;
40792 carry = (w >> 26) - ((right / 0x4000000) | 0);
40793 this.words[i + shift] = w & 0x3ffffff;
40794 }
40795 for (; i < this.length - shift; i++) {
40796 w = (this.words[i + shift] | 0) + carry;
40797 carry = w >> 26;
40798 this.words[i + shift] = w & 0x3ffffff;
40799 }
ebd8d4e8 40800
8b095871 40801 if (carry === 0) return this.strip();
ab78acc6 40802
8b095871
IC
40803 // Subtraction overflow
40804 assert(carry === -1);
40805 carry = 0;
40806 for (i = 0; i < this.length; i++) {
40807 w = -(this.words[i] | 0) + carry;
40808 carry = w >> 26;
40809 this.words[i] = w & 0x3ffffff;
40810 }
40811 this.negative = 1;
ab78acc6 40812
8b095871
IC
40813 return this.strip();
40814 };
ab78acc6 40815
8b095871
IC
40816 BN.prototype._wordDiv = function _wordDiv (num, mode) {
40817 var shift = this.length - num.length;
ebd8d4e8 40818
8b095871
IC
40819 var a = this.clone();
40820 var b = num;
ab78acc6 40821
8b095871
IC
40822 // Normalize
40823 var bhi = b.words[b.length - 1] | 0;
40824 var bhiBits = this._countBits(bhi);
40825 shift = 26 - bhiBits;
40826 if (shift !== 0) {
40827 b = b.ushln(shift);
40828 a.iushln(shift);
40829 bhi = b.words[b.length - 1] | 0;
40830 }
ebd8d4e8 40831
8b095871
IC
40832 // Initialize quotient
40833 var m = a.length - b.length;
40834 var q;
ab78acc6 40835
8b095871
IC
40836 if (mode !== 'mod') {
40837 q = new BN(null);
40838 q.length = m + 1;
40839 q.words = new Array(q.length);
40840 for (var i = 0; i < q.length; i++) {
40841 q.words[i] = 0;
40842 }
40843 }
ebd8d4e8 40844
8b095871
IC
40845 var diff = a.clone()._ishlnsubmul(b, 1, m);
40846 if (diff.negative === 0) {
40847 a = diff;
40848 if (q) {
40849 q.words[m] = 1;
40850 }
40851 }
ebd8d4e8 40852
8b095871
IC
40853 for (var j = m - 1; j >= 0; j--) {
40854 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
40855 (a.words[b.length + j - 1] | 0);
ebd8d4e8 40856
8b095871
IC
40857 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
40858 // (0x7ffffff)
40859 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
ebd8d4e8 40860
8b095871
IC
40861 a._ishlnsubmul(b, qj, j);
40862 while (a.negative !== 0) {
40863 qj--;
40864 a.negative = 0;
40865 a._ishlnsubmul(b, 1, j);
40866 if (!a.isZero()) {
40867 a.negative ^= 1;
40868 }
40869 }
40870 if (q) {
40871 q.words[j] = qj;
40872 }
40873 }
40874 if (q) {
40875 q.strip();
40876 }
40877 a.strip();
ebd8d4e8 40878
8b095871
IC
40879 // Denormalize
40880 if (mode !== 'div' && shift !== 0) {
40881 a.iushrn(shift);
40882 }
ebd8d4e8 40883
8b095871
IC
40884 return {
40885 div: q || null,
40886 mod: a
40887 };
40888 };
ebd8d4e8 40889
8b095871
IC
40890 // NOTE: 1) `mode` can be set to `mod` to request mod only,
40891 // to `div` to request div only, or be absent to
40892 // request both div & mod
40893 // 2) `positive` is true if unsigned mod is requested
40894 BN.prototype.divmod = function divmod (num, mode, positive) {
40895 assert(!num.isZero());
40896
40897 if (this.isZero()) {
40898 return {
40899 div: new BN(0),
40900 mod: new BN(0)
40901 };
40902 }
ebd8d4e8 40903
8b095871
IC
40904 var div, mod, res;
40905 if (this.negative !== 0 && num.negative === 0) {
40906 res = this.neg().divmod(num, mode);
ebd8d4e8 40907
8b095871
IC
40908 if (mode !== 'mod') {
40909 div = res.div.neg();
40910 }
ebd8d4e8 40911
8b095871
IC
40912 if (mode !== 'div') {
40913 mod = res.mod.neg();
40914 if (positive && mod.negative !== 0) {
40915 mod.iadd(num);
40916 }
40917 }
ebd8d4e8 40918
8b095871
IC
40919 return {
40920 div: div,
40921 mod: mod
40922 };
40923 }
ebd8d4e8 40924
8b095871
IC
40925 if (this.negative === 0 && num.negative !== 0) {
40926 res = this.divmod(num.neg(), mode);
ebd8d4e8 40927
8b095871
IC
40928 if (mode !== 'mod') {
40929 div = res.div.neg();
40930 }
ebd8d4e8 40931
8b095871
IC
40932 return {
40933 div: div,
40934 mod: res.mod
40935 };
40936 }
ebd8d4e8 40937
8b095871
IC
40938 if ((this.negative & num.negative) !== 0) {
40939 res = this.neg().divmod(num.neg(), mode);
ebd8d4e8 40940
8b095871
IC
40941 if (mode !== 'div') {
40942 mod = res.mod.neg();
40943 if (positive && mod.negative !== 0) {
40944 mod.isub(num);
40945 }
40946 }
ebd8d4e8 40947
8b095871
IC
40948 return {
40949 div: res.div,
40950 mod: mod
40951 };
40952 }
ebd8d4e8 40953
8b095871 40954 // Both numbers are positive at this point
ebd8d4e8 40955
8b095871
IC
40956 // Strip both numbers to approximate shift value
40957 if (num.length > this.length || this.cmp(num) < 0) {
40958 return {
40959 div: new BN(0),
40960 mod: this
40961 };
40962 }
ebd8d4e8 40963
8b095871
IC
40964 // Very short reduction
40965 if (num.length === 1) {
40966 if (mode === 'div') {
40967 return {
40968 div: this.divn(num.words[0]),
40969 mod: null
40970 };
40971 }
ebd8d4e8 40972
8b095871
IC
40973 if (mode === 'mod') {
40974 return {
40975 div: null,
40976 mod: new BN(this.modn(num.words[0]))
40977 };
40978 }
ebd8d4e8 40979
8b095871
IC
40980 return {
40981 div: this.divn(num.words[0]),
40982 mod: new BN(this.modn(num.words[0]))
40983 };
40984 }
ebd8d4e8 40985
8b095871
IC
40986 return this._wordDiv(num, mode);
40987 };
ab78acc6 40988
8b095871
IC
40989 // Find `this` / `num`
40990 BN.prototype.div = function div (num) {
40991 return this.divmod(num, 'div', false).div;
40992 };
ab78acc6 40993
8b095871
IC
40994 // Find `this` % `num`
40995 BN.prototype.mod = function mod (num) {
40996 return this.divmod(num, 'mod', false).mod;
40997 };
ab78acc6 40998
8b095871
IC
40999 BN.prototype.umod = function umod (num) {
41000 return this.divmod(num, 'mod', true).mod;
41001 };
ebd8d4e8 41002
8b095871
IC
41003 // Find Round(`this` / `num`)
41004 BN.prototype.divRound = function divRound (num) {
41005 var dm = this.divmod(num);
ebd8d4e8 41006
8b095871
IC
41007 // Fast case - exact division
41008 if (dm.mod.isZero()) return dm.div;
ebd8d4e8 41009
8b095871 41010 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
ebd8d4e8 41011
8b095871
IC
41012 var half = num.ushrn(1);
41013 var r2 = num.andln(1);
41014 var cmp = mod.cmp(half);
ebd8d4e8 41015
8b095871
IC
41016 // Round down
41017 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
ebd8d4e8 41018
8b095871
IC
41019 // Round up
41020 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
41021 };
ab78acc6 41022
8b095871
IC
41023 BN.prototype.modn = function modn (num) {
41024 assert(num <= 0x3ffffff);
41025 var p = (1 << 26) % num;
ab78acc6 41026
8b095871
IC
41027 var acc = 0;
41028 for (var i = this.length - 1; i >= 0; i--) {
41029 acc = (p * acc + (this.words[i] | 0)) % num;
ab78acc6 41030 }
ab78acc6 41031
8b095871
IC
41032 return acc;
41033 };
41034
41035 // In-place division by number
41036 BN.prototype.idivn = function idivn (num) {
41037 assert(num <= 0x3ffffff);
41038
41039 var carry = 0;
41040 for (var i = this.length - 1; i >= 0; i--) {
41041 var w = (this.words[i] | 0) + carry * 0x4000000;
41042 this.words[i] = (w / num) | 0;
41043 carry = w % num;
ebd8d4e8 41044 }
ebd8d4e8 41045
8b095871
IC
41046 return this.strip();
41047 };
ab78acc6 41048
8b095871
IC
41049 BN.prototype.divn = function divn (num) {
41050 return this.clone().idivn(num);
41051 };
ebd8d4e8 41052
8b095871
IC
41053 BN.prototype.egcd = function egcd (p) {
41054 assert(p.negative === 0);
41055 assert(!p.isZero());
ebd8d4e8 41056
8b095871
IC
41057 var x = this;
41058 var y = p.clone();
41059
41060 if (x.negative !== 0) {
41061 x = x.umod(p);
41062 } else {
41063 x = x.clone();
41064 }
41065
41066 // A * x + B * y = x
41067 var A = new BN(1);
41068 var B = new BN(0);
41069
41070 // C * x + D * y = y
41071 var C = new BN(0);
41072 var D = new BN(1);
41073
41074 var g = 0;
41075
41076 while (x.isEven() && y.isEven()) {
41077 x.iushrn(1);
41078 y.iushrn(1);
41079 ++g;
41080 }
ebd8d4e8 41081
8b095871
IC
41082 var yp = y.clone();
41083 var xp = x.clone();
ebd8d4e8 41084
8b095871
IC
41085 while (!x.isZero()) {
41086 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
41087 if (i > 0) {
41088 x.iushrn(i);
41089 while (i-- > 0) {
41090 if (A.isOdd() || B.isOdd()) {
41091 A.iadd(yp);
41092 B.isub(xp);
41093 }
ebd8d4e8 41094
8b095871
IC
41095 A.iushrn(1);
41096 B.iushrn(1);
41097 }
41098 }
ebd8d4e8 41099
8b095871
IC
41100 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
41101 if (j > 0) {
41102 y.iushrn(j);
41103 while (j-- > 0) {
41104 if (C.isOdd() || D.isOdd()) {
41105 C.iadd(yp);
41106 D.isub(xp);
41107 }
ab78acc6 41108
8b095871
IC
41109 C.iushrn(1);
41110 D.iushrn(1);
41111 }
41112 }
ebd8d4e8 41113
8b095871
IC
41114 if (x.cmp(y) >= 0) {
41115 x.isub(y);
41116 A.isub(C);
41117 B.isub(D);
41118 } else {
41119 y.isub(x);
41120 C.isub(A);
41121 D.isub(B);
41122 }
41123 }
ebd8d4e8 41124
8b095871
IC
41125 return {
41126 a: C,
41127 b: D,
41128 gcd: y.iushln(g)
41129 };
41130 };
ebd8d4e8 41131
8b095871
IC
41132 // This is reduced incarnation of the binary EEA
41133 // above, designated to invert members of the
41134 // _prime_ fields F(p) at a maximal speed
41135 BN.prototype._invmp = function _invmp (p) {
41136 assert(p.negative === 0);
41137 assert(!p.isZero());
ebd8d4e8 41138
8b095871
IC
41139 var a = this;
41140 var b = p.clone();
ebd8d4e8 41141
8b095871
IC
41142 if (a.negative !== 0) {
41143 a = a.umod(p);
41144 } else {
41145 a = a.clone();
41146 }
ebd8d4e8 41147
8b095871
IC
41148 var x1 = new BN(1);
41149 var x2 = new BN(0);
ebd8d4e8 41150
8b095871 41151 var delta = b.clone();
ebd8d4e8 41152
8b095871
IC
41153 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
41154 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
41155 if (i > 0) {
41156 a.iushrn(i);
41157 while (i-- > 0) {
41158 if (x1.isOdd()) {
41159 x1.iadd(delta);
41160 }
ebd8d4e8 41161
8b095871
IC
41162 x1.iushrn(1);
41163 }
41164 }
ab78acc6 41165
8b095871
IC
41166 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
41167 if (j > 0) {
41168 b.iushrn(j);
41169 while (j-- > 0) {
41170 if (x2.isOdd()) {
41171 x2.iadd(delta);
41172 }
ebd8d4e8 41173
8b095871
IC
41174 x2.iushrn(1);
41175 }
41176 }
ebd8d4e8 41177
8b095871
IC
41178 if (a.cmp(b) >= 0) {
41179 a.isub(b);
41180 x1.isub(x2);
41181 } else {
41182 b.isub(a);
41183 x2.isub(x1);
41184 }
41185 }
ebd8d4e8 41186
8b095871
IC
41187 var res;
41188 if (a.cmpn(1) === 0) {
41189 res = x1;
41190 } else {
41191 res = x2;
41192 }
ebd8d4e8 41193
8b095871
IC
41194 if (res.cmpn(0) < 0) {
41195 res.iadd(p);
ab78acc6
IC
41196 }
41197
8b095871
IC
41198 return res;
41199 };
ebd8d4e8 41200
8b095871
IC
41201 BN.prototype.gcd = function gcd (num) {
41202 if (this.isZero()) return num.abs();
41203 if (num.isZero()) return this.abs();
41204
41205 var a = this.clone();
41206 var b = num.clone();
41207 a.negative = 0;
41208 b.negative = 0;
41209
41210 // Remove common factor of two
41211 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
41212 a.iushrn(1);
41213 b.iushrn(1);
ab78acc6 41214 }
ab78acc6 41215
8b095871
IC
41216 do {
41217 while (a.isEven()) {
41218 a.iushrn(1);
41219 }
41220 while (b.isEven()) {
41221 b.iushrn(1);
41222 }
ebd8d4e8 41223
8b095871
IC
41224 var r = a.cmp(b);
41225 if (r < 0) {
41226 // Swap `a` and `b` to make `a` always bigger than `b`
41227 var t = a;
41228 a = b;
41229 b = t;
41230 } else if (r === 0 || b.cmpn(1) === 0) {
41231 break;
41232 }
ab78acc6 41233
8b095871
IC
41234 a.isub(b);
41235 } while (true);
ab78acc6 41236
8b095871
IC
41237 return b.iushln(shift);
41238 };
ab78acc6 41239
8b095871
IC
41240 // Invert number in the field F(num)
41241 BN.prototype.invm = function invm (num) {
41242 return this.egcd(num).a.umod(num);
41243 };
ebd8d4e8 41244
8b095871
IC
41245 BN.prototype.isEven = function isEven () {
41246 return (this.words[0] & 1) === 0;
41247 };
ab78acc6 41248
8b095871
IC
41249 BN.prototype.isOdd = function isOdd () {
41250 return (this.words[0] & 1) === 1;
41251 };
ebd8d4e8 41252
8b095871
IC
41253 // And first word and num
41254 BN.prototype.andln = function andln (num) {
41255 return this.words[0] & num;
41256 };
ebd8d4e8 41257
8b095871
IC
41258 // Increment at the bit position in-line
41259 BN.prototype.bincn = function bincn (bit) {
41260 assert(typeof bit === 'number');
41261 var r = bit % 26;
41262 var s = (bit - r) / 26;
41263 var q = 1 << r;
41264
41265 // Fast case: bit is much higher than all existing words
41266 if (this.length <= s) {
41267 this._expand(s + 1);
41268 this.words[s] |= q;
41269 return this;
41270 }
ebd8d4e8 41271
8b095871
IC
41272 // Add bit and propagate, if needed
41273 var carry = q;
41274 for (var i = s; carry !== 0 && i < this.length; i++) {
41275 var w = this.words[i] | 0;
41276 w += carry;
41277 carry = w >>> 26;
41278 w &= 0x3ffffff;
41279 this.words[i] = w;
41280 }
41281 if (carry !== 0) {
41282 this.words[i] = carry;
41283 this.length++;
41284 }
41285 return this;
41286 };
ebd8d4e8 41287
8b095871
IC
41288 BN.prototype.isZero = function isZero () {
41289 return this.length === 1 && this.words[0] === 0;
41290 };
ebd8d4e8 41291
8b095871
IC
41292 BN.prototype.cmpn = function cmpn (num) {
41293 var negative = num < 0;
ebd8d4e8 41294
8b095871
IC
41295 if (this.negative !== 0 && !negative) return -1;
41296 if (this.negative === 0 && negative) return 1;
ab78acc6 41297
8b095871 41298 this.strip();
ab78acc6 41299
8b095871
IC
41300 var res;
41301 if (this.length > 1) {
41302 res = 1;
41303 } else {
41304 if (negative) {
41305 num = -num;
41306 }
ebd8d4e8 41307
8b095871 41308 assert(num <= 0x3ffffff, 'Number is too big');
ebd8d4e8 41309
8b095871
IC
41310 var w = this.words[0] | 0;
41311 res = w === num ? 0 : w < num ? -1 : 1;
41312 }
41313 if (this.negative !== 0) return -res | 0;
41314 return res;
41315 };
ebd8d4e8 41316
8b095871
IC
41317 // Compare two numbers and return:
41318 // 1 - if `this` > `num`
41319 // 0 - if `this` == `num`
41320 // -1 - if `this` < `num`
41321 BN.prototype.cmp = function cmp (num) {
41322 if (this.negative !== 0 && num.negative === 0) return -1;
41323 if (this.negative === 0 && num.negative !== 0) return 1;
41324
41325 var res = this.ucmp(num);
41326 if (this.negative !== 0) return -res | 0;
41327 return res;
41328 };
ebd8d4e8 41329
8b095871
IC
41330 // Unsigned comparison
41331 BN.prototype.ucmp = function ucmp (num) {
41332 // At this point both numbers have the same sign
41333 if (this.length > num.length) return 1;
41334 if (this.length < num.length) return -1;
41335
41336 var res = 0;
41337 for (var i = this.length - 1; i >= 0; i--) {
41338 var a = this.words[i] | 0;
41339 var b = num.words[i] | 0;
41340
41341 if (a === b) continue;
41342 if (a < b) {
41343 res = -1;
41344 } else if (a > b) {
41345 res = 1;
41346 }
41347 break;
41348 }
41349 return res;
41350 };
ebd8d4e8 41351
8b095871
IC
41352 BN.prototype.gtn = function gtn (num) {
41353 return this.cmpn(num) === 1;
41354 };
ebd8d4e8 41355
8b095871
IC
41356 BN.prototype.gt = function gt (num) {
41357 return this.cmp(num) === 1;
41358 };
ebd8d4e8 41359
8b095871
IC
41360 BN.prototype.gten = function gten (num) {
41361 return this.cmpn(num) >= 0;
41362 };
ab78acc6 41363
8b095871
IC
41364 BN.prototype.gte = function gte (num) {
41365 return this.cmp(num) >= 0;
41366 };
ab78acc6 41367
8b095871
IC
41368 BN.prototype.ltn = function ltn (num) {
41369 return this.cmpn(num) === -1;
41370 };
ab78acc6 41371
8b095871
IC
41372 BN.prototype.lt = function lt (num) {
41373 return this.cmp(num) === -1;
41374 };
ebd8d4e8 41375
8b095871
IC
41376 BN.prototype.lten = function lten (num) {
41377 return this.cmpn(num) <= 0;
41378 };
ab78acc6 41379
8b095871
IC
41380 BN.prototype.lte = function lte (num) {
41381 return this.cmp(num) <= 0;
41382 };
ab78acc6 41383
8b095871
IC
41384 BN.prototype.eqn = function eqn (num) {
41385 return this.cmpn(num) === 0;
41386 };
ab78acc6 41387
8b095871
IC
41388 BN.prototype.eq = function eq (num) {
41389 return this.cmp(num) === 0;
41390 };
ebd8d4e8 41391
8b095871
IC
41392 //
41393 // A reduce context, could be using montgomery or something better, depending
41394 // on the `m` itself.
41395 //
41396 BN.red = function red (num) {
41397 return new Red(num);
41398 };
ab78acc6 41399
8b095871
IC
41400 BN.prototype.toRed = function toRed (ctx) {
41401 assert(!this.red, 'Already a number in reduction context');
41402 assert(this.negative === 0, 'red works only with positives');
41403 return ctx.convertTo(this)._forceRed(ctx);
41404 };
41405
41406 BN.prototype.fromRed = function fromRed () {
41407 assert(this.red, 'fromRed works only with numbers in reduction context');
41408 return this.red.convertFrom(this);
41409 };
41410
41411 BN.prototype._forceRed = function _forceRed (ctx) {
41412 this.red = ctx;
41413 return this;
41414 };
41415
41416 BN.prototype.forceRed = function forceRed (ctx) {
41417 assert(!this.red, 'Already a number in reduction context');
41418 return this._forceRed(ctx);
41419 };
41420
41421 BN.prototype.redAdd = function redAdd (num) {
41422 assert(this.red, 'redAdd works only with red numbers');
41423 return this.red.add(this, num);
41424 };
ebd8d4e8 41425
8b095871
IC
41426 BN.prototype.redIAdd = function redIAdd (num) {
41427 assert(this.red, 'redIAdd works only with red numbers');
41428 return this.red.iadd(this, num);
41429 };
ab78acc6 41430
8b095871
IC
41431 BN.prototype.redSub = function redSub (num) {
41432 assert(this.red, 'redSub works only with red numbers');
41433 return this.red.sub(this, num);
41434 };
ab78acc6 41435
8b095871
IC
41436 BN.prototype.redISub = function redISub (num) {
41437 assert(this.red, 'redISub works only with red numbers');
41438 return this.red.isub(this, num);
41439 };
ebd8d4e8 41440
8b095871
IC
41441 BN.prototype.redShl = function redShl (num) {
41442 assert(this.red, 'redShl works only with red numbers');
41443 return this.red.shl(this, num);
41444 };
ebd8d4e8 41445
8b095871
IC
41446 BN.prototype.redMul = function redMul (num) {
41447 assert(this.red, 'redMul works only with red numbers');
41448 this.red._verify2(this, num);
41449 return this.red.mul(this, num);
41450 };
ebd8d4e8 41451
8b095871
IC
41452 BN.prototype.redIMul = function redIMul (num) {
41453 assert(this.red, 'redMul works only with red numbers');
41454 this.red._verify2(this, num);
41455 return this.red.imul(this, num);
41456 };
ebd8d4e8 41457
8b095871
IC
41458 BN.prototype.redSqr = function redSqr () {
41459 assert(this.red, 'redSqr works only with red numbers');
41460 this.red._verify1(this);
41461 return this.red.sqr(this);
41462 };
ebd8d4e8 41463
8b095871
IC
41464 BN.prototype.redISqr = function redISqr () {
41465 assert(this.red, 'redISqr works only with red numbers');
41466 this.red._verify1(this);
41467 return this.red.isqr(this);
41468 };
ebd8d4e8 41469
8b095871
IC
41470 // Square root over p
41471 BN.prototype.redSqrt = function redSqrt () {
41472 assert(this.red, 'redSqrt works only with red numbers');
41473 this.red._verify1(this);
41474 return this.red.sqrt(this);
41475 };
ebd8d4e8 41476
8b095871
IC
41477 BN.prototype.redInvm = function redInvm () {
41478 assert(this.red, 'redInvm works only with red numbers');
41479 this.red._verify1(this);
41480 return this.red.invm(this);
41481 };
ebd8d4e8 41482
8b095871
IC
41483 // Return negative clone of `this` % `red modulo`
41484 BN.prototype.redNeg = function redNeg () {
41485 assert(this.red, 'redNeg works only with red numbers');
41486 this.red._verify1(this);
41487 return this.red.neg(this);
41488 };
ebd8d4e8 41489
8b095871
IC
41490 BN.prototype.redPow = function redPow (num) {
41491 assert(this.red && !num.red, 'redPow(normalNum)');
41492 this.red._verify1(this);
41493 return this.red.pow(this, num);
41494 };
ebd8d4e8 41495
8b095871
IC
41496 // Prime numbers with efficient reduction
41497 var primes = {
41498 k256: null,
41499 p224: null,
41500 p192: null,
41501 p25519: null
41502 };
ebd8d4e8 41503
8b095871
IC
41504 // Pseudo-Mersenne prime
41505 function MPrime (name, p) {
41506 // P = 2 ^ N - K
41507 this.name = name;
41508 this.p = new BN(p, 16);
41509 this.n = this.p.bitLength();
41510 this.k = new BN(1).iushln(this.n).isub(this.p);
ebd8d4e8 41511
8b095871
IC
41512 this.tmp = this._tmp();
41513 }
ebd8d4e8 41514
8b095871
IC
41515 MPrime.prototype._tmp = function _tmp () {
41516 var tmp = new BN(null);
41517 tmp.words = new Array(Math.ceil(this.n / 13));
41518 return tmp;
41519 };
ebd8d4e8 41520
8b095871
IC
41521 MPrime.prototype.ireduce = function ireduce (num) {
41522 // Assumes that `num` is less than `P^2`
41523 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
41524 var r = num;
41525 var rlen;
ebd8d4e8 41526
8b095871
IC
41527 do {
41528 this.split(r, this.tmp);
41529 r = this.imulK(r);
41530 r = r.iadd(this.tmp);
41531 rlen = r.bitLength();
41532 } while (rlen > this.n);
41533
41534 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
41535 if (cmp === 0) {
41536 r.words[0] = 0;
41537 r.length = 1;
41538 } else if (cmp > 0) {
41539 r.isub(this.p);
41540 } else {
41541 r.strip();
41542 }
ebd8d4e8 41543
8b095871
IC
41544 return r;
41545 };
ebd8d4e8 41546
8b095871
IC
41547 MPrime.prototype.split = function split (input, out) {
41548 input.iushrn(this.n, 0, out);
41549 };
ebd8d4e8 41550
8b095871
IC
41551 MPrime.prototype.imulK = function imulK (num) {
41552 return num.imul(this.k);
41553 };
ebd8d4e8 41554
8b095871
IC
41555 function K256 () {
41556 MPrime.call(
41557 this,
41558 'k256',
41559 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
41560 }
41561 inherits(K256, MPrime);
ebd8d4e8 41562
8b095871
IC
41563 K256.prototype.split = function split (input, output) {
41564 // 256 = 9 * 26 + 22
41565 var mask = 0x3fffff;
ebd8d4e8 41566
8b095871
IC
41567 var outLen = Math.min(input.length, 9);
41568 for (var i = 0; i < outLen; i++) {
41569 output.words[i] = input.words[i];
41570 }
41571 output.length = outLen;
ebd8d4e8 41572
8b095871
IC
41573 if (input.length <= 9) {
41574 input.words[0] = 0;
41575 input.length = 1;
41576 return;
41577 }
ebd8d4e8 41578
8b095871
IC
41579 // Shift by 9 limbs
41580 var prev = input.words[9];
41581 output.words[output.length++] = prev & mask;
ebd8d4e8 41582
8b095871
IC
41583 for (i = 10; i < input.length; i++) {
41584 var next = input.words[i] | 0;
41585 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
41586 prev = next;
41587 }
41588 prev >>>= 22;
41589 input.words[i - 10] = prev;
41590 if (prev === 0 && input.length > 10) {
41591 input.length -= 10;
41592 } else {
41593 input.length -= 9;
41594 }
41595 };
ebd8d4e8 41596
8b095871
IC
41597 K256.prototype.imulK = function imulK (num) {
41598 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
41599 num.words[num.length] = 0;
41600 num.words[num.length + 1] = 0;
41601 num.length += 2;
41602
41603 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
41604 var lo = 0;
41605 for (var i = 0; i < num.length; i++) {
41606 var w = num.words[i] | 0;
41607 lo += w * 0x3d1;
41608 num.words[i] = lo & 0x3ffffff;
41609 lo = w * 0x40 + ((lo / 0x4000000) | 0);
41610 }
41611
41612 // Fast length reduction
41613 if (num.words[num.length - 1] === 0) {
41614 num.length--;
41615 if (num.words[num.length - 1] === 0) {
41616 num.length--;
41617 }
41618 }
41619 return num;
41620 };
ebd8d4e8 41621
8b095871
IC
41622 function P224 () {
41623 MPrime.call(
41624 this,
41625 'p224',
41626 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
41627 }
41628 inherits(P224, MPrime);
ebd8d4e8 41629
8b095871
IC
41630 function P192 () {
41631 MPrime.call(
41632 this,
41633 'p192',
41634 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
41635 }
41636 inherits(P192, MPrime);
ebd8d4e8 41637
8b095871
IC
41638 function P25519 () {
41639 // 2 ^ 255 - 19
41640 MPrime.call(
41641 this,
41642 '25519',
41643 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
41644 }
41645 inherits(P25519, MPrime);
ebd8d4e8 41646
8b095871
IC
41647 P25519.prototype.imulK = function imulK (num) {
41648 // K = 0x13
41649 var carry = 0;
41650 for (var i = 0; i < num.length; i++) {
41651 var hi = (num.words[i] | 0) * 0x13 + carry;
41652 var lo = hi & 0x3ffffff;
41653 hi >>>= 26;
ebd8d4e8 41654
8b095871
IC
41655 num.words[i] = lo;
41656 carry = hi;
41657 }
41658 if (carry !== 0) {
41659 num.words[num.length++] = carry;
41660 }
41661 return num;
41662 };
ebd8d4e8 41663
8b095871
IC
41664 // Exported mostly for testing purposes, use plain name instead
41665 BN._prime = function prime (name) {
41666 // Cached version of prime
41667 if (primes[name]) return primes[name];
41668
41669 var prime;
41670 if (name === 'k256') {
41671 prime = new K256();
41672 } else if (name === 'p224') {
41673 prime = new P224();
41674 } else if (name === 'p192') {
41675 prime = new P192();
41676 } else if (name === 'p25519') {
41677 prime = new P25519();
41678 } else {
41679 throw new Error('Unknown prime ' + name);
41680 }
41681 primes[name] = prime;
ab78acc6 41682
8b095871
IC
41683 return prime;
41684 };
ab78acc6 41685
8b095871
IC
41686 //
41687 // Base reduction engine
41688 //
41689 function Red (m) {
41690 if (typeof m === 'string') {
41691 var prime = BN._prime(m);
41692 this.m = prime.p;
41693 this.prime = prime;
41694 } else {
41695 assert(m.gtn(1), 'modulus must be greater than 1');
41696 this.m = m;
41697 this.prime = null;
41698 }
41699 }
ab78acc6 41700
8b095871
IC
41701 Red.prototype._verify1 = function _verify1 (a) {
41702 assert(a.negative === 0, 'red works only with positives');
41703 assert(a.red, 'red works only with red numbers');
41704 };
ab78acc6 41705
8b095871
IC
41706 Red.prototype._verify2 = function _verify2 (a, b) {
41707 assert((a.negative | b.negative) === 0, 'red works only with positives');
41708 assert(a.red && a.red === b.red,
41709 'red works only with red numbers');
41710 };
ebd8d4e8 41711
8b095871
IC
41712 Red.prototype.imod = function imod (a) {
41713 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
41714 return a.umod(this.m)._forceRed(this);
41715 };
ebd8d4e8 41716
8b095871
IC
41717 Red.prototype.neg = function neg (a) {
41718 if (a.isZero()) {
41719 return a.clone();
41720 }
ebd8d4e8 41721
8b095871
IC
41722 return this.m.sub(a)._forceRed(this);
41723 };
ab78acc6 41724
8b095871
IC
41725 Red.prototype.add = function add (a, b) {
41726 this._verify2(a, b);
ab78acc6 41727
8b095871
IC
41728 var res = a.add(b);
41729 if (res.cmp(this.m) >= 0) {
41730 res.isub(this.m);
41731 }
41732 return res._forceRed(this);
41733 };
ab78acc6 41734
8b095871
IC
41735 Red.prototype.iadd = function iadd (a, b) {
41736 this._verify2(a, b);
ab78acc6 41737
8b095871
IC
41738 var res = a.iadd(b);
41739 if (res.cmp(this.m) >= 0) {
41740 res.isub(this.m);
41741 }
41742 return res;
41743 };
ab78acc6 41744
8b095871
IC
41745 Red.prototype.sub = function sub (a, b) {
41746 this._verify2(a, b);
ab78acc6 41747
8b095871
IC
41748 var res = a.sub(b);
41749 if (res.cmpn(0) < 0) {
41750 res.iadd(this.m);
41751 }
41752 return res._forceRed(this);
41753 };
ab78acc6 41754
8b095871
IC
41755 Red.prototype.isub = function isub (a, b) {
41756 this._verify2(a, b);
ebd8d4e8 41757
8b095871
IC
41758 var res = a.isub(b);
41759 if (res.cmpn(0) < 0) {
41760 res.iadd(this.m);
41761 }
41762 return res;
41763 };
ebd8d4e8 41764
8b095871
IC
41765 Red.prototype.shl = function shl (a, num) {
41766 this._verify1(a);
41767 return this.imod(a.ushln(num));
41768 };
ebd8d4e8 41769
8b095871
IC
41770 Red.prototype.imul = function imul (a, b) {
41771 this._verify2(a, b);
41772 return this.imod(a.imul(b));
41773 };
ebd8d4e8 41774
8b095871
IC
41775 Red.prototype.mul = function mul (a, b) {
41776 this._verify2(a, b);
41777 return this.imod(a.mul(b));
41778 };
ebd8d4e8 41779
8b095871
IC
41780 Red.prototype.isqr = function isqr (a) {
41781 return this.imul(a, a.clone());
41782 };
41783
41784 Red.prototype.sqr = function sqr (a) {
41785 return this.mul(a, a);
41786 };
ebd8d4e8 41787
8b095871
IC
41788 Red.prototype.sqrt = function sqrt (a) {
41789 if (a.isZero()) return a.clone();
ebd8d4e8 41790
8b095871
IC
41791 var mod3 = this.m.andln(3);
41792 assert(mod3 % 2 === 1);
ebd8d4e8 41793
8b095871
IC
41794 // Fast case
41795 if (mod3 === 3) {
41796 var pow = this.m.add(new BN(1)).iushrn(2);
41797 return this.pow(a, pow);
41798 }
ebd8d4e8 41799
8b095871
IC
41800 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
41801 //
41802 // Find Q and S, that Q * 2 ^ S = (P - 1)
41803 var q = this.m.subn(1);
41804 var s = 0;
41805 while (!q.isZero() && q.andln(1) === 0) {
41806 s++;
41807 q.iushrn(1);
41808 }
41809 assert(!q.isZero());
ebd8d4e8 41810
8b095871
IC
41811 var one = new BN(1).toRed(this);
41812 var nOne = one.redNeg();
ebd8d4e8 41813
8b095871
IC
41814 // Find quadratic non-residue
41815 // NOTE: Max is such because of generalized Riemann hypothesis.
41816 var lpow = this.m.subn(1).iushrn(1);
41817 var z = this.m.bitLength();
41818 z = new BN(2 * z * z).toRed(this);
ebd8d4e8 41819
8b095871
IC
41820 while (this.pow(z, lpow).cmp(nOne) !== 0) {
41821 z.redIAdd(nOne);
41822 }
ebd8d4e8 41823
8b095871
IC
41824 var c = this.pow(z, q);
41825 var r = this.pow(a, q.addn(1).iushrn(1));
41826 var t = this.pow(a, q);
41827 var m = s;
41828 while (t.cmp(one) !== 0) {
41829 var tmp = t;
41830 for (var i = 0; tmp.cmp(one) !== 0; i++) {
41831 tmp = tmp.redSqr();
41832 }
41833 assert(i < m);
41834 var b = this.pow(c, new BN(1).iushln(m - i - 1));
ebd8d4e8 41835
8b095871
IC
41836 r = r.redMul(b);
41837 c = b.redSqr();
41838 t = t.redMul(c);
41839 m = i;
41840 }
ebd8d4e8 41841
8b095871
IC
41842 return r;
41843 };
ebd8d4e8 41844
8b095871
IC
41845 Red.prototype.invm = function invm (a) {
41846 var inv = a._invmp(this.m);
41847 if (inv.negative !== 0) {
41848 inv.negative = 0;
41849 return this.imod(inv).redNeg();
41850 } else {
41851 return this.imod(inv);
41852 }
41853 };
ebd8d4e8 41854
8b095871
IC
41855 Red.prototype.pow = function pow (a, num) {
41856 if (num.isZero()) return new BN(1);
41857 if (num.cmpn(1) === 0) return a.clone();
ebd8d4e8 41858
8b095871
IC
41859 var windowSize = 4;
41860 var wnd = new Array(1 << windowSize);
41861 wnd[0] = new BN(1).toRed(this);
41862 wnd[1] = a;
41863 for (var i = 2; i < wnd.length; i++) {
41864 wnd[i] = this.mul(wnd[i - 1], a);
41865 }
ebd8d4e8 41866
8b095871
IC
41867 var res = wnd[0];
41868 var current = 0;
41869 var currentLen = 0;
41870 var start = num.bitLength() % 26;
41871 if (start === 0) {
41872 start = 26;
41873 }
ebd8d4e8 41874
8b095871
IC
41875 for (i = num.length - 1; i >= 0; i--) {
41876 var word = num.words[i];
41877 for (var j = start - 1; j >= 0; j--) {
41878 var bit = (word >> j) & 1;
41879 if (res !== wnd[0]) {
41880 res = this.sqr(res);
41881 }
ebd8d4e8 41882
8b095871
IC
41883 if (bit === 0 && current === 0) {
41884 currentLen = 0;
41885 continue;
41886 }
ebd8d4e8 41887
8b095871
IC
41888 current <<= 1;
41889 current |= bit;
41890 currentLen++;
41891 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
ebd8d4e8 41892
8b095871
IC
41893 res = this.mul(res, wnd[current]);
41894 currentLen = 0;
41895 current = 0;
41896 }
41897 start = 26;
41898 }
ebd8d4e8 41899
8b095871
IC
41900 return res;
41901 };
ebd8d4e8 41902
8b095871
IC
41903 Red.prototype.convertTo = function convertTo (num) {
41904 var r = num.umod(this.m);
ebd8d4e8 41905
8b095871
IC
41906 return r === num ? r.clone() : r;
41907 };
ebd8d4e8 41908
8b095871
IC
41909 Red.prototype.convertFrom = function convertFrom (num) {
41910 var res = num.clone();
41911 res.red = null;
41912 return res;
41913 };
ebd8d4e8 41914
8b095871
IC
41915 //
41916 // Montgomery method engine
41917 //
ebd8d4e8 41918
8b095871
IC
41919 BN.mont = function mont (num) {
41920 return new Mont(num);
41921 };
ebd8d4e8 41922
8b095871
IC
41923 function Mont (m) {
41924 Red.call(this, m);
ebd8d4e8 41925
8b095871
IC
41926 this.shift = this.m.bitLength();
41927 if (this.shift % 26 !== 0) {
41928 this.shift += 26 - (this.shift % 26);
41929 }
ebd8d4e8 41930
8b095871
IC
41931 this.r = new BN(1).iushln(this.shift);
41932 this.r2 = this.imod(this.r.sqr());
41933 this.rinv = this.r._invmp(this.m);
41934
41935 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
41936 this.minv = this.minv.umod(this.r);
41937 this.minv = this.r.sub(this.minv);
ebd8d4e8 41938 }
8b095871 41939 inherits(Mont, Red);
ebd8d4e8 41940
8b095871
IC
41941 Mont.prototype.convertTo = function convertTo (num) {
41942 return this.imod(num.ushln(this.shift));
41943 };
ab78acc6 41944
8b095871
IC
41945 Mont.prototype.convertFrom = function convertFrom (num) {
41946 var r = this.imod(num.mul(this.rinv));
41947 r.red = null;
41948 return r;
41949 };
ebd8d4e8 41950
8b095871
IC
41951 Mont.prototype.imul = function imul (a, b) {
41952 if (a.isZero() || b.isZero()) {
41953 a.words[0] = 0;
41954 a.length = 1;
41955 return a;
41956 }
ebd8d4e8 41957
8b095871
IC
41958 var t = a.imul(b);
41959 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
41960 var u = t.isub(c).iushrn(this.shift);
41961 var res = u;
ab78acc6 41962
8b095871
IC
41963 if (u.cmp(this.m) >= 0) {
41964 res = u.isub(this.m);
41965 } else if (u.cmpn(0) < 0) {
41966 res = u.iadd(this.m);
41967 }
ab78acc6 41968
8b095871
IC
41969 return res._forceRed(this);
41970 };
ab78acc6 41971
8b095871
IC
41972 Mont.prototype.mul = function mul (a, b) {
41973 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
ab78acc6 41974
8b095871
IC
41975 var t = a.mul(b);
41976 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
41977 var u = t.isub(c).iushrn(this.shift);
41978 var res = u;
41979 if (u.cmp(this.m) >= 0) {
41980 res = u.isub(this.m);
41981 } else if (u.cmpn(0) < 0) {
41982 res = u.iadd(this.m);
41983 }
ab78acc6 41984
8b095871
IC
41985 return res._forceRed(this);
41986 };
ab78acc6 41987
8b095871
IC
41988 Mont.prototype.invm = function invm (a) {
41989 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
41990 var res = this.imod(a._invmp(this.m).mul(this.r2));
41991 return res._forceRed(this);
41992 };
41993})(typeof module === 'undefined' || module, this);
ab78acc6 41994
8b095871
IC
41995},{}],34:[function(require,module,exports){
41996var r;
ebd8d4e8 41997
8b095871
IC
41998module.exports = function rand(len) {
41999 if (!r)
42000 r = new Rand(null);
ebd8d4e8 42001
8b095871
IC
42002 return r.generate(len);
42003};
ab78acc6 42004
8b095871
IC
42005function Rand(rand) {
42006 this.rand = rand;
ab78acc6 42007}
8b095871 42008module.exports.Rand = Rand;
ab78acc6 42009
8b095871
IC
42010Rand.prototype.generate = function generate(len) {
42011 return this._rand(len);
42012};
ab78acc6 42013
8b095871
IC
42014if (typeof self === 'object') {
42015 if (self.crypto && self.crypto.getRandomValues) {
42016 // Modern browsers
42017 Rand.prototype._rand = function _rand(n) {
42018 var arr = new Uint8Array(n);
42019 self.crypto.getRandomValues(arr);
42020 return arr;
42021 };
42022 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
42023 // IE
42024 Rand.prototype._rand = function _rand(n) {
42025 var arr = new Uint8Array(n);
42026 self.msCrypto.getRandomValues(arr);
42027 return arr;
42028 };
42029 } else {
42030 // Old junk
42031 Rand.prototype._rand = function() {
42032 throw new Error('Not implemented yet');
42033 };
42034 }
42035} else {
42036 // Node.js or Web worker with no crypto support
42037 try {
42038 var crypto = require('crypto');
ab78acc6 42039
8b095871
IC
42040 Rand.prototype._rand = function _rand(n) {
42041 return crypto.randomBytes(n);
42042 };
42043 } catch (e) {
42044 // Emulate crypto API using randy
42045 Rand.prototype._rand = function _rand(n) {
42046 var res = new Uint8Array(n);
42047 for (var i = 0; i < res.length; i++)
42048 res[i] = this.rand.getByte();
42049 return res;
42050 };
42051 }
42052}
42053
42054},{"crypto":3}],35:[function(require,module,exports){
42055(function (Buffer){
42056var Transform = require('stream').Transform
42057var inherits = require('inherits')
42058var StringDecoder = require('string_decoder').StringDecoder
42059module.exports = CipherBase
42060inherits(CipherBase, Transform)
42061function CipherBase (hashMode) {
42062 Transform.call(this)
42063 this.hashMode = typeof hashMode === 'string'
42064 if (this.hashMode) {
42065 this[hashMode] = this._finalOrDigest
42066 } else {
42067 this.final = this._finalOrDigest
42068 }
42069 this._decoder = null
42070 this._encoding = null
42071}
42072CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
42073 if (typeof data === 'string') {
42074 data = new Buffer(data, inputEnc)
42075 }
42076 var outData = this._update(data)
42077 if (this.hashMode) {
42078 return this
42079 }
42080 if (outputEnc) {
42081 outData = this._toString(outData, outputEnc)
42082 }
42083 return outData
42084}
ab78acc6 42085
8b095871 42086CipherBase.prototype.setAutoPadding = function () {}
ab78acc6 42087
8b095871
IC
42088CipherBase.prototype.getAuthTag = function () {
42089 throw new Error('trying to get auth tag in unsupported state')
42090}
ab78acc6 42091
8b095871
IC
42092CipherBase.prototype.setAuthTag = function () {
42093 throw new Error('trying to set auth tag in unsupported state')
42094}
ab78acc6 42095
8b095871
IC
42096CipherBase.prototype.setAAD = function () {
42097 throw new Error('trying to set aad in unsupported state')
42098}
ab78acc6 42099
8b095871
IC
42100CipherBase.prototype._transform = function (data, _, next) {
42101 var err
42102 try {
42103 if (this.hashMode) {
42104 this._update(data)
42105 } else {
42106 this.push(this._update(data))
42107 }
42108 } catch (e) {
42109 err = e
42110 } finally {
42111 next(err)
42112 }
42113}
42114CipherBase.prototype._flush = function (done) {
42115 var err
42116 try {
42117 this.push(this._final())
42118 } catch (e) {
42119 err = e
42120 } finally {
42121 done(err)
42122 }
42123}
42124CipherBase.prototype._finalOrDigest = function (outputEnc) {
42125 var outData = this._final() || new Buffer('')
42126 if (outputEnc) {
42127 outData = this._toString(outData, outputEnc, true)
42128 }
42129 return outData
42130}
ebd8d4e8 42131
8b095871
IC
42132CipherBase.prototype._toString = function (value, enc, fin) {
42133 if (!this._decoder) {
42134 this._decoder = new StringDecoder(enc)
42135 this._encoding = enc
42136 }
42137 if (this._encoding !== enc) {
42138 throw new Error('can\'t switch encodings')
42139 }
42140 var out = this._decoder.write(value)
42141 if (fin) {
42142 out += this._decoder.end()
ab78acc6 42143 }
8b095871
IC
42144 return out
42145}
ab78acc6 42146
8b095871
IC
42147}).call(this,require("buffer").Buffer)
42148},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
42149(function (Buffer){
42150'use strict';
42151var inherits = require('inherits')
42152var md5 = require('./md5')
42153var rmd160 = require('ripemd160')
42154var sha = require('sha.js')
ebd8d4e8 42155
8b095871 42156var Base = require('cipher-base')
ebd8d4e8 42157
8b095871
IC
42158function HashNoConstructor(hash) {
42159 Base.call(this, 'digest')
ebd8d4e8 42160
8b095871
IC
42161 this._hash = hash
42162 this.buffers = []
42163}
ebd8d4e8 42164
8b095871 42165inherits(HashNoConstructor, Base)
ebd8d4e8 42166
8b095871
IC
42167HashNoConstructor.prototype._update = function (data) {
42168 this.buffers.push(data)
42169}
ebd8d4e8 42170
8b095871
IC
42171HashNoConstructor.prototype._final = function () {
42172 var buf = Buffer.concat(this.buffers)
42173 var r = this._hash(buf)
42174 this.buffers = null
ebd8d4e8 42175
8b095871
IC
42176 return r
42177}
ab78acc6 42178
8b095871
IC
42179function Hash(hash) {
42180 Base.call(this, 'digest')
ab78acc6 42181
8b095871
IC
42182 this._hash = hash
42183}
ab78acc6 42184
8b095871 42185inherits(Hash, Base)
ab78acc6 42186
8b095871
IC
42187Hash.prototype._update = function (data) {
42188 this._hash.update(data)
42189}
ab78acc6 42190
8b095871
IC
42191Hash.prototype._final = function () {
42192 return this._hash.digest()
42193}
ab78acc6 42194
8b095871
IC
42195module.exports = function createHash (alg) {
42196 alg = alg.toLowerCase()
42197 if ('md5' === alg) return new HashNoConstructor(md5)
42198 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
42199
42200 return new Hash(sha(alg))
ab78acc6
IC
42201}
42202
8b095871
IC
42203}).call(this,require("buffer").Buffer)
42204},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
42205(function (Buffer){
42206'use strict';
42207var intSize = 4;
42208var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
42209var chrsz = 8;
ab78acc6 42210
8b095871
IC
42211function toArray(buf, bigEndian) {
42212 if ((buf.length % intSize) !== 0) {
42213 var len = buf.length + (intSize - (buf.length % intSize));
42214 buf = Buffer.concat([buf, zeroBuffer], len);
ab78acc6
IC
42215 }
42216
8b095871
IC
42217 var arr = [];
42218 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
42219 for (var i = 0; i < buf.length; i += intSize) {
42220 arr.push(fn.call(buf, i));
42221 }
42222 return arr;
ab78acc6
IC
42223}
42224
8b095871
IC
42225function toBuffer(arr, size, bigEndian) {
42226 var buf = new Buffer(size);
42227 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
42228 for (var i = 0; i < arr.length; i++) {
42229 fn.call(buf, arr[i], i * 4, true);
42230 }
42231 return buf;
42232}
ab78acc6 42233
8b095871
IC
42234function hash(buf, fn, hashSize, bigEndian) {
42235 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
42236 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
42237 return toBuffer(arr, hashSize, bigEndian);
42238}
42239exports.hash = hash;
ab78acc6 42240}).call(this,require("buffer").Buffer)
8b095871 42241},{"buffer":5}],38:[function(require,module,exports){
ab78acc6 42242'use strict';
8b095871
IC
42243/*
42244 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
42245 * Digest Algorithm, as defined in RFC 1321.
42246 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
42247 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
42248 * Distributed under the BSD License
42249 * See http://pajhome.org.uk/crypt/md5 for more info.
42250 */
ebd8d4e8 42251
8b095871 42252var helpers = require('./helpers');
ebd8d4e8 42253
8b095871
IC
42254/*
42255 * Calculate the MD5 of an array of little-endian words, and a bit length
42256 */
42257function core_md5(x, len)
42258{
42259 /* append padding */
42260 x[len >> 5] |= 0x80 << ((len) % 32);
42261 x[(((len + 64) >>> 9) << 4) + 14] = len;
ebd8d4e8 42262
8b095871
IC
42263 var a = 1732584193;
42264 var b = -271733879;
42265 var c = -1732584194;
42266 var d = 271733878;
ebd8d4e8 42267
8b095871
IC
42268 for(var i = 0; i < x.length; i += 16)
42269 {
42270 var olda = a;
42271 var oldb = b;
42272 var oldc = c;
42273 var oldd = d;
ebd8d4e8 42274
8b095871
IC
42275 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
42276 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
42277 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
42278 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
42279 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
42280 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
42281 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
42282 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
42283 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
42284 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
42285 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
42286 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
42287 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
42288 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
42289 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
42290 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
ebd8d4e8 42291
8b095871
IC
42292 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
42293 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
42294 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
42295 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
42296 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
42297 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
42298 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
42299 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
42300 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
42301 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
42302 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
42303 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
42304 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
42305 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
42306 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
42307 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
ebd8d4e8 42308
8b095871
IC
42309 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
42310 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
42311 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
42312 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
42313 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
42314 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
42315 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
42316 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
42317 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
42318 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
42319 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
42320 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
42321 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
42322 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
42323 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
42324 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
ebd8d4e8 42325
8b095871
IC
42326 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
42327 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
42328 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
42329 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
42330 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
42331 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
42332 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
42333 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
42334 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
42335 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
42336 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
42337 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
42338 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
42339 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
42340 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
42341 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
ebd8d4e8 42342
8b095871
IC
42343 a = safe_add(a, olda);
42344 b = safe_add(b, oldb);
42345 c = safe_add(c, oldc);
42346 d = safe_add(d, oldd);
ab78acc6 42347 }
8b095871 42348 return Array(a, b, c, d);
ebd8d4e8 42349
ab78acc6 42350}
ebd8d4e8 42351
8b095871
IC
42352/*
42353 * These functions implement the four basic operations the algorithm uses.
42354 */
42355function md5_cmn(q, a, b, x, s, t)
42356{
42357 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
ab78acc6 42358}
8b095871
IC
42359function md5_ff(a, b, c, d, x, s, t)
42360{
42361 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
ab78acc6 42362}
8b095871
IC
42363function md5_gg(a, b, c, d, x, s, t)
42364{
42365 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
ab78acc6 42366}
8b095871
IC
42367function md5_hh(a, b, c, d, x, s, t)
42368{
42369 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
42370}
42371function md5_ii(a, b, c, d, x, s, t)
42372{
42373 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
ab78acc6 42374}
ebd8d4e8 42375
8b095871
IC
42376/*
42377 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
42378 * to work around bugs in some JS interpreters.
42379 */
42380function safe_add(x, y)
42381{
42382 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
42383 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
42384 return (msw << 16) | (lsw & 0xFFFF);
ab78acc6 42385}
ebd8d4e8 42386
8b095871
IC
42387/*
42388 * Bitwise rotate a 32-bit number to the left.
42389 */
42390function bit_rol(num, cnt)
42391{
42392 return (num << cnt) | (num >>> (32 - cnt));
42393}
ebd8d4e8 42394
8b095871
IC
42395module.exports = function md5(buf) {
42396 return helpers.hash(buf, core_md5, 16);
42397};
42398},{"./helpers":37}],39:[function(require,module,exports){
42399'use strict';
ebd8d4e8 42400
8b095871 42401var elliptic = exports;
ebd8d4e8 42402
8b095871
IC
42403elliptic.version = require('../package.json').version;
42404elliptic.utils = require('./elliptic/utils');
42405elliptic.rand = require('brorand');
42406elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
42407elliptic.curve = require('./elliptic/curve');
42408elliptic.curves = require('./elliptic/curves');
ebd8d4e8 42409
8b095871
IC
42410// Protocols
42411elliptic.ec = require('./elliptic/ec');
42412elliptic.eddsa = require('./elliptic/eddsa');
ebd8d4e8 42413
8b095871
IC
42414},{"../package.json":55,"./elliptic/curve":42,"./elliptic/curves":45,"./elliptic/ec":46,"./elliptic/eddsa":49,"./elliptic/hmac-drbg":52,"./elliptic/utils":54,"brorand":34}],40:[function(require,module,exports){
42415'use strict';
ebd8d4e8 42416
8b095871
IC
42417var BN = require('bn.js');
42418var elliptic = require('../../elliptic');
42419var utils = elliptic.utils;
42420var getNAF = utils.getNAF;
42421var getJSF = utils.getJSF;
42422var assert = utils.assert;
42423
42424function BaseCurve(type, conf) {
42425 this.type = type;
42426 this.p = new BN(conf.p, 16);
42427
42428 // Use Montgomery, when there is no fast reduction for the prime
42429 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
42430
42431 // Useful for many curves
42432 this.zero = new BN(0).toRed(this.red);
42433 this.one = new BN(1).toRed(this.red);
42434 this.two = new BN(2).toRed(this.red);
42435
42436 // Curve configuration, optional
42437 this.n = conf.n && new BN(conf.n, 16);
42438 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
42439
42440 // Temporary arrays
42441 this._wnafT1 = new Array(4);
42442 this._wnafT2 = new Array(4);
42443 this._wnafT3 = new Array(4);
42444 this._wnafT4 = new Array(4);
42445
42446 // Generalized Greg Maxwell's trick
42447 var adjustCount = this.n && this.p.div(this.n);
42448 if (!adjustCount || adjustCount.cmpn(100) > 0) {
42449 this.redN = null;
42450 } else {
42451 this._maxwellTrick = true;
42452 this.redN = this.n.toRed(this.red);
ebd8d4e8 42453 }
ebd8d4e8 42454}
8b095871 42455module.exports = BaseCurve;
ebd8d4e8 42456
8b095871
IC
42457BaseCurve.prototype.point = function point() {
42458 throw new Error('Not implemented');
42459};
ebd8d4e8 42460
8b095871
IC
42461BaseCurve.prototype.validate = function validate() {
42462 throw new Error('Not implemented');
42463};
ebd8d4e8 42464
8b095871
IC
42465BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
42466 assert(p.precomputed);
42467 var doubles = p._getDoubles();
ebd8d4e8 42468
8b095871
IC
42469 var naf = getNAF(k, 1);
42470 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
42471 I /= 3;
ebd8d4e8 42472
8b095871
IC
42473 // Translate into more windowed form
42474 var repr = [];
42475 for (var j = 0; j < naf.length; j += doubles.step) {
42476 var nafW = 0;
42477 for (var k = j + doubles.step - 1; k >= j; k--)
42478 nafW = (nafW << 1) + naf[k];
42479 repr.push(nafW);
42480 }
ebd8d4e8 42481
8b095871
IC
42482 var a = this.jpoint(null, null, null);
42483 var b = this.jpoint(null, null, null);
42484 for (var i = I; i > 0; i--) {
42485 for (var j = 0; j < repr.length; j++) {
42486 var nafW = repr[j];
42487 if (nafW === i)
42488 b = b.mixedAdd(doubles.points[j]);
42489 else if (nafW === -i)
42490 b = b.mixedAdd(doubles.points[j].neg());
42491 }
42492 a = a.add(b);
42493 }
42494 return a.toP();
42495};
ebd8d4e8 42496
8b095871
IC
42497BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
42498 var w = 4;
ebd8d4e8 42499
8b095871
IC
42500 // Precompute window
42501 var nafPoints = p._getNAFPoints(w);
42502 w = nafPoints.wnd;
42503 var wnd = nafPoints.points;
ebd8d4e8 42504
8b095871
IC
42505 // Get NAF form
42506 var naf = getNAF(k, w);
ebd8d4e8 42507
8b095871
IC
42508 // Add `this`*(N+1) for every w-NAF index
42509 var acc = this.jpoint(null, null, null);
42510 for (var i = naf.length - 1; i >= 0; i--) {
42511 // Count zeroes
42512 for (var k = 0; i >= 0 && naf[i] === 0; i--)
42513 k++;
42514 if (i >= 0)
42515 k++;
42516 acc = acc.dblp(k);
ebd8d4e8 42517
8b095871
IC
42518 if (i < 0)
42519 break;
42520 var z = naf[i];
42521 assert(z !== 0);
42522 if (p.type === 'affine') {
42523 // J +- P
42524 if (z > 0)
42525 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
42526 else
42527 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
42528 } else {
42529 // J +- J
42530 if (z > 0)
42531 acc = acc.add(wnd[(z - 1) >> 1]);
42532 else
42533 acc = acc.add(wnd[(-z - 1) >> 1].neg());
42534 }
ebd8d4e8 42535 }
8b095871
IC
42536 return p.type === 'affine' ? acc.toP() : acc;
42537};
ebd8d4e8 42538
8b095871
IC
42539BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
42540 points,
42541 coeffs,
42542 len,
42543 jacobianResult) {
42544 var wndWidth = this._wnafT1;
42545 var wnd = this._wnafT2;
42546 var naf = this._wnafT3;
42547
42548 // Fill all arrays
42549 var max = 0;
42550 for (var i = 0; i < len; i++) {
42551 var p = points[i];
42552 var nafPoints = p._getNAFPoints(defW);
42553 wndWidth[i] = nafPoints.wnd;
42554 wnd[i] = nafPoints.points;
42555 }
42556
42557 // Comb small window NAFs
42558 for (var i = len - 1; i >= 1; i -= 2) {
42559 var a = i - 1;
42560 var b = i;
42561 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
42562 naf[a] = getNAF(coeffs[a], wndWidth[a]);
42563 naf[b] = getNAF(coeffs[b], wndWidth[b]);
42564 max = Math.max(naf[a].length, max);
42565 max = Math.max(naf[b].length, max);
42566 continue;
42567 }
ebd8d4e8 42568
8b095871
IC
42569 var comb = [
42570 points[a], /* 1 */
42571 null, /* 3 */
42572 null, /* 5 */
42573 points[b] /* 7 */
42574 ];
42575
42576 // Try to avoid Projective points, if possible
42577 if (points[a].y.cmp(points[b].y) === 0) {
42578 comb[1] = points[a].add(points[b]);
42579 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
42580 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
42581 comb[1] = points[a].toJ().mixedAdd(points[b]);
42582 comb[2] = points[a].add(points[b].neg());
42583 } else {
42584 comb[1] = points[a].toJ().mixedAdd(points[b]);
42585 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
42586 }
ebd8d4e8 42587
8b095871
IC
42588 var index = [
42589 -3, /* -1 -1 */
42590 -1, /* -1 0 */
42591 -5, /* -1 1 */
42592 -7, /* 0 -1 */
42593 0, /* 0 0 */
42594 7, /* 0 1 */
42595 5, /* 1 -1 */
42596 1, /* 1 0 */
42597 3 /* 1 1 */
42598 ];
ebd8d4e8 42599
8b095871
IC
42600 var jsf = getJSF(coeffs[a], coeffs[b]);
42601 max = Math.max(jsf[0].length, max);
42602 naf[a] = new Array(max);
42603 naf[b] = new Array(max);
42604 for (var j = 0; j < max; j++) {
42605 var ja = jsf[0][j] | 0;
42606 var jb = jsf[1][j] | 0;
ebd8d4e8 42607
8b095871
IC
42608 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
42609 naf[b][j] = 0;
42610 wnd[a] = comb;
42611 }
42612 }
ebd8d4e8 42613
8b095871
IC
42614 var acc = this.jpoint(null, null, null);
42615 var tmp = this._wnafT4;
42616 for (var i = max; i >= 0; i--) {
42617 var k = 0;
ebd8d4e8 42618
8b095871
IC
42619 while (i >= 0) {
42620 var zero = true;
42621 for (var j = 0; j < len; j++) {
42622 tmp[j] = naf[j][i] | 0;
42623 if (tmp[j] !== 0)
42624 zero = false;
42625 }
42626 if (!zero)
42627 break;
42628 k++;
42629 i--;
42630 }
42631 if (i >= 0)
42632 k++;
42633 acc = acc.dblp(k);
42634 if (i < 0)
42635 break;
ebd8d4e8 42636
8b095871
IC
42637 for (var j = 0; j < len; j++) {
42638 var z = tmp[j];
42639 var p;
42640 if (z === 0)
42641 continue;
42642 else if (z > 0)
42643 p = wnd[j][(z - 1) >> 1];
42644 else if (z < 0)
42645 p = wnd[j][(-z - 1) >> 1].neg();
42646
42647 if (p.type === 'affine')
42648 acc = acc.mixedAdd(p);
42649 else
42650 acc = acc.add(p);
42651 }
42652 }
42653 // Zeroify references
42654 for (var i = 0; i < len; i++)
42655 wnd[i] = null;
ebd8d4e8 42656
8b095871
IC
42657 if (jacobianResult)
42658 return acc;
42659 else
42660 return acc.toP();
42661};
ebd8d4e8 42662
8b095871
IC
42663function BasePoint(curve, type) {
42664 this.curve = curve;
42665 this.type = type;
42666 this.precomputed = null;
42667}
42668BaseCurve.BasePoint = BasePoint;
ebd8d4e8 42669
8b095871
IC
42670BasePoint.prototype.eq = function eq(/*other*/) {
42671 throw new Error('Not implemented');
42672};
ebd8d4e8 42673
8b095871
IC
42674BasePoint.prototype.validate = function validate() {
42675 return this.curve.validate(this);
42676};
ebd8d4e8 42677
8b095871
IC
42678BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
42679 bytes = utils.toArray(bytes, enc);
ebd8d4e8 42680
8b095871 42681 var len = this.p.byteLength();
ebd8d4e8 42682
8b095871
IC
42683 // uncompressed, hybrid-odd, hybrid-even
42684 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
42685 bytes.length - 1 === 2 * len) {
42686 if (bytes[0] === 0x06)
42687 assert(bytes[bytes.length - 1] % 2 === 0);
42688 else if (bytes[0] === 0x07)
42689 assert(bytes[bytes.length - 1] % 2 === 1);
ebd8d4e8 42690
8b095871
IC
42691 var res = this.point(bytes.slice(1, 1 + len),
42692 bytes.slice(1 + len, 1 + 2 * len));
ebd8d4e8 42693
8b095871
IC
42694 return res;
42695 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
42696 bytes.length - 1 === len) {
42697 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
ebd8d4e8 42698 }
8b095871
IC
42699 throw new Error('Unknown point format');
42700};
ebd8d4e8 42701
8b095871
IC
42702BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
42703 return this.encode(enc, true);
42704};
42705
42706BasePoint.prototype._encode = function _encode(compact) {
42707 var len = this.curve.p.byteLength();
42708 var x = this.getX().toArray('be', len);
42709
42710 if (compact)
42711 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
42712
42713 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
42714};
42715
42716BasePoint.prototype.encode = function encode(enc, compact) {
42717 return utils.encode(this._encode(compact), enc);
42718};
42719
42720BasePoint.prototype.precompute = function precompute(power) {
42721 if (this.precomputed)
42722 return this;
42723
42724 var precomputed = {
42725 doubles: null,
42726 naf: null,
42727 beta: null
42728 };
42729 precomputed.naf = this._getNAFPoints(8);
42730 precomputed.doubles = this._getDoubles(4, power);
42731 precomputed.beta = this._getBeta();
42732 this.precomputed = precomputed;
42733
42734 return this;
42735};
42736
42737BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
42738 if (!this.precomputed)
42739 return false;
42740
42741 var doubles = this.precomputed.doubles;
42742 if (!doubles)
42743 return false;
42744
42745 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
42746};
42747
42748BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
42749 if (this.precomputed && this.precomputed.doubles)
42750 return this.precomputed.doubles;
42751
42752 var doubles = [ this ];
42753 var acc = this;
42754 for (var i = 0; i < power; i += step) {
42755 for (var j = 0; j < step; j++)
42756 acc = acc.dbl();
42757 doubles.push(acc);
ebd8d4e8 42758 }
8b095871
IC
42759 return {
42760 step: step,
42761 points: doubles
42762 };
42763};
ebd8d4e8 42764
8b095871
IC
42765BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
42766 if (this.precomputed && this.precomputed.naf)
42767 return this.precomputed.naf;
ebd8d4e8 42768
8b095871
IC
42769 var res = [ this ];
42770 var max = (1 << wnd) - 1;
42771 var dbl = max === 1 ? null : this.dbl();
42772 for (var i = 1; i < max; i++)
42773 res[i] = res[i - 1].add(dbl);
42774 return {
42775 wnd: wnd,
42776 points: res
42777 };
42778};
ebd8d4e8 42779
8b095871
IC
42780BasePoint.prototype._getBeta = function _getBeta() {
42781 return null;
42782};
ebd8d4e8 42783
8b095871
IC
42784BasePoint.prototype.dblp = function dblp(k) {
42785 var r = this;
42786 for (var i = 0; i < k; i++)
42787 r = r.dbl();
42788 return r;
42789};
ebd8d4e8 42790
8b095871
IC
42791},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
42792'use strict';
ebd8d4e8 42793
8b095871
IC
42794var curve = require('../curve');
42795var elliptic = require('../../elliptic');
42796var BN = require('bn.js');
42797var inherits = require('inherits');
42798var Base = curve.base;
ebd8d4e8 42799
8b095871 42800var assert = elliptic.utils.assert;
ebd8d4e8 42801
8b095871
IC
42802function EdwardsCurve(conf) {
42803 // NOTE: Important as we are creating point in Base.call()
42804 this.twisted = (conf.a | 0) !== 1;
42805 this.mOneA = this.twisted && (conf.a | 0) === -1;
42806 this.extended = this.mOneA;
42807
42808 Base.call(this, 'edwards', conf);
42809
42810 this.a = new BN(conf.a, 16).umod(this.red.m);
42811 this.a = this.a.toRed(this.red);
42812 this.c = new BN(conf.c, 16).toRed(this.red);
42813 this.c2 = this.c.redSqr();
42814 this.d = new BN(conf.d, 16).toRed(this.red);
42815 this.dd = this.d.redAdd(this.d);
42816
42817 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
42818 this.oneC = (conf.c | 0) === 1;
ebd8d4e8 42819}
8b095871
IC
42820inherits(EdwardsCurve, Base);
42821module.exports = EdwardsCurve;
ebd8d4e8 42822
8b095871
IC
42823EdwardsCurve.prototype._mulA = function _mulA(num) {
42824 if (this.mOneA)
42825 return num.redNeg();
42826 else
42827 return this.a.redMul(num);
42828};
ebd8d4e8 42829
8b095871
IC
42830EdwardsCurve.prototype._mulC = function _mulC(num) {
42831 if (this.oneC)
42832 return num;
42833 else
42834 return this.c.redMul(num);
42835};
ebd8d4e8 42836
8b095871
IC
42837// Just for compatibility with Short curve
42838EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
42839 return this.point(x, y, z, t);
42840};
ebd8d4e8 42841
8b095871
IC
42842EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
42843 x = new BN(x, 16);
42844 if (!x.red)
42845 x = x.toRed(this.red);
ebd8d4e8 42846
8b095871
IC
42847 var x2 = x.redSqr();
42848 var rhs = this.c2.redSub(this.a.redMul(x2));
42849 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
42850
42851 var y2 = rhs.redMul(lhs.redInvm());
42852 var y = y2.redSqrt();
42853 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
42854 throw new Error('invalid point');
42855
42856 var isOdd = y.fromRed().isOdd();
42857 if (odd && !isOdd || !odd && isOdd)
42858 y = y.redNeg();
42859
42860 return this.point(x, y);
42861};
42862
42863EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
42864 y = new BN(y, 16);
42865 if (!y.red)
42866 y = y.toRed(this.red);
42867
42868 // x^2 = (y^2 - 1) / (d y^2 + 1)
42869 var y2 = y.redSqr();
42870 var lhs = y2.redSub(this.one);
42871 var rhs = y2.redMul(this.d).redAdd(this.one);
42872 var x2 = lhs.redMul(rhs.redInvm());
42873
42874 if (x2.cmp(this.zero) === 0) {
42875 if (odd)
42876 throw new Error('invalid point');
42877 else
42878 return this.point(this.zero, y);
ebd8d4e8
IC
42879 }
42880
8b095871
IC
42881 var x = x2.redSqrt();
42882 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
42883 throw new Error('invalid point');
ebd8d4e8 42884
8b095871
IC
42885 if (x.isOdd() !== odd)
42886 x = x.redNeg();
ebd8d4e8 42887
8b095871
IC
42888 return this.point(x, y);
42889};
ebd8d4e8 42890
8b095871
IC
42891EdwardsCurve.prototype.validate = function validate(point) {
42892 if (point.isInfinity())
42893 return true;
ebd8d4e8 42894
8b095871
IC
42895 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
42896 point.normalize();
ebd8d4e8 42897
8b095871
IC
42898 var x2 = point.x.redSqr();
42899 var y2 = point.y.redSqr();
42900 var lhs = x2.redMul(this.a).redAdd(y2);
42901 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
ebd8d4e8 42902
8b095871
IC
42903 return lhs.cmp(rhs) === 0;
42904};
ebd8d4e8 42905
8b095871
IC
42906function Point(curve, x, y, z, t) {
42907 Base.BasePoint.call(this, curve, 'projective');
42908 if (x === null && y === null && z === null) {
42909 this.x = this.curve.zero;
42910 this.y = this.curve.one;
42911 this.z = this.curve.one;
42912 this.t = this.curve.zero;
42913 this.zOne = true;
42914 } else {
42915 this.x = new BN(x, 16);
42916 this.y = new BN(y, 16);
42917 this.z = z ? new BN(z, 16) : this.curve.one;
42918 this.t = t && new BN(t, 16);
42919 if (!this.x.red)
42920 this.x = this.x.toRed(this.curve.red);
42921 if (!this.y.red)
42922 this.y = this.y.toRed(this.curve.red);
42923 if (!this.z.red)
42924 this.z = this.z.toRed(this.curve.red);
42925 if (this.t && !this.t.red)
42926 this.t = this.t.toRed(this.curve.red);
42927 this.zOne = this.z === this.curve.one;
42928
42929 // Use extended coordinates
42930 if (this.curve.extended && !this.t) {
42931 this.t = this.x.redMul(this.y);
42932 if (!this.zOne)
42933 this.t = this.t.redMul(this.z.redInvm());
42934 }
42935 }
42936}
42937inherits(Point, Base.BasePoint);
42938
42939EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
42940 return Point.fromJSON(this, obj);
42941};
42942
42943EdwardsCurve.prototype.point = function point(x, y, z, t) {
42944 return new Point(this, x, y, z, t);
42945};
42946
42947Point.fromJSON = function fromJSON(curve, obj) {
42948 return new Point(curve, obj[0], obj[1], obj[2]);
42949};
42950
42951Point.prototype.inspect = function inspect() {
42952 if (this.isInfinity())
42953 return '<EC Point Infinity>';
42954 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
42955 ' y: ' + this.y.fromRed().toString(16, 2) +
42956 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
42957};
42958
42959Point.prototype.isInfinity = function isInfinity() {
42960 // XXX This code assumes that zero is always zero in red
42961 return this.x.cmpn(0) === 0 &&
42962 this.y.cmp(this.z) === 0;
42963};
42964
42965Point.prototype._extDbl = function _extDbl() {
42966 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
42967 // #doubling-dbl-2008-hwcd
42968 // 4M + 4S
42969
42970 // A = X1^2
42971 var a = this.x.redSqr();
42972 // B = Y1^2
42973 var b = this.y.redSqr();
42974 // C = 2 * Z1^2
42975 var c = this.z.redSqr();
42976 c = c.redIAdd(c);
42977 // D = a * A
42978 var d = this.curve._mulA(a);
42979 // E = (X1 + Y1)^2 - A - B
42980 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
42981 // G = D + B
42982 var g = d.redAdd(b);
42983 // F = G - C
42984 var f = g.redSub(c);
42985 // H = D - B
42986 var h = d.redSub(b);
42987 // X3 = E * F
42988 var nx = e.redMul(f);
42989 // Y3 = G * H
42990 var ny = g.redMul(h);
42991 // T3 = E * H
42992 var nt = e.redMul(h);
42993 // Z3 = F * G
42994 var nz = f.redMul(g);
42995 return this.curve.point(nx, ny, nz, nt);
42996};
42997
42998Point.prototype._projDbl = function _projDbl() {
42999 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
43000 // #doubling-dbl-2008-bbjlp
43001 // #doubling-dbl-2007-bl
43002 // and others
43003 // Generally 3M + 4S or 2M + 4S
43004
43005 // B = (X1 + Y1)^2
43006 var b = this.x.redAdd(this.y).redSqr();
43007 // C = X1^2
43008 var c = this.x.redSqr();
43009 // D = Y1^2
43010 var d = this.y.redSqr();
43011
43012 var nx;
43013 var ny;
43014 var nz;
43015 if (this.curve.twisted) {
43016 // E = a * C
43017 var e = this.curve._mulA(c);
43018 // F = E + D
43019 var f = e.redAdd(d);
43020 if (this.zOne) {
43021 // X3 = (B - C - D) * (F - 2)
43022 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
43023 // Y3 = F * (E - D)
43024 ny = f.redMul(e.redSub(d));
43025 // Z3 = F^2 - 2 * F
43026 nz = f.redSqr().redSub(f).redSub(f);
43027 } else {
43028 // H = Z1^2
43029 var h = this.z.redSqr();
43030 // J = F - 2 * H
43031 var j = f.redSub(h).redISub(h);
43032 // X3 = (B-C-D)*J
43033 nx = b.redSub(c).redISub(d).redMul(j);
43034 // Y3 = F * (E - D)
43035 ny = f.redMul(e.redSub(d));
43036 // Z3 = F * J
43037 nz = f.redMul(j);
43038 }
43039 } else {
43040 // E = C + D
43041 var e = c.redAdd(d);
43042 // H = (c * Z1)^2
43043 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
43044 // J = E - 2 * H
43045 var j = e.redSub(h).redSub(h);
43046 // X3 = c * (B - E) * J
43047 nx = this.curve._mulC(b.redISub(e)).redMul(j);
43048 // Y3 = c * E * (C - D)
43049 ny = this.curve._mulC(e).redMul(c.redISub(d));
43050 // Z3 = E * J
43051 nz = e.redMul(j);
43052 }
43053 return this.curve.point(nx, ny, nz);
43054};
43055
43056Point.prototype.dbl = function dbl() {
43057 if (this.isInfinity())
43058 return this;
43059
43060 // Double in extended coordinates
43061 if (this.curve.extended)
43062 return this._extDbl();
43063 else
43064 return this._projDbl();
43065};
43066
43067Point.prototype._extAdd = function _extAdd(p) {
43068 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
43069 // #addition-add-2008-hwcd-3
43070 // 8M
43071
43072 // A = (Y1 - X1) * (Y2 - X2)
43073 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
43074 // B = (Y1 + X1) * (Y2 + X2)
43075 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
43076 // C = T1 * k * T2
43077 var c = this.t.redMul(this.curve.dd).redMul(p.t);
43078 // D = Z1 * 2 * Z2
43079 var d = this.z.redMul(p.z.redAdd(p.z));
43080 // E = B - A
43081 var e = b.redSub(a);
43082 // F = D - C
43083 var f = d.redSub(c);
43084 // G = D + C
43085 var g = d.redAdd(c);
43086 // H = B + A
43087 var h = b.redAdd(a);
43088 // X3 = E * F
43089 var nx = e.redMul(f);
43090 // Y3 = G * H
43091 var ny = g.redMul(h);
43092 // T3 = E * H
43093 var nt = e.redMul(h);
43094 // Z3 = F * G
43095 var nz = f.redMul(g);
43096 return this.curve.point(nx, ny, nz, nt);
43097};
43098
43099Point.prototype._projAdd = function _projAdd(p) {
43100 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
43101 // #addition-add-2008-bbjlp
43102 // #addition-add-2007-bl
43103 // 10M + 1S
43104
43105 // A = Z1 * Z2
43106 var a = this.z.redMul(p.z);
43107 // B = A^2
43108 var b = a.redSqr();
43109 // C = X1 * X2
43110 var c = this.x.redMul(p.x);
43111 // D = Y1 * Y2
43112 var d = this.y.redMul(p.y);
43113 // E = d * C * D
43114 var e = this.curve.d.redMul(c).redMul(d);
43115 // F = B - E
43116 var f = b.redSub(e);
43117 // G = B + E
43118 var g = b.redAdd(e);
43119 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
43120 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
43121 var nx = a.redMul(f).redMul(tmp);
43122 var ny;
43123 var nz;
43124 if (this.curve.twisted) {
43125 // Y3 = A * G * (D - a * C)
43126 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
43127 // Z3 = F * G
43128 nz = f.redMul(g);
43129 } else {
43130 // Y3 = A * G * (D - C)
43131 ny = a.redMul(g).redMul(d.redSub(c));
43132 // Z3 = c * F * G
43133 nz = this.curve._mulC(f).redMul(g);
ebd8d4e8 43134 }
8b095871
IC
43135 return this.curve.point(nx, ny, nz);
43136};
ebd8d4e8 43137
8b095871
IC
43138Point.prototype.add = function add(p) {
43139 if (this.isInfinity())
43140 return p;
43141 if (p.isInfinity())
43142 return this;
ebd8d4e8 43143
8b095871
IC
43144 if (this.curve.extended)
43145 return this._extAdd(p);
43146 else
43147 return this._projAdd(p);
43148};
ebd8d4e8 43149
8b095871
IC
43150Point.prototype.mul = function mul(k) {
43151 if (this._hasDoubles(k))
43152 return this.curve._fixedNafMul(this, k);
43153 else
43154 return this.curve._wnafMul(this, k);
43155};
ebd8d4e8 43156
8b095871
IC
43157Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
43158 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
43159};
ebd8d4e8 43160
8b095871
IC
43161Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
43162 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
43163};
ebd8d4e8 43164
8b095871
IC
43165Point.prototype.normalize = function normalize() {
43166 if (this.zOne)
43167 return this;
43168
43169 // Normalize coordinates
43170 var zi = this.z.redInvm();
43171 this.x = this.x.redMul(zi);
43172 this.y = this.y.redMul(zi);
43173 if (this.t)
43174 this.t = this.t.redMul(zi);
43175 this.z = this.curve.one;
43176 this.zOne = true;
43177 return this;
43178};
43179
43180Point.prototype.neg = function neg() {
43181 return this.curve.point(this.x.redNeg(),
43182 this.y,
43183 this.z,
43184 this.t && this.t.redNeg());
43185};
43186
43187Point.prototype.getX = function getX() {
43188 this.normalize();
43189 return this.x.fromRed();
43190};
43191
43192Point.prototype.getY = function getY() {
43193 this.normalize();
43194 return this.y.fromRed();
43195};
43196
43197Point.prototype.eq = function eq(other) {
43198 return this === other ||
43199 this.getX().cmp(other.getX()) === 0 &&
43200 this.getY().cmp(other.getY()) === 0;
43201};
43202
43203Point.prototype.eqXToP = function eqXToP(x) {
43204 var rx = x.toRed(this.curve.red).redMul(this.z);
43205 if (this.x.cmp(rx) === 0)
43206 return true;
ebd8d4e8 43207
8b095871
IC
43208 var xc = x.clone();
43209 var t = this.curve.redN.redMul(this.z);
43210 for (;;) {
43211 xc.iadd(this.curve.n);
43212 if (xc.cmp(this.curve.p) >= 0)
43213 return false;
ebd8d4e8 43214
8b095871
IC
43215 rx.redIAdd(t);
43216 if (this.x.cmp(rx) === 0)
43217 return true;
ebd8d4e8 43218 }
8b095871
IC
43219 return false;
43220};
ebd8d4e8 43221
8b095871
IC
43222// Compatibility with BaseCurve
43223Point.prototype.toP = Point.prototype.normalize;
43224Point.prototype.mixedAdd = Point.prototype.add;
ebd8d4e8 43225
8b095871
IC
43226},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
43227'use strict';
ebd8d4e8 43228
8b095871 43229var curve = exports;
ebd8d4e8 43230
8b095871
IC
43231curve.base = require('./base');
43232curve.short = require('./short');
43233curve.mont = require('./mont');
43234curve.edwards = require('./edwards');
ebd8d4e8 43235
8b095871
IC
43236},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
43237'use strict';
ebd8d4e8 43238
8b095871
IC
43239var curve = require('../curve');
43240var BN = require('bn.js');
43241var inherits = require('inherits');
43242var Base = curve.base;
ebd8d4e8 43243
8b095871
IC
43244var elliptic = require('../../elliptic');
43245var utils = elliptic.utils;
ebd8d4e8 43246
8b095871
IC
43247function MontCurve(conf) {
43248 Base.call(this, 'mont', conf);
ebd8d4e8 43249
8b095871
IC
43250 this.a = new BN(conf.a, 16).toRed(this.red);
43251 this.b = new BN(conf.b, 16).toRed(this.red);
43252 this.i4 = new BN(4).toRed(this.red).redInvm();
43253 this.two = new BN(2).toRed(this.red);
43254 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
ebd8d4e8 43255}
8b095871
IC
43256inherits(MontCurve, Base);
43257module.exports = MontCurve;
ebd8d4e8 43258
8b095871
IC
43259MontCurve.prototype.validate = function validate(point) {
43260 var x = point.normalize().x;
43261 var x2 = x.redSqr();
43262 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
43263 var y = rhs.redSqrt();
ebd8d4e8 43264
8b095871
IC
43265 return y.redSqr().cmp(rhs) === 0;
43266};
ebd8d4e8 43267
8b095871
IC
43268function Point(curve, x, z) {
43269 Base.BasePoint.call(this, curve, 'projective');
43270 if (x === null && z === null) {
43271 this.x = this.curve.one;
43272 this.z = this.curve.zero;
43273 } else {
43274 this.x = new BN(x, 16);
43275 this.z = new BN(z, 16);
43276 if (!this.x.red)
43277 this.x = this.x.toRed(this.curve.red);
43278 if (!this.z.red)
43279 this.z = this.z.toRed(this.curve.red);
43280 }
43281}
43282inherits(Point, Base.BasePoint);
ebd8d4e8 43283
8b095871
IC
43284MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
43285 return this.point(utils.toArray(bytes, enc), 1);
43286};
ebd8d4e8 43287
8b095871
IC
43288MontCurve.prototype.point = function point(x, z) {
43289 return new Point(this, x, z);
43290};
ebd8d4e8 43291
8b095871
IC
43292MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
43293 return Point.fromJSON(this, obj);
43294};
ebd8d4e8 43295
8b095871
IC
43296Point.prototype.precompute = function precompute() {
43297 // No-op
43298};
ebd8d4e8 43299
8b095871
IC
43300Point.prototype._encode = function _encode() {
43301 return this.getX().toArray('be', this.curve.p.byteLength());
43302};
ebd8d4e8 43303
8b095871
IC
43304Point.fromJSON = function fromJSON(curve, obj) {
43305 return new Point(curve, obj[0], obj[1] || curve.one);
43306};
ebd8d4e8 43307
8b095871
IC
43308Point.prototype.inspect = function inspect() {
43309 if (this.isInfinity())
43310 return '<EC Point Infinity>';
43311 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
43312 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
43313};
ebd8d4e8 43314
8b095871
IC
43315Point.prototype.isInfinity = function isInfinity() {
43316 // XXX This code assumes that zero is always zero in red
43317 return this.z.cmpn(0) === 0;
43318};
ebd8d4e8 43319
8b095871
IC
43320Point.prototype.dbl = function dbl() {
43321 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
43322 // 2M + 2S + 4A
43323
43324 // A = X1 + Z1
43325 var a = this.x.redAdd(this.z);
43326 // AA = A^2
43327 var aa = a.redSqr();
43328 // B = X1 - Z1
43329 var b = this.x.redSub(this.z);
43330 // BB = B^2
43331 var bb = b.redSqr();
43332 // C = AA - BB
43333 var c = aa.redSub(bb);
43334 // X3 = AA * BB
43335 var nx = aa.redMul(bb);
43336 // Z3 = C * (BB + A24 * C)
43337 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
43338 return this.curve.point(nx, nz);
43339};
ebd8d4e8 43340
8b095871
IC
43341Point.prototype.add = function add() {
43342 throw new Error('Not supported on Montgomery curve');
43343};
ebd8d4e8 43344
8b095871
IC
43345Point.prototype.diffAdd = function diffAdd(p, diff) {
43346 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
43347 // 4M + 2S + 6A
43348
43349 // A = X2 + Z2
43350 var a = this.x.redAdd(this.z);
43351 // B = X2 - Z2
43352 var b = this.x.redSub(this.z);
43353 // C = X3 + Z3
43354 var c = p.x.redAdd(p.z);
43355 // D = X3 - Z3
43356 var d = p.x.redSub(p.z);
43357 // DA = D * A
43358 var da = d.redMul(a);
43359 // CB = C * B
43360 var cb = c.redMul(b);
43361 // X5 = Z1 * (DA + CB)^2
43362 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
43363 // Z5 = X1 * (DA - CB)^2
43364 var nz = diff.x.redMul(da.redISub(cb).redSqr());
43365 return this.curve.point(nx, nz);
43366};
ebd8d4e8 43367
8b095871
IC
43368Point.prototype.mul = function mul(k) {
43369 var t = k.clone();
43370 var a = this; // (N / 2) * Q + Q
43371 var b = this.curve.point(null, null); // (N / 2) * Q
43372 var c = this; // Q
43373
43374 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
43375 bits.push(t.andln(1));
43376
43377 for (var i = bits.length - 1; i >= 0; i--) {
43378 if (bits[i] === 0) {
43379 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
43380 a = a.diffAdd(b, c);
43381 // N * Q = 2 * ((N / 2) * Q + Q))
43382 b = b.dbl();
43383 } else {
43384 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
43385 b = a.diffAdd(b, c);
43386 // N * Q + Q = 2 * ((N / 2) * Q + Q)
43387 a = a.dbl();
43388 }
ebd8d4e8 43389 }
8b095871
IC
43390 return b;
43391};
ebd8d4e8 43392
8b095871
IC
43393Point.prototype.mulAdd = function mulAdd() {
43394 throw new Error('Not supported on Montgomery curve');
43395};
ebd8d4e8 43396
8b095871
IC
43397Point.prototype.jumlAdd = function jumlAdd() {
43398 throw new Error('Not supported on Montgomery curve');
43399};
ebd8d4e8 43400
8b095871
IC
43401Point.prototype.eq = function eq(other) {
43402 return this.getX().cmp(other.getX()) === 0;
43403};
ebd8d4e8 43404
8b095871
IC
43405Point.prototype.normalize = function normalize() {
43406 this.x = this.x.redMul(this.z.redInvm());
43407 this.z = this.curve.one;
43408 return this;
43409};
ebd8d4e8 43410
8b095871
IC
43411Point.prototype.getX = function getX() {
43412 // Normalize coordinates
43413 this.normalize();
43414
43415 return this.x.fromRed();
43416};
43417
43418},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
ab78acc6 43419'use strict';
ebd8d4e8 43420
8b095871
IC
43421var curve = require('../curve');
43422var elliptic = require('../../elliptic');
43423var BN = require('bn.js');
43424var inherits = require('inherits');
43425var Base = curve.base;
ab78acc6 43426
8b095871 43427var assert = elliptic.utils.assert;
ebd8d4e8 43428
8b095871
IC
43429function ShortCurve(conf) {
43430 Base.call(this, 'short', conf);
ebd8d4e8 43431
8b095871
IC
43432 this.a = new BN(conf.a, 16).toRed(this.red);
43433 this.b = new BN(conf.b, 16).toRed(this.red);
43434 this.tinv = this.two.redInvm();
ab78acc6 43435
8b095871
IC
43436 this.zeroA = this.a.fromRed().cmpn(0) === 0;
43437 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
ab78acc6 43438
8b095871
IC
43439 // If the curve is endomorphic, precalculate beta and lambda
43440 this.endo = this._getEndomorphism(conf);
43441 this._endoWnafT1 = new Array(4);
43442 this._endoWnafT2 = new Array(4);
ebd8d4e8 43443}
8b095871
IC
43444inherits(ShortCurve, Base);
43445module.exports = ShortCurve;
ebd8d4e8 43446
8b095871
IC
43447ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
43448 // No efficient endomorphism
43449 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
43450 return;
ebd8d4e8 43451
8b095871
IC
43452 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
43453 var beta;
43454 var lambda;
43455 if (conf.beta) {
43456 beta = new BN(conf.beta, 16).toRed(this.red);
43457 } else {
43458 var betas = this._getEndoRoots(this.p);
43459 // Choose the smallest beta
43460 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
43461 beta = beta.toRed(this.red);
43462 }
43463 if (conf.lambda) {
43464 lambda = new BN(conf.lambda, 16);
43465 } else {
43466 // Choose the lambda that is matching selected beta
43467 var lambdas = this._getEndoRoots(this.n);
43468 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
43469 lambda = lambdas[0];
43470 } else {
43471 lambda = lambdas[1];
43472 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
43473 }
43474 }
ab78acc6 43475
8b095871
IC
43476 // Get basis vectors, used for balanced length-two representation
43477 var basis;
43478 if (conf.basis) {
43479 basis = conf.basis.map(function(vec) {
43480 return {
43481 a: new BN(vec.a, 16),
43482 b: new BN(vec.b, 16)
43483 };
43484 });
43485 } else {
43486 basis = this._getEndoBasis(lambda);
43487 }
ab78acc6 43488
8b095871
IC
43489 return {
43490 beta: beta,
43491 lambda: lambda,
43492 basis: basis
43493 };
43494};
ab78acc6 43495
8b095871
IC
43496ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
43497 // Find roots of for x^2 + x + 1 in F
43498 // Root = (-1 +- Sqrt(-3)) / 2
43499 //
43500 var red = num === this.p ? this.red : BN.mont(num);
43501 var tinv = new BN(2).toRed(red).redInvm();
43502 var ntinv = tinv.redNeg();
ab78acc6 43503
8b095871 43504 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
ab78acc6 43505
8b095871
IC
43506 var l1 = ntinv.redAdd(s).fromRed();
43507 var l2 = ntinv.redSub(s).fromRed();
43508 return [ l1, l2 ];
43509};
ab78acc6 43510
8b095871
IC
43511ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
43512 // aprxSqrt >= sqrt(this.n)
43513 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
43514
43515 // 3.74
43516 // Run EGCD, until r(L + 1) < aprxSqrt
43517 var u = lambda;
43518 var v = this.n.clone();
43519 var x1 = new BN(1);
43520 var y1 = new BN(0);
43521 var x2 = new BN(0);
43522 var y2 = new BN(1);
43523
43524 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
43525 var a0;
43526 var b0;
43527 // First vector
43528 var a1;
43529 var b1;
43530 // Second vector
43531 var a2;
43532 var b2;
43533
43534 var prevR;
43535 var i = 0;
43536 var r;
43537 var x;
43538 while (u.cmpn(0) !== 0) {
43539 var q = v.div(u);
43540 r = v.sub(q.mul(u));
43541 x = x2.sub(q.mul(x1));
43542 var y = y2.sub(q.mul(y1));
43543
43544 if (!a1 && r.cmp(aprxSqrt) < 0) {
43545 a0 = prevR.neg();
43546 b0 = x1;
43547 a1 = r.neg();
43548 b1 = x;
43549 } else if (a1 && ++i === 2) {
43550 break;
ab78acc6 43551 }
8b095871 43552 prevR = r;
ab78acc6 43553
8b095871
IC
43554 v = u;
43555 u = r;
43556 x2 = x1;
43557 x1 = x;
43558 y2 = y1;
43559 y1 = y;
ebd8d4e8 43560 }
8b095871
IC
43561 a2 = r.neg();
43562 b2 = x;
ab78acc6 43563
8b095871
IC
43564 var len1 = a1.sqr().add(b1.sqr());
43565 var len2 = a2.sqr().add(b2.sqr());
43566 if (len2.cmp(len1) >= 0) {
43567 a2 = a0;
43568 b2 = b0;
43569 }
ebd8d4e8 43570
8b095871
IC
43571 // Normalize signs
43572 if (a1.negative) {
43573 a1 = a1.neg();
43574 b1 = b1.neg();
43575 }
43576 if (a2.negative) {
43577 a2 = a2.neg();
43578 b2 = b2.neg();
43579 }
ebd8d4e8 43580
8b095871
IC
43581 return [
43582 { a: a1, b: b1 },
43583 { a: a2, b: b2 }
43584 ];
43585};
ab78acc6 43586
8b095871
IC
43587ShortCurve.prototype._endoSplit = function _endoSplit(k) {
43588 var basis = this.endo.basis;
43589 var v1 = basis[0];
43590 var v2 = basis[1];
ab78acc6 43591
8b095871
IC
43592 var c1 = v2.b.mul(k).divRound(this.n);
43593 var c2 = v1.b.neg().mul(k).divRound(this.n);
ab78acc6 43594
8b095871
IC
43595 var p1 = c1.mul(v1.a);
43596 var p2 = c2.mul(v2.a);
43597 var q1 = c1.mul(v1.b);
43598 var q2 = c2.mul(v2.b);
ab78acc6 43599
8b095871
IC
43600 // Calculate answer
43601 var k1 = k.sub(p1).sub(p2);
43602 var k2 = q1.add(q2).neg();
43603 return { k1: k1, k2: k2 };
43604};
ab78acc6 43605
8b095871
IC
43606ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
43607 x = new BN(x, 16);
43608 if (!x.red)
43609 x = x.toRed(this.red);
ab78acc6 43610
8b095871
IC
43611 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
43612 var y = y2.redSqrt();
43613 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
43614 throw new Error('invalid point');
ab78acc6 43615
8b095871
IC
43616 // XXX Is there any way to tell if the number is odd without converting it
43617 // to non-red form?
43618 var isOdd = y.fromRed().isOdd();
43619 if (odd && !isOdd || !odd && isOdd)
43620 y = y.redNeg();
ab78acc6 43621
8b095871
IC
43622 return this.point(x, y);
43623};
ab78acc6 43624
8b095871
IC
43625ShortCurve.prototype.validate = function validate(point) {
43626 if (point.inf)
43627 return true;
ab78acc6 43628
8b095871
IC
43629 var x = point.x;
43630 var y = point.y;
ab78acc6 43631
8b095871
IC
43632 var ax = this.a.redMul(x);
43633 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
43634 return y.redSqr().redISub(rhs).cmpn(0) === 0;
43635};
ab78acc6 43636
8b095871
IC
43637ShortCurve.prototype._endoWnafMulAdd =
43638 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
43639 var npoints = this._endoWnafT1;
43640 var ncoeffs = this._endoWnafT2;
43641 for (var i = 0; i < points.length; i++) {
43642 var split = this._endoSplit(coeffs[i]);
43643 var p = points[i];
43644 var beta = p._getBeta();
ab78acc6 43645
8b095871
IC
43646 if (split.k1.negative) {
43647 split.k1.ineg();
43648 p = p.neg(true);
43649 }
43650 if (split.k2.negative) {
43651 split.k2.ineg();
43652 beta = beta.neg(true);
ab78acc6 43653 }
ab78acc6 43654
8b095871
IC
43655 npoints[i * 2] = p;
43656 npoints[i * 2 + 1] = beta;
43657 ncoeffs[i * 2] = split.k1;
43658 ncoeffs[i * 2 + 1] = split.k2;
43659 }
43660 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
ab78acc6 43661
8b095871
IC
43662 // Clean-up references to points and coefficients
43663 for (var j = 0; j < i * 2; j++) {
43664 npoints[j] = null;
43665 ncoeffs[j] = null;
43666 }
43667 return res;
43668};
43669
43670function Point(curve, x, y, isRed) {
43671 Base.BasePoint.call(this, curve, 'affine');
43672 if (x === null && y === null) {
43673 this.x = null;
43674 this.y = null;
43675 this.inf = true;
43676 } else {
43677 this.x = new BN(x, 16);
43678 this.y = new BN(y, 16);
43679 // Force redgomery representation when loading from JSON
43680 if (isRed) {
43681 this.x.forceRed(this.curve.red);
43682 this.y.forceRed(this.curve.red);
ab78acc6 43683 }
8b095871
IC
43684 if (!this.x.red)
43685 this.x = this.x.toRed(this.curve.red);
43686 if (!this.y.red)
43687 this.y = this.y.toRed(this.curve.red);
43688 this.inf = false;
43689 }
43690}
43691inherits(Point, Base.BasePoint);
ab78acc6 43692
8b095871
IC
43693ShortCurve.prototype.point = function point(x, y, isRed) {
43694 return new Point(this, x, y, isRed);
43695};
ab78acc6 43696
8b095871
IC
43697ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
43698 return Point.fromJSON(this, obj, red);
43699};
ab78acc6 43700
8b095871
IC
43701Point.prototype._getBeta = function _getBeta() {
43702 if (!this.curve.endo)
43703 return;
ab78acc6 43704
8b095871
IC
43705 var pre = this.precomputed;
43706 if (pre && pre.beta)
43707 return pre.beta;
ab78acc6 43708
8b095871
IC
43709 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
43710 if (pre) {
43711 var curve = this.curve;
43712 var endoMul = function(p) {
43713 return curve.point(p.x.redMul(curve.endo.beta), p.y);
43714 };
43715 pre.beta = beta;
43716 beta.precomputed = {
43717 beta: null,
43718 naf: pre.naf && {
43719 wnd: pre.naf.wnd,
43720 points: pre.naf.points.map(endoMul)
43721 },
43722 doubles: pre.doubles && {
43723 step: pre.doubles.step,
43724 points: pre.doubles.points.map(endoMul)
43725 }
ab78acc6 43726 };
ab78acc6 43727 }
8b095871 43728 return beta;
ab78acc6
IC
43729};
43730
8b095871
IC
43731Point.prototype.toJSON = function toJSON() {
43732 if (!this.precomputed)
43733 return [ this.x, this.y ];
ab78acc6 43734
8b095871
IC
43735 return [ this.x, this.y, this.precomputed && {
43736 doubles: this.precomputed.doubles && {
43737 step: this.precomputed.doubles.step,
43738 points: this.precomputed.doubles.points.slice(1)
43739 },
43740 naf: this.precomputed.naf && {
43741 wnd: this.precomputed.naf.wnd,
43742 points: this.precomputed.naf.points.slice(1)
43743 }
43744 } ];
43745};
ab78acc6 43746
8b095871
IC
43747Point.fromJSON = function fromJSON(curve, obj, red) {
43748 if (typeof obj === 'string')
43749 obj = JSON.parse(obj);
43750 var res = curve.point(obj[0], obj[1], red);
43751 if (!obj[2])
43752 return res;
ab78acc6 43753
8b095871
IC
43754 function obj2point(obj) {
43755 return curve.point(obj[0], obj[1], red);
43756 }
43757
43758 var pre = obj[2];
43759 res.precomputed = {
43760 beta: null,
43761 doubles: pre.doubles && {
43762 step: pre.doubles.step,
43763 points: [ res ].concat(pre.doubles.points.map(obj2point))
43764 },
43765 naf: pre.naf && {
43766 wnd: pre.naf.wnd,
43767 points: [ res ].concat(pre.naf.points.map(obj2point))
ab78acc6 43768 }
8b095871
IC
43769 };
43770 return res;
43771};
ab78acc6 43772
8b095871
IC
43773Point.prototype.inspect = function inspect() {
43774 if (this.isInfinity())
43775 return '<EC Point Infinity>';
43776 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
43777 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
43778};
ab78acc6 43779
8b095871
IC
43780Point.prototype.isInfinity = function isInfinity() {
43781 return this.inf;
43782};
ebd8d4e8 43783
8b095871
IC
43784Point.prototype.add = function add(p) {
43785 // O + P = P
43786 if (this.inf)
43787 return p;
ab78acc6 43788
8b095871
IC
43789 // P + O = P
43790 if (p.inf)
43791 return this;
ab78acc6 43792
8b095871
IC
43793 // P + P = 2P
43794 if (this.eq(p))
43795 return this.dbl();
ab78acc6 43796
8b095871
IC
43797 // P + (-P) = O
43798 if (this.neg().eq(p))
43799 return this.curve.point(null, null);
ab78acc6 43800
8b095871
IC
43801 // P + Q = O
43802 if (this.x.cmp(p.x) === 0)
43803 return this.curve.point(null, null);
ebd8d4e8 43804
8b095871
IC
43805 var c = this.y.redSub(p.y);
43806 if (c.cmpn(0) !== 0)
43807 c = c.redMul(this.x.redSub(p.x).redInvm());
43808 var nx = c.redSqr().redISub(this.x).redISub(p.x);
43809 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
43810 return this.curve.point(nx, ny);
43811};
ab78acc6 43812
8b095871
IC
43813Point.prototype.dbl = function dbl() {
43814 if (this.inf)
43815 return this;
ebd8d4e8 43816
8b095871
IC
43817 // 2P = O
43818 var ys1 = this.y.redAdd(this.y);
43819 if (ys1.cmpn(0) === 0)
43820 return this.curve.point(null, null);
ebd8d4e8 43821
8b095871 43822 var a = this.curve.a;
ebd8d4e8 43823
8b095871
IC
43824 var x2 = this.x.redSqr();
43825 var dyinv = ys1.redInvm();
43826 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
ebd8d4e8 43827
8b095871
IC
43828 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
43829 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
43830 return this.curve.point(nx, ny);
43831};
ebd8d4e8 43832
8b095871
IC
43833Point.prototype.getX = function getX() {
43834 return this.x.fromRed();
43835};
ab78acc6 43836
8b095871
IC
43837Point.prototype.getY = function getY() {
43838 return this.y.fromRed();
43839};
ebd8d4e8 43840
8b095871
IC
43841Point.prototype.mul = function mul(k) {
43842 k = new BN(k, 16);
ebd8d4e8 43843
8b095871
IC
43844 if (this._hasDoubles(k))
43845 return this.curve._fixedNafMul(this, k);
43846 else if (this.curve.endo)
43847 return this.curve._endoWnafMulAdd([ this ], [ k ]);
43848 else
43849 return this.curve._wnafMul(this, k);
43850};
ebd8d4e8 43851
8b095871
IC
43852Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
43853 var points = [ this, p2 ];
43854 var coeffs = [ k1, k2 ];
43855 if (this.curve.endo)
43856 return this.curve._endoWnafMulAdd(points, coeffs);
43857 else
43858 return this.curve._wnafMulAdd(1, points, coeffs, 2);
43859};
ebd8d4e8 43860
8b095871
IC
43861Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
43862 var points = [ this, p2 ];
43863 var coeffs = [ k1, k2 ];
43864 if (this.curve.endo)
43865 return this.curve._endoWnafMulAdd(points, coeffs, true);
43866 else
43867 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
43868};
ebd8d4e8 43869
8b095871
IC
43870Point.prototype.eq = function eq(p) {
43871 return this === p ||
43872 this.inf === p.inf &&
43873 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
43874};
ebd8d4e8 43875
8b095871
IC
43876Point.prototype.neg = function neg(_precompute) {
43877 if (this.inf)
43878 return this;
ebd8d4e8 43879
8b095871
IC
43880 var res = this.curve.point(this.x, this.y.redNeg());
43881 if (_precompute && this.precomputed) {
43882 var pre = this.precomputed;
43883 var negate = function(p) {
43884 return p.neg();
43885 };
43886 res.precomputed = {
43887 naf: pre.naf && {
43888 wnd: pre.naf.wnd,
43889 points: pre.naf.points.map(negate)
43890 },
43891 doubles: pre.doubles && {
43892 step: pre.doubles.step,
43893 points: pre.doubles.points.map(negate)
43894 }
43895 };
43896 }
43897 return res;
43898};
ebd8d4e8 43899
8b095871
IC
43900Point.prototype.toJ = function toJ() {
43901 if (this.inf)
43902 return this.curve.jpoint(null, null, null);
ebd8d4e8 43903
8b095871
IC
43904 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
43905 return res;
43906};
ebd8d4e8 43907
8b095871
IC
43908function JPoint(curve, x, y, z) {
43909 Base.BasePoint.call(this, curve, 'jacobian');
43910 if (x === null && y === null && z === null) {
43911 this.x = this.curve.one;
43912 this.y = this.curve.one;
43913 this.z = new BN(0);
43914 } else {
43915 this.x = new BN(x, 16);
43916 this.y = new BN(y, 16);
43917 this.z = new BN(z, 16);
43918 }
43919 if (!this.x.red)
43920 this.x = this.x.toRed(this.curve.red);
43921 if (!this.y.red)
43922 this.y = this.y.toRed(this.curve.red);
43923 if (!this.z.red)
43924 this.z = this.z.toRed(this.curve.red);
ebd8d4e8 43925
8b095871 43926 this.zOne = this.z === this.curve.one;
ab78acc6 43927}
8b095871 43928inherits(JPoint, Base.BasePoint);
ab78acc6 43929
8b095871
IC
43930ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
43931 return new JPoint(this, x, y, z);
43932};
ab78acc6 43933
8b095871
IC
43934JPoint.prototype.toP = function toP() {
43935 if (this.isInfinity())
43936 return this.curve.point(null, null);
ab78acc6 43937
8b095871
IC
43938 var zinv = this.z.redInvm();
43939 var zinv2 = zinv.redSqr();
43940 var ax = this.x.redMul(zinv2);
43941 var ay = this.y.redMul(zinv2).redMul(zinv);
ab78acc6 43942
8b095871
IC
43943 return this.curve.point(ax, ay);
43944};
ab78acc6 43945
8b095871
IC
43946JPoint.prototype.neg = function neg() {
43947 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
43948};
ab78acc6 43949
8b095871
IC
43950JPoint.prototype.add = function add(p) {
43951 // O + P = P
43952 if (this.isInfinity())
43953 return p;
ab78acc6 43954
8b095871
IC
43955 // P + O = P
43956 if (p.isInfinity())
43957 return this;
ab78acc6 43958
8b095871
IC
43959 // 12M + 4S + 7A
43960 var pz2 = p.z.redSqr();
43961 var z2 = this.z.redSqr();
43962 var u1 = this.x.redMul(pz2);
43963 var u2 = p.x.redMul(z2);
43964 var s1 = this.y.redMul(pz2.redMul(p.z));
43965 var s2 = p.y.redMul(z2.redMul(this.z));
43966
43967 var h = u1.redSub(u2);
43968 var r = s1.redSub(s2);
43969 if (h.cmpn(0) === 0) {
43970 if (r.cmpn(0) !== 0)
43971 return this.curve.jpoint(null, null, null);
43972 else
43973 return this.dbl();
43974 }
ab78acc6 43975
8b095871
IC
43976 var h2 = h.redSqr();
43977 var h3 = h2.redMul(h);
43978 var v = u1.redMul(h2);
ab78acc6 43979
8b095871
IC
43980 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
43981 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
43982 var nz = this.z.redMul(p.z).redMul(h);
ab78acc6 43983
8b095871
IC
43984 return this.curve.jpoint(nx, ny, nz);
43985};
ab78acc6 43986
8b095871
IC
43987JPoint.prototype.mixedAdd = function mixedAdd(p) {
43988 // O + P = P
43989 if (this.isInfinity())
43990 return p.toJ();
ab78acc6 43991
8b095871
IC
43992 // P + O = P
43993 if (p.isInfinity())
43994 return this;
ab78acc6 43995
8b095871
IC
43996 // 8M + 3S + 7A
43997 var z2 = this.z.redSqr();
43998 var u1 = this.x;
43999 var u2 = p.x.redMul(z2);
44000 var s1 = this.y;
44001 var s2 = p.y.redMul(z2).redMul(this.z);
44002
44003 var h = u1.redSub(u2);
44004 var r = s1.redSub(s2);
44005 if (h.cmpn(0) === 0) {
44006 if (r.cmpn(0) !== 0)
44007 return this.curve.jpoint(null, null, null);
44008 else
44009 return this.dbl();
ab78acc6
IC
44010 }
44011
8b095871
IC
44012 var h2 = h.redSqr();
44013 var h3 = h2.redMul(h);
44014 var v = u1.redMul(h2);
ab78acc6 44015
8b095871
IC
44016 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
44017 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
44018 var nz = this.z.redMul(h);
ab78acc6 44019
8b095871
IC
44020 return this.curve.jpoint(nx, ny, nz);
44021};
ab78acc6 44022
8b095871
IC
44023JPoint.prototype.dblp = function dblp(pow) {
44024 if (pow === 0)
44025 return this;
44026 if (this.isInfinity())
44027 return this;
44028 if (!pow)
44029 return this.dbl();
44030
44031 if (this.curve.zeroA || this.curve.threeA) {
44032 var r = this;
44033 for (var i = 0; i < pow; i++)
44034 r = r.dbl();
44035 return r;
44036 }
44037
44038 // 1M + 2S + 1A + N * (4S + 5M + 8A)
44039 // N = 1 => 6M + 6S + 9A
44040 var a = this.curve.a;
44041 var tinv = this.curve.tinv;
44042
44043 var jx = this.x;
44044 var jy = this.y;
44045 var jz = this.z;
44046 var jz4 = jz.redSqr().redSqr();
44047
44048 // Reuse results
44049 var jyd = jy.redAdd(jy);
44050 for (var i = 0; i < pow; i++) {
44051 var jx2 = jx.redSqr();
44052 var jyd2 = jyd.redSqr();
44053 var jyd4 = jyd2.redSqr();
44054 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
44055
44056 var t1 = jx.redMul(jyd2);
44057 var nx = c.redSqr().redISub(t1.redAdd(t1));
44058 var t2 = t1.redISub(nx);
44059 var dny = c.redMul(t2);
44060 dny = dny.redIAdd(dny).redISub(jyd4);
44061 var nz = jyd.redMul(jz);
44062 if (i + 1 < pow)
44063 jz4 = jz4.redMul(jyd4);
44064
44065 jx = nx;
44066 jz = nz;
44067 jyd = dny;
44068 }
44069
44070 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
44071};
ab78acc6 44072
8b095871
IC
44073JPoint.prototype.dbl = function dbl() {
44074 if (this.isInfinity())
44075 return this;
ab78acc6 44076
8b095871
IC
44077 if (this.curve.zeroA)
44078 return this._zeroDbl();
44079 else if (this.curve.threeA)
44080 return this._threeDbl();
44081 else
44082 return this._dbl();
44083};
ab78acc6 44084
8b095871
IC
44085JPoint.prototype._zeroDbl = function _zeroDbl() {
44086 var nx;
44087 var ny;
44088 var nz;
44089 // Z = 1
44090 if (this.zOne) {
44091 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
44092 // #doubling-mdbl-2007-bl
44093 // 1M + 5S + 14A
44094
44095 // XX = X1^2
44096 var xx = this.x.redSqr();
44097 // YY = Y1^2
44098 var yy = this.y.redSqr();
44099 // YYYY = YY^2
44100 var yyyy = yy.redSqr();
44101 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
44102 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
44103 s = s.redIAdd(s);
44104 // M = 3 * XX + a; a = 0
44105 var m = xx.redAdd(xx).redIAdd(xx);
44106 // T = M ^ 2 - 2*S
44107 var t = m.redSqr().redISub(s).redISub(s);
44108
44109 // 8 * YYYY
44110 var yyyy8 = yyyy.redIAdd(yyyy);
44111 yyyy8 = yyyy8.redIAdd(yyyy8);
44112 yyyy8 = yyyy8.redIAdd(yyyy8);
44113
44114 // X3 = T
44115 nx = t;
44116 // Y3 = M * (S - T) - 8 * YYYY
44117 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
44118 // Z3 = 2*Y1
44119 nz = this.y.redAdd(this.y);
44120 } else {
44121 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
44122 // #doubling-dbl-2009-l
44123 // 2M + 5S + 13A
44124
44125 // A = X1^2
44126 var a = this.x.redSqr();
44127 // B = Y1^2
44128 var b = this.y.redSqr();
44129 // C = B^2
44130 var c = b.redSqr();
44131 // D = 2 * ((X1 + B)^2 - A - C)
44132 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
44133 d = d.redIAdd(d);
44134 // E = 3 * A
44135 var e = a.redAdd(a).redIAdd(a);
44136 // F = E^2
44137 var f = e.redSqr();
44138
44139 // 8 * C
44140 var c8 = c.redIAdd(c);
44141 c8 = c8.redIAdd(c8);
44142 c8 = c8.redIAdd(c8);
44143
44144 // X3 = F - 2 * D
44145 nx = f.redISub(d).redISub(d);
44146 // Y3 = E * (D - X3) - 8 * C
44147 ny = e.redMul(d.redISub(nx)).redISub(c8);
44148 // Z3 = 2 * Y1 * Z1
44149 nz = this.y.redMul(this.z);
44150 nz = nz.redIAdd(nz);
44151 }
44152
44153 return this.curve.jpoint(nx, ny, nz);
44154};
ab78acc6 44155
8b095871
IC
44156JPoint.prototype._threeDbl = function _threeDbl() {
44157 var nx;
44158 var ny;
44159 var nz;
44160 // Z = 1
44161 if (this.zOne) {
44162 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
44163 // #doubling-mdbl-2007-bl
44164 // 1M + 5S + 15A
44165
44166 // XX = X1^2
44167 var xx = this.x.redSqr();
44168 // YY = Y1^2
44169 var yy = this.y.redSqr();
44170 // YYYY = YY^2
44171 var yyyy = yy.redSqr();
44172 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
44173 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
44174 s = s.redIAdd(s);
44175 // M = 3 * XX + a
44176 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
44177 // T = M^2 - 2 * S
44178 var t = m.redSqr().redISub(s).redISub(s);
44179 // X3 = T
44180 nx = t;
44181 // Y3 = M * (S - T) - 8 * YYYY
44182 var yyyy8 = yyyy.redIAdd(yyyy);
44183 yyyy8 = yyyy8.redIAdd(yyyy8);
44184 yyyy8 = yyyy8.redIAdd(yyyy8);
44185 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
44186 // Z3 = 2 * Y1
44187 nz = this.y.redAdd(this.y);
44188 } else {
44189 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
44190 // 3M + 5S
44191
44192 // delta = Z1^2
44193 var delta = this.z.redSqr();
44194 // gamma = Y1^2
44195 var gamma = this.y.redSqr();
44196 // beta = X1 * gamma
44197 var beta = this.x.redMul(gamma);
44198 // alpha = 3 * (X1 - delta) * (X1 + delta)
44199 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
44200 alpha = alpha.redAdd(alpha).redIAdd(alpha);
44201 // X3 = alpha^2 - 8 * beta
44202 var beta4 = beta.redIAdd(beta);
44203 beta4 = beta4.redIAdd(beta4);
44204 var beta8 = beta4.redAdd(beta4);
44205 nx = alpha.redSqr().redISub(beta8);
44206 // Z3 = (Y1 + Z1)^2 - gamma - delta
44207 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
44208 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
44209 var ggamma8 = gamma.redSqr();
44210 ggamma8 = ggamma8.redIAdd(ggamma8);
44211 ggamma8 = ggamma8.redIAdd(ggamma8);
44212 ggamma8 = ggamma8.redIAdd(ggamma8);
44213 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
44214 }
44215
44216 return this.curve.jpoint(nx, ny, nz);
44217};
ab78acc6 44218
8b095871
IC
44219JPoint.prototype._dbl = function _dbl() {
44220 var a = this.curve.a;
ab78acc6 44221
8b095871
IC
44222 // 4M + 6S + 10A
44223 var jx = this.x;
44224 var jy = this.y;
44225 var jz = this.z;
44226 var jz4 = jz.redSqr().redSqr();
ab78acc6 44227
8b095871
IC
44228 var jx2 = jx.redSqr();
44229 var jy2 = jy.redSqr();
ebd8d4e8 44230
8b095871 44231 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
ebd8d4e8 44232
8b095871
IC
44233 var jxd4 = jx.redAdd(jx);
44234 jxd4 = jxd4.redIAdd(jxd4);
44235 var t1 = jxd4.redMul(jy2);
44236 var nx = c.redSqr().redISub(t1.redAdd(t1));
44237 var t2 = t1.redISub(nx);
ebd8d4e8 44238
8b095871
IC
44239 var jyd8 = jy2.redSqr();
44240 jyd8 = jyd8.redIAdd(jyd8);
44241 jyd8 = jyd8.redIAdd(jyd8);
44242 jyd8 = jyd8.redIAdd(jyd8);
44243 var ny = c.redMul(t2).redISub(jyd8);
44244 var nz = jy.redAdd(jy).redMul(jz);
ebd8d4e8 44245
8b095871
IC
44246 return this.curve.jpoint(nx, ny, nz);
44247};
ebd8d4e8 44248
8b095871
IC
44249JPoint.prototype.trpl = function trpl() {
44250 if (!this.curve.zeroA)
44251 return this.dbl().add(this);
44252
44253 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
44254 // 5M + 10S + ...
44255
44256 // XX = X1^2
44257 var xx = this.x.redSqr();
44258 // YY = Y1^2
44259 var yy = this.y.redSqr();
44260 // ZZ = Z1^2
44261 var zz = this.z.redSqr();
44262 // YYYY = YY^2
44263 var yyyy = yy.redSqr();
44264 // M = 3 * XX + a * ZZ2; a = 0
44265 var m = xx.redAdd(xx).redIAdd(xx);
44266 // MM = M^2
44267 var mm = m.redSqr();
44268 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
44269 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
44270 e = e.redIAdd(e);
44271 e = e.redAdd(e).redIAdd(e);
44272 e = e.redISub(mm);
44273 // EE = E^2
44274 var ee = e.redSqr();
44275 // T = 16*YYYY
44276 var t = yyyy.redIAdd(yyyy);
44277 t = t.redIAdd(t);
44278 t = t.redIAdd(t);
44279 t = t.redIAdd(t);
44280 // U = (M + E)^2 - MM - EE - T
44281 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
44282 // X3 = 4 * (X1 * EE - 4 * YY * U)
44283 var yyu4 = yy.redMul(u);
44284 yyu4 = yyu4.redIAdd(yyu4);
44285 yyu4 = yyu4.redIAdd(yyu4);
44286 var nx = this.x.redMul(ee).redISub(yyu4);
44287 nx = nx.redIAdd(nx);
44288 nx = nx.redIAdd(nx);
44289 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
44290 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
44291 ny = ny.redIAdd(ny);
44292 ny = ny.redIAdd(ny);
44293 ny = ny.redIAdd(ny);
44294 // Z3 = (Z1 + E)^2 - ZZ - EE
44295 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
44296
44297 return this.curve.jpoint(nx, ny, nz);
44298};
ebd8d4e8 44299
8b095871
IC
44300JPoint.prototype.mul = function mul(k, kbase) {
44301 k = new BN(k, kbase);
ebd8d4e8 44302
8b095871
IC
44303 return this.curve._wnafMul(this, k);
44304};
ebd8d4e8 44305
8b095871
IC
44306JPoint.prototype.eq = function eq(p) {
44307 if (p.type === 'affine')
44308 return this.eq(p.toJ());
ebd8d4e8 44309
8b095871
IC
44310 if (this === p)
44311 return true;
ebd8d4e8 44312
8b095871
IC
44313 // x1 * z2^2 == x2 * z1^2
44314 var z2 = this.z.redSqr();
44315 var pz2 = p.z.redSqr();
44316 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
44317 return false;
ebd8d4e8 44318
8b095871
IC
44319 // y1 * z2^3 == y2 * z1^3
44320 var z3 = z2.redMul(this.z);
44321 var pz3 = pz2.redMul(p.z);
44322 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
44323};
ab78acc6 44324
8b095871
IC
44325JPoint.prototype.eqXToP = function eqXToP(x) {
44326 var zs = this.z.redSqr();
44327 var rx = x.toRed(this.curve.red).redMul(zs);
44328 if (this.x.cmp(rx) === 0)
44329 return true;
ebd8d4e8 44330
8b095871
IC
44331 var xc = x.clone();
44332 var t = this.curve.redN.redMul(zs);
44333 for (;;) {
44334 xc.iadd(this.curve.n);
44335 if (xc.cmp(this.curve.p) >= 0)
44336 return false;
ebd8d4e8 44337
8b095871
IC
44338 rx.redIAdd(t);
44339 if (this.x.cmp(rx) === 0)
44340 return true;
44341 }
44342 return false;
44343};
ebd8d4e8 44344
8b095871
IC
44345JPoint.prototype.inspect = function inspect() {
44346 if (this.isInfinity())
44347 return '<EC JPoint Infinity>';
44348 return '<EC JPoint x: ' + this.x.toString(16, 2) +
44349 ' y: ' + this.y.toString(16, 2) +
44350 ' z: ' + this.z.toString(16, 2) + '>';
44351};
ebd8d4e8 44352
8b095871
IC
44353JPoint.prototype.isInfinity = function isInfinity() {
44354 // XXX This code assumes that zero is always zero in red
44355 return this.z.cmpn(0) === 0;
44356};
ebd8d4e8 44357
8b095871
IC
44358},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
44359'use strict';
ebd8d4e8 44360
8b095871 44361var curves = exports;
ebd8d4e8 44362
8b095871
IC
44363var hash = require('hash.js');
44364var elliptic = require('../elliptic');
ebd8d4e8 44365
8b095871 44366var assert = elliptic.utils.assert;
ebd8d4e8 44367
8b095871
IC
44368function PresetCurve(options) {
44369 if (options.type === 'short')
44370 this.curve = new elliptic.curve.short(options);
44371 else if (options.type === 'edwards')
44372 this.curve = new elliptic.curve.edwards(options);
44373 else
44374 this.curve = new elliptic.curve.mont(options);
44375 this.g = this.curve.g;
44376 this.n = this.curve.n;
44377 this.hash = options.hash;
44378
44379 assert(this.g.validate(), 'Invalid curve');
44380 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
44381}
44382curves.PresetCurve = PresetCurve;
44383
44384function defineCurve(name, options) {
44385 Object.defineProperty(curves, name, {
44386 configurable: true,
44387 enumerable: true,
44388 get: function() {
44389 var curve = new PresetCurve(options);
44390 Object.defineProperty(curves, name, {
44391 configurable: true,
44392 enumerable: true,
44393 value: curve
44394 });
44395 return curve;
44396 }
44397 });
ebd8d4e8
IC
44398}
44399
8b095871
IC
44400defineCurve('p192', {
44401 type: 'short',
44402 prime: 'p192',
44403 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
44404 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
44405 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
44406 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
44407 hash: hash.sha256,
44408 gRed: false,
44409 g: [
44410 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
44411 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
44412 ]
44413});
ebd8d4e8 44414
8b095871
IC
44415defineCurve('p224', {
44416 type: 'short',
44417 prime: 'p224',
44418 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
44419 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
44420 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
44421 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
44422 hash: hash.sha256,
44423 gRed: false,
44424 g: [
44425 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
44426 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
44427 ]
44428});
ebd8d4e8 44429
8b095871
IC
44430defineCurve('p256', {
44431 type: 'short',
44432 prime: null,
44433 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
44434 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
44435 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
44436 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
44437 hash: hash.sha256,
44438 gRed: false,
44439 g: [
44440 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
44441 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
44442 ]
44443});
ebd8d4e8 44444
8b095871
IC
44445defineCurve('p384', {
44446 type: 'short',
44447 prime: null,
44448 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
44449 'fffffffe ffffffff 00000000 00000000 ffffffff',
44450 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
44451 'fffffffe ffffffff 00000000 00000000 fffffffc',
44452 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
44453 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
44454 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
44455 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
44456 hash: hash.sha384,
44457 gRed: false,
44458 g: [
44459 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
44460 '5502f25d bf55296c 3a545e38 72760ab7',
44461 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
44462 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
44463 ]
44464});
ebd8d4e8 44465
8b095871
IC
44466defineCurve('p521', {
44467 type: 'short',
44468 prime: null,
44469 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
44470 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
44471 'ffffffff ffffffff ffffffff ffffffff ffffffff',
44472 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
44473 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
44474 'ffffffff ffffffff ffffffff ffffffff fffffffc',
44475 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
44476 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
44477 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
44478 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
44479 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
44480 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
44481 hash: hash.sha512,
44482 gRed: false,
44483 g: [
44484 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
44485 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
44486 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
44487 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
44488 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
44489 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
44490 ]
44491});
ebd8d4e8 44492
8b095871
IC
44493defineCurve('curve25519', {
44494 type: 'mont',
44495 prime: 'p25519',
44496 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
44497 a: '76d06',
44498 b: '1',
44499 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
44500 hash: hash.sha256,
44501 gRed: false,
44502 g: [
44503 '9'
44504 ]
44505});
ebd8d4e8 44506
8b095871
IC
44507defineCurve('ed25519', {
44508 type: 'edwards',
44509 prime: 'p25519',
44510 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
44511 a: '-1',
44512 c: '1',
44513 // -121665 * (121666^(-1)) (mod P)
44514 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
44515 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
44516 hash: hash.sha256,
44517 gRed: false,
44518 g: [
44519 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
44520
44521 // 4/5
44522 '6666666666666666666666666666666666666666666666666666666666666658'
44523 ]
44524});
ebd8d4e8 44525
8b095871
IC
44526var pre;
44527try {
44528 pre = require('./precomputed/secp256k1');
44529} catch (e) {
44530 pre = undefined;
44531}
44532
44533defineCurve('secp256k1', {
44534 type: 'short',
44535 prime: 'k256',
44536 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
44537 a: '0',
44538 b: '7',
44539 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
44540 h: '1',
44541 hash: hash.sha256,
44542
44543 // Precomputed endomorphism
44544 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
44545 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
44546 basis: [
44547 {
44548 a: '3086d221a7d46bcde86c90e49284eb15',
44549 b: '-e4437ed6010e88286f547fa90abfe4c3'
44550 },
44551 {
44552 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
44553 b: '3086d221a7d46bcde86c90e49284eb15'
44554 }
44555 ],
ebd8d4e8 44556
8b095871
IC
44557 gRed: false,
44558 g: [
44559 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
44560 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
44561 pre
44562 ]
44563});
ebd8d4e8 44564
8b095871
IC
44565},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
44566'use strict';
ebd8d4e8 44567
8b095871
IC
44568var BN = require('bn.js');
44569var elliptic = require('../../elliptic');
44570var utils = elliptic.utils;
44571var assert = utils.assert;
ebd8d4e8 44572
8b095871
IC
44573var KeyPair = require('./key');
44574var Signature = require('./signature');
ebd8d4e8 44575
8b095871
IC
44576function EC(options) {
44577 if (!(this instanceof EC))
44578 return new EC(options);
ebd8d4e8 44579
8b095871
IC
44580 // Shortcut `elliptic.ec(curve-name)`
44581 if (typeof options === 'string') {
44582 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
44583
44584 options = elliptic.curves[options];
ebd8d4e8
IC
44585 }
44586
8b095871
IC
44587 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
44588 if (options instanceof elliptic.curves.PresetCurve)
44589 options = { curve: options };
ebd8d4e8 44590
8b095871
IC
44591 this.curve = options.curve.curve;
44592 this.n = this.curve.n;
44593 this.nh = this.n.ushrn(1);
44594 this.g = this.curve.g;
ebd8d4e8 44595
8b095871
IC
44596 // Point on curve
44597 this.g = options.curve.g;
44598 this.g.precompute(options.curve.n.bitLength() + 1);
ebd8d4e8 44599
8b095871
IC
44600 // Hash for function for DRBG
44601 this.hash = options.hash || options.curve.hash;
ebd8d4e8 44602}
8b095871 44603module.exports = EC;
ebd8d4e8 44604
8b095871
IC
44605EC.prototype.keyPair = function keyPair(options) {
44606 return new KeyPair(this, options);
44607};
44608
44609EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
44610 return KeyPair.fromPrivate(this, priv, enc);
44611};
44612
44613EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
44614 return KeyPair.fromPublic(this, pub, enc);
44615};
44616
44617EC.prototype.genKeyPair = function genKeyPair(options) {
44618 if (!options)
44619 options = {};
44620
44621 // Instantiate Hmac_DRBG
44622 var drbg = new elliptic.hmacDRBG({
44623 hash: this.hash,
44624 pers: options.pers,
44625 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
44626 nonce: this.n.toArray()
44627 });
ebd8d4e8 44628
8b095871
IC
44629 var bytes = this.n.byteLength();
44630 var ns2 = this.n.sub(new BN(2));
44631 do {
44632 var priv = new BN(drbg.generate(bytes));
44633 if (priv.cmp(ns2) > 0)
44634 continue;
ebd8d4e8 44635
8b095871
IC
44636 priv.iaddn(1);
44637 return this.keyFromPrivate(priv);
44638 } while (true);
44639};
ebd8d4e8 44640
8b095871
IC
44641EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
44642 var delta = msg.byteLength() * 8 - this.n.bitLength();
44643 if (delta > 0)
44644 msg = msg.ushrn(delta);
44645 if (!truncOnly && msg.cmp(this.n) >= 0)
44646 return msg.sub(this.n);
44647 else
44648 return msg;
44649};
ebd8d4e8 44650
8b095871
IC
44651EC.prototype.sign = function sign(msg, key, enc, options) {
44652 if (typeof enc === 'object') {
44653 options = enc;
44654 enc = null;
ebd8d4e8 44655 }
8b095871
IC
44656 if (!options)
44657 options = {};
ebd8d4e8 44658
8b095871
IC
44659 key = this.keyFromPrivate(key, enc);
44660 msg = this._truncateToN(new BN(msg, 16));
ebd8d4e8 44661
8b095871
IC
44662 // Zero-extend key to provide enough entropy
44663 var bytes = this.n.byteLength();
44664 var bkey = key.getPrivate().toArray('be', bytes);
ab78acc6 44665
8b095871
IC
44666 // Zero-extend nonce to have the same byte size as N
44667 var nonce = msg.toArray('be', bytes);
ab78acc6 44668
8b095871
IC
44669 // Instantiate Hmac_DRBG
44670 var drbg = new elliptic.hmacDRBG({
44671 hash: this.hash,
44672 entropy: bkey,
44673 nonce: nonce,
44674 pers: options.pers,
44675 persEnc: options.persEnc
44676 });
ab78acc6 44677
8b095871
IC
44678 // Number of bytes to generate
44679 var ns1 = this.n.sub(new BN(1));
ebd8d4e8 44680
8b095871
IC
44681 for (var iter = 0; true; iter++) {
44682 var k = options.k ?
44683 options.k(iter) :
44684 new BN(drbg.generate(this.n.byteLength()));
44685 k = this._truncateToN(k, true);
44686 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
44687 continue;
ebd8d4e8 44688
8b095871
IC
44689 var kp = this.g.mul(k);
44690 if (kp.isInfinity())
44691 continue;
ebd8d4e8 44692
8b095871
IC
44693 var kpX = kp.getX();
44694 var r = kpX.umod(this.n);
44695 if (r.cmpn(0) === 0)
44696 continue;
ebd8d4e8 44697
8b095871
IC
44698 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
44699 s = s.umod(this.n);
44700 if (s.cmpn(0) === 0)
44701 continue;
ebd8d4e8 44702
8b095871
IC
44703 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
44704 (kpX.cmp(r) !== 0 ? 2 : 0);
ebd8d4e8 44705
8b095871
IC
44706 // Use complement of `s`, if it is > `n / 2`
44707 if (options.canonical && s.cmp(this.nh) > 0) {
44708 s = this.n.sub(s);
44709 recoveryParam ^= 1;
44710 }
ebd8d4e8 44711
8b095871
IC
44712 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
44713 }
44714};
ebd8d4e8 44715
8b095871
IC
44716EC.prototype.verify = function verify(msg, signature, key, enc) {
44717 msg = this._truncateToN(new BN(msg, 16));
44718 key = this.keyFromPublic(key, enc);
44719 signature = new Signature(signature, 'hex');
ebd8d4e8 44720
8b095871
IC
44721 // Perform primitive values validation
44722 var r = signature.r;
44723 var s = signature.s;
44724 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
44725 return false;
44726 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
44727 return false;
ebd8d4e8 44728
8b095871
IC
44729 // Validate signature
44730 var sinv = s.invm(this.n);
44731 var u1 = sinv.mul(msg).umod(this.n);
44732 var u2 = sinv.mul(r).umod(this.n);
ebd8d4e8 44733
8b095871
IC
44734 if (!this.curve._maxwellTrick) {
44735 var p = this.g.mulAdd(u1, key.getPublic(), u2);
44736 if (p.isInfinity())
44737 return false;
ebd8d4e8 44738
8b095871
IC
44739 return p.getX().umod(this.n).cmp(r) === 0;
44740 }
ab78acc6 44741
8b095871
IC
44742 // NOTE: Greg Maxwell's trick, inspired by:
44743 // https://git.io/vad3K
ebd8d4e8 44744
8b095871
IC
44745 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
44746 if (p.isInfinity())
44747 return false;
ab78acc6 44748
8b095871
IC
44749 // Compare `p.x` of Jacobian point with `r`,
44750 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
44751 // inverse of `p.z^2`
44752 return p.eqXToP(r);
44753};
ab78acc6 44754
8b095871
IC
44755EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
44756 assert((3 & j) === j, 'The recovery param is more than two bits');
44757 signature = new Signature(signature, enc);
ab78acc6 44758
8b095871
IC
44759 var n = this.n;
44760 var e = new BN(msg);
44761 var r = signature.r;
44762 var s = signature.s;
ab78acc6 44763
8b095871
IC
44764 // A set LSB signifies that the y-coordinate is odd
44765 var isYOdd = j & 1;
44766 var isSecondKey = j >> 1;
44767 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
44768 throw new Error('Unable to find sencond key candinate');
44769
44770 // 1.1. Let x = r + jn.
44771 if (isSecondKey)
44772 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
44773 else
44774 r = this.curve.pointFromX(r, isYOdd);
ab78acc6 44775
8b095871
IC
44776 var rInv = signature.r.invm(n);
44777 var s1 = n.sub(e).mul(rInv).umod(n);
44778 var s2 = s.mul(rInv).umod(n);
ab78acc6 44779
8b095871
IC
44780 // 1.6.1 Compute Q = r^-1 (sR - eG)
44781 // Q = r^-1 (sR + -eG)
44782 return this.g.mulAdd(s1, r, s2);
44783};
ab78acc6 44784
8b095871
IC
44785EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
44786 signature = new Signature(signature, enc);
44787 if (signature.recoveryParam !== null)
44788 return signature.recoveryParam;
ab78acc6 44789
8b095871
IC
44790 for (var i = 0; i < 4; i++) {
44791 var Qprime;
44792 try {
44793 Qprime = this.recoverPubKey(e, signature, i);
44794 } catch (e) {
44795 continue;
ab78acc6 44796 }
ab78acc6 44797
8b095871
IC
44798 if (Qprime.eq(Q))
44799 return i;
44800 }
44801 throw new Error('Unable to find valid recovery factor');
44802};
ebd8d4e8 44803
8b095871
IC
44804},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
44805'use strict';
ebd8d4e8 44806
8b095871
IC
44807var BN = require('bn.js');
44808var elliptic = require('../../elliptic');
44809var utils = elliptic.utils;
44810var assert = utils.assert;
ebd8d4e8 44811
8b095871
IC
44812function KeyPair(ec, options) {
44813 this.ec = ec;
44814 this.priv = null;
44815 this.pub = null;
ebd8d4e8 44816
8b095871
IC
44817 // KeyPair(ec, { priv: ..., pub: ... })
44818 if (options.priv)
44819 this._importPrivate(options.priv, options.privEnc);
44820 if (options.pub)
44821 this._importPublic(options.pub, options.pubEnc);
44822}
44823module.exports = KeyPair;
ebd8d4e8 44824
8b095871
IC
44825KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
44826 if (pub instanceof KeyPair)
44827 return pub;
ebd8d4e8 44828
8b095871
IC
44829 return new KeyPair(ec, {
44830 pub: pub,
44831 pubEnc: enc
44832 });
44833};
ebd8d4e8 44834
8b095871
IC
44835KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
44836 if (priv instanceof KeyPair)
44837 return priv;
ebd8d4e8 44838
8b095871
IC
44839 return new KeyPair(ec, {
44840 priv: priv,
44841 privEnc: enc
44842 });
44843};
ebd8d4e8 44844
8b095871
IC
44845KeyPair.prototype.validate = function validate() {
44846 var pub = this.getPublic();
ebd8d4e8 44847
8b095871
IC
44848 if (pub.isInfinity())
44849 return { result: false, reason: 'Invalid public key' };
44850 if (!pub.validate())
44851 return { result: false, reason: 'Public key is not a point' };
44852 if (!pub.mul(this.ec.curve.n).isInfinity())
44853 return { result: false, reason: 'Public key * N != O' };
ab78acc6 44854
8b095871
IC
44855 return { result: true, reason: null };
44856};
ebd8d4e8 44857
8b095871
IC
44858KeyPair.prototype.getPublic = function getPublic(compact, enc) {
44859 // compact is optional argument
44860 if (typeof compact === 'string') {
44861 enc = compact;
44862 compact = null;
ebd8d4e8
IC
44863 }
44864
8b095871
IC
44865 if (!this.pub)
44866 this.pub = this.ec.g.mul(this.priv);
ebd8d4e8 44867
8b095871
IC
44868 if (!enc)
44869 return this.pub;
ebd8d4e8 44870
8b095871
IC
44871 return this.pub.encode(enc, compact);
44872};
ebd8d4e8 44873
8b095871
IC
44874KeyPair.prototype.getPrivate = function getPrivate(enc) {
44875 if (enc === 'hex')
44876 return this.priv.toString(16, 2);
44877 else
44878 return this.priv;
44879};
ab78acc6 44880
8b095871
IC
44881KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
44882 this.priv = new BN(key, enc || 16);
ab78acc6 44883
8b095871
IC
44884 // Ensure that the priv won't be bigger than n, otherwise we may fail
44885 // in fixed multiplication method
44886 this.priv = this.priv.umod(this.ec.curve.n);
44887};
ab78acc6 44888
8b095871
IC
44889KeyPair.prototype._importPublic = function _importPublic(key, enc) {
44890 if (key.x || key.y) {
44891 // Montgomery points only have an `x` coordinate.
44892 // Weierstrass/Edwards points on the other hand have both `x` and
44893 // `y` coordinates.
44894 if (this.ec.curve.type === 'mont') {
44895 assert(key.x, 'Need x coordinate');
44896 } else if (this.ec.curve.type === 'short' ||
44897 this.ec.curve.type === 'edwards') {
44898 assert(key.x && key.y, 'Need both x and y coordinate');
44899 }
44900 this.pub = this.ec.curve.point(key.x, key.y);
44901 return;
44902 }
44903 this.pub = this.ec.curve.decodePoint(key, enc);
44904};
ebd8d4e8 44905
8b095871
IC
44906// ECDH
44907KeyPair.prototype.derive = function derive(pub) {
44908 return pub.mul(this.priv).getX();
44909};
ebd8d4e8 44910
8b095871
IC
44911// ECDSA
44912KeyPair.prototype.sign = function sign(msg, enc, options) {
44913 return this.ec.sign(msg, this, enc, options);
44914};
ebd8d4e8 44915
8b095871
IC
44916KeyPair.prototype.verify = function verify(msg, signature) {
44917 return this.ec.verify(msg, signature, this);
44918};
ebd8d4e8 44919
8b095871
IC
44920KeyPair.prototype.inspect = function inspect() {
44921 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
44922 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
44923};
ebd8d4e8 44924
8b095871
IC
44925},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
44926'use strict';
ebd8d4e8 44927
8b095871 44928var BN = require('bn.js');
ebd8d4e8 44929
8b095871
IC
44930var elliptic = require('../../elliptic');
44931var utils = elliptic.utils;
44932var assert = utils.assert;
ebd8d4e8 44933
8b095871
IC
44934function Signature(options, enc) {
44935 if (options instanceof Signature)
44936 return options;
ebd8d4e8 44937
8b095871
IC
44938 if (this._importDER(options, enc))
44939 return;
ebd8d4e8 44940
8b095871
IC
44941 assert(options.r && options.s, 'Signature without r or s');
44942 this.r = new BN(options.r, 16);
44943 this.s = new BN(options.s, 16);
44944 if (options.recoveryParam === undefined)
44945 this.recoveryParam = null;
44946 else
44947 this.recoveryParam = options.recoveryParam;
44948}
44949module.exports = Signature;
44950
44951function Position() {
44952 this.place = 0;
44953}
44954
44955function getLength(buf, p) {
44956 var initial = buf[p.place++];
44957 if (!(initial & 0x80)) {
44958 return initial;
44959 }
44960 var octetLen = initial & 0xf;
44961 var val = 0;
44962 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
44963 val <<= 8;
44964 val |= buf[off];
44965 }
44966 p.place = off;
44967 return val;
44968}
44969
44970function rmPadding(buf) {
44971 var i = 0;
44972 var len = buf.length - 1;
44973 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
44974 i++;
44975 }
44976 if (i === 0) {
44977 return buf;
44978 }
44979 return buf.slice(i);
44980}
ebd8d4e8 44981
8b095871
IC
44982Signature.prototype._importDER = function _importDER(data, enc) {
44983 data = utils.toArray(data, enc);
44984 var p = new Position();
44985 if (data[p.place++] !== 0x30) {
44986 return false;
44987 }
44988 var len = getLength(data, p);
44989 if ((len + p.place) !== data.length) {
44990 return false;
44991 }
44992 if (data[p.place++] !== 0x02) {
44993 return false;
44994 }
44995 var rlen = getLength(data, p);
44996 var r = data.slice(p.place, rlen + p.place);
44997 p.place += rlen;
44998 if (data[p.place++] !== 0x02) {
44999 return false;
45000 }
45001 var slen = getLength(data, p);
45002 if (data.length !== slen + p.place) {
45003 return false;
45004 }
45005 var s = data.slice(p.place, slen + p.place);
45006 if (r[0] === 0 && (r[1] & 0x80)) {
45007 r = r.slice(1);
45008 }
45009 if (s[0] === 0 && (s[1] & 0x80)) {
45010 s = s.slice(1);
45011 }
ab78acc6 45012
8b095871
IC
45013 this.r = new BN(r);
45014 this.s = new BN(s);
45015 this.recoveryParam = null;
ebd8d4e8 45016
8b095871
IC
45017 return true;
45018};
ab78acc6 45019
8b095871
IC
45020function constructLength(arr, len) {
45021 if (len < 0x80) {
45022 arr.push(len);
45023 return;
45024 }
45025 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
45026 arr.push(octets | 0x80);
45027 while (--octets) {
45028 arr.push((len >>> (octets << 3)) & 0xff);
45029 }
45030 arr.push(len);
45031}
45032
45033Signature.prototype.toDER = function toDER(enc) {
45034 var r = this.r.toArray();
45035 var s = this.s.toArray();
45036
45037 // Pad values
45038 if (r[0] & 0x80)
45039 r = [ 0 ].concat(r);
45040 // Pad values
45041 if (s[0] & 0x80)
45042 s = [ 0 ].concat(s);
45043
45044 r = rmPadding(r);
45045 s = rmPadding(s);
45046
45047 while (!s[0] && !(s[1] & 0x80)) {
45048 s = s.slice(1);
45049 }
45050 var arr = [ 0x02 ];
45051 constructLength(arr, r.length);
45052 arr = arr.concat(r);
45053 arr.push(0x02);
45054 constructLength(arr, s.length);
45055 var backHalf = arr.concat(s);
45056 var res = [ 0x30 ];
45057 constructLength(res, backHalf.length);
45058 res = res.concat(backHalf);
45059 return utils.encode(res, enc);
45060};
ab78acc6 45061
8b095871
IC
45062},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
45063'use strict';
ebd8d4e8 45064
8b095871
IC
45065var hash = require('hash.js');
45066var elliptic = require('../../elliptic');
45067var utils = elliptic.utils;
45068var assert = utils.assert;
45069var parseBytes = utils.parseBytes;
45070var KeyPair = require('./key');
45071var Signature = require('./signature');
ab78acc6 45072
8b095871
IC
45073function EDDSA(curve) {
45074 assert(curve === 'ed25519', 'only tested with ed25519 so far');
ebd8d4e8 45075
8b095871
IC
45076 if (!(this instanceof EDDSA))
45077 return new EDDSA(curve);
ab78acc6 45078
8b095871
IC
45079 var curve = elliptic.curves[curve].curve;
45080 this.curve = curve;
45081 this.g = curve.g;
45082 this.g.precompute(curve.n.bitLength() + 1);
ebd8d4e8 45083
8b095871
IC
45084 this.pointClass = curve.point().constructor;
45085 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
45086 this.hash = hash.sha512;
45087}
ebd8d4e8 45088
8b095871 45089module.exports = EDDSA;
ebd8d4e8 45090
8b095871
IC
45091/**
45092* @param {Array|String} message - message bytes
45093* @param {Array|String|KeyPair} secret - secret bytes or a keypair
45094* @returns {Signature} - signature
45095*/
45096EDDSA.prototype.sign = function sign(message, secret) {
45097 message = parseBytes(message);
45098 var key = this.keyFromSecret(secret);
45099 var r = this.hashInt(key.messagePrefix(), message);
45100 var R = this.g.mul(r);
45101 var Rencoded = this.encodePoint(R);
45102 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
45103 .mul(key.priv());
45104 var S = r.add(s_).umod(this.curve.n);
45105 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
45106};
ebd8d4e8 45107
8b095871
IC
45108/**
45109* @param {Array} message - message bytes
45110* @param {Array|String|Signature} sig - sig bytes
45111* @param {Array|String|Point|KeyPair} pub - public key
45112* @returns {Boolean} - true if public key matches sig of message
45113*/
45114EDDSA.prototype.verify = function verify(message, sig, pub) {
45115 message = parseBytes(message);
45116 sig = this.makeSignature(sig);
45117 var key = this.keyFromPublic(pub);
45118 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
45119 var SG = this.g.mul(sig.S());
45120 var RplusAh = sig.R().add(key.pub().mul(h));
45121 return RplusAh.eq(SG);
45122};
ebd8d4e8 45123
8b095871
IC
45124EDDSA.prototype.hashInt = function hashInt() {
45125 var hash = this.hash();
45126 for (var i = 0; i < arguments.length; i++)
45127 hash.update(arguments[i]);
45128 return utils.intFromLE(hash.digest()).umod(this.curve.n);
45129};
ebd8d4e8 45130
8b095871
IC
45131EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
45132 return KeyPair.fromPublic(this, pub);
45133};
ebd8d4e8 45134
8b095871
IC
45135EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
45136 return KeyPair.fromSecret(this, secret);
45137};
45138
45139EDDSA.prototype.makeSignature = function makeSignature(sig) {
45140 if (sig instanceof Signature)
45141 return sig;
45142 return new Signature(this, sig);
45143};
ebd8d4e8
IC
45144
45145/**
8b095871
IC
45146* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
45147*
45148* EDDSA defines methods for encoding and decoding points and integers. These are
45149* helper convenience methods, that pass along to utility functions implied
45150* parameters.
45151*
45152*/
45153EDDSA.prototype.encodePoint = function encodePoint(point) {
45154 var enc = point.getY().toArray('le', this.encodingLength);
45155 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
45156 return enc;
45157};
ebd8d4e8 45158
8b095871
IC
45159EDDSA.prototype.decodePoint = function decodePoint(bytes) {
45160 bytes = utils.parseBytes(bytes);
ebd8d4e8 45161
8b095871
IC
45162 var lastIx = bytes.length - 1;
45163 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
45164 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
ebd8d4e8 45165
8b095871
IC
45166 var y = utils.intFromLE(normed);
45167 return this.curve.pointFromY(y, xIsOdd);
45168};
ebd8d4e8 45169
8b095871
IC
45170EDDSA.prototype.encodeInt = function encodeInt(num) {
45171 return num.toArray('le', this.encodingLength);
45172};
ebd8d4e8 45173
8b095871
IC
45174EDDSA.prototype.decodeInt = function decodeInt(bytes) {
45175 return utils.intFromLE(bytes);
45176};
ebd8d4e8 45177
8b095871
IC
45178EDDSA.prototype.isPoint = function isPoint(val) {
45179 return val instanceof this.pointClass;
45180};
ebd8d4e8 45181
8b095871
IC
45182},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
45183'use strict';
ebd8d4e8 45184
8b095871
IC
45185var elliptic = require('../../elliptic');
45186var utils = elliptic.utils;
45187var assert = utils.assert;
45188var parseBytes = utils.parseBytes;
45189var cachedProperty = utils.cachedProperty;
ebd8d4e8 45190
8b095871
IC
45191/**
45192* @param {EDDSA} eddsa - instance
45193* @param {Object} params - public/private key parameters
45194*
45195* @param {Array<Byte>} [params.secret] - secret seed bytes
45196* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
45197* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
45198*
45199*/
45200function KeyPair(eddsa, params) {
45201 this.eddsa = eddsa;
45202 this._secret = parseBytes(params.secret);
45203 if (eddsa.isPoint(params.pub))
45204 this._pub = params.pub;
45205 else
45206 this._pubBytes = parseBytes(params.pub);
ebd8d4e8
IC
45207}
45208
8b095871
IC
45209KeyPair.fromPublic = function fromPublic(eddsa, pub) {
45210 if (pub instanceof KeyPair)
45211 return pub;
45212 return new KeyPair(eddsa, { pub: pub });
45213};
ebd8d4e8 45214
8b095871
IC
45215KeyPair.fromSecret = function fromSecret(eddsa, secret) {
45216 if (secret instanceof KeyPair)
45217 return secret;
45218 return new KeyPair(eddsa, { secret: secret });
45219};
ebd8d4e8 45220
8b095871
IC
45221KeyPair.prototype.secret = function secret() {
45222 return this._secret;
45223};
ebd8d4e8 45224
8b095871
IC
45225cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
45226 return this.eddsa.encodePoint(this.pub());
45227});
ebd8d4e8 45228
8b095871
IC
45229cachedProperty(KeyPair, 'pub', function pub() {
45230 if (this._pubBytes)
45231 return this.eddsa.decodePoint(this._pubBytes);
45232 return this.eddsa.g.mul(this.priv());
45233});
ebd8d4e8 45234
8b095871
IC
45235cachedProperty(KeyPair, 'privBytes', function privBytes() {
45236 var eddsa = this.eddsa;
45237 var hash = this.hash();
45238 var lastIx = eddsa.encodingLength - 1;
ebd8d4e8 45239
8b095871
IC
45240 var a = hash.slice(0, eddsa.encodingLength);
45241 a[0] &= 248;
45242 a[lastIx] &= 127;
45243 a[lastIx] |= 64;
ebd8d4e8 45244
8b095871
IC
45245 return a;
45246});
ebd8d4e8 45247
8b095871
IC
45248cachedProperty(KeyPair, 'priv', function priv() {
45249 return this.eddsa.decodeInt(this.privBytes());
45250});
ebd8d4e8 45251
8b095871
IC
45252cachedProperty(KeyPair, 'hash', function hash() {
45253 return this.eddsa.hash().update(this.secret()).digest();
45254});
ebd8d4e8 45255
8b095871
IC
45256cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
45257 return this.hash().slice(this.eddsa.encodingLength);
45258});
ebd8d4e8 45259
8b095871
IC
45260KeyPair.prototype.sign = function sign(message) {
45261 assert(this._secret, 'KeyPair can only verify');
45262 return this.eddsa.sign(message, this);
45263};
ebd8d4e8 45264
8b095871
IC
45265KeyPair.prototype.verify = function verify(message, sig) {
45266 return this.eddsa.verify(message, sig, this);
45267};
ebd8d4e8 45268
8b095871
IC
45269KeyPair.prototype.getSecret = function getSecret(enc) {
45270 assert(this._secret, 'KeyPair is public only');
45271 return utils.encode(this.secret(), enc);
45272};
ebd8d4e8 45273
8b095871
IC
45274KeyPair.prototype.getPublic = function getPublic(enc) {
45275 return utils.encode(this.pubBytes(), enc);
45276};
ebd8d4e8 45277
8b095871 45278module.exports = KeyPair;
ebd8d4e8 45279
8b095871
IC
45280},{"../../elliptic":39}],51:[function(require,module,exports){
45281'use strict';
ebd8d4e8 45282
8b095871
IC
45283var BN = require('bn.js');
45284var elliptic = require('../../elliptic');
45285var utils = elliptic.utils;
45286var assert = utils.assert;
45287var cachedProperty = utils.cachedProperty;
45288var parseBytes = utils.parseBytes;
ebd8d4e8 45289
8b095871
IC
45290/**
45291* @param {EDDSA} eddsa - eddsa instance
45292* @param {Array<Bytes>|Object} sig -
45293* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
45294* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
45295* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
45296* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
45297*/
45298function Signature(eddsa, sig) {
45299 this.eddsa = eddsa;
ebd8d4e8 45300
8b095871
IC
45301 if (typeof sig !== 'object')
45302 sig = parseBytes(sig);
ebd8d4e8 45303
8b095871
IC
45304 if (Array.isArray(sig)) {
45305 sig = {
45306 R: sig.slice(0, eddsa.encodingLength),
45307 S: sig.slice(eddsa.encodingLength)
45308 };
ab78acc6 45309 }
ebd8d4e8 45310
8b095871 45311 assert(sig.R && sig.S, 'Signature without R or S');
ebd8d4e8 45312
8b095871
IC
45313 if (eddsa.isPoint(sig.R))
45314 this._R = sig.R;
45315 if (sig.S instanceof BN)
45316 this._S = sig.S;
45317
45318 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
45319 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
ebd8d4e8
IC
45320}
45321
8b095871
IC
45322cachedProperty(Signature, 'S', function S() {
45323 return this.eddsa.decodeInt(this.Sencoded());
45324});
ab78acc6 45325
8b095871
IC
45326cachedProperty(Signature, 'R', function R() {
45327 return this.eddsa.decodePoint(this.Rencoded());
45328});
ebd8d4e8 45329
8b095871
IC
45330cachedProperty(Signature, 'Rencoded', function Rencoded() {
45331 return this.eddsa.encodePoint(this.R());
45332});
ebd8d4e8 45333
8b095871
IC
45334cachedProperty(Signature, 'Sencoded', function Sencoded() {
45335 return this.eddsa.encodeInt(this.S());
45336});
ebd8d4e8 45337
8b095871
IC
45338Signature.prototype.toBytes = function toBytes() {
45339 return this.Rencoded().concat(this.Sencoded());
45340};
ebd8d4e8 45341
8b095871
IC
45342Signature.prototype.toHex = function toHex() {
45343 return utils.encode(this.toBytes(), 'hex').toUpperCase();
45344};
ebd8d4e8 45345
8b095871 45346module.exports = Signature;
ebd8d4e8 45347
8b095871
IC
45348},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
45349'use strict';
ebd8d4e8 45350
8b095871
IC
45351var hash = require('hash.js');
45352var elliptic = require('../elliptic');
45353var utils = elliptic.utils;
45354var assert = utils.assert;
ebd8d4e8 45355
8b095871
IC
45356function HmacDRBG(options) {
45357 if (!(this instanceof HmacDRBG))
45358 return new HmacDRBG(options);
45359 this.hash = options.hash;
45360 this.predResist = !!options.predResist;
ab78acc6 45361
8b095871
IC
45362 this.outLen = this.hash.outSize;
45363 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
ab78acc6 45364
8b095871
IC
45365 this.reseed = null;
45366 this.reseedInterval = null;
45367 this.K = null;
45368 this.V = null;
ebd8d4e8 45369
8b095871
IC
45370 var entropy = utils.toArray(options.entropy, options.entropyEnc);
45371 var nonce = utils.toArray(options.nonce, options.nonceEnc);
45372 var pers = utils.toArray(options.pers, options.persEnc);
45373 assert(entropy.length >= (this.minEntropy / 8),
45374 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
45375 this._init(entropy, nonce, pers);
ebd8d4e8 45376}
8b095871 45377module.exports = HmacDRBG;
ebd8d4e8 45378
8b095871
IC
45379HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
45380 var seed = entropy.concat(nonce).concat(pers);
ebd8d4e8 45381
8b095871
IC
45382 this.K = new Array(this.outLen / 8);
45383 this.V = new Array(this.outLen / 8);
45384 for (var i = 0; i < this.V.length; i++) {
45385 this.K[i] = 0x00;
45386 this.V[i] = 0x01;
45387 }
ebd8d4e8 45388
8b095871
IC
45389 this._update(seed);
45390 this.reseed = 1;
45391 this.reseedInterval = 0x1000000000000; // 2^48
45392};
ebd8d4e8 45393
8b095871
IC
45394HmacDRBG.prototype._hmac = function hmac() {
45395 return new hash.hmac(this.hash, this.K);
45396};
ebd8d4e8 45397
8b095871
IC
45398HmacDRBG.prototype._update = function update(seed) {
45399 var kmac = this._hmac()
45400 .update(this.V)
45401 .update([ 0x00 ]);
45402 if (seed)
45403 kmac = kmac.update(seed);
45404 this.K = kmac.digest();
45405 this.V = this._hmac().update(this.V).digest();
45406 if (!seed)
45407 return;
45408
45409 this.K = this._hmac()
45410 .update(this.V)
45411 .update([ 0x01 ])
45412 .update(seed)
45413 .digest();
45414 this.V = this._hmac().update(this.V).digest();
45415};
45416
45417HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
45418 // Optional entropy enc
45419 if (typeof entropyEnc !== 'string') {
45420 addEnc = add;
45421 add = entropyEnc;
45422 entropyEnc = null;
ebd8d4e8 45423 }
ebd8d4e8 45424
8b095871
IC
45425 entropy = utils.toBuffer(entropy, entropyEnc);
45426 add = utils.toBuffer(add, addEnc);
ebd8d4e8 45427
8b095871
IC
45428 assert(entropy.length >= (this.minEntropy / 8),
45429 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
ebd8d4e8 45430
8b095871
IC
45431 this._update(entropy.concat(add || []));
45432 this.reseed = 1;
45433};
ebd8d4e8 45434
8b095871
IC
45435HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
45436 if (this.reseed > this.reseedInterval)
45437 throw new Error('Reseed is required');
ebd8d4e8 45438
8b095871
IC
45439 // Optional encoding
45440 if (typeof enc !== 'string') {
45441 addEnc = add;
45442 add = enc;
45443 enc = null;
45444 }
ebd8d4e8 45445
8b095871
IC
45446 // Optional additional data
45447 if (add) {
45448 add = utils.toArray(add, addEnc);
45449 this._update(add);
ebd8d4e8
IC
45450 }
45451
8b095871
IC
45452 var temp = [];
45453 while (temp.length < len) {
45454 this.V = this._hmac().update(this.V).digest();
45455 temp = temp.concat(this.V);
ebd8d4e8
IC
45456 }
45457
8b095871
IC
45458 var res = temp.slice(0, len);
45459 this._update(add);
45460 this.reseed++;
45461 return utils.encode(res, enc);
45462};
ebd8d4e8 45463
8b095871
IC
45464},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
45465module.exports = {
45466 doubles: {
45467 step: 4,
45468 points: [
45469 [
45470 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
45471 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
45472 ],
45473 [
45474 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
45475 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
45476 ],
45477 [
45478 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
45479 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
45480 ],
45481 [
45482 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
45483 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
45484 ],
45485 [
45486 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
45487 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
45488 ],
45489 [
45490 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
45491 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
45492 ],
45493 [
45494 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
45495 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
45496 ],
45497 [
45498 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
45499 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
45500 ],
45501 [
45502 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
45503 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
45504 ],
45505 [
45506 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
45507 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
45508 ],
45509 [
45510 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
45511 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
45512 ],
45513 [
45514 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
45515 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
45516 ],
45517 [
45518 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
45519 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
45520 ],
45521 [
45522 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
45523 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
45524 ],
45525 [
45526 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
45527 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
45528 ],
45529 [
45530 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
45531 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
45532 ],
45533 [
45534 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
45535 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
45536 ],
45537 [
45538 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
45539 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
45540 ],
45541 [
45542 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
45543 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
45544 ],
45545 [
45546 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
45547 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
45548 ],
45549 [
45550 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
45551 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
45552 ],
45553 [
45554 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
45555 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
45556 ],
45557 [
45558 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
45559 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
45560 ],
45561 [
45562 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
45563 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
45564 ],
45565 [
45566 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
45567 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
45568 ],
45569 [
45570 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
45571 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
45572 ],
45573 [
45574 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
45575 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
45576 ],
45577 [
45578 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
45579 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
45580 ],
45581 [
45582 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
45583 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
45584 ],
45585 [
45586 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
45587 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
45588 ],
45589 [
45590 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
45591 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
45592 ],
45593 [
45594 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
45595 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
45596 ],
45597 [
45598 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
45599 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
45600 ],
45601 [
45602 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
45603 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
45604 ],
45605 [
45606 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
45607 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
45608 ],
45609 [
45610 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
45611 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
45612 ],
45613 [
45614 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
45615 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
45616 ],
45617 [
45618 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
45619 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
45620 ],
45621 [
45622 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
45623 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
45624 ],
45625 [
45626 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
45627 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
45628 ],
45629 [
45630 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
45631 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
45632 ],
45633 [
45634 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
45635 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
45636 ],
45637 [
45638 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
45639 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
45640 ],
45641 [
45642 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
45643 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
45644 ],
45645 [
45646 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
45647 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
45648 ],
45649 [
45650 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
45651 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
45652 ],
45653 [
45654 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
45655 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
45656 ],
45657 [
45658 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
45659 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
45660 ],
45661 [
45662 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
45663 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
45664 ],
45665 [
45666 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
45667 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
45668 ],
45669 [
45670 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
45671 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
45672 ],
45673 [
45674 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
45675 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
45676 ],
45677 [
45678 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
45679 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
45680 ],
45681 [
45682 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
45683 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
45684 ],
45685 [
45686 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
45687 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
45688 ],
45689 [
45690 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
45691 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
45692 ],
45693 [
45694 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
45695 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
45696 ],
45697 [
45698 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
45699 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
45700 ],
45701 [
45702 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
45703 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
45704 ],
45705 [
45706 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
45707 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
45708 ],
45709 [
45710 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
45711 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
45712 ],
45713 [
45714 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
45715 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
45716 ],
45717 [
45718 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
45719 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
45720 ],
45721 [
45722 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
45723 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
45724 ],
45725 [
45726 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
45727 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
45728 ]
45729 ]
45730 },
45731 naf: {
45732 wnd: 7,
45733 points: [
45734 [
45735 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
45736 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
45737 ],
45738 [
45739 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
45740 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
45741 ],
45742 [
45743 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
45744 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
45745 ],
45746 [
45747 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
45748 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
45749 ],
45750 [
45751 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
45752 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
45753 ],
45754 [
45755 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
45756 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
45757 ],
45758 [
45759 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
45760 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
45761 ],
45762 [
45763 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
45764 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
45765 ],
45766 [
45767 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
45768 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
45769 ],
45770 [
45771 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
45772 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
45773 ],
45774 [
45775 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
45776 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
45777 ],
45778 [
45779 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
45780 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
45781 ],
45782 [
45783 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
45784 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
45785 ],
45786 [
45787 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
45788 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
45789 ],
45790 [
45791 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
45792 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
45793 ],
45794 [
45795 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
45796 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
45797 ],
45798 [
45799 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
45800 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
45801 ],
45802 [
45803 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
45804 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
45805 ],
45806 [
45807 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
45808 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
45809 ],
45810 [
45811 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
45812 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
45813 ],
45814 [
45815 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
45816 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
45817 ],
45818 [
45819 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
45820 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
45821 ],
45822 [
45823 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
45824 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
45825 ],
45826 [
45827 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
45828 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
45829 ],
45830 [
45831 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
45832 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
45833 ],
45834 [
45835 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
45836 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
45837 ],
45838 [
45839 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
45840 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
45841 ],
45842 [
45843 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
45844 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
45845 ],
45846 [
45847 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
45848 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
45849 ],
45850 [
45851 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
45852 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
45853 ],
45854 [
45855 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
45856 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
45857 ],
45858 [
45859 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
45860 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
45861 ],
45862 [
45863 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
45864 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
45865 ],
45866 [
45867 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
45868 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
45869 ],
45870 [
45871 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
45872 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
45873 ],
45874 [
45875 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
45876 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
45877 ],
45878 [
45879 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
45880 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
45881 ],
45882 [
45883 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
45884 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
45885 ],
45886 [
45887 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
45888 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
45889 ],
45890 [
45891 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
45892 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
45893 ],
45894 [
45895 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
45896 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
45897 ],
45898 [
45899 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
45900 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
45901 ],
45902 [
45903 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
45904 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
45905 ],
45906 [
45907 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
45908 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
45909 ],
45910 [
45911 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
45912 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
45913 ],
45914 [
45915 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
45916 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
45917 ],
45918 [
45919 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
45920 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
45921 ],
45922 [
45923 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
45924 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
45925 ],
45926 [
45927 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
45928 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
45929 ],
45930 [
45931 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
45932 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
45933 ],
45934 [
45935 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
45936 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
45937 ],
45938 [
45939 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
45940 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
45941 ],
45942 [
45943 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
45944 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
45945 ],
45946 [
45947 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
45948 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
45949 ],
45950 [
45951 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
45952 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
45953 ],
45954 [
45955 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
45956 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
45957 ],
45958 [
45959 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
45960 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
45961 ],
45962 [
45963 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
45964 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
45965 ],
45966 [
45967 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
45968 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
45969 ],
45970 [
45971 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
45972 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
45973 ],
45974 [
45975 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
45976 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
45977 ],
45978 [
45979 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
45980 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
45981 ],
45982 [
45983 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
45984 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
45985 ],
45986 [
45987 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
45988 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
45989 ],
45990 [
45991 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
45992 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
45993 ],
45994 [
45995 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
45996 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
45997 ],
45998 [
45999 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
46000 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
46001 ],
46002 [
46003 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
46004 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
46005 ],
46006 [
46007 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
46008 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
46009 ],
46010 [
46011 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
46012 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
46013 ],
46014 [
46015 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
46016 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
46017 ],
46018 [
46019 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
46020 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
46021 ],
46022 [
46023 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
46024 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
46025 ],
46026 [
46027 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
46028 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
46029 ],
46030 [
46031 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
46032 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
46033 ],
46034 [
46035 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
46036 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
46037 ],
46038 [
46039 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
46040 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
46041 ],
46042 [
46043 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
46044 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
46045 ],
46046 [
46047 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
46048 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
46049 ],
46050 [
46051 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
46052 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
46053 ],
46054 [
46055 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
46056 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
46057 ],
46058 [
46059 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
46060 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
46061 ],
46062 [
46063 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
46064 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
46065 ],
46066 [
46067 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
46068 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
46069 ],
46070 [
46071 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
46072 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
46073 ],
46074 [
46075 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
46076 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
46077 ],
46078 [
46079 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
46080 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
46081 ],
46082 [
46083 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
46084 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
46085 ],
46086 [
46087 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
46088 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
46089 ],
46090 [
46091 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
46092 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
46093 ],
46094 [
46095 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
46096 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
46097 ],
46098 [
46099 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
46100 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
46101 ],
46102 [
46103 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
46104 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
46105 ],
46106 [
46107 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
46108 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
46109 ],
46110 [
46111 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
46112 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
46113 ],
46114 [
46115 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
46116 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
46117 ],
46118 [
46119 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
46120 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
46121 ],
46122 [
46123 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
46124 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
46125 ],
46126 [
46127 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
46128 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
46129 ],
46130 [
46131 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
46132 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
46133 ],
46134 [
46135 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
46136 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
46137 ],
46138 [
46139 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
46140 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
46141 ],
46142 [
46143 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
46144 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
46145 ],
46146 [
46147 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
46148 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
46149 ],
46150 [
46151 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
46152 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
46153 ],
46154 [
46155 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
46156 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
46157 ],
46158 [
46159 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
46160 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
46161 ],
46162 [
46163 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
46164 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
46165 ],
46166 [
46167 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
46168 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
46169 ],
46170 [
46171 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
46172 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
46173 ],
46174 [
46175 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
46176 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
46177 ],
46178 [
46179 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
46180 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
46181 ],
46182 [
46183 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
46184 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
46185 ],
46186 [
46187 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
46188 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
46189 ],
46190 [
46191 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
46192 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
46193 ],
46194 [
46195 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
46196 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
46197 ],
46198 [
46199 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
46200 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
46201 ],
46202 [
46203 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
46204 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
46205 ],
46206 [
46207 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
46208 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
46209 ],
46210 [
46211 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
46212 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
46213 ],
46214 [
46215 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
46216 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
46217 ],
46218 [
46219 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
46220 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
46221 ],
46222 [
46223 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
46224 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
46225 ],
46226 [
46227 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
46228 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
46229 ],
46230 [
46231 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
46232 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
46233 ],
46234 [
46235 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
46236 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
46237 ],
46238 [
46239 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
46240 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
46241 ]
46242 ]
46243 }
46244};
ebd8d4e8 46245
8b095871
IC
46246},{}],54:[function(require,module,exports){
46247'use strict';
ebd8d4e8 46248
8b095871
IC
46249var utils = exports;
46250var BN = require('bn.js');
ebd8d4e8 46251
8b095871
IC
46252utils.assert = function assert(val, msg) {
46253 if (!val)
46254 throw new Error(msg || 'Assertion failed');
46255};
ebd8d4e8 46256
8b095871
IC
46257function toArray(msg, enc) {
46258 if (Array.isArray(msg))
46259 return msg.slice();
46260 if (!msg)
46261 return [];
46262 var res = [];
46263 if (typeof msg !== 'string') {
46264 for (var i = 0; i < msg.length; i++)
46265 res[i] = msg[i] | 0;
46266 return res;
46267 }
46268 if (!enc) {
46269 for (var i = 0; i < msg.length; i++) {
46270 var c = msg.charCodeAt(i);
46271 var hi = c >> 8;
46272 var lo = c & 0xff;
46273 if (hi)
46274 res.push(hi, lo);
46275 else
46276 res.push(lo);
46277 }
46278 } else if (enc === 'hex') {
46279 msg = msg.replace(/[^a-z0-9]+/ig, '');
46280 if (msg.length % 2 !== 0)
46281 msg = '0' + msg;
46282 for (var i = 0; i < msg.length; i += 2)
46283 res.push(parseInt(msg[i] + msg[i + 1], 16));
ebd8d4e8 46284 }
8b095871 46285 return res;
ebd8d4e8 46286}
8b095871 46287utils.toArray = toArray;
ebd8d4e8 46288
8b095871
IC
46289function zero2(word) {
46290 if (word.length === 1)
46291 return '0' + word;
46292 else
46293 return word;
46294}
46295utils.zero2 = zero2;
ab78acc6 46296
8b095871
IC
46297function toHex(msg) {
46298 var res = '';
46299 for (var i = 0; i < msg.length; i++)
46300 res += zero2(msg[i].toString(16));
46301 return res;
46302}
46303utils.toHex = toHex;
ebd8d4e8 46304
8b095871
IC
46305utils.encode = function encode(arr, enc) {
46306 if (enc === 'hex')
46307 return toHex(arr);
46308 else
46309 return arr;
46310};
ebd8d4e8 46311
8b095871
IC
46312// Represent num in a w-NAF form
46313function getNAF(num, w) {
46314 var naf = [];
46315 var ws = 1 << (w + 1);
46316 var k = num.clone();
46317 while (k.cmpn(1) >= 0) {
46318 var z;
46319 if (k.isOdd()) {
46320 var mod = k.andln(ws - 1);
46321 if (mod > (ws >> 1) - 1)
46322 z = (ws >> 1) - mod;
46323 else
46324 z = mod;
46325 k.isubn(z);
46326 } else {
46327 z = 0;
46328 }
46329 naf.push(z);
46330
46331 // Optimization, shift by word if possible
46332 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
46333 for (var i = 1; i < shift; i++)
46334 naf.push(0);
46335 k.iushrn(shift);
46336 }
46337
46338 return naf;
46339}
46340utils.getNAF = getNAF;
46341
46342// Represent k1, k2 in a Joint Sparse Form
46343function getJSF(k1, k2) {
46344 var jsf = [
46345 [],
46346 []
46347 ];
46348
46349 k1 = k1.clone();
46350 k2 = k2.clone();
46351 var d1 = 0;
46352 var d2 = 0;
46353 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
46354
46355 // First phase
46356 var m14 = (k1.andln(3) + d1) & 3;
46357 var m24 = (k2.andln(3) + d2) & 3;
46358 if (m14 === 3)
46359 m14 = -1;
46360 if (m24 === 3)
46361 m24 = -1;
46362 var u1;
46363 if ((m14 & 1) === 0) {
46364 u1 = 0;
46365 } else {
46366 var m8 = (k1.andln(7) + d1) & 7;
46367 if ((m8 === 3 || m8 === 5) && m24 === 2)
46368 u1 = -m14;
46369 else
46370 u1 = m14;
46371 }
46372 jsf[0].push(u1);
ebd8d4e8 46373
8b095871
IC
46374 var u2;
46375 if ((m24 & 1) === 0) {
46376 u2 = 0;
46377 } else {
46378 var m8 = (k2.andln(7) + d2) & 7;
46379 if ((m8 === 3 || m8 === 5) && m14 === 2)
46380 u2 = -m24;
46381 else
46382 u2 = m24;
46383 }
46384 jsf[1].push(u2);
ebd8d4e8 46385
8b095871
IC
46386 // Second phase
46387 if (2 * d1 === u1 + 1)
46388 d1 = 1 - d1;
46389 if (2 * d2 === u2 + 1)
46390 d2 = 1 - d2;
46391 k1.iushrn(1);
46392 k2.iushrn(1);
46393 }
ebd8d4e8 46394
8b095871
IC
46395 return jsf;
46396}
46397utils.getJSF = getJSF;
ab78acc6 46398
8b095871
IC
46399function cachedProperty(obj, name, computer) {
46400 var key = '_' + name;
46401 obj.prototype[name] = function cachedProperty() {
46402 return this[key] !== undefined ? this[key] :
46403 this[key] = computer.call(this);
46404 };
46405}
46406utils.cachedProperty = cachedProperty;
ebd8d4e8 46407
8b095871
IC
46408function parseBytes(bytes) {
46409 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
46410 bytes;
46411}
46412utils.parseBytes = parseBytes;
ebd8d4e8 46413
8b095871
IC
46414function intFromLE(bytes) {
46415 return new BN(bytes, 'hex', 'le');
46416}
46417utils.intFromLE = intFromLE;
ebd8d4e8 46418
8b095871
IC
46419
46420},{"bn.js":33}],55:[function(require,module,exports){
46421module.exports={
46422 "_args": [
46423 [
46424 {
46425 "raw": "elliptic@^6.2.3",
46426 "scope": null,
46427 "escapedName": "elliptic",
46428 "name": "elliptic",
46429 "rawSpec": "^6.2.3",
46430 "spec": ">=6.2.3 <7.0.0",
46431 "type": "range"
46432 },
46433 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
46434 ]
46435 ],
46436 "_from": "elliptic@>=6.2.3 <7.0.0",
46437 "_id": "elliptic@6.3.3",
46438 "_inCache": true,
46439 "_location": "/elliptic",
46440 "_nodeVersion": "7.0.0",
46441 "_npmOperationalInternal": {
46442 "host": "packages-18-east.internal.npmjs.com",
46443 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
46444 },
46445 "_npmUser": {
46446 "name": "indutny",
46447 "email": "fedor@indutny.com"
46448 },
46449 "_npmVersion": "3.10.8",
46450 "_phantomChildren": {},
46451 "_requested": {
46452 "raw": "elliptic@^6.2.3",
46453 "scope": null,
46454 "escapedName": "elliptic",
46455 "name": "elliptic",
46456 "rawSpec": "^6.2.3",
46457 "spec": ">=6.2.3 <7.0.0",
46458 "type": "range"
46459 },
46460 "_requiredBy": [
46461 "/browserify-sign",
46462 "/create-ecdh",
46463 "/secp256k1"
46464 ],
46465 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
46466 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
46467 "_shrinkwrap": null,
46468 "_spec": "elliptic@^6.2.3",
46469 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
46470 "author": {
46471 "name": "Fedor Indutny",
46472 "email": "fedor@indutny.com"
46473 },
46474 "bugs": {
46475 "url": "https://github.com/indutny/elliptic/issues"
46476 },
46477 "dependencies": {
46478 "bn.js": "^4.4.0",
46479 "brorand": "^1.0.1",
46480 "hash.js": "^1.0.0",
46481 "inherits": "^2.0.1"
46482 },
46483 "description": "EC cryptography",
46484 "devDependencies": {
46485 "brfs": "^1.4.3",
46486 "coveralls": "^2.11.3",
46487 "grunt": "^0.4.5",
46488 "grunt-browserify": "^5.0.0",
46489 "grunt-cli": "^1.2.0",
46490 "grunt-contrib-connect": "^1.0.0",
46491 "grunt-contrib-copy": "^1.0.0",
46492 "grunt-contrib-uglify": "^1.0.1",
46493 "grunt-mocha-istanbul": "^3.0.1",
46494 "grunt-saucelabs": "^8.6.2",
46495 "istanbul": "^0.4.2",
46496 "jscs": "^2.9.0",
46497 "jshint": "^2.6.0",
46498 "mocha": "^2.1.0"
46499 },
46500 "directories": {},
46501 "dist": {
46502 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
46503 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
46504 },
46505 "files": [
46506 "lib"
46507 ],
46508 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
46509 "homepage": "https://github.com/indutny/elliptic",
46510 "keywords": [
46511 "EC",
46512 "Elliptic",
46513 "curve",
46514 "Cryptography"
46515 ],
46516 "license": "MIT",
46517 "main": "lib/elliptic.js",
46518 "maintainers": [
46519 {
46520 "name": "indutny",
46521 "email": "fedor@indutny.com"
46522 }
46523 ],
46524 "name": "elliptic",
46525 "optionalDependencies": {},
46526 "readme": "ERROR: No README data found!",
46527 "repository": {
46528 "type": "git",
46529 "url": "git+ssh://git@github.com/indutny/elliptic.git"
46530 },
46531 "scripts": {
46532 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
46533 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
46534 "lint": "npm run jscs && npm run jshint",
46535 "test": "npm run lint && npm run unit",
46536 "unit": "istanbul test _mocha --reporter=spec test/index.js",
46537 "version": "grunt dist && git add dist/"
46538 },
46539 "version": "6.3.3"
ebd8d4e8
IC
46540}
46541
8b095871
IC
46542},{}],56:[function(require,module,exports){
46543(function (Buffer){
46544'use strict';
ab78acc6 46545
8b095871
IC
46546var isHexPrefixed = require('is-hex-prefixed');
46547var stripHexPrefix = require('strip-hex-prefix');
ebd8d4e8 46548
8b095871
IC
46549/**
46550 * Pads a `String` to have an even length
46551 * @param {String} value
46552 * @return {String} output
46553 */
46554function padToEven(value) {
46555 var a = value; // eslint-disable-line
46556
46557 if (typeof a !== 'string') {
46558 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
46559 }
46560
46561 if (a.length % 2) {
46562 a = '0' + a;
46563 }
46564
46565 return a;
ebd8d4e8
IC
46566}
46567
8b095871
IC
46568/**
46569 * Converts a `Number` into a hex `String`
46570 * @param {Number} i
46571 * @return {String}
46572 */
46573function intToHex(i) {
46574 var hex = i.toString(16); // eslint-disable-line
ebd8d4e8 46575
8b095871
IC
46576 return '0x' + padToEven(hex);
46577}
ab78acc6 46578
8b095871
IC
46579/**
46580 * Converts an `Number` to a `Buffer`
46581 * @param {Number} i
46582 * @return {Buffer}
46583 */
46584function intToBuffer(i) {
46585 var hex = intToHex(i);
ab78acc6 46586
8b095871
IC
46587 return new Buffer(hex.slice(2), 'hex');
46588}
ebd8d4e8 46589
8b095871
IC
46590/**
46591 * Get the binary size of a string
46592 * @param {String} str
46593 * @return {Number}
46594 */
46595function getBinarySize(str) {
46596 if (typeof str !== 'string') {
46597 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
46598 }
ebd8d4e8 46599
8b095871
IC
46600 return Buffer.byteLength(str, 'utf8');
46601}
46602
46603/**
46604 * Returns TRUE if the first specified array contains all elements
46605 * from the second one. FALSE otherwise.
46606 *
46607 * @param {array} superset
46608 * @param {array} subset
46609 *
46610 * @returns {boolean}
46611 */
46612function arrayContainsArray(superset, subset, some) {
46613 if (Array.isArray(superset) !== true) {
46614 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
46615 }
46616 if (Array.isArray(subset) !== true) {
46617 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
ebd8d4e8
IC
46618 }
46619
8b095871
IC
46620 return subset[Boolean(some) && 'some' || 'every'](function (value) {
46621 return superset.indexOf(value) >= 0;
46622 });
ebd8d4e8
IC
46623}
46624
8b095871
IC
46625/**
46626 * Should be called to get utf8 from it's hex representation
46627 *
46628 * @method toUtf8
46629 * @param {String} string in hex
46630 * @returns {String} ascii string representation of hex value
46631 */
46632function toUtf8(hex) {
46633 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
ebd8d4e8 46634
8b095871
IC
46635 return bufferValue.toString('utf8');
46636}
ab78acc6 46637
8b095871
IC
46638/**
46639 * Should be called to get ascii from it's hex representation
46640 *
46641 * @method toAscii
46642 * @param {String} string in hex
46643 * @returns {String} ascii string representation of hex value
46644 */
46645function toAscii(hex) {
46646 var str = ''; // eslint-disable-line
46647 var i = 0,
46648 l = hex.length; // eslint-disable-line
ebd8d4e8 46649
8b095871
IC
46650 if (hex.substring(0, 2) === '0x') {
46651 i = 2;
46652 }
ebd8d4e8 46653
8b095871
IC
46654 for (; i < l; i += 2) {
46655 var code = parseInt(hex.substr(i, 2), 16);
46656 str += String.fromCharCode(code);
ebd8d4e8 46657 }
8b095871
IC
46658
46659 return str;
ebd8d4e8
IC
46660}
46661
8b095871
IC
46662/**
46663 * Should be called to get hex representation (prefixed by 0x) of utf8 string
46664 *
46665 * @method fromUtf8
46666 * @param {String} string
46667 * @param {Number} optional padding
46668 * @returns {String} hex representation of input string
46669 */
46670function fromUtf8(stringValue) {
46671 var str = new Buffer(stringValue, 'utf8');
ebd8d4e8 46672
8b095871
IC
46673 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
46674}
ab78acc6 46675
8b095871
IC
46676/**
46677 * Should be called to get hex representation (prefixed by 0x) of ascii string
46678 *
46679 * @method fromAscii
46680 * @param {String} string
46681 * @param {Number} optional padding
46682 * @returns {String} hex representation of input string
46683 */
46684function fromAscii(stringValue) {
46685 var hex = ''; // eslint-disable-line
46686 for (var i = 0; i < stringValue.length; i++) {
46687 // eslint-disable-line
46688 var code = stringValue.charCodeAt(i);
46689 var n = code.toString(16);
46690 hex += n.length < 2 ? '0' + n : n;
46691 }
ab78acc6 46692
8b095871
IC
46693 return '0x' + hex;
46694}
ebd8d4e8 46695
8b095871
IC
46696/**
46697 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
46698 *
46699 * @method getKeys get specific key from inner object array of objects
46700 * @param {String} params
46701 * @param {String} key
46702 * @param {Boolean} allowEmpty
46703 * @returns {Array} output just a simple array of output keys
46704 */
46705function getKeys(params, key, allowEmpty) {
46706 if (!Array.isArray(params)) {
46707 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
46708 }
46709 if (typeof key !== 'string') {
46710 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
46711 }
ebd8d4e8 46712
8b095871 46713 var result = []; // eslint-disable-line
ebd8d4e8 46714
8b095871
IC
46715 for (var i = 0; i < params.length; i++) {
46716 // eslint-disable-line
46717 var value = params[i][key]; // eslint-disable-line
46718 if (allowEmpty && !value) {
46719 value = '';
46720 } else if (typeof value !== 'string') {
46721 throw new Error('invalid abi');
46722 }
46723 result.push(value);
46724 }
ebd8d4e8 46725
8b095871 46726 return result;
ebd8d4e8
IC
46727}
46728
8b095871
IC
46729/**
46730 * Is the string a hex string.
46731 *
46732 * @method check if string is hex string of specific length
46733 * @param {String} value
46734 * @param {Number} length
46735 * @returns {Boolean} output the string is a hex string
46736 */
46737function isHexString(value, length) {
46738 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
46739 return false;
ab78acc6
IC
46740 }
46741
8b095871
IC
46742 if (length && value.length !== 2 + 2 * length) {
46743 return false;
46744 }
ebd8d4e8 46745
8b095871
IC
46746 return true;
46747}
ab78acc6 46748
8b095871
IC
46749module.exports = {
46750 arrayContainsArray: arrayContainsArray,
46751 intToBuffer: intToBuffer,
46752 getBinarySize: getBinarySize,
46753 isHexPrefixed: isHexPrefixed,
46754 stripHexPrefix: stripHexPrefix,
46755 padToEven: padToEven,
46756 intToHex: intToHex,
46757 fromAscii: fromAscii,
46758 fromUtf8: fromUtf8,
46759 toAscii: toAscii,
46760 toUtf8: toUtf8,
46761 getKeys: getKeys,
46762 isHexString: isHexString
46763};
46764}).call(this,require("buffer").Buffer)
46765},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
46766var hash = exports;
46767
46768hash.utils = require('./hash/utils');
46769hash.common = require('./hash/common');
46770hash.sha = require('./hash/sha');
46771hash.ripemd = require('./hash/ripemd');
46772hash.hmac = require('./hash/hmac');
46773
46774// Proxy hash functions to the main object
46775hash.sha1 = hash.sha.sha1;
46776hash.sha256 = hash.sha.sha256;
46777hash.sha224 = hash.sha.sha224;
46778hash.sha384 = hash.sha.sha384;
46779hash.sha512 = hash.sha.sha512;
46780hash.ripemd160 = hash.ripemd.ripemd160;
46781
46782},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
46783var hash = require('../hash');
46784var utils = hash.utils;
46785var assert = utils.assert;
46786
46787function BlockHash() {
46788 this.pending = null;
46789 this.pendingTotal = 0;
46790 this.blockSize = this.constructor.blockSize;
46791 this.outSize = this.constructor.outSize;
46792 this.hmacStrength = this.constructor.hmacStrength;
46793 this.padLength = this.constructor.padLength / 8;
46794 this.endian = 'big';
46795
46796 this._delta8 = this.blockSize / 8;
46797 this._delta32 = this.blockSize / 32;
46798}
46799exports.BlockHash = BlockHash;
46800
46801BlockHash.prototype.update = function update(msg, enc) {
46802 // Convert message to array, pad it, and join into 32bit blocks
46803 msg = utils.toArray(msg, enc);
46804 if (!this.pending)
46805 this.pending = msg;
46806 else
46807 this.pending = this.pending.concat(msg);
46808 this.pendingTotal += msg.length;
ab78acc6 46809
8b095871
IC
46810 // Enough data, try updating
46811 if (this.pending.length >= this._delta8) {
46812 msg = this.pending;
ebd8d4e8 46813
8b095871
IC
46814 // Process pending data in blocks
46815 var r = msg.length % this._delta8;
46816 this.pending = msg.slice(msg.length - r, msg.length);
46817 if (this.pending.length === 0)
46818 this.pending = null;
ebd8d4e8 46819
8b095871
IC
46820 msg = utils.join32(msg, 0, msg.length - r, this.endian);
46821 for (var i = 0; i < msg.length; i += this._delta32)
46822 this._update(msg, i, i + this._delta32);
ebd8d4e8
IC
46823 }
46824
8b095871
IC
46825 return this;
46826};
ebd8d4e8 46827
8b095871
IC
46828BlockHash.prototype.digest = function digest(enc) {
46829 this.update(this._pad());
46830 assert(this.pending === null);
ebd8d4e8 46831
8b095871
IC
46832 return this._digest(enc);
46833};
ebd8d4e8 46834
8b095871
IC
46835BlockHash.prototype._pad = function pad() {
46836 var len = this.pendingTotal;
46837 var bytes = this._delta8;
46838 var k = bytes - ((len + this.padLength) % bytes);
46839 var res = new Array(k + this.padLength);
46840 res[0] = 0x80;
46841 for (var i = 1; i < k; i++)
46842 res[i] = 0;
46843
46844 // Append length
46845 len <<= 3;
46846 if (this.endian === 'big') {
46847 for (var t = 8; t < this.padLength; t++)
46848 res[i++] = 0;
46849
46850 res[i++] = 0;
46851 res[i++] = 0;
46852 res[i++] = 0;
46853 res[i++] = 0;
46854 res[i++] = (len >>> 24) & 0xff;
46855 res[i++] = (len >>> 16) & 0xff;
46856 res[i++] = (len >>> 8) & 0xff;
46857 res[i++] = len & 0xff;
ebd8d4e8 46858 } else {
8b095871
IC
46859 res[i++] = len & 0xff;
46860 res[i++] = (len >>> 8) & 0xff;
46861 res[i++] = (len >>> 16) & 0xff;
46862 res[i++] = (len >>> 24) & 0xff;
46863 res[i++] = 0;
46864 res[i++] = 0;
46865 res[i++] = 0;
46866 res[i++] = 0;
ebd8d4e8 46867
8b095871
IC
46868 for (var t = 8; t < this.padLength; t++)
46869 res[i++] = 0;
ebd8d4e8
IC
46870 }
46871
8b095871
IC
46872 return res;
46873};
ebd8d4e8 46874
8b095871
IC
46875},{"../hash":57}],59:[function(require,module,exports){
46876var hmac = exports;
ebd8d4e8 46877
8b095871
IC
46878var hash = require('../hash');
46879var utils = hash.utils;
46880var assert = utils.assert;
ebd8d4e8 46881
8b095871
IC
46882function Hmac(hash, key, enc) {
46883 if (!(this instanceof Hmac))
46884 return new Hmac(hash, key, enc);
46885 this.Hash = hash;
46886 this.blockSize = hash.blockSize / 8;
46887 this.outSize = hash.outSize / 8;
46888 this.inner = null;
46889 this.outer = null;
ebd8d4e8 46890
8b095871 46891 this._init(utils.toArray(key, enc));
ebd8d4e8 46892}
8b095871 46893module.exports = Hmac;
ebd8d4e8 46894
8b095871
IC
46895Hmac.prototype._init = function init(key) {
46896 // Shorten key, if needed
46897 if (key.length > this.blockSize)
46898 key = new this.Hash().update(key).digest();
46899 assert(key.length <= this.blockSize);
ebd8d4e8 46900
8b095871
IC
46901 // Add padding to key
46902 for (var i = key.length; i < this.blockSize; i++)
46903 key.push(0);
ab78acc6 46904
8b095871
IC
46905 for (var i = 0; i < key.length; i++)
46906 key[i] ^= 0x36;
46907 this.inner = new this.Hash().update(key);
ab78acc6 46908
8b095871
IC
46909 // 0x36 ^ 0x5c = 0x6a
46910 for (var i = 0; i < key.length; i++)
46911 key[i] ^= 0x6a;
46912 this.outer = new this.Hash().update(key);
46913};
ebd8d4e8 46914
8b095871
IC
46915Hmac.prototype.update = function update(msg, enc) {
46916 this.inner.update(msg, enc);
46917 return this;
46918};
ab78acc6 46919
8b095871
IC
46920Hmac.prototype.digest = function digest(enc) {
46921 this.outer.update(this.inner.digest());
46922 return this.outer.digest(enc);
46923};
ab78acc6 46924
8b095871
IC
46925},{"../hash":57}],60:[function(require,module,exports){
46926var hash = require('../hash');
46927var utils = hash.utils;
46928
46929var rotl32 = utils.rotl32;
46930var sum32 = utils.sum32;
46931var sum32_3 = utils.sum32_3;
46932var sum32_4 = utils.sum32_4;
46933var BlockHash = hash.common.BlockHash;
46934
46935function RIPEMD160() {
46936 if (!(this instanceof RIPEMD160))
46937 return new RIPEMD160();
46938
46939 BlockHash.call(this);
46940
46941 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
46942 this.endian = 'little';
46943}
46944utils.inherits(RIPEMD160, BlockHash);
46945exports.ripemd160 = RIPEMD160;
46946
46947RIPEMD160.blockSize = 512;
46948RIPEMD160.outSize = 160;
46949RIPEMD160.hmacStrength = 192;
46950RIPEMD160.padLength = 64;
46951
46952RIPEMD160.prototype._update = function update(msg, start) {
46953 var A = this.h[0];
46954 var B = this.h[1];
46955 var C = this.h[2];
46956 var D = this.h[3];
46957 var E = this.h[4];
46958 var Ah = A;
46959 var Bh = B;
46960 var Ch = C;
46961 var Dh = D;
46962 var Eh = E;
46963 for (var j = 0; j < 80; j++) {
46964 var T = sum32(
46965 rotl32(
46966 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
46967 s[j]),
46968 E);
46969 A = E;
46970 E = D;
46971 D = rotl32(C, 10);
46972 C = B;
46973 B = T;
46974 T = sum32(
46975 rotl32(
46976 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
46977 sh[j]),
46978 Eh);
46979 Ah = Eh;
46980 Eh = Dh;
46981 Dh = rotl32(Ch, 10);
46982 Ch = Bh;
46983 Bh = T;
46984 }
46985 T = sum32_3(this.h[1], C, Dh);
46986 this.h[1] = sum32_3(this.h[2], D, Eh);
46987 this.h[2] = sum32_3(this.h[3], E, Ah);
46988 this.h[3] = sum32_3(this.h[4], A, Bh);
46989 this.h[4] = sum32_3(this.h[0], B, Ch);
46990 this.h[0] = T;
46991};
ebd8d4e8 46992
8b095871
IC
46993RIPEMD160.prototype._digest = function digest(enc) {
46994 if (enc === 'hex')
46995 return utils.toHex32(this.h, 'little');
46996 else
46997 return utils.split32(this.h, 'little');
46998};
ebd8d4e8 46999
8b095871
IC
47000function f(j, x, y, z) {
47001 if (j <= 15)
47002 return x ^ y ^ z;
47003 else if (j <= 31)
47004 return (x & y) | ((~x) & z);
47005 else if (j <= 47)
47006 return (x | (~y)) ^ z;
47007 else if (j <= 63)
47008 return (x & z) | (y & (~z));
47009 else
47010 return x ^ (y | (~z));
47011}
47012
47013function K(j) {
47014 if (j <= 15)
47015 return 0x00000000;
47016 else if (j <= 31)
47017 return 0x5a827999;
47018 else if (j <= 47)
47019 return 0x6ed9eba1;
47020 else if (j <= 63)
47021 return 0x8f1bbcdc;
47022 else
47023 return 0xa953fd4e;
47024}
47025
47026function Kh(j) {
47027 if (j <= 15)
47028 return 0x50a28be6;
47029 else if (j <= 31)
47030 return 0x5c4dd124;
47031 else if (j <= 47)
47032 return 0x6d703ef3;
47033 else if (j <= 63)
47034 return 0x7a6d76e9;
47035 else
47036 return 0x00000000;
47037}
ebd8d4e8 47038
8b095871
IC
47039var r = [
47040 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
47041 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
47042 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
47043 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
47044 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
47045];
ebd8d4e8 47046
8b095871
IC
47047var rh = [
47048 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
47049 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
47050 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
47051 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
47052 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
47053];
ebd8d4e8 47054
8b095871
IC
47055var s = [
47056 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
47057 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
47058 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
47059 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
47060 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
47061];
ebd8d4e8 47062
8b095871
IC
47063var sh = [
47064 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
47065 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
47066 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
47067 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
47068 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
47069];
ebd8d4e8 47070
8b095871
IC
47071},{"../hash":57}],61:[function(require,module,exports){
47072var hash = require('../hash');
47073var utils = hash.utils;
47074var assert = utils.assert;
47075
47076var rotr32 = utils.rotr32;
47077var rotl32 = utils.rotl32;
47078var sum32 = utils.sum32;
47079var sum32_4 = utils.sum32_4;
47080var sum32_5 = utils.sum32_5;
47081var rotr64_hi = utils.rotr64_hi;
47082var rotr64_lo = utils.rotr64_lo;
47083var shr64_hi = utils.shr64_hi;
47084var shr64_lo = utils.shr64_lo;
47085var sum64 = utils.sum64;
47086var sum64_hi = utils.sum64_hi;
47087var sum64_lo = utils.sum64_lo;
47088var sum64_4_hi = utils.sum64_4_hi;
47089var sum64_4_lo = utils.sum64_4_lo;
47090var sum64_5_hi = utils.sum64_5_hi;
47091var sum64_5_lo = utils.sum64_5_lo;
47092var BlockHash = hash.common.BlockHash;
47093
47094var sha256_K = [
47095 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
47096 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
47097 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
47098 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
47099 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
47100 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
47101 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
47102 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
47103 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
47104 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
47105 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
47106 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
47107 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
47108 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
47109 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
47110 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
47111];
ebd8d4e8 47112
8b095871
IC
47113var sha512_K = [
47114 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
47115 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
47116 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
47117 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
47118 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
47119 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
47120 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
47121 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
47122 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
47123 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
47124 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
47125 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
47126 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
47127 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
47128 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
47129 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
47130 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
47131 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
47132 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
47133 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
47134 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
47135 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
47136 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
47137 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
47138 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
47139 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
47140 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
47141 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
47142 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
47143 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
47144 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
47145 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
47146 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
47147 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
47148 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
47149 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
47150 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
47151 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
47152 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
47153 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
47154];
ebd8d4e8 47155
8b095871
IC
47156var sha1_K = [
47157 0x5A827999, 0x6ED9EBA1,
47158 0x8F1BBCDC, 0xCA62C1D6
47159];
ebd8d4e8 47160
8b095871
IC
47161function SHA256() {
47162 if (!(this instanceof SHA256))
47163 return new SHA256();
47164
47165 BlockHash.call(this);
47166 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
47167 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
47168 this.k = sha256_K;
47169 this.W = new Array(64);
47170}
47171utils.inherits(SHA256, BlockHash);
47172exports.sha256 = SHA256;
47173
47174SHA256.blockSize = 512;
47175SHA256.outSize = 256;
47176SHA256.hmacStrength = 192;
47177SHA256.padLength = 64;
47178
47179SHA256.prototype._update = function _update(msg, start) {
47180 var W = this.W;
47181
47182 for (var i = 0; i < 16; i++)
47183 W[i] = msg[start + i];
47184 for (; i < W.length; i++)
47185 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
47186
47187 var a = this.h[0];
47188 var b = this.h[1];
47189 var c = this.h[2];
47190 var d = this.h[3];
47191 var e = this.h[4];
47192 var f = this.h[5];
47193 var g = this.h[6];
47194 var h = this.h[7];
47195
47196 assert(this.k.length === W.length);
47197 for (var i = 0; i < W.length; i++) {
47198 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
47199 var T2 = sum32(s0_256(a), maj32(a, b, c));
47200 h = g;
47201 g = f;
47202 f = e;
47203 e = sum32(d, T1);
47204 d = c;
47205 c = b;
47206 b = a;
47207 a = sum32(T1, T2);
47208 }
47209
47210 this.h[0] = sum32(this.h[0], a);
47211 this.h[1] = sum32(this.h[1], b);
47212 this.h[2] = sum32(this.h[2], c);
47213 this.h[3] = sum32(this.h[3], d);
47214 this.h[4] = sum32(this.h[4], e);
47215 this.h[5] = sum32(this.h[5], f);
47216 this.h[6] = sum32(this.h[6], g);
47217 this.h[7] = sum32(this.h[7], h);
47218};
ebd8d4e8 47219
8b095871
IC
47220SHA256.prototype._digest = function digest(enc) {
47221 if (enc === 'hex')
47222 return utils.toHex32(this.h, 'big');
47223 else
47224 return utils.split32(this.h, 'big');
47225};
ebd8d4e8 47226
8b095871
IC
47227function SHA224() {
47228 if (!(this instanceof SHA224))
47229 return new SHA224();
ebd8d4e8 47230
8b095871
IC
47231 SHA256.call(this);
47232 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
47233 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
47234}
47235utils.inherits(SHA224, SHA256);
47236exports.sha224 = SHA224;
ebd8d4e8 47237
8b095871
IC
47238SHA224.blockSize = 512;
47239SHA224.outSize = 224;
47240SHA224.hmacStrength = 192;
47241SHA224.padLength = 64;
ebd8d4e8 47242
8b095871
IC
47243SHA224.prototype._digest = function digest(enc) {
47244 // Just truncate output
47245 if (enc === 'hex')
47246 return utils.toHex32(this.h.slice(0, 7), 'big');
47247 else
47248 return utils.split32(this.h.slice(0, 7), 'big');
47249};
47250
47251function SHA512() {
47252 if (!(this instanceof SHA512))
47253 return new SHA512();
47254
47255 BlockHash.call(this);
47256 this.h = [ 0x6a09e667, 0xf3bcc908,
47257 0xbb67ae85, 0x84caa73b,
47258 0x3c6ef372, 0xfe94f82b,
47259 0xa54ff53a, 0x5f1d36f1,
47260 0x510e527f, 0xade682d1,
47261 0x9b05688c, 0x2b3e6c1f,
47262 0x1f83d9ab, 0xfb41bd6b,
47263 0x5be0cd19, 0x137e2179 ];
47264 this.k = sha512_K;
47265 this.W = new Array(160);
47266}
47267utils.inherits(SHA512, BlockHash);
47268exports.sha512 = SHA512;
47269
47270SHA512.blockSize = 1024;
47271SHA512.outSize = 512;
47272SHA512.hmacStrength = 192;
47273SHA512.padLength = 128;
47274
47275SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
47276 var W = this.W;
47277
47278 // 32 x 32bit words
47279 for (var i = 0; i < 32; i++)
47280 W[i] = msg[start + i];
47281 for (; i < W.length; i += 2) {
47282 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
47283 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
47284 var c1_hi = W[i - 14]; // i - 7
47285 var c1_lo = W[i - 13];
47286 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
47287 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
47288 var c3_hi = W[i - 32]; // i - 16
47289 var c3_lo = W[i - 31];
47290
47291 W[i] = sum64_4_hi(c0_hi, c0_lo,
47292 c1_hi, c1_lo,
47293 c2_hi, c2_lo,
47294 c3_hi, c3_lo);
47295 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
47296 c1_hi, c1_lo,
47297 c2_hi, c2_lo,
47298 c3_hi, c3_lo);
ebd8d4e8 47299 }
8b095871
IC
47300};
47301
47302SHA512.prototype._update = function _update(msg, start) {
47303 this._prepareBlock(msg, start);
47304
47305 var W = this.W;
47306
47307 var ah = this.h[0];
47308 var al = this.h[1];
47309 var bh = this.h[2];
47310 var bl = this.h[3];
47311 var ch = this.h[4];
47312 var cl = this.h[5];
47313 var dh = this.h[6];
47314 var dl = this.h[7];
47315 var eh = this.h[8];
47316 var el = this.h[9];
47317 var fh = this.h[10];
47318 var fl = this.h[11];
47319 var gh = this.h[12];
47320 var gl = this.h[13];
47321 var hh = this.h[14];
47322 var hl = this.h[15];
47323
47324 assert(this.k.length === W.length);
47325 for (var i = 0; i < W.length; i += 2) {
47326 var c0_hi = hh;
47327 var c0_lo = hl;
47328 var c1_hi = s1_512_hi(eh, el);
47329 var c1_lo = s1_512_lo(eh, el);
47330 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
47331 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
47332 var c3_hi = this.k[i];
47333 var c3_lo = this.k[i + 1];
47334 var c4_hi = W[i];
47335 var c4_lo = W[i + 1];
47336
47337 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
47338 c1_hi, c1_lo,
47339 c2_hi, c2_lo,
47340 c3_hi, c3_lo,
47341 c4_hi, c4_lo);
47342 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
47343 c1_hi, c1_lo,
47344 c2_hi, c2_lo,
47345 c3_hi, c3_lo,
47346 c4_hi, c4_lo);
47347
47348 var c0_hi = s0_512_hi(ah, al);
47349 var c0_lo = s0_512_lo(ah, al);
47350 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
47351 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
47352
47353 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
47354 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
47355
47356 hh = gh;
47357 hl = gl;
47358
47359 gh = fh;
47360 gl = fl;
47361
47362 fh = eh;
47363 fl = el;
47364
47365 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
47366 el = sum64_lo(dl, dl, T1_hi, T1_lo);
47367
47368 dh = ch;
47369 dl = cl;
47370
47371 ch = bh;
47372 cl = bl;
47373
47374 bh = ah;
47375 bl = al;
47376
47377 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
47378 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
47379 }
47380
47381 sum64(this.h, 0, ah, al);
47382 sum64(this.h, 2, bh, bl);
47383 sum64(this.h, 4, ch, cl);
47384 sum64(this.h, 6, dh, dl);
47385 sum64(this.h, 8, eh, el);
47386 sum64(this.h, 10, fh, fl);
47387 sum64(this.h, 12, gh, gl);
47388 sum64(this.h, 14, hh, hl);
47389};
47390
47391SHA512.prototype._digest = function digest(enc) {
47392 if (enc === 'hex')
47393 return utils.toHex32(this.h, 'big');
47394 else
47395 return utils.split32(this.h, 'big');
47396};
47397
47398function SHA384() {
47399 if (!(this instanceof SHA384))
47400 return new SHA384();
47401
47402 SHA512.call(this);
47403 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
47404 0x629a292a, 0x367cd507,
47405 0x9159015a, 0x3070dd17,
47406 0x152fecd8, 0xf70e5939,
47407 0x67332667, 0xffc00b31,
47408 0x8eb44a87, 0x68581511,
47409 0xdb0c2e0d, 0x64f98fa7,
47410 0x47b5481d, 0xbefa4fa4 ];
47411}
47412utils.inherits(SHA384, SHA512);
47413exports.sha384 = SHA384;
47414
47415SHA384.blockSize = 1024;
47416SHA384.outSize = 384;
47417SHA384.hmacStrength = 192;
47418SHA384.padLength = 128;
47419
47420SHA384.prototype._digest = function digest(enc) {
47421 if (enc === 'hex')
47422 return utils.toHex32(this.h.slice(0, 12), 'big');
47423 else
47424 return utils.split32(this.h.slice(0, 12), 'big');
47425};
ebd8d4e8 47426
8b095871
IC
47427function SHA1() {
47428 if (!(this instanceof SHA1))
47429 return new SHA1();
ebd8d4e8 47430
8b095871
IC
47431 BlockHash.call(this);
47432 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
47433 0x10325476, 0xc3d2e1f0 ];
47434 this.W = new Array(80);
47435}
ebd8d4e8 47436
8b095871
IC
47437utils.inherits(SHA1, BlockHash);
47438exports.sha1 = SHA1;
ebd8d4e8 47439
8b095871
IC
47440SHA1.blockSize = 512;
47441SHA1.outSize = 160;
47442SHA1.hmacStrength = 80;
47443SHA1.padLength = 64;
ebd8d4e8 47444
8b095871
IC
47445SHA1.prototype._update = function _update(msg, start) {
47446 var W = this.W;
ebd8d4e8 47447
8b095871
IC
47448 for (var i = 0; i < 16; i++)
47449 W[i] = msg[start + i];
ebd8d4e8 47450
8b095871
IC
47451 for(; i < W.length; i++)
47452 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
ebd8d4e8 47453
8b095871
IC
47454 var a = this.h[0];
47455 var b = this.h[1];
47456 var c = this.h[2];
47457 var d = this.h[3];
47458 var e = this.h[4];
ebd8d4e8 47459
8b095871
IC
47460 for (var i = 0; i < W.length; i++) {
47461 var s = ~~(i / 20);
47462 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
47463 e = d;
47464 d = c;
47465 c = rotl32(b, 30);
47466 b = a;
47467 a = t;
ebd8d4e8
IC
47468 }
47469
8b095871
IC
47470 this.h[0] = sum32(this.h[0], a);
47471 this.h[1] = sum32(this.h[1], b);
47472 this.h[2] = sum32(this.h[2], c);
47473 this.h[3] = sum32(this.h[3], d);
47474 this.h[4] = sum32(this.h[4], e);
47475};
ebd8d4e8 47476
8b095871
IC
47477SHA1.prototype._digest = function digest(enc) {
47478 if (enc === 'hex')
47479 return utils.toHex32(this.h, 'big');
47480 else
47481 return utils.split32(this.h, 'big');
47482};
47483
47484function ch32(x, y, z) {
47485 return (x & y) ^ ((~x) & z);
ebd8d4e8
IC
47486}
47487
8b095871
IC
47488function maj32(x, y, z) {
47489 return (x & y) ^ (x & z) ^ (y & z);
ebd8d4e8
IC
47490}
47491
8b095871
IC
47492function p32(x, y, z) {
47493 return x ^ y ^ z;
47494}
ebd8d4e8 47495
8b095871
IC
47496function s0_256(x) {
47497 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
47498}
ebd8d4e8 47499
8b095871
IC
47500function s1_256(x) {
47501 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
ab78acc6
IC
47502}
47503
8b095871
IC
47504function g0_256(x) {
47505 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
47506}
ab78acc6 47507
8b095871
IC
47508function g1_256(x) {
47509 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
47510}
ab78acc6 47511
8b095871
IC
47512function ft_1(s, x, y, z) {
47513 if (s === 0)
47514 return ch32(x, y, z);
47515 if (s === 1 || s === 3)
47516 return p32(x, y, z);
47517 if (s === 2)
47518 return maj32(x, y, z);
47519}
ebd8d4e8 47520
8b095871
IC
47521function ch64_hi(xh, xl, yh, yl, zh, zl) {
47522 var r = (xh & yh) ^ ((~xh) & zh);
47523 if (r < 0)
47524 r += 0x100000000;
47525 return r;
47526}
ebd8d4e8 47527
8b095871
IC
47528function ch64_lo(xh, xl, yh, yl, zh, zl) {
47529 var r = (xl & yl) ^ ((~xl) & zl);
47530 if (r < 0)
47531 r += 0x100000000;
47532 return r;
ebd8d4e8
IC
47533}
47534
8b095871
IC
47535function maj64_hi(xh, xl, yh, yl, zh, zl) {
47536 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
47537 if (r < 0)
47538 r += 0x100000000;
47539 return r;
47540}
ebd8d4e8 47541
8b095871
IC
47542function maj64_lo(xh, xl, yh, yl, zh, zl) {
47543 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
47544 if (r < 0)
47545 r += 0x100000000;
47546 return r;
47547}
ebd8d4e8 47548
8b095871
IC
47549function s0_512_hi(xh, xl) {
47550 var c0_hi = rotr64_hi(xh, xl, 28);
47551 var c1_hi = rotr64_hi(xl, xh, 2); // 34
47552 var c2_hi = rotr64_hi(xl, xh, 7); // 39
47553
47554 var r = c0_hi ^ c1_hi ^ c2_hi;
47555 if (r < 0)
47556 r += 0x100000000;
47557 return r;
ebd8d4e8
IC
47558}
47559
8b095871
IC
47560function s0_512_lo(xh, xl) {
47561 var c0_lo = rotr64_lo(xh, xl, 28);
47562 var c1_lo = rotr64_lo(xl, xh, 2); // 34
47563 var c2_lo = rotr64_lo(xl, xh, 7); // 39
ab78acc6 47564
8b095871
IC
47565 var r = c0_lo ^ c1_lo ^ c2_lo;
47566 if (r < 0)
47567 r += 0x100000000;
47568 return r;
47569}
ebd8d4e8 47570
8b095871
IC
47571function s1_512_hi(xh, xl) {
47572 var c0_hi = rotr64_hi(xh, xl, 14);
47573 var c1_hi = rotr64_hi(xh, xl, 18);
47574 var c2_hi = rotr64_hi(xl, xh, 9); // 41
ebd8d4e8 47575
8b095871
IC
47576 var r = c0_hi ^ c1_hi ^ c2_hi;
47577 if (r < 0)
47578 r += 0x100000000;
47579 return r;
ebd8d4e8
IC
47580}
47581
8b095871
IC
47582function s1_512_lo(xh, xl) {
47583 var c0_lo = rotr64_lo(xh, xl, 14);
47584 var c1_lo = rotr64_lo(xh, xl, 18);
47585 var c2_lo = rotr64_lo(xl, xh, 9); // 41
47586
47587 var r = c0_lo ^ c1_lo ^ c2_lo;
47588 if (r < 0)
47589 r += 0x100000000;
47590 return r;
ebd8d4e8
IC
47591}
47592
8b095871
IC
47593function g0_512_hi(xh, xl) {
47594 var c0_hi = rotr64_hi(xh, xl, 1);
47595 var c1_hi = rotr64_hi(xh, xl, 8);
47596 var c2_hi = shr64_hi(xh, xl, 7);
ebd8d4e8 47597
8b095871
IC
47598 var r = c0_hi ^ c1_hi ^ c2_hi;
47599 if (r < 0)
47600 r += 0x100000000;
47601 return r;
47602}
47603
47604function g0_512_lo(xh, xl) {
47605 var c0_lo = rotr64_lo(xh, xl, 1);
47606 var c1_lo = rotr64_lo(xh, xl, 8);
47607 var c2_lo = shr64_lo(xh, xl, 7);
47608
47609 var r = c0_lo ^ c1_lo ^ c2_lo;
47610 if (r < 0)
47611 r += 0x100000000;
47612 return r;
47613}
47614
47615function g1_512_hi(xh, xl) {
47616 var c0_hi = rotr64_hi(xh, xl, 19);
47617 var c1_hi = rotr64_hi(xl, xh, 29); // 61
47618 var c2_hi = shr64_hi(xh, xl, 6);
47619
47620 var r = c0_hi ^ c1_hi ^ c2_hi;
47621 if (r < 0)
47622 r += 0x100000000;
47623 return r;
47624}
47625
47626function g1_512_lo(xh, xl) {
47627 var c0_lo = rotr64_lo(xh, xl, 19);
47628 var c1_lo = rotr64_lo(xl, xh, 29); // 61
47629 var c2_lo = shr64_lo(xh, xl, 6);
47630
47631 var r = c0_lo ^ c1_lo ^ c2_lo;
47632 if (r < 0)
47633 r += 0x100000000;
47634 return r;
47635}
47636
47637},{"../hash":57}],62:[function(require,module,exports){
47638var utils = exports;
47639var inherits = require('inherits');
47640
47641function toArray(msg, enc) {
47642 if (Array.isArray(msg))
47643 return msg.slice();
47644 if (!msg)
47645 return [];
47646 var res = [];
47647 if (typeof msg === 'string') {
47648 if (!enc) {
47649 for (var i = 0; i < msg.length; i++) {
47650 var c = msg.charCodeAt(i);
47651 var hi = c >> 8;
47652 var lo = c & 0xff;
47653 if (hi)
47654 res.push(hi, lo);
47655 else
47656 res.push(lo);
47657 }
47658 } else if (enc === 'hex') {
47659 msg = msg.replace(/[^a-z0-9]+/ig, '');
47660 if (msg.length % 2 !== 0)
47661 msg = '0' + msg;
47662 for (var i = 0; i < msg.length; i += 2)
47663 res.push(parseInt(msg[i] + msg[i + 1], 16));
47664 }
47665 } else {
47666 for (var i = 0; i < msg.length; i++)
47667 res[i] = msg[i] | 0;
ebd8d4e8 47668 }
8b095871 47669 return res;
ebd8d4e8 47670}
8b095871 47671utils.toArray = toArray;
ebd8d4e8 47672
8b095871
IC
47673function toHex(msg) {
47674 var res = '';
47675 for (var i = 0; i < msg.length; i++)
47676 res += zero2(msg[i].toString(16));
47677 return res;
47678}
47679utils.toHex = toHex;
ebd8d4e8 47680
8b095871
IC
47681function htonl(w) {
47682 var res = (w >>> 24) |
47683 ((w >>> 8) & 0xff00) |
47684 ((w << 8) & 0xff0000) |
47685 ((w & 0xff) << 24);
47686 return res >>> 0;
47687}
47688utils.htonl = htonl;
ebd8d4e8 47689
8b095871
IC
47690function toHex32(msg, endian) {
47691 var res = '';
47692 for (var i = 0; i < msg.length; i++) {
47693 var w = msg[i];
47694 if (endian === 'little')
47695 w = htonl(w);
47696 res += zero8(w.toString(16));
47697 }
47698 return res;
47699}
47700utils.toHex32 = toHex32;
ebd8d4e8 47701
8b095871
IC
47702function zero2(word) {
47703 if (word.length === 1)
47704 return '0' + word;
47705 else
47706 return word;
47707}
47708utils.zero2 = zero2;
47709
47710function zero8(word) {
47711 if (word.length === 7)
47712 return '0' + word;
47713 else if (word.length === 6)
47714 return '00' + word;
47715 else if (word.length === 5)
47716 return '000' + word;
47717 else if (word.length === 4)
47718 return '0000' + word;
47719 else if (word.length === 3)
47720 return '00000' + word;
47721 else if (word.length === 2)
47722 return '000000' + word;
47723 else if (word.length === 1)
47724 return '0000000' + word;
47725 else
47726 return word;
47727}
47728utils.zero8 = zero8;
47729
47730function join32(msg, start, end, endian) {
47731 var len = end - start;
47732 assert(len % 4 === 0);
47733 var res = new Array(len / 4);
47734 for (var i = 0, k = start; i < res.length; i++, k += 4) {
47735 var w;
47736 if (endian === 'big')
47737 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
47738 else
47739 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
47740 res[i] = w >>> 0;
47741 }
47742 return res;
47743}
47744utils.join32 = join32;
47745
47746function split32(msg, endian) {
47747 var res = new Array(msg.length * 4);
47748 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
47749 var m = msg[i];
47750 if (endian === 'big') {
47751 res[k] = m >>> 24;
47752 res[k + 1] = (m >>> 16) & 0xff;
47753 res[k + 2] = (m >>> 8) & 0xff;
47754 res[k + 3] = m & 0xff;
47755 } else {
47756 res[k + 3] = m >>> 24;
47757 res[k + 2] = (m >>> 16) & 0xff;
47758 res[k + 1] = (m >>> 8) & 0xff;
47759 res[k] = m & 0xff;
47760 }
ebd8d4e8 47761 }
8b095871 47762 return res;
ebd8d4e8 47763}
8b095871 47764utils.split32 = split32;
ebd8d4e8 47765
8b095871
IC
47766function rotr32(w, b) {
47767 return (w >>> b) | (w << (32 - b));
47768}
47769utils.rotr32 = rotr32;
ebd8d4e8 47770
8b095871
IC
47771function rotl32(w, b) {
47772 return (w << b) | (w >>> (32 - b));
47773}
47774utils.rotl32 = rotl32;
ebd8d4e8 47775
8b095871
IC
47776function sum32(a, b) {
47777 return (a + b) >>> 0;
47778}
47779utils.sum32 = sum32;
ebd8d4e8 47780
8b095871
IC
47781function sum32_3(a, b, c) {
47782 return (a + b + c) >>> 0;
47783}
47784utils.sum32_3 = sum32_3;
ebd8d4e8 47785
8b095871
IC
47786function sum32_4(a, b, c, d) {
47787 return (a + b + c + d) >>> 0;
47788}
47789utils.sum32_4 = sum32_4;
ebd8d4e8 47790
8b095871
IC
47791function sum32_5(a, b, c, d, e) {
47792 return (a + b + c + d + e) >>> 0;
47793}
47794utils.sum32_5 = sum32_5;
ebd8d4e8 47795
8b095871
IC
47796function assert(cond, msg) {
47797 if (!cond)
47798 throw new Error(msg || 'Assertion failed');
47799}
47800utils.assert = assert;
ab78acc6 47801
8b095871 47802utils.inherits = inherits;
ab78acc6 47803
8b095871
IC
47804function sum64(buf, pos, ah, al) {
47805 var bh = buf[pos];
47806 var bl = buf[pos + 1];
ab78acc6 47807
8b095871
IC
47808 var lo = (al + bl) >>> 0;
47809 var hi = (lo < al ? 1 : 0) + ah + bh;
47810 buf[pos] = hi >>> 0;
47811 buf[pos + 1] = lo;
47812}
47813exports.sum64 = sum64;
ebd8d4e8 47814
8b095871
IC
47815function sum64_hi(ah, al, bh, bl) {
47816 var lo = (al + bl) >>> 0;
47817 var hi = (lo < al ? 1 : 0) + ah + bh;
47818 return hi >>> 0;
47819};
47820exports.sum64_hi = sum64_hi;
ebd8d4e8 47821
8b095871
IC
47822function sum64_lo(ah, al, bh, bl) {
47823 var lo = al + bl;
47824 return lo >>> 0;
47825};
47826exports.sum64_lo = sum64_lo;
47827
47828function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
47829 var carry = 0;
47830 var lo = al;
47831 lo = (lo + bl) >>> 0;
47832 carry += lo < al ? 1 : 0;
47833 lo = (lo + cl) >>> 0;
47834 carry += lo < cl ? 1 : 0;
47835 lo = (lo + dl) >>> 0;
47836 carry += lo < dl ? 1 : 0;
47837
47838 var hi = ah + bh + ch + dh + carry;
47839 return hi >>> 0;
47840};
47841exports.sum64_4_hi = sum64_4_hi;
ebd8d4e8 47842
8b095871
IC
47843function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
47844 var lo = al + bl + cl + dl;
47845 return lo >>> 0;
47846};
47847exports.sum64_4_lo = sum64_4_lo;
47848
47849function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
47850 var carry = 0;
47851 var lo = al;
47852 lo = (lo + bl) >>> 0;
47853 carry += lo < al ? 1 : 0;
47854 lo = (lo + cl) >>> 0;
47855 carry += lo < cl ? 1 : 0;
47856 lo = (lo + dl) >>> 0;
47857 carry += lo < dl ? 1 : 0;
47858 lo = (lo + el) >>> 0;
47859 carry += lo < el ? 1 : 0;
47860
47861 var hi = ah + bh + ch + dh + eh + carry;
47862 return hi >>> 0;
47863};
47864exports.sum64_5_hi = sum64_5_hi;
47865
47866function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
47867 var lo = al + bl + cl + dl + el;
47868
47869 return lo >>> 0;
47870};
47871exports.sum64_5_lo = sum64_5_lo;
47872
47873function rotr64_hi(ah, al, num) {
47874 var r = (al << (32 - num)) | (ah >>> num);
47875 return r >>> 0;
47876};
47877exports.rotr64_hi = rotr64_hi;
47878
47879function rotr64_lo(ah, al, num) {
47880 var r = (ah << (32 - num)) | (al >>> num);
47881 return r >>> 0;
47882};
47883exports.rotr64_lo = rotr64_lo;
47884
47885function shr64_hi(ah, al, num) {
47886 return ah >>> num;
47887};
47888exports.shr64_hi = shr64_hi;
47889
47890function shr64_lo(ah, al, num) {
47891 var r = (ah << (32 - num)) | (al >>> num);
47892 return r >>> 0;
47893};
47894exports.shr64_lo = shr64_lo;
47895
47896},{"inherits":63}],63:[function(require,module,exports){
47897arguments[4][9][0].apply(exports,arguments)
47898},{"dup":9}],64:[function(require,module,exports){
47899/**
47900 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
47901 * @param {String} str the string input value
47902 * @return {Boolean} a boolean if it is or is not hex prefixed
47903 * @throws if the str input is not a string
47904 */
47905module.exports = function isHexPrefixed(str) {
47906 if (typeof str !== 'string') {
47907 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
47908 }
47909
47910 return str.slice(0, 2) === '0x';
ebd8d4e8
IC
47911}
47912
8b095871
IC
47913},{}],65:[function(require,module,exports){
47914'use strict'
47915module.exports = require('./lib/api')(require('./lib/keccak'))
47916
47917},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
47918'use strict'
47919var createKeccak = require('./keccak')
47920var createShake = require('./shake')
47921
47922module.exports = function (KeccakState) {
47923 var Keccak = createKeccak(KeccakState)
47924 var Shake = createShake(KeccakState)
47925
47926 return function (algorithm, options) {
47927 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
47928 switch (hash) {
47929 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
47930 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
47931 case 'keccak384': return new Keccak(832, 768, null, 384, options)
47932 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
47933
47934 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
47935 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
47936 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
47937 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
47938
47939 case 'shake128': return new Shake(1344, 256, 0x1f, options)
47940 case 'shake256': return new Shake(1088, 512, 0x1f, options)
47941
47942 default: throw new Error('Invald algorithm: ' + algorithm)
47943 }
47944 }
47945}
47946
47947},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
ebd8d4e8 47948(function (Buffer){
8b095871
IC
47949'use strict'
47950var Transform = require('stream').Transform
47951var inherits = require('inherits')
47952
47953module.exports = function (KeccakState) {
47954 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
47955 Transform.call(this, options)
47956
47957 this._rate = rate
47958 this._capacity = capacity
47959 this._delimitedSuffix = delimitedSuffix
47960 this._hashBitLength = hashBitLength
47961 this._options = options
47962
47963 this._state = new KeccakState()
47964 this._state.initialize(rate, capacity)
47965 this._finalized = false
47966 }
47967
47968 inherits(Keccak, Transform)
47969
47970 Keccak.prototype._transform = function (chunk, encoding, callback) {
47971 var error = null
47972 try {
47973 this.update(chunk, encoding)
47974 } catch (err) {
47975 error = err
47976 }
47977
47978 callback(error)
47979 }
47980
47981 Keccak.prototype._flush = function (callback) {
47982 var error = null
47983 try {
47984 this.push(this.digest())
47985 } catch (err) {
47986 error = err
47987 }
47988
47989 callback(error)
47990 }
47991
47992 Keccak.prototype.update = function (data, encoding) {
47993 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
47994 if (this._finalized) throw new Error('Digest already called')
47995 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
47996
47997 this._state.absorb(data)
47998
47999 return this
48000 }
48001
48002 Keccak.prototype.digest = function (encoding) {
48003 if (this._finalized) throw new Error('Digest already called')
48004 this._finalized = true
48005
48006 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
48007 var digest = this._state.squeeze(this._hashBitLength / 8)
48008 if (encoding !== undefined) digest = digest.toString(encoding)
48009
48010 this._resetState()
48011
48012 return digest
48013 }
48014
48015 // remove result from memory
48016 Keccak.prototype._resetState = function () {
48017 this._state.initialize(this._rate, this._capacity)
48018 return this
48019 }
48020
48021 // because sometimes we need hash right now and little later
48022 Keccak.prototype._clone = function () {
48023 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
48024 this._state.copy(clone._state)
48025 clone._finalized = this._finalized
48026
48027 return clone
48028 }
48029
48030 return Keccak
48031}
48032
48033}).call(this,require("buffer").Buffer)
48034},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
48035(function (Buffer){
48036'use strict'
48037var Transform = require('stream').Transform
48038var inherits = require('inherits')
48039
48040module.exports = function (KeccakState) {
48041 function Shake (rate, capacity, delimitedSuffix, options) {
48042 Transform.call(this, options)
48043
48044 this._rate = rate
48045 this._capacity = capacity
48046 this._delimitedSuffix = delimitedSuffix
48047 this._options = options
48048
48049 this._state = new KeccakState()
48050 this._state.initialize(rate, capacity)
48051 this._finalized = false
48052 }
48053
48054 inherits(Shake, Transform)
48055
48056 Shake.prototype._transform = function (chunk, encoding, callback) {
48057 var error = null
48058 try {
48059 this.update(chunk, encoding)
48060 } catch (err) {
48061 error = err
48062 }
ebd8d4e8 48063
8b095871
IC
48064 callback(error)
48065 }
ebd8d4e8 48066
8b095871 48067 Shake.prototype._flush = function () {}
ebd8d4e8 48068
8b095871
IC
48069 Shake.prototype._read = function (size) {
48070 this.push(this.squeeze(size))
48071 }
ebd8d4e8 48072
8b095871
IC
48073 Shake.prototype.update = function (data, encoding) {
48074 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
48075 if (this._finalized) throw new Error('Squeeze already called')
48076 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
48077
48078 this._state.absorb(data)
48079
48080 return this
48081 }
48082
48083 Shake.prototype.squeeze = function (dataByteLength, encoding) {
48084 if (!this._finalized) {
48085 this._finalized = true
48086 this._state.absorbLastFewBits(this._delimitedSuffix)
ebd8d4e8 48087 }
ebd8d4e8 48088
8b095871
IC
48089 var data = this._state.squeeze(dataByteLength)
48090 if (encoding !== undefined) data = data.toString(encoding)
ebd8d4e8 48091
8b095871
IC
48092 return data
48093 }
ebd8d4e8 48094
8b095871
IC
48095 Shake.prototype._resetState = function () {
48096 this._state.initialize(this._rate, this._capacity)
48097 return this
48098 }
ebd8d4e8 48099
8b095871
IC
48100 Shake.prototype._clone = function () {
48101 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
48102 this._state.copy(clone._state)
48103 clone._finalized = this._finalized
ab78acc6 48104
8b095871
IC
48105 return clone
48106 }
ebd8d4e8 48107
8b095871
IC
48108 return Shake
48109}
ab78acc6 48110
8b095871
IC
48111}).call(this,require("buffer").Buffer)
48112},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
48113'use strict'
48114var P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]
48115
48116exports.p1600 = function (s) {
48117 for (var round = 0; round < 24; ++round) {
48118 // theta
48119 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
48120 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
48121 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
48122 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
48123 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
48124 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
48125 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
48126 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
48127 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
48128 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
48129
48130 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
48131 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
48132 var t1slo0 = s[0] ^ lo
48133 var t1shi0 = s[1] ^ hi
48134 var t1slo5 = s[10] ^ lo
48135 var t1shi5 = s[11] ^ hi
48136 var t1slo10 = s[20] ^ lo
48137 var t1shi10 = s[21] ^ hi
48138 var t1slo15 = s[30] ^ lo
48139 var t1shi15 = s[31] ^ hi
48140 var t1slo20 = s[40] ^ lo
48141 var t1shi20 = s[41] ^ hi
48142 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
48143 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
48144 var t1slo1 = s[2] ^ lo
48145 var t1shi1 = s[3] ^ hi
48146 var t1slo6 = s[12] ^ lo
48147 var t1shi6 = s[13] ^ hi
48148 var t1slo11 = s[22] ^ lo
48149 var t1shi11 = s[23] ^ hi
48150 var t1slo16 = s[32] ^ lo
48151 var t1shi16 = s[33] ^ hi
48152 var t1slo21 = s[42] ^ lo
48153 var t1shi21 = s[43] ^ hi
48154 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
48155 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
48156 var t1slo2 = s[4] ^ lo
48157 var t1shi2 = s[5] ^ hi
48158 var t1slo7 = s[14] ^ lo
48159 var t1shi7 = s[15] ^ hi
48160 var t1slo12 = s[24] ^ lo
48161 var t1shi12 = s[25] ^ hi
48162 var t1slo17 = s[34] ^ lo
48163 var t1shi17 = s[35] ^ hi
48164 var t1slo22 = s[44] ^ lo
48165 var t1shi22 = s[45] ^ hi
48166 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
48167 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
48168 var t1slo3 = s[6] ^ lo
48169 var t1shi3 = s[7] ^ hi
48170 var t1slo8 = s[16] ^ lo
48171 var t1shi8 = s[17] ^ hi
48172 var t1slo13 = s[26] ^ lo
48173 var t1shi13 = s[27] ^ hi
48174 var t1slo18 = s[36] ^ lo
48175 var t1shi18 = s[37] ^ hi
48176 var t1slo23 = s[46] ^ lo
48177 var t1shi23 = s[47] ^ hi
48178 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
48179 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
48180 var t1slo4 = s[8] ^ lo
48181 var t1shi4 = s[9] ^ hi
48182 var t1slo9 = s[18] ^ lo
48183 var t1shi9 = s[19] ^ hi
48184 var t1slo14 = s[28] ^ lo
48185 var t1shi14 = s[29] ^ hi
48186 var t1slo19 = s[38] ^ lo
48187 var t1shi19 = s[39] ^ hi
48188 var t1slo24 = s[48] ^ lo
48189 var t1shi24 = s[49] ^ hi
48190
48191 // rho & pi
48192 var t2slo0 = t1slo0
48193 var t2shi0 = t1shi0
48194 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
48195 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
48196 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
48197 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
48198 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
48199 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
48200 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
48201 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
48202 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
48203 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
48204 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
48205 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
48206 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
48207 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
48208 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
48209 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
48210 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
48211 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
48212 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
48213 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
48214 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
48215 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
48216 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
48217 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
48218 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
48219 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
48220 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
48221 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
48222 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
48223 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
48224 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
48225 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
48226 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
48227 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
48228 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
48229 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
48230 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
48231 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
48232 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
48233 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
48234 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
48235 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
48236 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
48237 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
48238 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
48239 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
48240 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
48241 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
48242
48243 // chi
48244 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
48245 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
48246 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
48247 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
48248 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
48249 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
48250 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
48251 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
48252 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
48253 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
48254 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
48255 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
48256 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
48257 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
48258 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
48259 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
48260 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
48261 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
48262 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
48263 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
48264 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
48265 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
48266 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
48267 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
48268 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
48269 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
48270 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
48271 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
48272 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
48273 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
48274 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
48275 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
48276 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
48277 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
48278 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
48279 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
48280 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
48281 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
48282 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
48283 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
48284 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
48285 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
48286 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
48287 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
48288 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
48289 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
48290 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
48291 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
48292 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
48293 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
48294
48295 // iota
48296 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
48297 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
48298 }
48299}
48300
48301},{}],70:[function(require,module,exports){
48302(function (Buffer){
48303'use strict'
48304var keccakState = require('./keccak-state-unroll')
ebd8d4e8 48305
8b095871
IC
48306function Keccak () {
48307 // much faster than `new Array(50)`
48308 this.state = [
48309 0, 0, 0, 0, 0,
48310 0, 0, 0, 0, 0,
48311 0, 0, 0, 0, 0,
48312 0, 0, 0, 0, 0,
48313 0, 0, 0, 0, 0
48314 ]
ebd8d4e8 48315
8b095871
IC
48316 this.blockSize = null
48317 this.count = 0
48318 this.squeezing = false
48319}
ebd8d4e8 48320
8b095871
IC
48321Keccak.prototype.initialize = function (rate, capacity) {
48322 for (var i = 0; i < 50; ++i) this.state[i] = 0
48323 this.blockSize = rate / 8
48324 this.count = 0
48325 this.squeezing = false
48326}
48327
48328Keccak.prototype.absorb = function (data) {
48329 for (var i = 0; i < data.length; ++i) {
48330 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
48331 this.count += 1
48332 if (this.count === this.blockSize) {
48333 keccakState.p1600(this.state)
48334 this.count = 0
ebd8d4e8
IC
48335 }
48336 }
8b095871 48337}
ebd8d4e8 48338
8b095871
IC
48339Keccak.prototype.absorbLastFewBits = function (bits) {
48340 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
48341 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
48342 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
48343 keccakState.p1600(this.state)
48344 this.count = 0
48345 this.squeezing = true
ebd8d4e8
IC
48346}
48347
8b095871
IC
48348Keccak.prototype.squeeze = function (length) {
48349 if (!this.squeezing) this.absorbLastFewBits(0x01)
ebd8d4e8 48350
8b095871
IC
48351 var output = Buffer.allocUnsafe(length)
48352 for (var i = 0; i < length; ++i) {
48353 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
48354 this.count += 1
48355 if (this.count === this.blockSize) {
48356 keccakState.p1600(this.state)
48357 this.count = 0
ebd8d4e8 48358 }
8b095871 48359 }
ebd8d4e8 48360
8b095871
IC
48361 return output
48362}
ebd8d4e8 48363
8b095871
IC
48364Keccak.prototype.copy = function (dest) {
48365 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
48366 dest.blockSize = this.blockSize
48367 dest.count = this.count
48368 dest.squeezing = this.squeezing
48369}
ebd8d4e8 48370
8b095871 48371module.exports = Keccak
ebd8d4e8 48372
8b095871
IC
48373}).call(this,require("buffer").Buffer)
48374},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
48375(function (Buffer){
48376/*
48377CryptoJS v3.1.2
48378code.google.com/p/crypto-js
48379(c) 2009-2013 by Jeff Mott. All rights reserved.
48380code.google.com/p/crypto-js/wiki/License
48381*/
48382/** @preserve
48383(c) 2012 by Cédric Mesnil. All rights reserved.
ebd8d4e8 48384
8b095871 48385Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
ebd8d4e8 48386
8b095871
IC
48387 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
48388 - 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.
48389
48390THIS 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.
48391*/
48392
48393// constants table
48394var zl = [
48395 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
48396 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
48397 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
48398 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
48399 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
48400]
48401
48402var zr = [
48403 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
48404 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
48405 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
48406 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
48407 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
48408]
48409
48410var sl = [
48411 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
48412 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
48413 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
48414 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
48415 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
48416]
48417
48418var sr = [
48419 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
48420 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
48421 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
48422 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
48423 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
48424]
48425
48426var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
48427var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
48428
48429function bytesToWords (bytes) {
48430 var words = []
48431 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
48432 words[b >>> 5] |= bytes[i] << (24 - b % 32)
48433 }
48434 return words
ebd8d4e8
IC
48435}
48436
8b095871
IC
48437function wordsToBytes (words) {
48438 var bytes = []
48439 for (var b = 0; b < words.length * 32; b += 8) {
48440 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
48441 }
48442 return bytes
ebd8d4e8
IC
48443}
48444
8b095871
IC
48445function processBlock (H, M, offset) {
48446 // swap endian
48447 for (var i = 0; i < 16; i++) {
48448 var offset_i = offset + i
48449 var M_offset_i = M[offset_i]
ebd8d4e8 48450
8b095871
IC
48451 // Swap
48452 M[offset_i] = (
48453 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
48454 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
48455 )
48456 }
ebd8d4e8 48457
8b095871
IC
48458 // Working variables
48459 var al, bl, cl, dl, el
48460 var ar, br, cr, dr, er
48461
48462 ar = al = H[0]
48463 br = bl = H[1]
48464 cr = cl = H[2]
48465 dr = dl = H[3]
48466 er = el = H[4]
48467
48468 // computation
48469 var t
48470 for (i = 0; i < 80; i += 1) {
48471 t = (al + M[offset + zl[i]]) | 0
48472 if (i < 16) {
48473 t += f1(bl, cl, dl) + hl[0]
48474 } else if (i < 32) {
48475 t += f2(bl, cl, dl) + hl[1]
48476 } else if (i < 48) {
48477 t += f3(bl, cl, dl) + hl[2]
48478 } else if (i < 64) {
48479 t += f4(bl, cl, dl) + hl[3]
48480 } else {// if (i<80) {
48481 t += f5(bl, cl, dl) + hl[4]
48482 }
48483 t = t | 0
48484 t = rotl(t, sl[i])
48485 t = (t + el) | 0
48486 al = el
48487 el = dl
48488 dl = rotl(cl, 10)
48489 cl = bl
48490 bl = t
48491
48492 t = (ar + M[offset + zr[i]]) | 0
48493 if (i < 16) {
48494 t += f5(br, cr, dr) + hr[0]
48495 } else if (i < 32) {
48496 t += f4(br, cr, dr) + hr[1]
48497 } else if (i < 48) {
48498 t += f3(br, cr, dr) + hr[2]
48499 } else if (i < 64) {
48500 t += f2(br, cr, dr) + hr[3]
48501 } else {// if (i<80) {
48502 t += f1(br, cr, dr) + hr[4]
48503 }
48504
48505 t = t | 0
48506 t = rotl(t, sr[i])
48507 t = (t + er) | 0
48508 ar = er
48509 er = dr
48510 dr = rotl(cr, 10)
48511 cr = br
48512 br = t
48513 }
48514
48515 // intermediate hash value
48516 t = (H[1] + cl + dr) | 0
48517 H[1] = (H[2] + dl + er) | 0
48518 H[2] = (H[3] + el + ar) | 0
48519 H[3] = (H[4] + al + br) | 0
48520 H[4] = (H[0] + bl + cr) | 0
48521 H[0] = t
ebd8d4e8
IC
48522}
48523
8b095871
IC
48524function f1 (x, y, z) {
48525 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
48526}
48527
8b095871
IC
48528function f2 (x, y, z) {
48529 return (((x) & (y)) | ((~x) & (z)))
48530}
ebd8d4e8 48531
8b095871
IC
48532function f3 (x, y, z) {
48533 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
48534}
48535
8b095871
IC
48536function f4 (x, y, z) {
48537 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
48538}
48539
8b095871
IC
48540function f5 (x, y, z) {
48541 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
48542}
48543
8b095871
IC
48544function rotl (x, n) {
48545 return (x << n) | (x >>> (32 - n))
48546}
ebd8d4e8 48547
8b095871
IC
48548function ripemd160 (message) {
48549 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 48550
8b095871
IC
48551 if (typeof message === 'string') {
48552 message = new Buffer(message, 'utf8')
48553 }
ebd8d4e8 48554
8b095871 48555 var m = bytesToWords(message)
ebd8d4e8 48556
8b095871
IC
48557 var nBitsLeft = message.length * 8
48558 var nBitsTotal = message.length * 8
ebd8d4e8 48559
8b095871
IC
48560 // Add padding
48561 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
48562 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
48563 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
48564 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
48565 )
ebd8d4e8 48566
8b095871
IC
48567 for (var i = 0; i < m.length; i += 16) {
48568 processBlock(H, m, i)
ebd8d4e8
IC
48569 }
48570
8b095871
IC
48571 // swap endian
48572 for (i = 0; i < 5; i++) {
48573 // shortcut
48574 var H_i = H[i]
ebd8d4e8 48575
8b095871
IC
48576 // Swap
48577 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
48578 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
48579 }
48580
8b095871
IC
48581 var digestbytes = wordsToBytes(H)
48582 return new Buffer(digestbytes)
ebd8d4e8
IC
48583}
48584
8b095871 48585module.exports = ripemd160
ebd8d4e8 48586
8b095871
IC
48587}).call(this,require("buffer").Buffer)
48588},{"buffer":5}],72:[function(require,module,exports){
48589(function (Buffer){
48590const assert = require('assert')
48591/**
48592 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
48593 * This function takes in a data, convert it to buffer if not, and a length for recursion
48594 *
48595 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
48596 * @returns {Buffer} - returns buffer of encoded data
48597 **/
48598exports.encode = function (input) {
48599 if (input instanceof Array) {
48600 var output = []
48601 for (var i = 0; i < input.length; i++) {
48602 output.push(exports.encode(input[i]))
48603 }
48604 var buf = Buffer.concat(output)
48605 return Buffer.concat([encodeLength(buf.length, 192), buf])
48606 } else {
48607 input = toBuffer(input)
48608 if (input.length === 1 && input[0] < 128) {
48609 return input
48610 } else {
48611 return Buffer.concat([encodeLength(input.length, 128), input])
48612 }
48613 }
ebd8d4e8
IC
48614}
48615
8b095871
IC
48616function safeParseInt (v, base) {
48617 if (v.slice(0, 2) === '00') {
48618 throw (new Error('invalid RLP: extra zeros'))
48619 }
ebd8d4e8 48620
8b095871 48621 return parseInt(v, base)
ebd8d4e8
IC
48622}
48623
8b095871
IC
48624function encodeLength (len, offset) {
48625 if (len < 56) {
48626 return new Buffer([len + offset])
48627 } else {
48628 var hexLength = intToHex(len)
48629 var lLength = hexLength.length / 2
48630 var firstByte = intToHex(offset + 55 + lLength)
48631 return new Buffer(firstByte + hexLength, 'hex')
48632 }
48633}
ebd8d4e8 48634
8b095871
IC
48635/**
48636 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
48637 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
48638 * @returns {Array} - returns decode Array of Buffers containg the original message
48639 **/
48640exports.decode = function (input, stream) {
48641 if (!input || input.length === 0) {
48642 return new Buffer([])
48643 }
ebd8d4e8 48644
8b095871
IC
48645 input = toBuffer(input)
48646 var decoded = _decode(input)
ab78acc6 48647
8b095871
IC
48648 if (stream) {
48649 return decoded
48650 }
ebd8d4e8 48651
8b095871
IC
48652 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
48653 return decoded.data
ebd8d4e8
IC
48654}
48655
8b095871
IC
48656exports.getLength = function (input) {
48657 if (!input || input.length === 0) {
48658 return new Buffer([])
ab78acc6
IC
48659 }
48660
8b095871
IC
48661 input = toBuffer(input)
48662 var firstByte = input[0]
48663 if (firstByte <= 0x7f) {
48664 return input.length
48665 } else if (firstByte <= 0xb7) {
48666 return firstByte - 0x7f
48667 } else if (firstByte <= 0xbf) {
48668 return firstByte - 0xb6
48669 } else if (firstByte <= 0xf7) {
48670 // a list between 0-55 bytes long
48671 return firstByte - 0xbf
48672 } else {
48673 // a list over 55 bytes long
48674 var llength = firstByte - 0xf6
48675 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
48676 return llength + length
48677 }
ebd8d4e8
IC
48678}
48679
8b095871
IC
48680function _decode (input) {
48681 var length, llength, data, innerRemainder, d
48682 var decoded = []
48683 var firstByte = input[0]
ebd8d4e8 48684
8b095871
IC
48685 if (firstByte <= 0x7f) {
48686 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
48687 return {
48688 data: input.slice(0, 1),
48689 remainder: input.slice(1)
48690 }
48691 } else if (firstByte <= 0xb7) {
48692 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
48693 // The range of the first byte is [0x80, 0xb7]
48694 length = firstByte - 0x7f
ebd8d4e8 48695
8b095871
IC
48696 // set 0x80 null to 0
48697 if (firstByte === 0x80) {
48698 data = new Buffer([])
48699 } else {
48700 data = input.slice(1, length)
48701 }
ebd8d4e8 48702
8b095871
IC
48703 if (length === 2 && data[0] < 0x80) {
48704 throw new Error('invalid rlp encoding: byte must be less 0x80')
48705 }
ebd8d4e8 48706
8b095871
IC
48707 return {
48708 data: data,
48709 remainder: input.slice(length)
48710 }
48711 } else if (firstByte <= 0xbf) {
48712 llength = firstByte - 0xb6
48713 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
48714 data = input.slice(llength, length + llength)
48715 if (data.length < length) {
48716 throw (new Error('invalid RLP'))
48717 }
ebd8d4e8 48718
8b095871
IC
48719 return {
48720 data: data,
48721 remainder: input.slice(length + llength)
48722 }
48723 } else if (firstByte <= 0xf7) {
48724 // a list between 0-55 bytes long
48725 length = firstByte - 0xbf
48726 innerRemainder = input.slice(1, length)
48727 while (innerRemainder.length) {
48728 d = _decode(innerRemainder)
48729 decoded.push(d.data)
48730 innerRemainder = d.remainder
48731 }
ebd8d4e8 48732
8b095871
IC
48733 return {
48734 data: decoded,
48735 remainder: input.slice(length)
48736 }
48737 } else {
48738 // a list over 55 bytes long
48739 llength = firstByte - 0xf6
48740 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
48741 var totalLength = llength + length
48742 if (totalLength > input.length) {
48743 throw new Error('invalid rlp: total length is larger than the data')
48744 }
ab78acc6 48745
8b095871
IC
48746 innerRemainder = input.slice(llength, totalLength)
48747 if (innerRemainder.length === 0) {
48748 throw new Error('invalid rlp, List has a invalid length')
48749 }
ab78acc6 48750
8b095871
IC
48751 while (innerRemainder.length) {
48752 d = _decode(innerRemainder)
48753 decoded.push(d.data)
48754 innerRemainder = d.remainder
48755 }
48756 return {
48757 data: decoded,
48758 remainder: input.slice(totalLength)
48759 }
ab78acc6 48760 }
8b095871 48761}
ab78acc6 48762
8b095871
IC
48763function isHexPrefixed (str) {
48764 return str.slice(0, 2) === '0x'
ab78acc6
IC
48765}
48766
8b095871
IC
48767// Removes 0x from a given String
48768function stripHexPrefix (str) {
48769 if (typeof str !== 'string') {
48770 return str
48771 }
48772 return isHexPrefixed(str) ? str.slice(2) : str
48773}
ab78acc6 48774
8b095871
IC
48775function intToHex (i) {
48776 var hex = i.toString(16)
48777 if (hex.length % 2) {
48778 hex = '0' + hex
ab78acc6
IC
48779 }
48780
8b095871 48781 return hex
ebd8d4e8
IC
48782}
48783
8b095871
IC
48784function padToEven (a) {
48785 if (a.length % 2) a = '0' + a
48786 return a
ebd8d4e8
IC
48787}
48788
8b095871
IC
48789function intToBuffer (i) {
48790 var hex = intToHex(i)
48791 return new Buffer(hex, 'hex')
ebd8d4e8
IC
48792}
48793
8b095871
IC
48794function toBuffer (v) {
48795 if (!Buffer.isBuffer(v)) {
48796 if (typeof v === 'string') {
48797 if (isHexPrefixed(v)) {
48798 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
48799 } else {
48800 v = new Buffer(v)
48801 }
48802 } else if (typeof v === 'number') {
48803 if (!v) {
48804 v = new Buffer([])
48805 } else {
48806 v = intToBuffer(v)
48807 }
48808 } else if (v === null || v === undefined) {
48809 v = new Buffer([])
48810 } else if (v.toArray) {
48811 // converts a BN to a Buffer
48812 v = new Buffer(v.toArray())
48813 } else {
48814 throw new Error('invalid type')
48815 }
48816 }
48817 return v
ebd8d4e8
IC
48818}
48819
8b095871
IC
48820}).call(this,require("buffer").Buffer)
48821},{"assert":1,"buffer":5}],73:[function(require,module,exports){
48822'use strict'
48823module.exports = require('./lib')(require('./lib/elliptic'))
ebd8d4e8 48824
8b095871
IC
48825},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
48826(function (Buffer){
48827'use strict'
48828var toString = Object.prototype.toString
ebd8d4e8 48829
8b095871
IC
48830// TypeError
48831exports.isArray = function (value, message) {
48832 if (!Array.isArray(value)) throw TypeError(message)
ebd8d4e8
IC
48833}
48834
8b095871
IC
48835exports.isBoolean = function (value, message) {
48836 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
48837}
ebd8d4e8 48838
8b095871
IC
48839exports.isBuffer = function (value, message) {
48840 if (!Buffer.isBuffer(value)) throw TypeError(message)
ebd8d4e8
IC
48841}
48842
8b095871
IC
48843exports.isFunction = function (value, message) {
48844 if (toString.call(value) !== '[object Function]') throw TypeError(message)
ebd8d4e8
IC
48845}
48846
8b095871
IC
48847exports.isNumber = function (value, message) {
48848 if (toString.call(value) !== '[object Number]') throw TypeError(message)
48849}
ab78acc6 48850
8b095871
IC
48851exports.isObject = function (value, message) {
48852 if (toString.call(value) !== '[object Object]') throw TypeError(message)
48853}
ebd8d4e8 48854
8b095871
IC
48855// RangeError
48856exports.isBufferLength = function (buffer, length, message) {
48857 if (buffer.length !== length) throw RangeError(message)
48858}
ebd8d4e8 48859
8b095871
IC
48860exports.isBufferLength2 = function (buffer, length1, length2, message) {
48861 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
ab78acc6
IC
48862}
48863
8b095871
IC
48864exports.isLengthGTZero = function (value, message) {
48865 if (value.length === 0) throw RangeError(message)
ebd8d4e8
IC
48866}
48867
8b095871
IC
48868exports.isNumberInInterval = function (number, x, y, message) {
48869 if (number <= x || number >= y) throw RangeError(message)
ebd8d4e8
IC
48870}
48871
8b095871
IC
48872}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
48873},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
ebd8d4e8 48874(function (Buffer){
8b095871
IC
48875'use strict'
48876var bip66 = require('bip66')
48877
48878var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
48879 // begin
48880 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
48881 // private key
48882 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48883 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48884 // middle
48885 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
48886 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
48887 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
48888 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
48889 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
48890 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
48891 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
48892 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
48893 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
48894 // public key
48895 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48896 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48897 0x00
48898])
48899
48900var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
48901 // begin
48902 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
48903 // private key
48904 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48905 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48906 // middle
48907 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
48908 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
48909 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
48910 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
48911 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
48912 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
48913 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
48914 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
48915 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
48916 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
48917 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
48918 // public key
48919 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48920 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48921 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48922 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48923 0x00
48924])
48925
48926var ZERO_BUFFER_32 = new Buffer([
48927 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48928 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
48929])
48930
48931exports.privateKeyExport = function (privateKey, publicKey, compressed) {
48932 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
48933 privateKey.copy(result, compressed ? 8 : 9)
48934 publicKey.copy(result, compressed ? 181 : 214)
48935 return result
48936}
48937
48938exports.privateKeyImport = function (privateKey) {
48939 var length = privateKey.length
48940
48941 // sequence header
48942 var index = 0
48943 if (length < index + 1 || privateKey[index] !== 0x30) return
48944 index += 1
48945
48946 // sequence length constructor
48947 if (length < index + 1 || !(privateKey[index] & 0x80)) return
48948
48949 var lenb = privateKey[index] & 0x7f
48950 index += 1
48951 if (lenb < 1 || lenb > 2) return
48952 if (length < index + lenb) return
48953
48954 // sequence length
48955 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
48956 index += lenb
48957 if (length < index + len) return
48958
48959 // sequence element 0: version number (=1)
48960 if (length < index + 3 ||
48961 privateKey[index] !== 0x02 ||
48962 privateKey[index + 1] !== 0x01 ||
48963 privateKey[index + 2] !== 0x01) {
48964 return
48965 }
48966 index += 3
ab78acc6 48967
8b095871
IC
48968 // sequence element 1: octet string, up to 32 bytes
48969 if (length < index + 2 ||
48970 privateKey[index] !== 0x04 ||
48971 privateKey[index + 1] > 0x20 ||
48972 length < index + 2 + privateKey[index + 1]) {
48973 return
48974 }
ab78acc6 48975
8b095871 48976 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
ab78acc6 48977}
ebd8d4e8 48978
8b095871
IC
48979exports.signatureExport = function (sigObj) {
48980 var r = Buffer.concat([new Buffer([0]), sigObj.r])
48981 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
ebd8d4e8 48982
8b095871
IC
48983 var s = Buffer.concat([new Buffer([0]), sigObj.s])
48984 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
ab78acc6 48985
8b095871
IC
48986 return bip66.encode(r.slice(posR), s.slice(posS))
48987}
ab78acc6 48988
8b095871
IC
48989exports.signatureImport = function (sig) {
48990 var r = new Buffer(ZERO_BUFFER_32)
48991 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 48992
8b095871
IC
48993 try {
48994 var sigObj = bip66.decode(sig)
48995 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
48996 if (sigObj.r.length > 32) throw new Error('R length is too long')
48997 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
48998 if (sigObj.s.length > 32) throw new Error('S length is too long')
48999 } catch (err) {
49000 return
ab78acc6
IC
49001 }
49002
8b095871
IC
49003 sigObj.r.copy(r, 32 - sigObj.r.length)
49004 sigObj.s.copy(s, 32 - sigObj.s.length)
ab78acc6 49005
8b095871
IC
49006 return { r: r, s: s }
49007}
ab78acc6 49008
8b095871
IC
49009exports.signatureImportLax = function (sig) {
49010 var r = new Buffer(ZERO_BUFFER_32)
49011 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 49012
8b095871
IC
49013 var length = sig.length
49014 var index = 0
ab78acc6 49015
8b095871
IC
49016 // sequence tag byte
49017 if (sig[index++] !== 0x30) return
49018
49019 // sequence length byte
49020 var lenbyte = sig[index++]
49021 if (lenbyte & 0x80) {
49022 index += lenbyte - 0x80
49023 if (index > length) return
ab78acc6
IC
49024 }
49025
8b095871
IC
49026 // sequence tag byte for r
49027 if (sig[index++] !== 0x02) return
49028
49029 // length for r
49030 var rlen = sig[index++]
49031 if (rlen & 0x80) {
49032 lenbyte = rlen - 0x80
49033 if (index + lenbyte > length) return
49034 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
49035 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
ab78acc6 49036 }
8b095871
IC
49037 if (rlen > length - index) return
49038 var rindex = index
49039 index += rlen
ab78acc6 49040
8b095871
IC
49041 // sequence tag byte for s
49042 if (sig[index++] !== 0x02) return
ab78acc6 49043
8b095871
IC
49044 // length for s
49045 var slen = sig[index++]
49046 if (slen & 0x80) {
49047 lenbyte = slen - 0x80
49048 if (index + lenbyte > length) return
49049 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
49050 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
ab78acc6 49051 }
8b095871
IC
49052 if (slen > length - index) return
49053 var sindex = index
49054 index += slen
ab78acc6 49055
8b095871
IC
49056 // ignore leading zeros in r
49057 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
49058 // copy r value
49059 if (rlen > 32) return
49060 var rvalue = sig.slice(rindex, rindex + rlen)
49061 rvalue.copy(r, 32 - rvalue.length)
ab78acc6 49062
8b095871
IC
49063 // ignore leading zeros in s
49064 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
49065 // copy s value
49066 if (slen > 32) return
49067 var svalue = sig.slice(sindex, sindex + slen)
49068 svalue.copy(s, 32 - svalue.length)
49069
49070 return { r: r, s: s }
ab78acc6
IC
49071}
49072
8b095871
IC
49073}).call(this,require("buffer").Buffer)
49074},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
49075(function (Buffer){
49076'use strict'
49077var createHash = require('create-hash')
49078var BN = require('bn.js')
49079var EC = require('elliptic').ec
49080
49081var messages = require('../messages.json')
49082
49083var ec = new EC('secp256k1')
49084var ecparams = ec.curve
49085
49086function loadCompressedPublicKey (first, xBuffer) {
49087 var x = new BN(xBuffer)
49088
49089 // overflow
49090 if (x.cmp(ecparams.p) >= 0) return null
49091 x = x.toRed(ecparams.red)
49092
49093 // compute corresponding Y
49094 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
49095 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
49096
49097 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
49098}
49099
8b095871
IC
49100function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
49101 var x = new BN(xBuffer)
49102 var y = new BN(yBuffer)
ebd8d4e8 49103
8b095871
IC
49104 // overflow
49105 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
ebd8d4e8 49106
8b095871
IC
49107 x = x.toRed(ecparams.red)
49108 y = y.toRed(ecparams.red)
ebd8d4e8 49109
8b095871
IC
49110 // is odd flag
49111 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
ab78acc6 49112
8b095871
IC
49113 // x*x*x + b = y*y
49114 var x3 = x.redSqr().redIMul(x)
49115 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
ebd8d4e8 49116
8b095871 49117 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
49118}
49119
8b095871
IC
49120function loadPublicKey (publicKey) {
49121 var first = publicKey[0]
49122 switch (first) {
49123 case 0x02:
49124 case 0x03:
49125 if (publicKey.length !== 33) return null
49126 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
49127 case 0x04:
49128 case 0x06:
49129 case 0x07:
49130 if (publicKey.length !== 65) return null
49131 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
49132 default:
49133 return null
ebd8d4e8 49134 }
8b095871 49135}
ebd8d4e8 49136
8b095871
IC
49137exports.privateKeyVerify = function (privateKey) {
49138 var bn = new BN(privateKey)
49139 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
49140}
ebd8d4e8 49141
8b095871
IC
49142exports.privateKeyExport = function (privateKey, compressed) {
49143 var d = new BN(privateKey)
49144 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
ab78acc6 49145
8b095871 49146 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
ebd8d4e8
IC
49147}
49148
8b095871
IC
49149exports.privateKeyTweakAdd = function (privateKey, tweak) {
49150 var bn = new BN(tweak)
49151 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 49152
8b095871
IC
49153 bn.iadd(new BN(privateKey))
49154 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
49155 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 49156
8b095871
IC
49157 return bn.toArrayLike(Buffer, 'be', 32)
49158}
49159
49160exports.privateKeyTweakMul = function (privateKey, tweak) {
49161 var bn = new BN(tweak)
49162 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
49163
49164 bn.imul(new BN(privateKey))
49165 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
49166
49167 return bn.toArrayLike(Buffer, 'be', 32)
49168}
49169
49170exports.publicKeyCreate = function (privateKey, compressed) {
49171 var d = new BN(privateKey)
49172 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
49173
49174 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
49175}
49176
49177exports.publicKeyConvert = function (publicKey, compressed) {
49178 var pair = loadPublicKey(publicKey)
49179 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 49180
8b095871 49181 return new Buffer(pair.getPublic(compressed, true))
ab78acc6
IC
49182}
49183
8b095871
IC
49184exports.publicKeyVerify = function (publicKey) {
49185 return loadPublicKey(publicKey) !== null
49186}
ab78acc6 49187
8b095871
IC
49188exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
49189 var pair = loadPublicKey(publicKey)
49190 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 49191
8b095871
IC
49192 tweak = new BN(tweak)
49193 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
ab78acc6 49194
8b095871
IC
49195 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
49196}
ab78acc6 49197
8b095871
IC
49198exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
49199 var pair = loadPublicKey(publicKey)
49200 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 49201
8b095871
IC
49202 tweak = new BN(tweak)
49203 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
ab78acc6 49204
8b095871
IC
49205 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
49206}
ab78acc6 49207
8b095871
IC
49208exports.publicKeyCombine = function (publicKeys, compressed) {
49209 var pairs = new Array(publicKeys.length)
49210 for (var i = 0; i < publicKeys.length; ++i) {
49211 pairs[i] = loadPublicKey(publicKeys[i])
49212 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6
IC
49213 }
49214
8b095871
IC
49215 var point = pairs[0].pub
49216 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
49217 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
ab78acc6 49218
8b095871
IC
49219 return new Buffer(point.encode(true, compressed))
49220}
ab78acc6 49221
8b095871
IC
49222exports.signatureNormalize = function (signature) {
49223 var r = new BN(signature.slice(0, 32))
49224 var s = new BN(signature.slice(32, 64))
49225 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
49226
49227 var result = new Buffer(signature)
49228 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
49229
49230 return result
ab78acc6
IC
49231}
49232
8b095871
IC
49233exports.signatureExport = function (signature) {
49234 var r = signature.slice(0, 32)
49235 var s = signature.slice(32, 64)
49236 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
49237
49238 return { r: r, s: s }
ab78acc6
IC
49239}
49240
8b095871
IC
49241exports.signatureImport = function (sigObj) {
49242 var r = new BN(sigObj.r)
49243 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
49244
49245 var s = new BN(sigObj.s)
49246 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
49247
49248 return Buffer.concat([
49249 r.toArrayLike(Buffer, 'be', 32),
49250 s.toArrayLike(Buffer, 'be', 32)
49251 ])
ab78acc6
IC
49252}
49253
8b095871
IC
49254exports.sign = function (message, privateKey, noncefn, data) {
49255 if (typeof noncefn === 'function') {
49256 var getNonce = noncefn
49257 noncefn = function (counter) {
49258 var nonce = getNonce(message, privateKey, null, data, counter)
49259 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 49260
8b095871
IC
49261 return new BN(nonce)
49262 }
ab78acc6 49263 }
ebd8d4e8 49264
8b095871
IC
49265 var d = new BN(privateKey)
49266 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 49267
8b095871
IC
49268 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
49269 return {
49270 signature: Buffer.concat([
49271 result.r.toArrayLike(Buffer, 'be', 32),
49272 result.s.toArrayLike(Buffer, 'be', 32)
49273 ]),
49274 recovery: result.recoveryParam
ebd8d4e8 49275 }
8b095871 49276}
ab78acc6 49277
8b095871
IC
49278exports.verify = function (message, signature, publicKey) {
49279 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ab78acc6 49280
8b095871
IC
49281 var sigr = new BN(sigObj.r)
49282 var sigs = new BN(sigObj.s)
49283 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
49284 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
ab78acc6 49285
8b095871
IC
49286 var pair = loadPublicKey(publicKey)
49287 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ebd8d4e8 49288
8b095871
IC
49289 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
49290}
ebd8d4e8 49291
8b095871
IC
49292exports.recover = function (message, signature, recovery, compressed) {
49293 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ebd8d4e8 49294
8b095871
IC
49295 var sigr = new BN(sigObj.r)
49296 var sigs = new BN(sigObj.s)
49297 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
ebd8d4e8 49298
8b095871
IC
49299 try {
49300 if (sigr.isZero() || sigs.isZero()) throw new Error()
ebd8d4e8 49301
8b095871
IC
49302 var point = ec.recoverPubKey(message, sigObj, recovery)
49303 return new Buffer(point.encode(true, compressed))
49304 } catch (err) {
49305 throw new Error(messages.ECDSA_RECOVER_FAIL)
49306 }
ebd8d4e8
IC
49307}
49308
8b095871
IC
49309exports.ecdh = function (publicKey, privateKey) {
49310 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
49311 return createHash('sha256').update(shared).digest()
ebd8d4e8
IC
49312}
49313
8b095871
IC
49314exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
49315 var pair = loadPublicKey(publicKey)
49316 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 49317
8b095871
IC
49318 var scalar = new BN(privateKey)
49319 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
49320
49321 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
ab78acc6
IC
49322}
49323
8b095871
IC
49324}).call(this,require("buffer").Buffer)
49325},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
49326'use strict'
49327var assert = require('./assert')
49328var der = require('./der')
49329var messages = require('./messages.json')
ab78acc6 49330
8b095871
IC
49331function initCompressedValue (value, defaultValue) {
49332 if (value === undefined) return defaultValue
ab78acc6 49333
8b095871
IC
49334 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
49335 return value
ab78acc6
IC
49336}
49337
8b095871
IC
49338module.exports = function (secp256k1) {
49339 return {
49340 privateKeyVerify: function (privateKey) {
49341 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
49342 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
49343 },
ab78acc6 49344
8b095871
IC
49345 privateKeyExport: function (privateKey, compressed) {
49346 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
49347 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 49348
8b095871
IC
49349 compressed = initCompressedValue(compressed, true)
49350 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
ab78acc6 49351
8b095871
IC
49352 return der.privateKeyExport(privateKey, publicKey, compressed)
49353 },
ab78acc6 49354
8b095871
IC
49355 privateKeyImport: function (privateKey) {
49356 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
ab78acc6 49357
8b095871
IC
49358 privateKey = der.privateKeyImport(privateKey)
49359 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
ab78acc6 49360
8b095871
IC
49361 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
49362 },
ab78acc6 49363
8b095871
IC
49364 privateKeyTweakAdd: function (privateKey, tweak) {
49365 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
49366 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 49367
8b095871
IC
49368 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
49369 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 49370
8b095871
IC
49371 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
49372 },
ab78acc6 49373
8b095871
IC
49374 privateKeyTweakMul: function (privateKey, tweak) {
49375 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
49376 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 49377
8b095871
IC
49378 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
49379 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 49380
8b095871
IC
49381 return secp256k1.privateKeyTweakMul(privateKey, tweak)
49382 },
ab78acc6 49383
8b095871
IC
49384 publicKeyCreate: function (privateKey, compressed) {
49385 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
49386 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 49387
8b095871 49388 compressed = initCompressedValue(compressed, true)
ab78acc6 49389
8b095871
IC
49390 return secp256k1.publicKeyCreate(privateKey, compressed)
49391 },
ab78acc6 49392
8b095871
IC
49393 publicKeyConvert: function (publicKey, compressed) {
49394 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
49395 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 49396
8b095871
IC
49397 compressed = initCompressedValue(compressed, true)
49398
49399 return secp256k1.publicKeyConvert(publicKey, compressed)
49400 },
49401
49402 publicKeyVerify: function (publicKey) {
49403 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
49404 return secp256k1.publicKeyVerify(publicKey)
49405 },
49406
49407 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
49408 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
49409 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
49410
49411 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
49412 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
49413
49414 compressed = initCompressedValue(compressed, true)
49415
49416 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
49417 },
49418
49419 publicKeyTweakMul: function (publicKey, tweak, compressed) {
49420 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
49421 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
49422
49423 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
49424 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
49425
49426 compressed = initCompressedValue(compressed, true)
49427
49428 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
49429 },
49430
49431 publicKeyCombine: function (publicKeys, compressed) {
49432 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
49433 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
49434 for (var i = 0; i < publicKeys.length; ++i) {
49435 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
49436 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6
IC
49437 }
49438
8b095871 49439 compressed = initCompressedValue(compressed, true)
ab78acc6 49440
8b095871
IC
49441 return secp256k1.publicKeyCombine(publicKeys, compressed)
49442 },
ab78acc6 49443
8b095871
IC
49444 signatureNormalize: function (signature) {
49445 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
49446 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 49447
8b095871
IC
49448 return secp256k1.signatureNormalize(signature)
49449 },
ab78acc6 49450
8b095871
IC
49451 signatureExport: function (signature) {
49452 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
49453 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
49454
49455 var sigObj = secp256k1.signatureExport(signature)
49456 return der.signatureExport(sigObj)
49457 },
49458
49459 signatureImport: function (sig) {
49460 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
49461 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
49462
49463 var sigObj = der.signatureImport(sig)
49464 if (sigObj) return secp256k1.signatureImport(sigObj)
49465
49466 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
49467 },
49468
49469 signatureImportLax: function (sig) {
49470 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
49471 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
49472
49473 var sigObj = der.signatureImportLax(sig)
49474 if (sigObj) return secp256k1.signatureImport(sigObj)
49475
49476 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
49477 },
49478
49479 sign: function (message, privateKey, options) {
49480 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
49481 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
49482
49483 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
49484 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
49485
49486 var data = null
49487 var noncefn = null
49488 if (options !== undefined) {
49489 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
49490
49491 if (options.data !== undefined) {
49492 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
49493 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
49494 data = options.data
49495 }
49496
49497 if (options.noncefn !== undefined) {
49498 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
49499 noncefn = options.noncefn
49500 }
ab78acc6
IC
49501 }
49502
8b095871
IC
49503 return secp256k1.sign(message, privateKey, noncefn, data)
49504 },
ab78acc6 49505
8b095871
IC
49506 verify: function (message, signature, publicKey) {
49507 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
49508 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 49509
8b095871
IC
49510 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
49511 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 49512
8b095871
IC
49513 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
49514 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
49515
49516 return secp256k1.verify(message, signature, publicKey)
49517 },
ab78acc6 49518
8b095871
IC
49519 recover: function (message, signature, recovery, compressed) {
49520 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
49521 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 49522
8b095871
IC
49523 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
49524 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 49525
8b095871
IC
49526 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
49527 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
ab78acc6 49528
8b095871 49529 compressed = initCompressedValue(compressed, true)
ab78acc6 49530
8b095871
IC
49531 return secp256k1.recover(message, signature, recovery, compressed)
49532 },
ab78acc6 49533
8b095871
IC
49534 ecdh: function (publicKey, privateKey) {
49535 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
49536 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 49537
8b095871
IC
49538 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
49539 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 49540
8b095871
IC
49541 return secp256k1.ecdh(publicKey, privateKey)
49542 },
ab78acc6 49543
8b095871
IC
49544 ecdhUnsafe: function (publicKey, privateKey, compressed) {
49545 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
49546 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 49547
8b095871
IC
49548 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
49549 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 49550
8b095871 49551 compressed = initCompressedValue(compressed, true)
ab78acc6 49552
8b095871
IC
49553 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
49554 }
49555 }
49556}
ab78acc6 49557
8b095871
IC
49558},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
49559module.exports={
49560 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
49561 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
49562 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
49563 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
49564 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
49565 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
49566 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
49567 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
49568 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
49569 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
49570 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
49571 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
49572 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
49573 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
49574 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
49575 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
49576 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
49577 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
49578 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
49579 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
49580 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
49581 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
49582 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
49583 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
49584 "MSG32_TYPE_INVALID": "message should be a Buffer",
49585 "MSG32_LENGTH_INVALID": "message length is invalid",
49586 "OPTIONS_TYPE_INVALID": "options should be an Object",
49587 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
49588 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
49589 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
49590 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
49591 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
49592 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
49593 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
49594}
49595
49596},{}],79:[function(require,module,exports){
49597(function (Buffer){
49598// prototype class for hash functions
49599function Hash (blockSize, finalSize) {
49600 this._block = new Buffer(blockSize)
49601 this._finalSize = finalSize
49602 this._blockSize = blockSize
49603 this._len = 0
49604 this._s = 0
49605}
49606
49607Hash.prototype.update = function (data, enc) {
49608 if (typeof data === 'string') {
49609 enc = enc || 'utf8'
49610 data = new Buffer(data, enc)
ab78acc6
IC
49611 }
49612
8b095871
IC
49613 var l = this._len += data.length
49614 var s = this._s || 0
49615 var f = 0
49616 var buffer = this._block
ab78acc6 49617
8b095871
IC
49618 while (s < l) {
49619 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
49620 var ch = (t - f)
ab78acc6 49621
8b095871
IC
49622 for (var i = 0; i < ch; i++) {
49623 buffer[(s % this._blockSize) + i] = data[i + f]
ab78acc6
IC
49624 }
49625
8b095871
IC
49626 s += ch
49627 f += ch
ab78acc6 49628
8b095871
IC
49629 if ((s % this._blockSize) === 0) {
49630 this._update(buffer)
49631 }
ab78acc6 49632 }
8b095871 49633 this._s = s
ab78acc6 49634
8b095871
IC
49635 return this
49636}
ab78acc6 49637
8b095871
IC
49638Hash.prototype.digest = function (enc) {
49639 // Suppose the length of the message M, in bits, is l
49640 var l = this._len * 8
ab78acc6 49641
8b095871
IC
49642 // Append the bit 1 to the end of the message
49643 this._block[this._len % this._blockSize] = 0x80
ab78acc6 49644
8b095871
IC
49645 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
49646 this._block.fill(0, this._len % this._blockSize + 1)
ab78acc6 49647
8b095871
IC
49648 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
49649 this._update(this._block)
49650 this._block.fill(0)
49651 }
ab78acc6 49652
8b095871
IC
49653 // to this append the block which is equal to the number l written in binary
49654 // TODO: handle case where l is > Math.pow(2, 29)
49655 this._block.writeInt32BE(l, this._blockSize - 4)
ebd8d4e8 49656
8b095871 49657 var hash = this._update(this._block) || this._hash()
ebd8d4e8 49658
8b095871 49659 return enc ? hash.toString(enc) : hash
ab78acc6 49660}
ebd8d4e8 49661
8b095871
IC
49662Hash.prototype._update = function () {
49663 throw new Error('_update must be implemented by subclass')
ab78acc6 49664}
8b095871
IC
49665
49666module.exports = Hash
49667
49668}).call(this,require("buffer").Buffer)
49669},{"buffer":5}],80:[function(require,module,exports){
49670var exports = module.exports = function SHA (algorithm) {
49671 algorithm = algorithm.toLowerCase()
49672
49673 var Algorithm = exports[algorithm]
49674 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
49675
49676 return new Algorithm()
ab78acc6 49677}
ebd8d4e8 49678
8b095871
IC
49679exports.sha = require('./sha')
49680exports.sha1 = require('./sha1')
49681exports.sha224 = require('./sha224')
49682exports.sha256 = require('./sha256')
49683exports.sha384 = require('./sha384')
49684exports.sha512 = require('./sha512')
49685
49686},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
49687(function (Buffer){
49688/*
49689 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
49690 * in FIPS PUB 180-1
49691 * This source code is derived from sha1.js of the same repository.
49692 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
49693 * operation was added.
49694 */
49695
49696var inherits = require('inherits')
49697var Hash = require('./hash')
49698
49699var K = [
49700 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
49701]
49702
49703var W = new Array(80)
49704
49705function Sha () {
49706 this.init()
49707 this._w = W
49708
49709 Hash.call(this, 64, 56)
ab78acc6 49710}
ebd8d4e8 49711
8b095871 49712inherits(Sha, Hash)
ebd8d4e8 49713
8b095871
IC
49714Sha.prototype.init = function () {
49715 this._a = 0x67452301
49716 this._b = 0xefcdab89
49717 this._c = 0x98badcfe
49718 this._d = 0x10325476
49719 this._e = 0xc3d2e1f0
ebd8d4e8 49720
8b095871
IC
49721 return this
49722}
ebd8d4e8 49723
8b095871
IC
49724function rotl5 (num) {
49725 return (num << 5) | (num >>> 27)
49726}
ebd8d4e8 49727
8b095871
IC
49728function rotl30 (num) {
49729 return (num << 30) | (num >>> 2)
49730}
ebd8d4e8 49731
8b095871
IC
49732function ft (s, b, c, d) {
49733 if (s === 0) return (b & c) | ((~b) & d)
49734 if (s === 2) return (b & c) | (b & d) | (c & d)
49735 return b ^ c ^ d
49736}
ebd8d4e8 49737
8b095871
IC
49738Sha.prototype._update = function (M) {
49739 var W = this._w
ebd8d4e8 49740
8b095871
IC
49741 var a = this._a | 0
49742 var b = this._b | 0
49743 var c = this._c | 0
49744 var d = this._d | 0
49745 var e = this._e | 0
ebd8d4e8 49746
8b095871
IC
49747 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49748 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
ebd8d4e8 49749
8b095871
IC
49750 for (var j = 0; j < 80; ++j) {
49751 var s = ~~(j / 20)
49752 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
ebd8d4e8 49753
8b095871
IC
49754 e = d
49755 d = c
49756 c = rotl30(b)
49757 b = a
49758 a = t
49759 }
49760
49761 this._a = (a + this._a) | 0
49762 this._b = (b + this._b) | 0
49763 this._c = (c + this._c) | 0
49764 this._d = (d + this._d) | 0
49765 this._e = (e + this._e) | 0
49766}
49767
49768Sha.prototype._hash = function () {
49769 var H = new Buffer(20)
ab78acc6 49770
8b095871
IC
49771 H.writeInt32BE(this._a | 0, 0)
49772 H.writeInt32BE(this._b | 0, 4)
49773 H.writeInt32BE(this._c | 0, 8)
49774 H.writeInt32BE(this._d | 0, 12)
49775 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 49776
8b095871 49777 return H
ebd8d4e8
IC
49778}
49779
8b095871 49780module.exports = Sha
ebd8d4e8 49781
8b095871
IC
49782}).call(this,require("buffer").Buffer)
49783},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
49784(function (Buffer){
49785/*
49786 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
49787 * in FIPS PUB 180-1
49788 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
49789 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49790 * Distributed under the BSD License
49791 * See http://pajhome.org.uk/crypt/md5 for details.
49792 */
ebd8d4e8 49793
8b095871
IC
49794var inherits = require('inherits')
49795var Hash = require('./hash')
ebd8d4e8 49796
8b095871
IC
49797var K = [
49798 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
49799]
ebd8d4e8 49800
8b095871 49801var W = new Array(80)
ab78acc6 49802
8b095871
IC
49803function Sha1 () {
49804 this.init()
49805 this._w = W
ebd8d4e8 49806
8b095871
IC
49807 Hash.call(this, 64, 56)
49808}
ebd8d4e8 49809
8b095871 49810inherits(Sha1, Hash)
ebd8d4e8 49811
8b095871
IC
49812Sha1.prototype.init = function () {
49813 this._a = 0x67452301
49814 this._b = 0xefcdab89
49815 this._c = 0x98badcfe
49816 this._d = 0x10325476
49817 this._e = 0xc3d2e1f0
ebd8d4e8 49818
8b095871
IC
49819 return this
49820}
ebd8d4e8 49821
8b095871
IC
49822function rotl1 (num) {
49823 return (num << 1) | (num >>> 31)
49824}
ebd8d4e8 49825
8b095871
IC
49826function rotl5 (num) {
49827 return (num << 5) | (num >>> 27)
49828}
ebd8d4e8 49829
8b095871
IC
49830function rotl30 (num) {
49831 return (num << 30) | (num >>> 2)
49832}
ebd8d4e8 49833
8b095871
IC
49834function ft (s, b, c, d) {
49835 if (s === 0) return (b & c) | ((~b) & d)
49836 if (s === 2) return (b & c) | (b & d) | (c & d)
49837 return b ^ c ^ d
49838}
ebd8d4e8 49839
8b095871
IC
49840Sha1.prototype._update = function (M) {
49841 var W = this._w
ebd8d4e8 49842
8b095871
IC
49843 var a = this._a | 0
49844 var b = this._b | 0
49845 var c = this._c | 0
49846 var d = this._d | 0
49847 var e = this._e | 0
ebd8d4e8 49848
8b095871
IC
49849 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49850 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
49851
49852 for (var j = 0; j < 80; ++j) {
49853 var s = ~~(j / 20)
49854 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
49855
49856 e = d
49857 d = c
49858 c = rotl30(b)
49859 b = a
49860 a = t
ab78acc6
IC
49861 }
49862
8b095871
IC
49863 this._a = (a + this._a) | 0
49864 this._b = (b + this._b) | 0
49865 this._c = (c + this._c) | 0
49866 this._d = (d + this._d) | 0
49867 this._e = (e + this._e) | 0
49868}
ab78acc6 49869
8b095871
IC
49870Sha1.prototype._hash = function () {
49871 var H = new Buffer(20)
ab78acc6 49872
8b095871
IC
49873 H.writeInt32BE(this._a | 0, 0)
49874 H.writeInt32BE(this._b | 0, 4)
49875 H.writeInt32BE(this._c | 0, 8)
49876 H.writeInt32BE(this._d | 0, 12)
49877 H.writeInt32BE(this._e | 0, 16)
ab78acc6 49878
8b095871
IC
49879 return H
49880}
ab78acc6 49881
8b095871 49882module.exports = Sha1
ab78acc6 49883
8b095871
IC
49884}).call(this,require("buffer").Buffer)
49885},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
49886(function (Buffer){
49887/**
49888 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
49889 * in FIPS 180-2
49890 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
49891 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49892 *
49893 */
ab78acc6 49894
8b095871
IC
49895var inherits = require('inherits')
49896var Sha256 = require('./sha256')
49897var Hash = require('./hash')
ab78acc6 49898
8b095871 49899var W = new Array(64)
ab78acc6 49900
8b095871
IC
49901function Sha224 () {
49902 this.init()
ab78acc6 49903
8b095871 49904 this._w = W // new Array(64)
ebd8d4e8 49905
8b095871
IC
49906 Hash.call(this, 64, 56)
49907}
ebd8d4e8 49908
8b095871 49909inherits(Sha224, Sha256)
ebd8d4e8 49910
8b095871
IC
49911Sha224.prototype.init = function () {
49912 this._a = 0xc1059ed8
49913 this._b = 0x367cd507
49914 this._c = 0x3070dd17
49915 this._d = 0xf70e5939
49916 this._e = 0xffc00b31
49917 this._f = 0x68581511
49918 this._g = 0x64f98fa7
49919 this._h = 0xbefa4fa4
ebd8d4e8 49920
8b095871
IC
49921 return this
49922}
ab78acc6 49923
8b095871
IC
49924Sha224.prototype._hash = function () {
49925 var H = new Buffer(28)
ebd8d4e8 49926
8b095871
IC
49927 H.writeInt32BE(this._a, 0)
49928 H.writeInt32BE(this._b, 4)
49929 H.writeInt32BE(this._c, 8)
49930 H.writeInt32BE(this._d, 12)
49931 H.writeInt32BE(this._e, 16)
49932 H.writeInt32BE(this._f, 20)
49933 H.writeInt32BE(this._g, 24)
ab78acc6 49934
8b095871
IC
49935 return H
49936}
ebd8d4e8 49937
8b095871 49938module.exports = Sha224
ebd8d4e8 49939
8b095871
IC
49940}).call(this,require("buffer").Buffer)
49941},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
49942(function (Buffer){
49943/**
49944 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
49945 * in FIPS 180-2
49946 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
49947 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49948 *
49949 */
ebd8d4e8 49950
8b095871
IC
49951var inherits = require('inherits')
49952var Hash = require('./hash')
ab78acc6 49953
8b095871
IC
49954var K = [
49955 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
49956 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
49957 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
49958 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
49959 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
49960 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
49961 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
49962 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
49963 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
49964 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
49965 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
49966 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
49967 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
49968 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
49969 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
49970 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
49971]
ebd8d4e8 49972
8b095871 49973var W = new Array(64)
ebd8d4e8 49974
8b095871
IC
49975function Sha256 () {
49976 this.init()
ebd8d4e8 49977
8b095871 49978 this._w = W // new Array(64)
ebd8d4e8 49979
8b095871 49980 Hash.call(this, 64, 56)
ab78acc6 49981}
ebd8d4e8 49982
8b095871 49983inherits(Sha256, Hash)
ebd8d4e8 49984
8b095871
IC
49985Sha256.prototype.init = function () {
49986 this._a = 0x6a09e667
49987 this._b = 0xbb67ae85
49988 this._c = 0x3c6ef372
49989 this._d = 0xa54ff53a
49990 this._e = 0x510e527f
49991 this._f = 0x9b05688c
49992 this._g = 0x1f83d9ab
49993 this._h = 0x5be0cd19
ebd8d4e8 49994
8b095871
IC
49995 return this
49996}
ebd8d4e8 49997
8b095871
IC
49998function ch (x, y, z) {
49999 return z ^ (x & (y ^ z))
50000}
ebd8d4e8 50001
8b095871
IC
50002function maj (x, y, z) {
50003 return (x & y) | (z & (x | y))
50004}
ebd8d4e8 50005
8b095871
IC
50006function sigma0 (x) {
50007 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
50008}
ebd8d4e8 50009
8b095871
IC
50010function sigma1 (x) {
50011 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
50012}
ebd8d4e8 50013
8b095871
IC
50014function gamma0 (x) {
50015 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
50016}
ebd8d4e8 50017
8b095871
IC
50018function gamma1 (x) {
50019 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
50020}
ab78acc6 50021
8b095871
IC
50022Sha256.prototype._update = function (M) {
50023 var W = this._w
ebd8d4e8 50024
8b095871
IC
50025 var a = this._a | 0
50026 var b = this._b | 0
50027 var c = this._c | 0
50028 var d = this._d | 0
50029 var e = this._e | 0
50030 var f = this._f | 0
50031 var g = this._g | 0
50032 var h = this._h | 0
ab78acc6 50033
8b095871
IC
50034 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
50035 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
ab78acc6 50036
8b095871
IC
50037 for (var j = 0; j < 64; ++j) {
50038 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
50039 var T2 = (sigma0(a) + maj(a, b, c)) | 0
ebd8d4e8 50040
8b095871
IC
50041 h = g
50042 g = f
50043 f = e
50044 e = (d + T1) | 0
50045 d = c
50046 c = b
50047 b = a
50048 a = (T1 + T2) | 0
ebd8d4e8
IC
50049 }
50050
8b095871
IC
50051 this._a = (a + this._a) | 0
50052 this._b = (b + this._b) | 0
50053 this._c = (c + this._c) | 0
50054 this._d = (d + this._d) | 0
50055 this._e = (e + this._e) | 0
50056 this._f = (f + this._f) | 0
50057 this._g = (g + this._g) | 0
50058 this._h = (h + this._h) | 0
ab78acc6 50059}
ebd8d4e8 50060
8b095871
IC
50061Sha256.prototype._hash = function () {
50062 var H = new Buffer(32)
ebd8d4e8 50063
8b095871
IC
50064 H.writeInt32BE(this._a, 0)
50065 H.writeInt32BE(this._b, 4)
50066 H.writeInt32BE(this._c, 8)
50067 H.writeInt32BE(this._d, 12)
50068 H.writeInt32BE(this._e, 16)
50069 H.writeInt32BE(this._f, 20)
50070 H.writeInt32BE(this._g, 24)
50071 H.writeInt32BE(this._h, 28)
50072
50073 return H
ab78acc6 50074}
ebd8d4e8 50075
8b095871 50076module.exports = Sha256
ebd8d4e8 50077
8b095871
IC
50078}).call(this,require("buffer").Buffer)
50079},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
50080(function (Buffer){
50081var inherits = require('inherits')
50082var SHA512 = require('./sha512')
50083var Hash = require('./hash')
ebd8d4e8 50084
8b095871 50085var W = new Array(160)
ebd8d4e8 50086
8b095871
IC
50087function Sha384 () {
50088 this.init()
50089 this._w = W
ab78acc6 50090
8b095871
IC
50091 Hash.call(this, 128, 112)
50092}
ab78acc6 50093
8b095871 50094inherits(Sha384, SHA512)
ebd8d4e8 50095
8b095871
IC
50096Sha384.prototype.init = function () {
50097 this._ah = 0xcbbb9d5d
50098 this._bh = 0x629a292a
50099 this._ch = 0x9159015a
50100 this._dh = 0x152fecd8
50101 this._eh = 0x67332667
50102 this._fh = 0x8eb44a87
50103 this._gh = 0xdb0c2e0d
50104 this._hh = 0x47b5481d
50105
50106 this._al = 0xc1059ed8
50107 this._bl = 0x367cd507
50108 this._cl = 0x3070dd17
50109 this._dl = 0xf70e5939
50110 this._el = 0xffc00b31
50111 this._fl = 0x68581511
50112 this._gl = 0x64f98fa7
50113 this._hl = 0xbefa4fa4
ebd8d4e8 50114
8b095871
IC
50115 return this
50116}
ebd8d4e8 50117
8b095871
IC
50118Sha384.prototype._hash = function () {
50119 var H = new Buffer(48)
ebd8d4e8 50120
8b095871
IC
50121 function writeInt64BE (h, l, offset) {
50122 H.writeInt32BE(h, offset)
50123 H.writeInt32BE(l, offset + 4)
50124 }
ebd8d4e8 50125
8b095871
IC
50126 writeInt64BE(this._ah, this._al, 0)
50127 writeInt64BE(this._bh, this._bl, 8)
50128 writeInt64BE(this._ch, this._cl, 16)
50129 writeInt64BE(this._dh, this._dl, 24)
50130 writeInt64BE(this._eh, this._el, 32)
50131 writeInt64BE(this._fh, this._fl, 40)
ebd8d4e8 50132
8b095871 50133 return H
ab78acc6 50134}
ebd8d4e8 50135
8b095871
IC
50136module.exports = Sha384
50137
50138}).call(this,require("buffer").Buffer)
50139},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
50140(function (Buffer){
50141var inherits = require('inherits')
50142var Hash = require('./hash')
50143
50144var K = [
50145 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
50146 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
50147 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
50148 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
50149 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
50150 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
50151 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
50152 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
50153 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
50154 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
50155 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
50156 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
50157 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
50158 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
50159 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
50160 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
50161 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
50162 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
50163 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
50164 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
50165 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
50166 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
50167 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
50168 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
50169 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
50170 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
50171 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
50172 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
50173 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
50174 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
50175 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
50176 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
50177 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
50178 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
50179 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
50180 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
50181 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
50182 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
50183 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
50184 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
50185]
50186
50187var W = new Array(160)
ebd8d4e8 50188
8b095871
IC
50189function Sha512 () {
50190 this.init()
50191 this._w = W
ebd8d4e8 50192
8b095871 50193 Hash.call(this, 128, 112)
ab78acc6 50194}
ebd8d4e8 50195
8b095871 50196inherits(Sha512, Hash)
ebd8d4e8 50197
8b095871
IC
50198Sha512.prototype.init = function () {
50199 this._ah = 0x6a09e667
50200 this._bh = 0xbb67ae85
50201 this._ch = 0x3c6ef372
50202 this._dh = 0xa54ff53a
50203 this._eh = 0x510e527f
50204 this._fh = 0x9b05688c
50205 this._gh = 0x1f83d9ab
50206 this._hh = 0x5be0cd19
50207
50208 this._al = 0xf3bcc908
50209 this._bl = 0x84caa73b
50210 this._cl = 0xfe94f82b
50211 this._dl = 0x5f1d36f1
50212 this._el = 0xade682d1
50213 this._fl = 0x2b3e6c1f
50214 this._gl = 0xfb41bd6b
50215 this._hl = 0x137e2179
ebd8d4e8 50216
8b095871 50217 return this
ab78acc6 50218}
ebd8d4e8 50219
8b095871
IC
50220function Ch (x, y, z) {
50221 return z ^ (x & (y ^ z))
50222}
ebd8d4e8 50223
8b095871
IC
50224function maj (x, y, z) {
50225 return (x & y) | (z & (x | y))
ab78acc6 50226}
ebd8d4e8 50227
8b095871
IC
50228function sigma0 (x, xl) {
50229 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
50230}
ebd8d4e8 50231
8b095871
IC
50232function sigma1 (x, xl) {
50233 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
50234}
ab78acc6 50235
8b095871
IC
50236function Gamma0 (x, xl) {
50237 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
ab78acc6 50238}
ebd8d4e8 50239
8b095871
IC
50240function Gamma0l (x, xl) {
50241 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
50242}
ebd8d4e8 50243
8b095871
IC
50244function Gamma1 (x, xl) {
50245 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
ab78acc6
IC
50246}
50247
8b095871
IC
50248function Gamma1l (x, xl) {
50249 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
ab78acc6
IC
50250}
50251
8b095871
IC
50252function getCarry (a, b) {
50253 return (a >>> 0) < (b >>> 0) ? 1 : 0
ab78acc6
IC
50254}
50255
8b095871
IC
50256Sha512.prototype._update = function (M) {
50257 var W = this._w
ebd8d4e8 50258
8b095871
IC
50259 var ah = this._ah | 0
50260 var bh = this._bh | 0
50261 var ch = this._ch | 0
50262 var dh = this._dh | 0
50263 var eh = this._eh | 0
50264 var fh = this._fh | 0
50265 var gh = this._gh | 0
50266 var hh = this._hh | 0
ebd8d4e8 50267
8b095871
IC
50268 var al = this._al | 0
50269 var bl = this._bl | 0
50270 var cl = this._cl | 0
50271 var dl = this._dl | 0
50272 var el = this._el | 0
50273 var fl = this._fl | 0
50274 var gl = this._gl | 0
50275 var hl = this._hl | 0
ebd8d4e8 50276
8b095871
IC
50277 for (var i = 0; i < 32; i += 2) {
50278 W[i] = M.readInt32BE(i * 4)
50279 W[i + 1] = M.readInt32BE(i * 4 + 4)
50280 }
50281 for (; i < 160; i += 2) {
50282 var xh = W[i - 15 * 2]
50283 var xl = W[i - 15 * 2 + 1]
50284 var gamma0 = Gamma0(xh, xl)
50285 var gamma0l = Gamma0l(xl, xh)
ebd8d4e8 50286
8b095871
IC
50287 xh = W[i - 2 * 2]
50288 xl = W[i - 2 * 2 + 1]
50289 var gamma1 = Gamma1(xh, xl)
50290 var gamma1l = Gamma1l(xl, xh)
ebd8d4e8 50291
8b095871
IC
50292 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
50293 var Wi7h = W[i - 7 * 2]
50294 var Wi7l = W[i - 7 * 2 + 1]
ebd8d4e8 50295
8b095871
IC
50296 var Wi16h = W[i - 16 * 2]
50297 var Wi16l = W[i - 16 * 2 + 1]
ab78acc6 50298
8b095871
IC
50299 var Wil = (gamma0l + Wi7l) | 0
50300 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
50301 Wil = (Wil + gamma1l) | 0
50302 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
50303 Wil = (Wil + Wi16l) | 0
50304 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
ebd8d4e8 50305
8b095871
IC
50306 W[i] = Wih
50307 W[i + 1] = Wil
50308 }
ebd8d4e8 50309
8b095871
IC
50310 for (var j = 0; j < 160; j += 2) {
50311 Wih = W[j]
50312 Wil = W[j + 1]
ebd8d4e8 50313
8b095871
IC
50314 var majh = maj(ah, bh, ch)
50315 var majl = maj(al, bl, cl)
ebd8d4e8 50316
8b095871
IC
50317 var sigma0h = sigma0(ah, al)
50318 var sigma0l = sigma0(al, ah)
50319 var sigma1h = sigma1(eh, el)
50320 var sigma1l = sigma1(el, eh)
ab78acc6 50321
8b095871
IC
50322 // t1 = h + sigma1 + ch + K[j] + W[j]
50323 var Kih = K[j]
50324 var Kil = K[j + 1]
ab78acc6 50325
8b095871
IC
50326 var chh = Ch(eh, fh, gh)
50327 var chl = Ch(el, fl, gl)
ebd8d4e8 50328
8b095871
IC
50329 var t1l = (hl + sigma1l) | 0
50330 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
50331 t1l = (t1l + chl) | 0
50332 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
50333 t1l = (t1l + Kil) | 0
50334 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
50335 t1l = (t1l + Wil) | 0
50336 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
ebd8d4e8 50337
8b095871
IC
50338 // t2 = sigma0 + maj
50339 var t2l = (sigma0l + majl) | 0
50340 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
ebd8d4e8 50341
8b095871
IC
50342 hh = gh
50343 hl = gl
50344 gh = fh
50345 gl = fl
50346 fh = eh
50347 fl = el
50348 el = (dl + t1l) | 0
50349 eh = (dh + t1h + getCarry(el, dl)) | 0
50350 dh = ch
50351 dl = cl
50352 ch = bh
50353 cl = bl
50354 bh = ah
50355 bl = al
50356 al = (t1l + t2l) | 0
50357 ah = (t1h + t2h + getCarry(al, t1l)) | 0
50358 }
ab78acc6 50359
8b095871
IC
50360 this._al = (this._al + al) | 0
50361 this._bl = (this._bl + bl) | 0
50362 this._cl = (this._cl + cl) | 0
50363 this._dl = (this._dl + dl) | 0
50364 this._el = (this._el + el) | 0
50365 this._fl = (this._fl + fl) | 0
50366 this._gl = (this._gl + gl) | 0
50367 this._hl = (this._hl + hl) | 0
ab78acc6 50368
8b095871
IC
50369 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
50370 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
50371 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
50372 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
50373 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
50374 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
50375 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
50376 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
ab78acc6
IC
50377}
50378
8b095871
IC
50379Sha512.prototype._hash = function () {
50380 var H = new Buffer(64)
ab78acc6 50381
8b095871
IC
50382 function writeInt64BE (h, l, offset) {
50383 H.writeInt32BE(h, offset)
50384 H.writeInt32BE(l, offset + 4)
50385 }
ab78acc6 50386
8b095871
IC
50387 writeInt64BE(this._ah, this._al, 0)
50388 writeInt64BE(this._bh, this._bl, 8)
50389 writeInt64BE(this._ch, this._cl, 16)
50390 writeInt64BE(this._dh, this._dl, 24)
50391 writeInt64BE(this._eh, this._el, 32)
50392 writeInt64BE(this._fh, this._fl, 40)
50393 writeInt64BE(this._gh, this._gl, 48)
50394 writeInt64BE(this._hh, this._hl, 56)
ab78acc6 50395
8b095871 50396 return H
ebd8d4e8
IC
50397}
50398
8b095871 50399module.exports = Sha512
ebd8d4e8 50400
ab78acc6 50401}).call(this,require("buffer").Buffer)
8b095871
IC
50402},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
50403var isHexPrefixed = require('is-hex-prefixed');
d5dc92fd 50404
8b095871
IC
50405/**
50406 * Removes '0x' from a given `String` is present
50407 * @param {String} str the string value
50408 * @return {String|Optional} a string by pass if necessary
50409 */
50410module.exports = function stripHexPrefix(str) {
50411 if (typeof str !== 'string') {
50412 return str;
50413 }
07ac4350 50414
8b095871
IC
50415 return isHexPrefixed(str) ? str.slice(2) : str;
50416}
07ac4350 50417
8b095871
IC
50418},{"is-hex-prefixed":64}]},{},[31])(31)
50419});</script>
8a1f452d 50420 <script>function convertRippleAdrr(address) {
50421 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
50422 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
50423 )
50424 }
50425
50426function convertRipplePriv(priv) {
920eb591 50427 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
8a1f452d 50428}
50429
50430</script>
ab78acc6 50431 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
50432
50433//// base.js
50434
50435/** @fileOverview Javascript cryptography implementation.
50436 *
50437 * Crush to remove comments, shorten variable names and
50438 * generally reduce transmission size.
50439 *
50440 * @author Emily Stark
50441 * @author Mike Hamburg
50442 * @author Dan Boneh
50443 */
50444
50445"use strict";
50446/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
50447/*global document, window, escape, unescape, module, require, Uint32Array */
50448
50449/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
50450var sjcl = {
50451 /** @namespace Symmetric ciphers. */
50452 cipher: {},
50453
50454 /** @namespace Hash functions. Right now only SHA256 is implemented. */
50455 hash: {},
50456
50457 /** @namespace Key exchange functions. Right now only SRP is implemented. */
50458 keyexchange: {},
50459
50460 /** @namespace Block cipher modes of operation. */
50461 mode: {},
50462
50463 /** @namespace Miscellaneous. HMAC and PBKDF2. */
50464 misc: {},
50465
50466 /**
50467 * @namespace Bit array encoders and decoders.
50468 *
50469 * @description
50470 * The members of this namespace are functions which translate between
50471 * SJCL's bitArrays and other objects (usually strings). Because it
50472 * isn't always clear which direction is encoding and which is decoding,
50473 * the method names are "fromBits" and "toBits".
50474 */
50475 codec: {},
50476
50477 /** @namespace Exceptions. */
50478 exception: {
50479 /** @constructor Ciphertext is corrupt. */
50480 corrupt: function(message) {
50481 this.toString = function() { return "CORRUPT: "+this.message; };
50482 this.message = message;
50483 },
50484
50485 /** @constructor Invalid parameter. */
50486 invalid: function(message) {
50487 this.toString = function() { return "INVALID: "+this.message; };
50488 this.message = message;
50489 },
50490
50491 /** @constructor Bug or missing feature in SJCL. @constructor */
50492 bug: function(message) {
50493 this.toString = function() { return "BUG: "+this.message; };
50494 this.message = message;
50495 },
50496
50497 /** @constructor Something isn't ready. */
50498 notReady: function(message) {
50499 this.toString = function() { return "NOT READY: "+this.message; };
50500 this.message = message;
ebd8d4e8 50501 }
80c4dd2a
IC
50502 }
50503};
50504
50505if(typeof module !== 'undefined' && module.exports){
50506 module.exports = sjcl;
50507}
50508if (typeof define === "function") {
50509 define([], function () {
50510 return sjcl;
50511 });
50512}
50513
50514
50515//// bitArray.js
50516
50517/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
50518 *
50519 * @author Emily Stark
50520 * @author Mike Hamburg
50521 * @author Dan Boneh
50522 */
50523
50524/** @namespace Arrays of bits, encoded as arrays of Numbers.
50525 *
50526 * @description
50527 * <p>
50528 * These objects are the currency accepted by SJCL's crypto functions.
50529 * </p>
50530 *
50531 * <p>
50532 * Most of our crypto primitives operate on arrays of 4-byte words internally,
50533 * but many of them can take arguments that are not a multiple of 4 bytes.
50534 * This library encodes arrays of bits (whose size need not be a multiple of 8
50535 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
50536 * array of words, 32 bits at a time. Since the words are double-precision
50537 * floating point numbers, they fit some extra data. We use this (in a private,
50538 * possibly-changing manner) to encode the number of bits actually present
50539 * in the last word of the array.
50540 * </p>
50541 *
50542 * <p>
50543 * Because bitwise ops clear this out-of-band data, these arrays can be passed
50544 * to ciphers like AES which want arrays of words.
50545 * </p>
50546 */
50547sjcl.bitArray = {
50548 /**
50549 * Array slices in units of bits.
50550 * @param {bitArray} a The array to slice.
50551 * @param {Number} bstart The offset to the start of the slice, in bits.
50552 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
50553 * slice until the end of the array.
50554 * @return {bitArray} The requested slice.
50555 */
50556 bitSlice: function (a, bstart, bend) {
50557 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
50558 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
50559 },
50560
50561 /**
50562 * Extract a number packed into a bit array.
50563 * @param {bitArray} a The array to slice.
50564 * @param {Number} bstart The offset to the start of the slice, in bits.
50565 * @param {Number} length The length of the number to extract.
50566 * @return {Number} The requested slice.
50567 */
50568 extract: function(a, bstart, blength) {
50569 // FIXME: this Math.floor is not necessary at all, but for some reason
50570 // seems to suppress a bug in the Chromium JIT.
50571 var x, sh = Math.floor((-bstart-blength) & 31);
50572 if ((bstart + blength - 1 ^ bstart) & -32) {
50573 // it crosses a boundary
50574 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
50575 } else {
50576 // within a single word
50577 x = a[bstart/32|0] >>> sh;
ebd8d4e8 50578 }
80c4dd2a
IC
50579 return x & ((1<<blength) - 1);
50580 },
50581
50582 /**
50583 * Concatenate two bit arrays.
50584 * @param {bitArray} a1 The first array.
50585 * @param {bitArray} a2 The second array.
50586 * @return {bitArray} The concatenation of a1 and a2.
50587 */
50588 concat: function (a1, a2) {
50589 if (a1.length === 0 || a2.length === 0) {
50590 return a1.concat(a2);
50591 }
50592
50593 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
50594 if (shift === 32) {
50595 return a1.concat(a2);
50596 } else {
50597 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 50598 }
80c4dd2a
IC
50599 },
50600
50601 /**
50602 * Find the length of an array of bits.
50603 * @param {bitArray} a The array.
50604 * @return {Number} The length of a, in bits.
50605 */
50606 bitLength: function (a) {
50607 var l = a.length, x;
50608 if (l === 0) { return 0; }
50609 x = a[l - 1];
50610 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
50611 },
50612
50613 /**
50614 * Truncate an array.
50615 * @param {bitArray} a The array.
50616 * @param {Number} len The length to truncate to, in bits.
50617 * @return {bitArray} A new array, truncated to len bits.
50618 */
50619 clamp: function (a, len) {
50620 if (a.length * 32 < len) { return a; }
50621 a = a.slice(0, Math.ceil(len / 32));
50622 var l = a.length;
50623 len = len & 31;
50624 if (l > 0 && len) {
50625 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
50626 }
50627 return a;
50628 },
50629
50630 /**
50631 * Make a partial word for a bit array.
50632 * @param {Number} len The number of bits in the word.
50633 * @param {Number} x The bits.
50634 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
50635 * @return {Number} The partial word.
50636 */
50637 partial: function (len, x, _end) {
50638 if (len === 32) { return x; }
50639 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
50640 },
50641
50642 /**
50643 * Get the number of bits used by a partial word.
50644 * @param {Number} x The partial word.
50645 * @return {Number} The number of bits used by the partial word.
50646 */
50647 getPartial: function (x) {
50648 return Math.round(x/0x10000000000) || 32;
50649 },
50650
50651 /**
50652 * Compare two arrays for equality in a predictable amount of time.
50653 * @param {bitArray} a The first array.
50654 * @param {bitArray} b The second array.
50655 * @return {boolean} true if a == b; false otherwise.
50656 */
50657 equal: function (a, b) {
50658 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
50659 return false;
ebd8d4e8 50660 }
80c4dd2a
IC
50661 var x = 0, i;
50662 for (i=0; i<a.length; i++) {
50663 x |= a[i]^b[i];
ebd8d4e8 50664 }
80c4dd2a
IC
50665 return (x === 0);
50666 },
50667
50668 /** Shift an array right.
50669 * @param {bitArray} a The array to shift.
50670 * @param {Number} shift The number of bits to shift.
50671 * @param {Number} [carry=0] A byte to carry in
50672 * @param {bitArray} [out=[]] An array to prepend to the output.
50673 * @private
50674 */
50675 _shiftRight: function (a, shift, carry, out) {
50676 var i, last2=0, shift2;
50677 if (out === undefined) { out = []; }
50678
50679 for (; shift >= 32; shift -= 32) {
50680 out.push(carry);
50681 carry = 0;
50682 }
50683 if (shift === 0) {
50684 return out.concat(a);
50685 }
50686
50687 for (i=0; i<a.length; i++) {
50688 out.push(carry | a[i]>>>shift);
50689 carry = a[i] << (32-shift);
50690 }
50691 last2 = a.length ? a[a.length-1] : 0;
50692 shift2 = sjcl.bitArray.getPartial(last2);
50693 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
50694 return out;
50695 },
50696
50697 /** xor a block of 4 words together.
50698 * @private
50699 */
50700 _xor4: function(x,y) {
50701 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
50702 },
50703
50704 /** byteswap a word array inplace.
50705 * (does not handle partial words)
50706 * @param {sjcl.bitArray} a word array
50707 * @return {sjcl.bitArray} byteswapped array
50708 */
50709 byteswapM: function(a) {
50710 var i, v, m = 0xff00;
50711 for (i = 0; i < a.length; ++i) {
50712 v = a[i];
50713 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 50714 }
80c4dd2a
IC
50715 return a;
50716 }
50717};
50718
50719
50720//// codecString.js
50721
50722/** @fileOverview Bit array codec implementations.
50723 *
50724 * @author Emily Stark
50725 * @author Mike Hamburg
50726 * @author Dan Boneh
50727 */
50728
50729/** @namespace UTF-8 strings */
50730sjcl.codec.utf8String = {
50731 /** Convert from a bitArray to a UTF-8 string. */
50732 fromBits: function (arr) {
50733 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
50734 for (i=0; i<bl/8; i++) {
50735 if ((i&3) === 0) {
50736 tmp = arr[i/4];
50737 }
50738 out += String.fromCharCode(tmp >>> 24);
50739 tmp <<= 8;
ebd8d4e8 50740 }
80c4dd2a
IC
50741 return decodeURIComponent(escape(out));
50742 },
50743
50744 /** Convert from a UTF-8 string to a bitArray. */
50745 toBits: function (str) {
50746 str = unescape(encodeURIComponent(str));
50747 var out = [], i, tmp=0;
50748 for (i=0; i<str.length; i++) {
50749 tmp = tmp << 8 | str.charCodeAt(i);
50750 if ((i&3) === 3) {
50751 out.push(tmp);
50752 tmp = 0;
50753 }
ebd8d4e8 50754 }
80c4dd2a
IC
50755 if (i&3) {
50756 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 50757 }
80c4dd2a
IC
50758 return out;
50759 }
50760};
50761
50762
50763//// codecHex.js
50764
50765/** @fileOverview Bit array codec implementations.
50766 *
50767 * @author Emily Stark
50768 * @author Mike Hamburg
50769 * @author Dan Boneh
50770 */
50771
50772/** @namespace Hexadecimal */
50773sjcl.codec.hex = {
50774 /** Convert from a bitArray to a hex string. */
50775 fromBits: function (arr) {
50776 var out = "", i;
50777 for (i=0; i<arr.length; i++) {
50778 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 50779 }
80c4dd2a
IC
50780 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
50781 },
50782 /** Convert from a hex string to a bitArray. */
50783 toBits: function (str) {
50784 var i, out=[], len;
50785 str = str.replace(/\s|0x/g, "");
50786 len = str.length;
50787 str = str + "00000000";
50788 for (i=0; i<str.length; i+=8) {
50789 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 50790 }
80c4dd2a
IC
50791 return sjcl.bitArray.clamp(out, len*4);
50792 }
50793};
50794
50795
50796//// sha512.js
50797
50798/** @fileOverview Javascript SHA-512 implementation.
50799 *
50800 * This implementation was written for CryptoJS by Jeff Mott and adapted for
50801 * SJCL by Stefan Thomas.
50802 *
50803 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
50804 * Released with New BSD License
50805 *
50806 * @author Emily Stark
50807 * @author Mike Hamburg
50808 * @author Dan Boneh
50809 * @author Jeff Mott
50810 * @author Stefan Thomas
50811 */
50812
50813/**
50814 * Context for a SHA-512 operation in progress.
50815 * @constructor
50816 * @class Secure Hash Algorithm, 512 bits.
50817 */
50818sjcl.hash.sha512 = function (hash) {
50819 if (!this._key[0]) { this._precompute(); }
50820 if (hash) {
50821 this._h = hash._h.slice(0);
50822 this._buffer = hash._buffer.slice(0);
50823 this._length = hash._length;
50824 } else {
50825 this.reset();
50826 }
50827};
50828
50829/**
50830 * Hash a string or an array of words.
50831 * @static
50832 * @param {bitArray|String} data the data to hash.
50833 * @return {bitArray} The hash value, an array of 16 big-endian words.
50834 */
50835sjcl.hash.sha512.hash = function (data) {
50836 return (new sjcl.hash.sha512()).update(data).finalize();
50837};
50838
50839sjcl.hash.sha512.prototype = {
50840 /**
50841 * The hash's block size, in bits.
50842 * @constant
50843 */
50844 blockSize: 1024,
50845
50846 /**
50847 * Reset the hash state.
50848 * @return this
50849 */
50850 reset:function () {
50851 this._h = this._init.slice(0);
50852 this._buffer = [];
50853 this._length = 0;
50854 return this;
50855 },
50856
50857 /**
50858 * Input several words to the hash.
50859 * @param {bitArray|String} data the data to hash.
50860 * @return this
50861 */
50862 update: function (data) {
50863 if (typeof data === "string") {
50864 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 50865 }
80c4dd2a
IC
50866 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
50867 ol = this._length,
50868 nl = this._length = ol + sjcl.bitArray.bitLength(data);
50869 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
50870 this._block(b.splice(0,32));
ebd8d4e8 50871 }
80c4dd2a
IC
50872 return this;
50873 },
50874
50875 /**
50876 * Complete hashing and output the hash value.
50877 * @return {bitArray} The hash value, an array of 16 big-endian words.
50878 */
50879 finalize:function () {
50880 var i, b = this._buffer, h = this._h;
50881
50882 // Round out and push the buffer
50883 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
50884
50885 // Round out the buffer to a multiple of 32 words, less the 4 length words.
50886 for (i = b.length + 4; i & 31; i++) {
50887 b.push(0);
ebd8d4e8 50888 }
80c4dd2a
IC
50889
50890 // append the length
50891 b.push(0);
50892 b.push(0);
50893 b.push(Math.floor(this._length / 0x100000000));
50894 b.push(this._length | 0);
50895
50896 while (b.length) {
50897 this._block(b.splice(0,32));
ebd8d4e8 50898 }
80c4dd2a
IC
50899
50900 this.reset();
50901 return h;
50902 },
50903
50904 /**
50905 * The SHA-512 initialization vector, to be precomputed.
50906 * @private
50907 */
50908 _init:[],
50909
50910 /**
50911 * Least significant 24 bits of SHA512 initialization values.
50912 *
50913 * Javascript only has 53 bits of precision, so we compute the 40 most
50914 * significant bits and add the remaining 24 bits as constants.
50915 *
50916 * @private
50917 */
50918 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
50919
50920 /*
50921 _init:
50922 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
50923 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
50924 */
50925
50926 /**
50927 * The SHA-512 hash key, to be precomputed.
50928 * @private
50929 */
50930 _key:[],
50931
50932 /**
50933 * Least significant 24 bits of SHA512 key values.
50934 * @private
50935 */
50936 _keyr:
50937 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
50938 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
50939 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
50940 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
50941 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
50942 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
50943 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
50944 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
50945 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
50946 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
50947
50948 /*
50949 _key:
50950 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
50951 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
50952 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
50953 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
50954 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
50955 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
50956 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
50957 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
50958 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
50959 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
50960 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
50961 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
50962 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
50963 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
50964 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
50965 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
50966 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
50967 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
50968 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
50969 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
50970 */
50971
50972 /**
50973 * Function to precompute _init and _key.
50974 * @private
50975 */
50976 _precompute: function () {
50977 // XXX: This code is for precomputing the SHA256 constants, change for
50978 // SHA512 and re-enable.
50979 var i = 0, prime = 2, factor;
50980
50981 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
50982 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
50983
50984 outer: for (; i<80; prime++) {
50985 for (factor=2; factor*factor <= prime; factor++) {
50986 if (prime % factor === 0) {
50987 // not a prime
50988 continue outer;
ebd8d4e8 50989 }
80c4dd2a
IC
50990 }
50991
50992 if (i<8) {
50993 this._init[i*2] = frac(Math.pow(prime, 1/2));
50994 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
50995 }
50996 this._key[i*2] = frac(Math.pow(prime, 1/3));
50997 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
50998 i++;
ebd8d4e8 50999 }
80c4dd2a
IC
51000 },
51001
51002 /**
51003 * Perform one cycle of SHA-512.
51004 * @param {bitArray} words one block of words.
51005 * @private
51006 */
51007 _block:function (words) {
51008 var i, wrh, wrl,
51009 w = words.slice(0),
51010 h = this._h,
51011 k = this._key,
51012 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
51013 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
51014 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
51015 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
51016
51017 // Working variables
51018 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
51019 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
51020 eh = h4h, el = h4l, fh = h5h, fl = h5l,
51021 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
51022
51023 for (i=0; i<80; i++) {
51024 // load up the input word for this round
51025 if (i<16) {
51026 wrh = w[i * 2];
51027 wrl = w[i * 2 + 1];
51028 } else {
51029 // Gamma0
51030 var gamma0xh = w[(i-15) * 2];
51031 var gamma0xl = w[(i-15) * 2 + 1];
51032 var gamma0h =
51033 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
51034 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
51035 (gamma0xh >>> 7);
51036 var gamma0l =
51037 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
51038 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
51039 ((gamma0xh << 25) | (gamma0xl >>> 7));
51040
51041 // Gamma1
51042 var gamma1xh = w[(i-2) * 2];
51043 var gamma1xl = w[(i-2) * 2 + 1];
51044 var gamma1h =
51045 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
51046 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
51047 (gamma1xh >>> 6);
51048 var gamma1l =
51049 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
51050 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
51051 ((gamma1xh << 26) | (gamma1xl >>> 6));
51052
51053 // Shortcuts
51054 var wr7h = w[(i-7) * 2];
51055 var wr7l = w[(i-7) * 2 + 1];
51056
51057 var wr16h = w[(i-16) * 2];
51058 var wr16l = w[(i-16) * 2 + 1];
51059
51060 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
51061 wrl = gamma0l + wr7l;
51062 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
51063 wrl += gamma1l;
51064 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
51065 wrl += wr16l;
51066 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
51067 }
51068
51069 w[i*2] = wrh |= 0;
51070 w[i*2 + 1] = wrl |= 0;
51071
51072 // Ch
51073 var chh = (eh & fh) ^ (~eh & gh);
51074 var chl = (el & fl) ^ (~el & gl);
51075
51076 // Maj
51077 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
51078 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
51079
51080 // Sigma0
51081 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
51082 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
51083
51084 // Sigma1
51085 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
51086 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
51087
51088 // K(round)
51089 var krh = k[i*2];
51090 var krl = k[i*2+1];
51091
51092 // t1 = h + sigma1 + ch + K(round) + W(round)
51093 var t1l = hl + sigma1l;
51094 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
51095 t1l += chl;
51096 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
51097 t1l += krl;
51098 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
51099 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
51100 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
51101
51102 // t2 = sigma0 + maj
51103 var t2l = sigma0l + majl;
51104 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
51105
51106 // Update working variables
51107 hh = gh;
51108 hl = gl;
51109 gh = fh;
51110 gl = fl;
51111 fh = eh;
51112 fl = el;
51113 el = (dl + t1l) | 0;
51114 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
51115 dh = ch;
51116 dl = cl;
51117 ch = bh;
51118 cl = bl;
51119 bh = ah;
51120 bl = al;
51121 al = (t1l + t2l) | 0;
51122 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
51123 }
51124
51125 // Intermediate hash
51126 h0l = h[1] = (h0l + al) | 0;
51127 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
51128 h1l = h[3] = (h1l + bl) | 0;
51129 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
51130 h2l = h[5] = (h2l + cl) | 0;
51131 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
51132 h3l = h[7] = (h3l + dl) | 0;
51133 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
51134 h4l = h[9] = (h4l + el) | 0;
51135 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
51136 h5l = h[11] = (h5l + fl) | 0;
51137 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
51138 h6l = h[13] = (h6l + gl) | 0;
51139 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
51140 h7l = h[15] = (h7l + hl) | 0;
51141 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
51142 }
51143};
51144
51145
51146//// hmac.js
51147
51148/** @fileOverview HMAC implementation.
51149 *
51150 * @author Emily Stark
51151 * @author Mike Hamburg
51152 * @author Dan Boneh
51153 */
51154
51155/** HMAC with the specified hash function.
51156 * @constructor
51157 * @param {bitArray} key the key for HMAC.
51158 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
51159 */
51160sjcl.misc.hmac = function (key, Hash) {
51161 this._hash = Hash = Hash || sjcl.hash.sha256;
51162 var exKey = [[],[]], i,
51163 bs = Hash.prototype.blockSize / 32;
51164 this._baseHash = [new Hash(), new Hash()];
51165
51166 if (key.length > bs) {
51167 key = Hash.hash(key);
51168 }
51169
51170 for (i=0; i<bs; i++) {
51171 exKey[0][i] = key[i]^0x36363636;
51172 exKey[1][i] = key[i]^0x5C5C5C5C;
51173 }
51174
51175 this._baseHash[0].update(exKey[0]);
51176 this._baseHash[1].update(exKey[1]);
51177 this._resultHash = new Hash(this._baseHash[0]);
51178};
51179
51180/** HMAC with the specified hash function. Also called encrypt since it's a prf.
51181 * @param {bitArray|String} data The data to mac.
51182 */
51183sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
51184 if (!this._updated) {
51185 this.update(data);
51186 return this.digest(data);
51187 } else {
51188 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
51189 }
51190};
51191
51192sjcl.misc.hmac.prototype.reset = function () {
51193 this._resultHash = new this._hash(this._baseHash[0]);
51194 this._updated = false;
51195};
51196
51197sjcl.misc.hmac.prototype.update = function (data) {
51198 this._updated = true;
51199 this._resultHash.update(data);
51200};
51201
51202sjcl.misc.hmac.prototype.digest = function () {
51203 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
51204
51205 this.reset();
51206
51207 return result;
51208};
51209
51210
51211//// pbkdf2.js
51212
51213
51214/** @fileOverview Password-based key-derivation function, version 2.0.
51215 *
51216 * @author Emily Stark
51217 * @author Mike Hamburg
51218 * @author Dan Boneh
51219 */
51220
51221/** Password-Based Key-Derivation Function, version 2.0.
51222 *
51223 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
51224 *
51225 * This is the method specified by RSA's PKCS #5 standard.
51226 *
51227 * @param {bitArray|String} password The password.
51228 * @param {bitArray|String} salt The salt. Should have lots of entropy.
51229 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
51230 * @param {Number} [length] The length of the derived key. Defaults to the
51231 output size of the hash function.
51232 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
51233 * @return {bitArray} the derived key.
51234 */
51235sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
51236 count = count || 1000;
51237
51238 if (length < 0 || count < 0) {
51239 throw sjcl.exception.invalid("invalid params to pbkdf2");
51240 }
51241
51242 if (typeof password === "string") {
51243 password = sjcl.codec.utf8String.toBits(password);
51244 }
51245
51246 if (typeof salt === "string") {
51247 salt = sjcl.codec.utf8String.toBits(salt);
51248 }
51249
51250 Prff = Prff || sjcl.misc.hmac;
51251
51252 var prf = new Prff(password),
51253 u, ui, i, j, k, out = [], b = sjcl.bitArray;
51254
51255 for (k = 1; 32 * out.length < (length || 1); k++) {
51256 u = ui = prf.encrypt(b.concat(salt,[k]));
51257
51258 for (i=1; i<count; i++) {
51259 ui = prf.encrypt(ui);
51260 for (j=0; j<ui.length; j++) {
51261 u[j] ^= ui[j];
51262 }
ebd8d4e8 51263 }
80c4dd2a
IC
51264
51265 out = out.concat(u);
51266 }
51267
51268 if (length) { out = b.clamp(out, length); }
51269
51270 return out;
51271};
51272
51273
51274//// sha256.js
51275
51276/** @fileOverview Javascript SHA-256 implementation.
51277 *
51278 * An older version of this implementation is available in the public
51279 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
51280 * Stanford University 2008-2010 and BSD-licensed for liability
51281 * reasons.
51282 *
51283 * Special thanks to Aldo Cortesi for pointing out several bugs in
51284 * this code.
51285 *
51286 * @author Emily Stark
51287 * @author Mike Hamburg
51288 * @author Dan Boneh
51289 */
51290
51291/**
51292 * Context for a SHA-256 operation in progress.
51293 * @constructor
51294 * @class Secure Hash Algorithm, 256 bits.
51295 */
51296sjcl.hash.sha256 = function (hash) {
51297 if (!this._key[0]) { this._precompute(); }
51298 if (hash) {
51299 this._h = hash._h.slice(0);
51300 this._buffer = hash._buffer.slice(0);
51301 this._length = hash._length;
51302 } else {
51303 this.reset();
51304 }
51305};
51306
51307/**
51308 * Hash a string or an array of words.
51309 * @static
51310 * @param {bitArray|String} data the data to hash.
51311 * @return {bitArray} The hash value, an array of 16 big-endian words.
51312 */
51313sjcl.hash.sha256.hash = function (data) {
51314 return (new sjcl.hash.sha256()).update(data).finalize();
51315};
51316
51317sjcl.hash.sha256.prototype = {
51318 /**
51319 * The hash's block size, in bits.
51320 * @constant
51321 */
51322 blockSize: 512,
51323
51324 /**
51325 * Reset the hash state.
51326 * @return this
51327 */
51328 reset:function () {
51329 this._h = this._init.slice(0);
51330 this._buffer = [];
51331 this._length = 0;
51332 return this;
51333 },
51334
51335 /**
51336 * Input several words to the hash.
51337 * @param {bitArray|String} data the data to hash.
51338 * @return this
51339 */
51340 update: function (data) {
51341 if (typeof data === "string") {
51342 data = sjcl.codec.utf8String.toBits(data);
51343 }
51344 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
51345 ol = this._length,
51346 nl = this._length = ol + sjcl.bitArray.bitLength(data);
51347 for (i = 512+ol & -512; i <= nl; i+= 512) {
51348 this._block(b.splice(0,16));
ebd8d4e8 51349 }
3af2954a 51350 return this;
80c4dd2a
IC
51351 },
51352
51353 /**
51354 * Complete hashing and output the hash value.
51355 * @return {bitArray} The hash value, an array of 8 big-endian words.
51356 */
51357 finalize:function () {
51358 var i, b = this._buffer, h = this._h;
51359
51360 // Round out and push the buffer
51361 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
51362
51363 // Round out the buffer to a multiple of 16 words, less the 2 length words.
51364 for (i = b.length + 2; i & 15; i++) {
51365 b.push(0);
51366 }
51367
51368 // append the length
51369 b.push(Math.floor(this._length / 0x100000000));
51370 b.push(this._length | 0);
51371
51372 while (b.length) {
51373 this._block(b.splice(0,16));
51374 }
51375
51376 this.reset();
51377 return h;
51378 },
51379
51380 /**
51381 * The SHA-256 initialization vector, to be precomputed.
51382 * @private
51383 */
51384 _init:[],
51385 /*
51386 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
51387 */
51388
51389 /**
51390 * The SHA-256 hash key, to be precomputed.
51391 * @private
51392 */
51393 _key:[],
51394 /*
51395 _key:
51396 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
51397 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
51398 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
51399 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
51400 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
51401 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
51402 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
51403 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
51404 */
51405
51406
51407 /**
51408 * Function to precompute _init and _key.
51409 * @private
51410 */
51411 _precompute: function () {
51412 var i = 0, prime = 2, factor;
51413
51414 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
51415
51416 outer: for (; i<64; prime++) {
51417 for (factor=2; factor*factor <= prime; factor++) {
51418 if (prime % factor === 0) {
51419 // not a prime
51420 continue outer;
ebd8d4e8 51421 }
80c4dd2a
IC
51422 }
51423
51424 if (i<8) {
51425 this._init[i] = frac(Math.pow(prime, 1/2));
51426 }
51427 this._key[i] = frac(Math.pow(prime, 1/3));
51428 i++;
ebd8d4e8 51429 }
80c4dd2a
IC
51430 },
51431
51432 /**
51433 * Perform one cycle of SHA-256.
51434 * @param {bitArray} words one block of words.
51435 * @private
51436 */
51437 _block:function (words) {
51438 var i, tmp, a, b,
51439 w = words.slice(0),
51440 h = this._h,
51441 k = this._key,
51442 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
51443 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
51444
51445 /* Rationale for placement of |0 :
51446 * If a value can overflow is original 32 bits by a factor of more than a few
51447 * million (2^23 ish), there is a possibility that it might overflow the
51448 * 53-bit mantissa and lose precision.
51449 *
51450 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
51451 * propagates around the loop, and on the hash state h[]. I don't believe
51452 * that the clamps on h4 and on h0 are strictly necessary, but it's close
51453 * (for h4 anyway), and better safe than sorry.
51454 *
51455 * The clamps on h[] are necessary for the output to be correct even in the
51456 * common case and for short inputs.
51457 */
51458 for (i=0; i<64; i++) {
51459 // load up the input word for this round
51460 if (i<16) {
51461 tmp = w[i];
51462 } else {
51463 a = w[(i+1 ) & 15];
51464 b = w[(i+14) & 15];
51465 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
51466 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
51467 w[i&15] + w[(i+9) & 15]) | 0;
51468 }
51469
51470 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
51471
51472 // shift register
51473 h7 = h6; h6 = h5; h5 = h4;
51474 h4 = h3 + tmp | 0;
51475 h3 = h2; h2 = h1; h1 = h0;
51476
51477 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
51478 }
51479
51480 h[0] = h[0]+h0 | 0;
51481 h[1] = h[1]+h1 | 0;
51482 h[2] = h[2]+h2 | 0;
51483 h[3] = h[3]+h3 | 0;
51484 h[4] = h[4]+h4 | 0;
51485 h[5] = h[5]+h5 | 0;
51486 h[6] = h[6]+h6 | 0;
51487 h[7] = h[7]+h7 | 0;
51488 }
51489};
dc55c6b0 51490</script>
ab78acc6 51491 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 51492WORDLISTS["english"] = [
ebd8d4e8
IC
51493"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
51494"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
51495"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
51496"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
51497"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
51498"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
51499"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
51500"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
51501"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
51502"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
51503"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
51504"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
51505"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
51506"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
51507"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
51508"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
51509"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
51510"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
51511"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
51512"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
51513"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
51514"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
51515"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
51516"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
51517"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
51518"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
51519"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
51520"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
51521"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
51522"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
51523"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
51524"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
51525"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
51526"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
51527"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
51528"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
51529"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
51530"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
51531"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
51532"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
51533"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
51534"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
51535"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
51536"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
51537"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
51538"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
51539"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
51540"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
51541"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
51542"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
51543"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
51544"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
51545"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
51546"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
51547"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
51548"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
51549"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
51550"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
51551"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
51552"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
51553"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
51554"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
51555"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
51556"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
51557"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
51558"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
51559"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
51560"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
51561"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
51562"film","filter","final","find","fine","finger","finish","fire","firm","first",
51563"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
51564"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
51565"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
51566"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
51567"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
51568"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
51569"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
51570"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
51571"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
51572"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
51573"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
51574"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
51575"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
51576"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
51577"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
51578"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
51579"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
51580"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
51581"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
51582"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
51583"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
51584"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
51585"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
51586"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
51587"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
51588"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
51589"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
51590"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
51591"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
51592"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
51593"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
51594"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
51595"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
51596"liar","liberty","library","license","life","lift","light","like","limb","limit",
51597"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
51598"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
51599"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
51600"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
51601"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
51602"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
51603"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
51604"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
51605"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
51606"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
51607"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
51608"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
51609"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
51610"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
51611"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
51612"network","neutral","never","news","next","nice","night","noble","noise","nominee",
51613"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
51614"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
51615"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
51616"oil","okay","old","olive","olympic","omit","once","one","onion","online",
51617"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
51618"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
51619"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
51620"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
51621"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
51622"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
51623"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
51624"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
51625"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
51626"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
51627"pole","police","pond","pony","pool","popular","portion","position","possible","post",
51628"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
51629"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
51630"prize","problem","process","produce","profit","program","project","promote","proof","property",
51631"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
51632"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
51633"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
51634"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
51635"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
51636"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
51637"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
51638"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
51639"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
51640"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
51641"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
51642"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
51643"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
51644"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
51645"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
51646"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
51647"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
51648"scrub","sea","search","season","seat","second","secret","section","security","seed",
51649"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
51650"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
51651"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
51652"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
51653"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
51654"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
51655"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
51656"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
51657"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
51658"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
51659"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
51660"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
51661"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
51662"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
51663"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
51664"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
51665"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
51666"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
51667"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
51668"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
51669"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
51670"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
51671"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
51672"thank","that","theme","then","theory","there","they","thing","this","thought",
51673"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
51674"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
51675"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
51676"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
51677"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
51678"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
51679"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
51680"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
51681"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
51682"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
51683"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
51684"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
51685"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
51686"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
51687"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
51688"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
51689"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
51690"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
51691"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
51692"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
51693"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
51694"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
51695"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
51696"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
51697"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
51698</script>
51699 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
51700WORDLISTS["japanese"] = [
51701"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
51702"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
51703"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
51704"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
51705"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
51706"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
51707"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
51708"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
51709"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
51710"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
51711"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
51712"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
51713"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
51714"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
51715"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
51716"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
51717"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
51718"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
51719"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
51720"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
51721"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
51722"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
51723"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
51724"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
51725"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
51726"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
51727"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
51728"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
51729"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
51730"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
51731"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
51732"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
51733"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
51734"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
51735"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
51736"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
51737"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
51738"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
51739"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
51740"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
51741"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
51742"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
51743"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
51744"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
51745"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
51746"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
51747"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
51748"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
51749"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
51750"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
51751"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
51752"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
51753"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
51754"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
51755"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
51756"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
51757"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
51758"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
51759"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
51760"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
51761"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
51762"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
51763"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
51764"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
51765"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
51766"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
51767"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
51768"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
51769"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
51770"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
51771"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
51772"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
51773"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
51774"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
51775"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
51776"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
51777"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
51778"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
51779"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
51780"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
51781"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
51782"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
51783"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
51784"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
51785"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
51786"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
51787"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
51788"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
51789"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
51790"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
51791"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
51792"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
51793"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
51794"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
51795"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
51796"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
51797"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
51798"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
51799"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
51800"せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
51801"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
51802"そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
51803"そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
51804"そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
51805"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
51806"ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
51807"たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
51808"だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
51809"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
51810"たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
51811"たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
51812"たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
51813"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
51814"ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
51815"たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
51816"たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
51817"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
51818"ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
51819"ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
51820"ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
51821"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
51822"ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
51823"つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
51824"つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
51825"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
51826"てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
51827"ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
51828"てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
51829"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
51830"てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
51831"でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
51832"でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
51833"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
51834"とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
51835"とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
51836"とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
51837"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
51838"ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
51839"なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
51840"なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
51841"ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
51842"にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
51843"にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
51844"にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
51845"にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
51846"にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
51847"ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
51848"ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
51849"ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
51850"ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
51851"ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
51852"のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
51853"のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
51854"ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
51855"はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
51856"はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
51857"はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
51858"はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
51859"はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
51860"はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
51861"はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
51862"ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
51863"ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
51864"ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
51865"ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
51866"ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
51867"ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
51868"ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
51869"ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
51870"ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
51871"ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
51872"ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
51873"ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
51874"へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
51875"へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
51876"へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
51877"ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
51878"ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
51879"ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
51880"ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
51881"まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
51882"まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
51883"みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
51884"みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
51885"みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
51886"むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
51887"むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
51888"むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
51889"めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
51890"めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
51891"もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
51892"やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
51893"やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
51894"ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
51895"ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
51896"よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
51897"よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
51898"らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
51899"りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
51900"りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
51901"りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
51902"れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
51903"れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
51904"ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
51905"わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
51906</script>
51907 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
51908WORDLISTS["spanish"] = [
51909"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
51910"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
51911"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
51912"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
51913"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
51914"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
51915"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
51916"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
51917"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
51918"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
51919"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
51920"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
51921"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
51922"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
51923"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
51924"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
51925"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
51926"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
51927"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
51928"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
51929"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
51930"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
51931"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
51932"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
51933"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
51934"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
51935"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
51936"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
51937"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
51938"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
51939"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
51940"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
51941"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
51942"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
51943"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
51944"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
51945"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
51946"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
51947"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
51948"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
51949"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
51950"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
51951"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
51952"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
51953"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
51954"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
51955"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
51956"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
51957"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
51958"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
51959"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
51960"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
51961"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
51962"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
51963"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
51964"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
51965"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
51966"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
51967"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
51968"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
51969"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
51970"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
51971"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
51972"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
51973"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
51974"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
51975"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
51976"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
51977"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
51978"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
51979"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
51980"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
51981"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
51982"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
51983"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
51984"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
51985"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
51986"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
51987"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
51988"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
51989"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
51990"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
51991"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
51992"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
51993"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
51994"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
51995"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
51996"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
51997"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
51998"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
51999"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
52000"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
52001"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
52002"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
52003"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
52004"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
52005"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
52006"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
52007"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
52008"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
52009"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
52010"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
52011"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
52012"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
52013"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
52014"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
52015"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
52016"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
52017"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
52018"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
52019"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
52020"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
52021"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
52022"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
52023"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
52024"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
52025"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
52026"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
52027"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
52028"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
52029"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
52030"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
52031"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
52032"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
52033"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
52034"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
52035"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
52036"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
52037"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
52038"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
52039"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
52040"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
52041"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
52042"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
52043"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
52044"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
52045"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
52046"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
52047"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
52048"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
52049"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
52050"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
52051"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
52052"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
52053"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
52054"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
52055"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
52056"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
52057"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
52058"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
52059"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
52060"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
52061"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
52062"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
52063"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
52064"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
52065"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
52066"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
52067"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
52068"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
52069"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
52070"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
52071"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
52072"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
52073"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
52074"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
52075"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
52076"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
52077"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
52078"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
52079"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
52080"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
52081"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
52082"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
52083"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
52084"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
52085"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
52086"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
52087"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
52088"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
52089"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
52090"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
52091"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
52092"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
52093"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
52094"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
52095"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
52096"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
52097"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
52098"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
52099"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
52100"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
52101"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
52102"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
52103"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
52104"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
52105"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
52106"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
52107"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
52108"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
52109"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
52110"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
52111"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
52112"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
52113"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
52114</script>
52115 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
52116WORDLISTS["chinese_simplified"] = [
52117"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
52118"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
52119"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
52120"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
52121"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
52122"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
52123"民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
52124"度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
52125"二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
52126"两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
52127"去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
52128"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
52129"那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
52130"样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
52131"心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
52132"或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
52133"条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
52134"无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
52135"已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
52136"果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
52137"次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
52138"求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
52139"图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
52140"别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
52141"几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
52142"必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
52143"南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
52144"百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
52145"压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
52146"术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
52147"收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
52148"风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
52149"身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
52150"达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
52151"八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
52152"节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
52153"传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
52154"研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
52155"织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
52156"复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
52157"深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
52158"半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
52159"史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
52160"何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
52161"号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
52162"毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
52163"王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
52164"却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
52165"包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
52166"细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
52167"官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
52168"女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
52169"含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
52170"英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
52171"破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
52172"河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
52173"案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
52174"仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
52175"轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
52176"足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
52177"负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
52178"修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
52179"财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
52180"跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
52181"初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
52182"未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
52183"钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
52184"限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
52185"州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
52186"础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
52187"袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
52188"诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
52189"夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
52190"终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
52191"烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
52192"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
52193"侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
52194"货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
52195"息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
52196"医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
52197"训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
52198"脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
52199"械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
52200"粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
52201"钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
52202"培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
52203"答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
52204"脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
52205"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
52206"评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
52207"伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
52208"亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
52209"诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
52210"绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
52211"屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
52212"束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
52213"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
52214"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
52215"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
52216"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
52217"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
52218"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
52219"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
52220"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
52221"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
52222"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
52223"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
52224"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
52225"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
52226"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
52227"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
52228"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
52229"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
52230"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
52231"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
52232"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
52233"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
52234"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
52235"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
52236"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
52237"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
52238"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
52239"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
52240"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
52241"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
52242"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
52243"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
52244"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
52245"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
52246"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
52247"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
52248"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
52249"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
52250"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
52251"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
52252"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
52253"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
52254"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
52255"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
52256"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
52257"勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
52258"饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
52259"扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
52260"奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
52261"寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
52262"贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
52263"渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
52264"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
52265"锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
52266"缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
52267"碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
52268"票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
52269"荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
52270"撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
52271"陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
52272"虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
52273"乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
52274"瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
52275"秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
52276"洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
52277"籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
52278"醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
52279"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
52280"趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
52281"滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
52282"泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
52283"胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
52284"串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
52285"辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
52286"沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
52287"侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
52288"豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
52289"掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
52290"雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
52291"蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
52292"番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
52293"扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
52294"悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
52295"渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
52296"霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
52297"甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
52298"伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
52299"弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
52300"逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
52301"冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
52302"欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
52303"搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
52304"忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
52305"杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
52306"烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
52307"姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
52308"董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
52309"拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
52310"览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
52311"凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
52312"丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
52313"铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
52314"窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
52315"胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
52316"疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
52317"嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
52318"莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
52319"皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
52320"巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
52321"卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
52322</script>
52323 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
52324WORDLISTS["chinese_traditional"] = [
52325"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
52326"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
52327"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
52328"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
52329"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
52330"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
52331"民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
52332"度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
52333"二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
52334"兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
52335"去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
52336"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
52337"那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
52338"樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
52339"心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
52340"或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
52341"條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
52342"無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
52343"已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
52344"果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
52345"次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
52346"求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
52347"圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
52348"別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
52349"幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
52350"必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
52351"南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
52352"百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
52353"壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
52354"術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
52355"收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
52356"風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
52357"身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
52358"達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
52359"八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
52360"節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
52361"傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
52362"研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
52363"織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
52364"复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
52365"深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
52366"半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
52367"史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
52368"何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
52369"號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
52370"毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
52371"王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
52372"卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
52373"包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
52374"細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
52375"官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
52376"女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
52377"含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
52378"英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
52379"破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
52380"河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
52381"案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
52382"僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
52383"輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
52384"足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
52385"負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
52386"修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
52387"財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
52388"跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
52389"初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
52390"未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
52391"錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
52392"限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
52393"州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
52394"礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
52395"袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
52396"訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
52397"夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
52398"終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
52399"烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
52400"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
52401"侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
52402"貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
52403"息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
52404"醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
52405"訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
52406"脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
52407"械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
52408"粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
52409"鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
52410"培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
52411"答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
52412"腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
52413"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
52414"評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
52415"傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
52416"亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
52417"詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
52418"綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
52419"屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
52420"束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
52421"胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
52422"宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
52423"露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
52424"庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
52425"鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
52426"借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
52427"潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
52428"歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
52429"納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
52430"塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
52431"刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
52432"洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
52433"獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
52434"陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
52435"樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
52436"館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
52437"塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
52438"楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
52439"監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
52440"壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
52441"橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
52442"您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
52443"紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
52444"灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
52445"齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
52446"淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
52447"莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
52448"夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
52449"璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
52450"縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
52451"津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
52452"肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
52453"貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
52454"峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
52455"浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
52456"睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
52457"炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
52458"呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
52459"授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
52460"幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
52461"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
52462"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
52463"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
52464"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
52465"勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
52466"飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
52467"掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
52468"奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
52469"寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
52470"貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
52471"漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
52472"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
52473"銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
52474"缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
52475"碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
52476"票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
52477"荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
52478"撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
52479"陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
52480"蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
52481"乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
52482"瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
52483"秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
52484"洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
52485"籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
52486"醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
52487"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
52488"趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
52489"灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
52490"泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
52491"脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
52492"串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
52493"輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
52494"沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
52495"僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
52496"豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
52497"掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
52498"霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
52499"蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
52500"番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
52501"扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
52502"悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
52503"渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
52504"黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
52505"甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
52506"偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
52507"弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
52508"逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
52509"冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
52510"欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
52511"搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
52512"憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
52513"杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
52514"烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
52515"姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
52516"董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
52517"拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
52518"覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
52519"兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
52520"叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
52521"鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
52522"窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
52523"胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
52524"瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
52525"嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
52526"蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
52527"皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
52528"巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
52529"卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
52530</script>
52531 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
52532WORDLISTS["french"] = [
52533"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
52534"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
52535"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
52536"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
52537"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
52538"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
52539"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
52540"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
52541"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
52542"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
52543"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
52544"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
52545"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
52546"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
52547"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
52548"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
52549"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
52550"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
52551"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
52552"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
52553"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
52554"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
52555"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
52556"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
52557"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
52558"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
52559"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
52560"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
52561"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
52562"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
52563"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
52564"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
52565"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
52566"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
52567"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
52568"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
52569"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
52570"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
52571"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
52572"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
52573"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
52574"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
52575"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
52576"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
52577"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
52578"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
52579"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
52580"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
52581"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
52582"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
52583"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
52584"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
52585"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
52586"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
52587"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
52588"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
52589"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
52590"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
52591"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
52592"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
52593"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
52594"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
52595"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
52596"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
52597"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
52598"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
52599"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
52600"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
52601"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
52602"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
52603"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
52604"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
52605"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
52606"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
52607"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
52608"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
52609"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
52610"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
52611"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
52612"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
52613"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
52614"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
52615"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
52616"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
52617"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
52618"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
52619"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
52620"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
52621"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
52622"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
52623"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
52624"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
52625"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
52626"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
52627"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
52628"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
52629"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
52630"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
52631"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
52632"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
52633"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
52634"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
52635"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
52636"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
52637"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
52638"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
52639"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
52640"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
52641"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
52642"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
52643"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
52644"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
52645"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
52646"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
52647"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
52648"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
52649"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
52650"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
52651"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
52652"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
52653"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
52654"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
52655"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
52656"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
52657"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
52658"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
52659"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
52660"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
52661"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
52662"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
52663"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
52664"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
52665"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
52666"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
52667"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
52668"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
52669"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
52670"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
52671"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
52672"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
52673"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
52674"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
52675"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
52676"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
52677"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
52678"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
52679"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
52680"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
52681"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
52682"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
52683"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
52684"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
52685"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
52686"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
52687"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
52688"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
52689"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
52690"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
52691"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
52692"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
52693"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
52694"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
52695"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
52696"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
52697"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
52698"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
52699"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
52700"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
52701"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
52702"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
52703"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
52704"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
52705"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
52706"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
52707"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
52708"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
52709"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
52710"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
52711"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
52712"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
52713"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
52714"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
52715"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
52716"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
52717"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
52718"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
52719"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
52720"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
52721"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
52722"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
52723"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
52724"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
52725"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
52726"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
52727"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
52728"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
52729"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
52730"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
52731"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
52732"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
52733"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
52734"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
52735"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
52736"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
52737"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
52738</script>
52739 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
52740WORDLISTS["italian"] = [
52741"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
52742"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
52743"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
52744"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
52745"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
52746"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
52747"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
52748"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
52749"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
52750"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
52751"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
52752"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
52753"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
52754"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
52755"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
52756"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
52757"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
52758"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
52759"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
52760"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
52761"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
52762"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
52763"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
52764"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
52765"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
52766"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
52767"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
52768"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
52769"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
52770"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
52771"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
52772"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
52773"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
52774"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
52775"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
52776"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
52777"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
52778"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
52779"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
52780"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
52781"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
52782"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
52783"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
52784"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
52785"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
52786"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
52787"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
52788"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
52789"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
52790"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
52791"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
52792"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
52793"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
52794"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
52795"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
52796"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
52797"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
52798"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
52799"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
52800"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
52801"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
52802"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
52803"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
52804"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
52805"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
52806"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
52807"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
52808"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
52809"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
52810"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
52811"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
52812"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
52813"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
52814"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
52815"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
52816"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
52817"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
52818"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
52819"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
52820"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
52821"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
52822"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
52823"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
52824"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
52825"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
52826"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
52827"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
52828"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
52829"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
52830"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
52831"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
52832"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
52833"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
52834"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
52835"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
52836"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
52837"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
52838"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
52839"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
52840"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
52841"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
52842"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
52843"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
52844"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
52845"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
52846"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
52847"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
52848"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
52849"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
52850"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
52851"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
52852"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
52853"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
52854"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
52855"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
52856"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
52857"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
52858"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
52859"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
52860"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
52861"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
52862"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
52863"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
52864"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
52865"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
52866"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
52867"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
52868"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
52869"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
52870"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
52871"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
52872"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
52873"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
52874"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
52875"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
52876"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
52877"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
52878"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
52879"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
52880"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
52881"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
52882"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
52883"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
52884"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
52885"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
52886"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
52887"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
52888"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
52889"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
52890"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
52891"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
52892"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
52893"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
52894"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
52895"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
52896"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
52897"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
52898"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
52899"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
52900"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
52901"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
52902"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
52903"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
52904"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
52905"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
52906"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
52907"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
52908"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
52909"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
52910"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
52911"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
52912"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
52913"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
52914"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
52915"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
52916"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
52917"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
52918"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
52919"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
52920"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
52921"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
52922"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
52923"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
52924"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
52925"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
52926"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
52927"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
52928"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
52929"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
52930"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
52931"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
52932"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
52933"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
52934"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
52935"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
52936"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
52937"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
52938"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
52939"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
52940"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
52941"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
52942"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
52943"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
52944"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
52945"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 52946</script>
ab78acc6 52947 <script>/*
3af2954a
IC
52948 * Copyright (c) 2013 Pavol Rusnak
52949 *
52950 * Permission is hereby granted, free of charge, to any person obtaining a copy of
52951 * this software and associated documentation files (the "Software"), to deal in
52952 * the Software without restriction, including without limitation the rights to
52953 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
52954 * of the Software, and to permit persons to whom the Software is furnished to do
52955 * so, subject to the following conditions:
52956 *
52957 * The above copyright notice and this permission notice shall be included in all
52958 * copies or substantial portions of the Software.
52959 *
52960 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
52961 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
52962 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
52963 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
52964 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
52965 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
52966 */
52967
52968/*
52969 * Javascript port from python by Ian Coleman
52970 *
80c4dd2a
IC
52971 * Requires code from sjcl
52972 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
52973 */
52974
52975var Mnemonic = function(language) {
52976
52977 var PBKDF2_ROUNDS = 2048;
52978 var RADIX = 2048;
52979
52980 var self = this;
52981 var wordlist = [];
52982
80c4dd2a
IC
52983 var hmacSHA512 = function(key) {
52984 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
52985 this.encrypt = function() {
52986 return hasher.encrypt.apply(hasher, arguments);
52987 };
52988 };
52989
3af2954a
IC
52990 function init() {
52991 wordlist = WORDLISTS[language];
52992 if (wordlist.length != RADIX) {
52993 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
52994 throw err;
52995 }
52996 }
52997
52998 self.generate = function(strength) {
52999 strength = strength || 128;
53000 var r = strength % 32;
53001 if (r > 0) {
53002 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
53003 }
53004 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
53005 if (!hasStrongCrypto) {
53006 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
53007 }
53008 var buffer = new Uint8Array(strength / 8);
53009 var data = crypto.getRandomValues(buffer);
53010 return self.toMnemonic(data);
53011 }
53012
80c4dd2a
IC
53013 self.toMnemonic = function(byteArray) {
53014 if (byteArray.length % 4 > 0) {
53015 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
53016 }
53017
53018 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
53019 var data = byteArrayToWordArray(byteArray);
53020 var hash = sjcl.hash.sha256.hash(data);
53021 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
53022
53023 // b is a binary string, eg '00111010101100...'
53024 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
53025 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
53026 //
53027 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
53028 // c = bin(int(h, 16))[2:].zfill(256)
53029 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
53030 var a = byteArrayToBinaryString(byteArray);
53031 var c = zfill(hexStringToBinaryString(h), 256);
53032 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
53033 // b = line1 + line2
53034 var b = a + d;
53035
53036 var result = [];
53037 var blen = b.length / 11;
53038 for (var i=0; i<blen; i++) {
53039 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
53040 result.push(wordlist[idx]);
53041 }
0515eeec 53042 return self.joinWords(result);
3af2954a
IC
53043 }
53044
53045 self.check = function(mnemonic) {
0515eeec 53046 var mnemonic = self.splitWords(mnemonic);
18abe53b 53047 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
3af2954a
IC
53048 return false
53049 }
53050 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
53051 var idx = [];
53052 for (var i=0; i<mnemonic.length; i++) {
53053 var word = mnemonic[i];
53054 var wordIndex = wordlist.indexOf(word);
53055 if (wordIndex == -1) {
53056 return false;
53057 }
53058 var binaryIndex = zfill(wordIndex.toString(2), 11);
53059 idx.push(binaryIndex);
53060 }
53061 var b = idx.join('');
53062 var l = b.length;
53063 //d = b[:l / 33 * 32]
53064 //h = b[-l / 33:]
53065 var d = b.substring(0, l / 33 * 32);
53066 var h = b.substring(l - l / 33, l);
53067 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 53068 var nd = binaryStringToWordArray(d);
3af2954a 53069 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
53070 var ndHash = sjcl.hash.sha256.hash(nd);
53071 var ndHex = sjcl.codec.hex.fromBits(ndHash);
53072 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
53073 var nh = ndBstr.substring(0,l/33);
53074 return h == nh;
53075 }
53076
53077 self.toSeed = function(mnemonic, passphrase) {
53078 passphrase = passphrase || '';
599fb39e
IC
53079 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
53080 var mnemonicNormalized = self.normalizeString(mnemonic);
3af2954a
IC
53081 passphrase = self.normalizeString(passphrase)
53082 passphrase = "mnemonic" + passphrase;
599fb39e 53083 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
80c4dd2a
IC
53084 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
53085 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
53086 var hashHex = sjcl.codec.hex.fromBits(result);
53087 return hashHex;
3af2954a
IC
53088 }
53089
0515eeec
IC
53090 self.splitWords = function(mnemonic) {
53091 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
53092 }
53093
53094 self.joinWords = function(words) {
53095 // Set space correctly depending on the language
53096 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
53097 var space = " ";
53098 if (language == "japanese") {
53099 space = "\u3000"; // ideographic space
53100 }
53101 return words.join(space);
53102 }
53103
3af2954a
IC
53104 self.normalizeString = function(str) {
53105 if (typeof str.normalize == "function") {
53106 return str.normalize("NFKD");
53107 }
53108 else {
53109 // TODO decide how to handle this in the future.
53110 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
53111 return str;
53112 }
53113 }
53114
80c4dd2a
IC
53115 function byteArrayToWordArray(data) {
53116 var a = [];
53117 for (var i=0; i<data.length/4; i++) {
53118 v = 0;
53119 v += data[i*4 + 0] << 8 * 3;
53120 v += data[i*4 + 1] << 8 * 2;
53121 v += data[i*4 + 2] << 8 * 1;
53122 v += data[i*4 + 3] << 8 * 0;
53123 a.push(v);
53124 }
53125 return a;
53126 }
53127
3af2954a
IC
53128 function byteArrayToBinaryString(data) {
53129 var bin = "";
53130 for (var i=0; i<data.length; i++) {
53131 bin += zfill(data[i].toString(2), 8);
53132 }
53133 return bin;
53134 }
53135
80c4dd2a
IC
53136 function hexStringToBinaryString(hexString) {
53137 binaryString = "";
53138 for (var i=0; i<hexString.length; i++) {
53139 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
53140 }
53141 return binaryString;
53142 }
53143
53144 function binaryStringToWordArray(binary) {
53145 var aLen = binary.length / 32;
53146 var a = [];
53147 for (var i=0; i<aLen; i++) {
53148 var valueStr = binary.substring(0,32);
3af2954a 53149 var value = parseInt(valueStr, 2);
80c4dd2a
IC
53150 a.push(value);
53151 binary = binary.slice(32);
3af2954a 53152 }
80c4dd2a 53153 return a;
3af2954a
IC
53154 }
53155
53156 // Pad a numeric string on the left with zero digits until the given width
53157 // is reached.
53158 // Note this differs to the python implementation because it does not
53159 // handle numbers starting with a sign.
53160 function zfill(source, length) {
53161 source = source.toString();
53162 while (source.length < length) {
53163 source = '0' + source;
53164 }
53165 return source;
53166 }
53167
53168 init();
ebd8d4e8 53169
3af2954a 53170}
dc55c6b0 53171</script>
95f04905
IC
53172 <script>/*
53173 JavaScript BigInteger library version 0.9.1
53174 http://silentmatt.com/biginteger/
18abe53b 53175
95f04905
IC
53176 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
53177 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
53178 Licensed under the MIT license.
c6624d51 53179
95f04905
IC
53180 Support for arbitrary internal representation base was added by
53181 Vitaly Magerya.
53182*/
18abe53b 53183
95f04905
IC
53184/*
53185 File: biginteger.js
18abe53b 53186
95f04905 53187 Exports:
18abe53b 53188
95f04905
IC
53189 <BigInteger>
53190*/
53191(function(exports) {
53192"use strict";
53193/*
53194 Class: BigInteger
53195 An arbitrarily-large integer.
18abe53b 53196
95f04905
IC
53197 <BigInteger> objects should be considered immutable. None of the "built-in"
53198 methods modify *this* or their arguments. All properties should be
53199 considered private.
18abe53b 53200
95f04905
IC
53201 All the methods of <BigInteger> instances can be called "statically". The
53202 static versions are convenient if you don't already have a <BigInteger>
53203 object.
18abe53b 53204
95f04905 53205 As an example, these calls are equivalent.
18abe53b 53206
95f04905
IC
53207 > BigInteger(4).multiply(5); // returns BigInteger(20);
53208 > BigInteger.multiply(4, 5); // returns BigInteger(20);
18abe53b 53209
95f04905
IC
53210 > var a = 42;
53211 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
53212*/
c6624d51 53213
95f04905 53214var CONSTRUCT = {}; // Unique token to call "private" version of constructor
c6624d51
IC
53215
53216/*
53217 Constructor: BigInteger()
53218 Convert a value to a <BigInteger>.
53219
53220 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
53221 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
53222 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
53223 without a radix argument.
53224
53225 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
53226 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
53227 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
53228 > var n3 = BigInteger(n2); // Return n2, unchanged
53229
53230 The constructor form only takes an array and a sign. *n* must be an
53231 array of numbers in little-endian order, where each digit is between 0
53232 and BigInteger.base. The second parameter sets the sign: -1 for
53233 negative, +1 for positive, or 0 for zero. The array is *not copied and
53234 may be modified*. If the array contains only zeros, the sign parameter
53235 is ignored and is forced to zero.
53236
53237 > new BigInteger([5], -1): create a new BigInteger with value -5
53238
53239 Parameters:
53240
53241 n - Value to convert to a <BigInteger>.
53242
53243 Returns:
53244
53245 A <BigInteger> value.
53246
53247 See Also:
53248
53249 <parse>, <BigInteger>
53250*/
53251function BigInteger(n, s, token) {
53252 if (token !== CONSTRUCT) {
53253 if (n instanceof BigInteger) {
53254 return n;
53255 }
53256 else if (typeof n === "undefined") {
53257 return ZERO;
53258 }
53259 return BigInteger.parse(n);
53260 }
53261
53262 n = n || []; // Provide the nullary constructor for subclasses.
53263 while (n.length && !n[n.length - 1]) {
53264 --n.length;
53265 }
53266 this._d = n;
53267 this._s = n.length ? (s || 1) : 0;
53268}
53269
53270BigInteger._construct = function(n, s) {
53271 return new BigInteger(n, s, CONSTRUCT);
53272};
53273
53274// Base-10 speedup hacks in parse, toString, exp10 and log functions
53275// require base to be a power of 10. 10^7 is the largest such power
53276// that won't cause a precision loss when digits are multiplied.
53277var BigInteger_base = 10000000;
53278var BigInteger_base_log10 = 7;
53279
53280BigInteger.base = BigInteger_base;
53281BigInteger.base_log10 = BigInteger_base_log10;
53282
53283var ZERO = new BigInteger([], 0, CONSTRUCT);
53284// Constant: ZERO
53285// <BigInteger> 0.
53286BigInteger.ZERO = ZERO;
53287
53288var ONE = new BigInteger([1], 1, CONSTRUCT);
53289// Constant: ONE
53290// <BigInteger> 1.
53291BigInteger.ONE = ONE;
53292
53293var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
53294// Constant: M_ONE
53295// <BigInteger> -1.
53296BigInteger.M_ONE = M_ONE;
53297
53298// Constant: _0
53299// Shortcut for <ZERO>.
53300BigInteger._0 = ZERO;
53301
53302// Constant: _1
53303// Shortcut for <ONE>.
53304BigInteger._1 = ONE;
53305
53306/*
53307 Constant: small
53308 Array of <BigIntegers> from 0 to 36.
53309
53310 These are used internally for parsing, but useful when you need a "small"
53311 <BigInteger>.
53312
53313 See Also:
53314
53315 <ZERO>, <ONE>, <_0>, <_1>
53316*/
53317BigInteger.small = [
53318 ZERO,
53319 ONE,
53320 /* Assuming BigInteger_base > 36 */
53321 new BigInteger( [2], 1, CONSTRUCT),
53322 new BigInteger( [3], 1, CONSTRUCT),
53323 new BigInteger( [4], 1, CONSTRUCT),
53324 new BigInteger( [5], 1, CONSTRUCT),
53325 new BigInteger( [6], 1, CONSTRUCT),
53326 new BigInteger( [7], 1, CONSTRUCT),
53327 new BigInteger( [8], 1, CONSTRUCT),
53328 new BigInteger( [9], 1, CONSTRUCT),
53329 new BigInteger([10], 1, CONSTRUCT),
53330 new BigInteger([11], 1, CONSTRUCT),
53331 new BigInteger([12], 1, CONSTRUCT),
53332 new BigInteger([13], 1, CONSTRUCT),
53333 new BigInteger([14], 1, CONSTRUCT),
53334 new BigInteger([15], 1, CONSTRUCT),
53335 new BigInteger([16], 1, CONSTRUCT),
53336 new BigInteger([17], 1, CONSTRUCT),
53337 new BigInteger([18], 1, CONSTRUCT),
53338 new BigInteger([19], 1, CONSTRUCT),
53339 new BigInteger([20], 1, CONSTRUCT),
53340 new BigInteger([21], 1, CONSTRUCT),
53341 new BigInteger([22], 1, CONSTRUCT),
53342 new BigInteger([23], 1, CONSTRUCT),
53343 new BigInteger([24], 1, CONSTRUCT),
53344 new BigInteger([25], 1, CONSTRUCT),
53345 new BigInteger([26], 1, CONSTRUCT),
53346 new BigInteger([27], 1, CONSTRUCT),
53347 new BigInteger([28], 1, CONSTRUCT),
53348 new BigInteger([29], 1, CONSTRUCT),
53349 new BigInteger([30], 1, CONSTRUCT),
53350 new BigInteger([31], 1, CONSTRUCT),
53351 new BigInteger([32], 1, CONSTRUCT),
53352 new BigInteger([33], 1, CONSTRUCT),
53353 new BigInteger([34], 1, CONSTRUCT),
53354 new BigInteger([35], 1, CONSTRUCT),
53355 new BigInteger([36], 1, CONSTRUCT)
53356];
53357
53358// Used for parsing/radix conversion
53359BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
53360
53361/*
53362 Method: toString
53363 Convert a <BigInteger> to a string.
53364
53365 When *base* is greater than 10, letters are upper case.
53366
53367 Parameters:
53368
53369 base - Optional base to represent the number in (default is base 10).
53370 Must be between 2 and 36 inclusive, or an Error will be thrown.
53371
53372 Returns:
53373
53374 The string representation of the <BigInteger>.
53375*/
53376BigInteger.prototype.toString = function(base) {
53377 base = +base || 10;
53378 if (base < 2 || base > 36) {
53379 throw new Error("illegal radix " + base + ".");
53380 }
53381 if (this._s === 0) {
53382 return "0";
53383 }
53384 if (base === 10) {
53385 var str = this._s < 0 ? "-" : "";
53386 str += this._d[this._d.length - 1].toString();
53387 for (var i = this._d.length - 2; i >= 0; i--) {
53388 var group = this._d[i].toString();
53389 while (group.length < BigInteger_base_log10) group = '0' + group;
53390 str += group;
53391 }
53392 return str;
53393 }
53394 else {
53395 var numerals = BigInteger.digits;
53396 base = BigInteger.small[base];
53397 var sign = this._s;
53398
53399 var n = this.abs();
53400 var digits = [];
53401 var digit;
53402
53403 while (n._s !== 0) {
53404 var divmod = n.divRem(base);
53405 n = divmod[0];
53406 digit = divmod[1];
53407 // TODO: This could be changed to unshift instead of reversing at the end.
53408 // Benchmark both to compare speeds.
53409 digits.push(numerals[digit.valueOf()]);
53410 }
53411 return (sign < 0 ? "-" : "") + digits.reverse().join("");
53412 }
53413};
53414
53415// Verify strings for parsing
53416BigInteger.radixRegex = [
53417 /^$/,
53418 /^$/,
53419 /^[01]*$/,
53420 /^[012]*$/,
53421 /^[0-3]*$/,
53422 /^[0-4]*$/,
53423 /^[0-5]*$/,
53424 /^[0-6]*$/,
53425 /^[0-7]*$/,
53426 /^[0-8]*$/,
53427 /^[0-9]*$/,
53428 /^[0-9aA]*$/,
53429 /^[0-9abAB]*$/,
53430 /^[0-9abcABC]*$/,
53431 /^[0-9a-dA-D]*$/,
53432 /^[0-9a-eA-E]*$/,
53433 /^[0-9a-fA-F]*$/,
53434 /^[0-9a-gA-G]*$/,
53435 /^[0-9a-hA-H]*$/,
53436 /^[0-9a-iA-I]*$/,
53437 /^[0-9a-jA-J]*$/,
53438 /^[0-9a-kA-K]*$/,
53439 /^[0-9a-lA-L]*$/,
53440 /^[0-9a-mA-M]*$/,
53441 /^[0-9a-nA-N]*$/,
53442 /^[0-9a-oA-O]*$/,
53443 /^[0-9a-pA-P]*$/,
53444 /^[0-9a-qA-Q]*$/,
53445 /^[0-9a-rA-R]*$/,
53446 /^[0-9a-sA-S]*$/,
53447 /^[0-9a-tA-T]*$/,
53448 /^[0-9a-uA-U]*$/,
53449 /^[0-9a-vA-V]*$/,
53450 /^[0-9a-wA-W]*$/,
53451 /^[0-9a-xA-X]*$/,
53452 /^[0-9a-yA-Y]*$/,
53453 /^[0-9a-zA-Z]*$/
53454];
53455
53456/*
53457 Function: parse
53458 Parse a string into a <BigInteger>.
53459
53460 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
53461 *base* is not provided, it will be guessed based on the leading characters
53462 of *s* as follows:
53463
53464 - "0x" or "0X": *base* = 16
53465 - "0c" or "0C": *base* = 8
53466 - "0b" or "0B": *base* = 2
53467 - else: *base* = 10
53468
53469 If no base is provided, or *base* is 10, the number can be in exponential
53470 form. For example, these are all valid:
53471
53472 > BigInteger.parse("1e9"); // Same as "1000000000"
53473 > BigInteger.parse("1.234*10^3"); // Same as 1234
53474 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
53475
53476 If any characters fall outside the range defined by the radix, an exception
53477 will be thrown.
53478
53479 Parameters:
53480
53481 s - The string to parse.
53482 base - Optional radix (default is to guess based on *s*).
53483
53484 Returns:
53485
53486 a <BigInteger> instance.
53487*/
53488BigInteger.parse = function(s, base) {
53489 // Expands a number in exponential form to decimal form.
53490 // expandExponential("-13.441*10^5") === "1344100";
53491 // expandExponential("1.12300e-1") === "0.112300";
53492 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
53493 function expandExponential(str) {
53494 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
53495
53496 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
53497 c = +c;
53498 var l = c < 0;
53499 var i = n.length + c;
53500 x = (l ? n : f).length;
53501 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
53502 var z = (new Array(c + 1)).join("0");
53503 var r = n + f;
53504 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
53505 });
53506 }
53507
53508 s = s.toString();
53509 if (typeof base === "undefined" || +base === 10) {
53510 s = expandExponential(s);
53511 }
53512
53513 var prefixRE;
53514 if (typeof base === "undefined") {
53515 prefixRE = '0[xcb]';
53516 }
53517 else if (base == 16) {
53518 prefixRE = '0x';
53519 }
53520 else if (base == 8) {
53521 prefixRE = '0c';
53522 }
53523 else if (base == 2) {
53524 prefixRE = '0b';
53525 }
53526 else {
53527 prefixRE = '';
53528 }
53529 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
53530 if (parts) {
53531 var sign = parts[1] || "+";
53532 var baseSection = parts[2] || "";
53533 var digits = parts[3] || "";
53534
53535 if (typeof base === "undefined") {
53536 // Guess base
53537 if (baseSection === "0x" || baseSection === "0X") { // Hex
53538 base = 16;
53539 }
53540 else if (baseSection === "0c" || baseSection === "0C") { // Octal
53541 base = 8;
53542 }
53543 else if (baseSection === "0b" || baseSection === "0B") { // Binary
53544 base = 2;
53545 }
53546 else {
53547 base = 10;
53548 }
53549 }
53550 else if (base < 2 || base > 36) {
53551 throw new Error("Illegal radix " + base + ".");
53552 }
53553
53554 base = +base;
53555
53556 // Check for digits outside the range
53557 if (!(BigInteger.radixRegex[base].test(digits))) {
53558 throw new Error("Bad digit for radix " + base);
53559 }
53560
53561 // Strip leading zeros, and convert to array
53562 digits = digits.replace(/^0+/, "").split("");
53563 if (digits.length === 0) {
53564 return ZERO;
53565 }
53566
53567 // Get the sign (we know it's not zero)
53568 sign = (sign === "-") ? -1 : 1;
53569
53570 // Optimize 10
53571 if (base == 10) {
53572 var d = [];
53573 while (digits.length >= BigInteger_base_log10) {
53574 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
53575 }
53576 d.push(parseInt(digits.join(''), 10));
53577 return new BigInteger(d, sign, CONSTRUCT);
53578 }
53579
53580 // Do the conversion
53581 var d = ZERO;
53582 base = BigInteger.small[base];
53583 var small = BigInteger.small;
53584 for (var i = 0; i < digits.length; i++) {
53585 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
53586 }
53587 return new BigInteger(d._d, sign, CONSTRUCT);
53588 }
53589 else {
53590 throw new Error("Invalid BigInteger format: " + s);
53591 }
53592};
53593
53594/*
53595 Function: add
53596 Add two <BigIntegers>.
53597
53598 Parameters:
53599
53600 n - The number to add to *this*. Will be converted to a <BigInteger>.
53601
53602 Returns:
53603
53604 The numbers added together.
53605
53606 See Also:
53607
53608 <subtract>, <multiply>, <quotient>, <next>
53609*/
53610BigInteger.prototype.add = function(n) {
53611 if (this._s === 0) {
53612 return BigInteger(n);
53613 }
53614
53615 n = BigInteger(n);
53616 if (n._s === 0) {
53617 return this;
53618 }
53619 if (this._s !== n._s) {
53620 n = n.negate();
53621 return this.subtract(n);
53622 }
53623
53624 var a = this._d;
53625 var b = n._d;
53626 var al = a.length;
53627 var bl = b.length;
53628 var sum = new Array(Math.max(al, bl) + 1);
53629 var size = Math.min(al, bl);
53630 var carry = 0;
53631 var digit;
53632
53633 for (var i = 0; i < size; i++) {
53634 digit = a[i] + b[i] + carry;
53635 sum[i] = digit % BigInteger_base;
53636 carry = (digit / BigInteger_base) | 0;
53637 }
53638 if (bl > al) {
53639 a = b;
53640 al = bl;
53641 }
53642 for (i = size; carry && i < al; i++) {
53643 digit = a[i] + carry;
53644 sum[i] = digit % BigInteger_base;
53645 carry = (digit / BigInteger_base) | 0;
53646 }
53647 if (carry) {
53648 sum[i] = carry;
53649 }
53650
53651 for ( ; i < al; i++) {
53652 sum[i] = a[i];
53653 }
53654
53655 return new BigInteger(sum, this._s, CONSTRUCT);
53656};
53657
53658/*
53659 Function: negate
53660 Get the additive inverse of a <BigInteger>.
53661
53662 Returns:
53663
53664 A <BigInteger> with the same magnatude, but with the opposite sign.
53665
53666 See Also:
53667
53668 <abs>
53669*/
53670BigInteger.prototype.negate = function() {
53671 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
53672};
53673
53674/*
53675 Function: abs
53676 Get the absolute value of a <BigInteger>.
53677
53678 Returns:
53679
53680 A <BigInteger> with the same magnatude, but always positive (or zero).
53681
53682 See Also:
53683
53684 <negate>
53685*/
53686BigInteger.prototype.abs = function() {
53687 return (this._s < 0) ? this.negate() : this;
53688};
53689
53690/*
53691 Function: subtract
53692 Subtract two <BigIntegers>.
53693
53694 Parameters:
53695
53696 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
53697
53698 Returns:
53699
53700 The *n* subtracted from *this*.
53701
53702 See Also:
53703
53704 <add>, <multiply>, <quotient>, <prev>
53705*/
53706BigInteger.prototype.subtract = function(n) {
53707 if (this._s === 0) {
53708 return BigInteger(n).negate();
53709 }
53710
53711 n = BigInteger(n);
53712 if (n._s === 0) {
53713 return this;
53714 }
53715 if (this._s !== n._s) {
53716 n = n.negate();
53717 return this.add(n);
53718 }
53719
53720 var m = this;
53721 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
53722 if (this._s < 0) {
53723 m = new BigInteger(n._d, 1, CONSTRUCT);
53724 n = new BigInteger(this._d, 1, CONSTRUCT);
53725 }
53726
53727 // Both are positive => a - b
53728 var sign = m.compareAbs(n);
53729 if (sign === 0) {
53730 return ZERO;
53731 }
53732 else if (sign < 0) {
53733 // swap m and n
53734 var t = n;
53735 n = m;
53736 m = t;
53737 }
53738
53739 // a > b
53740 var a = m._d;
53741 var b = n._d;
53742 var al = a.length;
53743 var bl = b.length;
53744 var diff = new Array(al); // al >= bl since a > b
53745 var borrow = 0;
53746 var i;
53747 var digit;
53748
53749 for (i = 0; i < bl; i++) {
53750 digit = a[i] - borrow - b[i];
53751 if (digit < 0) {
53752 digit += BigInteger_base;
53753 borrow = 1;
53754 }
53755 else {
53756 borrow = 0;
53757 }
53758 diff[i] = digit;
53759 }
53760 for (i = bl; i < al; i++) {
53761 digit = a[i] - borrow;
53762 if (digit < 0) {
53763 digit += BigInteger_base;
53764 }
53765 else {
53766 diff[i++] = digit;
53767 break;
53768 }
53769 diff[i] = digit;
53770 }
53771 for ( ; i < al; i++) {
53772 diff[i] = a[i];
53773 }
53774
53775 return new BigInteger(diff, sign, CONSTRUCT);
53776};
53777
53778(function() {
53779 function addOne(n, sign) {
53780 var a = n._d;
53781 var sum = a.slice();
53782 var carry = true;
53783 var i = 0;
53784
53785 while (true) {
53786 var digit = (a[i] || 0) + 1;
53787 sum[i] = digit % BigInteger_base;
53788 if (digit <= BigInteger_base - 1) {
53789 break;
53790 }
53791 ++i;
53792 }
53793
53794 return new BigInteger(sum, sign, CONSTRUCT);
53795 }
53796
53797 function subtractOne(n, sign) {
53798 var a = n._d;
53799 var sum = a.slice();
53800 var borrow = true;
53801 var i = 0;
53802
53803 while (true) {
53804 var digit = (a[i] || 0) - 1;
53805 if (digit < 0) {
53806 sum[i] = digit + BigInteger_base;
53807 }
53808 else {
53809 sum[i] = digit;
53810 break;
53811 }
53812 ++i;
53813 }
53814
53815 return new BigInteger(sum, sign, CONSTRUCT);
53816 }
53817
53818 /*
53819 Function: next
53820 Get the next <BigInteger> (add one).
53821
53822 Returns:
53823
53824 *this* + 1.
53825
53826 See Also:
53827
53828 <add>, <prev>
53829 */
53830 BigInteger.prototype.next = function() {
53831 switch (this._s) {
53832 case 0:
53833 return ONE;
53834 case -1:
53835 return subtractOne(this, -1);
53836 // case 1:
53837 default:
53838 return addOne(this, 1);
53839 }
53840 };
53841
53842 /*
53843 Function: prev
53844 Get the previous <BigInteger> (subtract one).
53845
53846 Returns:
53847
53848 *this* - 1.
53849
53850 See Also:
53851
53852 <next>, <subtract>
53853 */
53854 BigInteger.prototype.prev = function() {
53855 switch (this._s) {
53856 case 0:
53857 return M_ONE;
53858 case -1:
53859 return addOne(this, -1);
53860 // case 1:
53861 default:
53862 return subtractOne(this, 1);
53863 }
53864 };
53865})();
53866
53867/*
53868 Function: compareAbs
53869 Compare the absolute value of two <BigIntegers>.
53870
53871 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
53872
53873 Parameters:
53874
53875 n - The number to compare to *this*. Will be converted to a <BigInteger>.
53876
53877 Returns:
53878
53879 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
53880
53881 See Also:
53882
53883 <compare>, <abs>
53884*/
53885BigInteger.prototype.compareAbs = function(n) {
53886 if (this === n) {
53887 return 0;
53888 }
53889
53890 if (!(n instanceof BigInteger)) {
53891 if (!isFinite(n)) {
53892 return(isNaN(n) ? n : -1);
53893 }
53894 n = BigInteger(n);
53895 }
53896
53897 if (this._s === 0) {
53898 return (n._s !== 0) ? -1 : 0;
53899 }
53900 if (n._s === 0) {
53901 return 1;
53902 }
53903
53904 var l = this._d.length;
53905 var nl = n._d.length;
53906 if (l < nl) {
53907 return -1;
53908 }
53909 else if (l > nl) {
53910 return 1;
53911 }
53912
53913 var a = this._d;
53914 var b = n._d;
53915 for (var i = l-1; i >= 0; i--) {
53916 if (a[i] !== b[i]) {
53917 return a[i] < b[i] ? -1 : 1;
53918 }
53919 }
53920
53921 return 0;
53922};
53923
53924/*
53925 Function: compare
53926 Compare two <BigIntegers>.
53927
53928 Parameters:
53929
53930 n - The number to compare to *this*. Will be converted to a <BigInteger>.
53931
53932 Returns:
53933
53934 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
53935
53936 See Also:
53937
53938 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
53939*/
53940BigInteger.prototype.compare = function(n) {
53941 if (this === n) {
53942 return 0;
53943 }
53944
53945 n = BigInteger(n);
53946
53947 if (this._s === 0) {
53948 return -n._s;
53949 }
53950
53951 if (this._s === n._s) { // both positive or both negative
53952 var cmp = this.compareAbs(n);
53953 return cmp * this._s;
53954 }
53955 else {
53956 return this._s;
53957 }
53958};
53959
53960/*
53961 Function: isUnit
53962 Return true iff *this* is either 1 or -1.
53963
53964 Returns:
53965
53966 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
53967
53968 See Also:
53969
53970 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
53971 <BigInteger.ONE>, <BigInteger.M_ONE>
53972*/
53973BigInteger.prototype.isUnit = function() {
53974 return this === ONE ||
53975 this === M_ONE ||
53976 (this._d.length === 1 && this._d[0] === 1);
53977};
53978
53979/*
53980 Function: multiply
53981 Multiply two <BigIntegers>.
53982
53983 Parameters:
53984
53985 n - The number to multiply *this* by. Will be converted to a
53986 <BigInteger>.
53987
53988 Returns:
53989
53990 The numbers multiplied together.
53991
53992 See Also:
53993
53994 <add>, <subtract>, <quotient>, <square>
53995*/
53996BigInteger.prototype.multiply = function(n) {
53997 // TODO: Consider adding Karatsuba multiplication for large numbers
53998 if (this._s === 0) {
53999 return ZERO;
54000 }
54001
54002 n = BigInteger(n);
54003 if (n._s === 0) {
54004 return ZERO;
54005 }
54006 if (this.isUnit()) {
54007 if (this._s < 0) {
54008 return n.negate();
54009 }
54010 return n;
54011 }
54012 if (n.isUnit()) {
54013 if (n._s < 0) {
54014 return this.negate();
54015 }
54016 return this;
54017 }
54018 if (this === n) {
54019 return this.square();
54020 }
54021
54022 var r = (this._d.length >= n._d.length);
54023 var a = (r ? this : n)._d; // a will be longer than b
54024 var b = (r ? n : this)._d;
54025 var al = a.length;
54026 var bl = b.length;
54027
54028 var pl = al + bl;
54029 var partial = new Array(pl);
54030 var i;
54031 for (i = 0; i < pl; i++) {
54032 partial[i] = 0;
54033 }
54034
54035 for (i = 0; i < bl; i++) {
54036 var carry = 0;
54037 var bi = b[i];
54038 var jlimit = al + i;
54039 var digit;
54040 for (var j = i; j < jlimit; j++) {
54041 digit = partial[j] + bi * a[j - i] + carry;
54042 carry = (digit / BigInteger_base) | 0;
54043 partial[j] = (digit % BigInteger_base) | 0;
54044 }
54045 if (carry) {
54046 digit = partial[j] + carry;
54047 carry = (digit / BigInteger_base) | 0;
54048 partial[j] = digit % BigInteger_base;
54049 }
54050 }
54051 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
54052};
54053
54054// Multiply a BigInteger by a single-digit native number
54055// Assumes that this and n are >= 0
54056// This is not really intended to be used outside the library itself
54057BigInteger.prototype.multiplySingleDigit = function(n) {
54058 if (n === 0 || this._s === 0) {
54059 return ZERO;
54060 }
54061 if (n === 1) {
54062 return this;
54063 }
54064
54065 var digit;
54066 if (this._d.length === 1) {
54067 digit = this._d[0] * n;
54068 if (digit >= BigInteger_base) {
54069 return new BigInteger([(digit % BigInteger_base)|0,
54070 (digit / BigInteger_base)|0], 1, CONSTRUCT);
54071 }
54072 return new BigInteger([digit], 1, CONSTRUCT);
54073 }
54074
54075 if (n === 2) {
54076 return this.add(this);
54077 }
54078 if (this.isUnit()) {
54079 return new BigInteger([n], 1, CONSTRUCT);
54080 }
54081
54082 var a = this._d;
54083 var al = a.length;
54084
54085 var pl = al + 1;
54086 var partial = new Array(pl);
54087 for (var i = 0; i < pl; i++) {
54088 partial[i] = 0;
54089 }
54090
54091 var carry = 0;
54092 for (var j = 0; j < al; j++) {
54093 digit = n * a[j] + carry;
54094 carry = (digit / BigInteger_base) | 0;
54095 partial[j] = (digit % BigInteger_base) | 0;
54096 }
54097 if (carry) {
54098 partial[j] = carry;
54099 }
54100
54101 return new BigInteger(partial, 1, CONSTRUCT);
54102};
54103
54104/*
54105 Function: square
54106 Multiply a <BigInteger> by itself.
54107
54108 This is slightly faster than regular multiplication, since it removes the
54109 duplicated multiplcations.
54110
54111 Returns:
54112
54113 > this.multiply(this)
54114
54115 See Also:
54116 <multiply>
54117*/
54118BigInteger.prototype.square = function() {
54119 // Normally, squaring a 10-digit number would take 100 multiplications.
54120 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
54121 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
54122 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
54123
54124 if (this._s === 0) {
54125 return ZERO;
54126 }
54127 if (this.isUnit()) {
54128 return ONE;
54129 }
54130
54131 var digits = this._d;
54132 var length = digits.length;
54133 var imult1 = new Array(length + length + 1);
54134 var product, carry, k;
54135 var i;
54136
54137 // Calculate diagonal
54138 for (i = 0; i < length; i++) {
54139 k = i * 2;
54140 product = digits[i] * digits[i];
54141 carry = (product / BigInteger_base) | 0;
54142 imult1[k] = product % BigInteger_base;
54143 imult1[k + 1] = carry;
54144 }
54145
54146 // Calculate repeating part
54147 for (i = 0; i < length; i++) {
54148 carry = 0;
54149 k = i * 2 + 1;
54150 for (var j = i + 1; j < length; j++, k++) {
54151 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
54152 carry = (product / BigInteger_base) | 0;
54153 imult1[k] = product % BigInteger_base;
54154 }
54155 k = length + i;
54156 var digit = carry + imult1[k];
54157 carry = (digit / BigInteger_base) | 0;
54158 imult1[k] = digit % BigInteger_base;
54159 imult1[k + 1] += carry;
54160 }
54161
54162 return new BigInteger(imult1, 1, CONSTRUCT);
54163};
54164
54165/*
54166 Function: quotient
54167 Divide two <BigIntegers> and truncate towards zero.
54168
54169 <quotient> throws an exception if *n* is zero.
54170
54171 Parameters:
54172
54173 n - The number to divide *this* by. Will be converted to a <BigInteger>.
54174
54175 Returns:
54176
54177 The *this* / *n*, truncated to an integer.
54178
54179 See Also:
54180
54181 <add>, <subtract>, <multiply>, <divRem>, <remainder>
54182*/
54183BigInteger.prototype.quotient = function(n) {
54184 return this.divRem(n)[0];
54185};
54186
54187/*
54188 Function: divide
54189 Deprecated synonym for <quotient>.
54190*/
54191BigInteger.prototype.divide = BigInteger.prototype.quotient;
54192
54193/*
54194 Function: remainder
54195 Calculate the remainder of two <BigIntegers>.
54196
54197 <remainder> throws an exception if *n* is zero.
54198
54199 Parameters:
54200
54201 n - The remainder after *this* is divided *this* by *n*. Will be
54202 converted to a <BigInteger>.
54203
54204 Returns:
54205
54206 *this* % *n*.
54207
54208 See Also:
54209
54210 <divRem>, <quotient>
54211*/
54212BigInteger.prototype.remainder = function(n) {
54213 return this.divRem(n)[1];
54214};
54215
54216/*
54217 Function: divRem
54218 Calculate the integer quotient and remainder of two <BigIntegers>.
54219
54220 <divRem> throws an exception if *n* is zero.
54221
54222 Parameters:
54223
54224 n - The number to divide *this* by. Will be converted to a <BigInteger>.
54225
54226 Returns:
54227
54228 A two-element array containing the quotient and the remainder.
54229
54230 > a.divRem(b)
54231
54232 is exactly equivalent to
54233
54234 > [a.quotient(b), a.remainder(b)]
54235
54236 except it is faster, because they are calculated at the same time.
54237
54238 See Also:
54239
54240 <quotient>, <remainder>
54241*/
54242BigInteger.prototype.divRem = function(n) {
54243 n = BigInteger(n);
54244 if (n._s === 0) {
54245 throw new Error("Divide by zero");
54246 }
54247 if (this._s === 0) {
54248 return [ZERO, ZERO];
54249 }
54250 if (n._d.length === 1) {
54251 return this.divRemSmall(n._s * n._d[0]);
54252 }
54253
54254 // Test for easy cases -- |n1| <= |n2|
54255 switch (this.compareAbs(n)) {
54256 case 0: // n1 == n2
54257 return [this._s === n._s ? ONE : M_ONE, ZERO];
54258 case -1: // |n1| < |n2|
54259 return [ZERO, this];
54260 }
54261
54262 var sign = this._s * n._s;
54263 var a = n.abs();
54264 var b_digits = this._d;
54265 var b_index = b_digits.length;
54266 var digits = n._d.length;
54267 var quot = [];
54268 var guess;
54269
54270 var part = new BigInteger([], 0, CONSTRUCT);
54271
54272 while (b_index) {
54273 part._d.unshift(b_digits[--b_index]);
54274 part = new BigInteger(part._d, 1, CONSTRUCT);
54275
54276 if (part.compareAbs(n) < 0) {
54277 quot.push(0);
54278 continue;
54279 }
54280 if (part._s === 0) {
54281 guess = 0;
54282 }
54283 else {
54284 var xlen = part._d.length, ylen = a._d.length;
54285 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
54286 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
54287 if (part._d.length > a._d.length) {
54288 // The length of part._d can either match a._d length,
54289 // or exceed it by one.
54290 highx = (highx+1)*BigInteger_base;
54291 }
54292 guess = Math.ceil(highx/highy);
54293 }
54294 do {
54295 var check = a.multiplySingleDigit(guess);
54296 if (check.compareAbs(part) <= 0) {
54297 break;
54298 }
54299 guess--;
54300 } while (guess);
54301
54302 quot.push(guess);
54303 if (!guess) {
54304 continue;
54305 }
54306 var diff = part.subtract(check);
54307 part._d = diff._d.slice();
54308 }
54309
54310 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
54311 new BigInteger(part._d, this._s, CONSTRUCT)];
54312};
54313
54314// Throws an exception if n is outside of (-BigInteger.base, -1] or
54315// [1, BigInteger.base). It's not necessary to call this, since the
54316// other division functions will call it if they are able to.
54317BigInteger.prototype.divRemSmall = function(n) {
54318 var r;
54319 n = +n;
54320 if (n === 0) {
54321 throw new Error("Divide by zero");
54322 }
54323
54324 var n_s = n < 0 ? -1 : 1;
54325 var sign = this._s * n_s;
54326 n = Math.abs(n);
54327
54328 if (n < 1 || n >= BigInteger_base) {
54329 throw new Error("Argument out of range");
54330 }
54331
54332 if (this._s === 0) {
54333 return [ZERO, ZERO];
54334 }
54335
54336 if (n === 1 || n === -1) {
54337 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
54338 }
54339
54340 // 2 <= n < BigInteger_base
54341
54342 // divide a single digit by a single digit
54343 if (this._d.length === 1) {
54344 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
54345 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
54346 if (sign < 0) {
54347 q = q.negate();
54348 }
54349 if (this._s < 0) {
54350 r = r.negate();
54351 }
54352 return [q, r];
54353 }
54354
54355 var digits = this._d.slice();
54356 var quot = new Array(digits.length);
54357 var part = 0;
54358 var diff = 0;
54359 var i = 0;
54360 var guess;
54361
54362 while (digits.length) {
54363 part = part * BigInteger_base + digits[digits.length - 1];
54364 if (part < n) {
54365 quot[i++] = 0;
54366 digits.pop();
54367 diff = BigInteger_base * diff + part;
54368 continue;
54369 }
54370 if (part === 0) {
54371 guess = 0;
54372 }
54373 else {
54374 guess = (part / n) | 0;
54375 }
54376
54377 var check = n * guess;
54378 diff = part - check;
54379 quot[i++] = guess;
54380 if (!guess) {
54381 digits.pop();
54382 continue;
54383 }
54384
54385 digits.pop();
54386 part = diff;
54387 }
54388
54389 r = new BigInteger([diff], 1, CONSTRUCT);
54390 if (this._s < 0) {
54391 r = r.negate();
54392 }
54393 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
54394};
54395
54396/*
54397 Function: isEven
54398 Return true iff *this* is divisible by two.
54399
54400 Note that <BigInteger.ZERO> is even.
54401
54402 Returns:
54403
54404 true if *this* is even, false otherwise.
54405
54406 See Also:
54407
54408 <isOdd>
54409*/
54410BigInteger.prototype.isEven = function() {
54411 var digits = this._d;
54412 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
54413};
54414
54415/*
54416 Function: isOdd
54417 Return true iff *this* is not divisible by two.
54418
54419 Returns:
54420
54421 true if *this* is odd, false otherwise.
54422
54423 See Also:
54424
54425 <isEven>
54426*/
54427BigInteger.prototype.isOdd = function() {
54428 return !this.isEven();
54429};
54430
54431/*
54432 Function: sign
54433 Get the sign of a <BigInteger>.
54434
54435 Returns:
54436
54437 * -1 if *this* < 0
54438 * 0 if *this* == 0
54439 * +1 if *this* > 0
54440
54441 See Also:
54442
54443 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
54444*/
54445BigInteger.prototype.sign = function() {
54446 return this._s;
54447};
54448
54449/*
54450 Function: isPositive
54451 Return true iff *this* > 0.
54452
54453 Returns:
54454
54455 true if *this*.compare(<BigInteger.ZERO>) == 1.
54456
54457 See Also:
54458
54459 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
54460*/
54461BigInteger.prototype.isPositive = function() {
54462 return this._s > 0;
54463};
54464
54465/*
54466 Function: isNegative
54467 Return true iff *this* < 0.
54468
54469 Returns:
54470
54471 true if *this*.compare(<BigInteger.ZERO>) == -1.
54472
54473 See Also:
54474
54475 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
54476*/
54477BigInteger.prototype.isNegative = function() {
54478 return this._s < 0;
54479};
54480
54481/*
54482 Function: isZero
54483 Return true iff *this* == 0.
54484
54485 Returns:
54486
54487 true if *this*.compare(<BigInteger.ZERO>) == 0.
54488
54489 See Also:
54490
54491 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
54492*/
54493BigInteger.prototype.isZero = function() {
54494 return this._s === 0;
54495};
54496
54497/*
54498 Function: exp10
54499 Multiply a <BigInteger> by a power of 10.
54500
54501 This is equivalent to, but faster than
54502
54503 > if (n >= 0) {
54504 > return this.multiply(BigInteger("1e" + n));
54505 > }
54506 > else { // n <= 0
54507 > return this.quotient(BigInteger("1e" + -n));
54508 > }
54509
54510 Parameters:
54511
54512 n - The power of 10 to multiply *this* by. *n* is converted to a
54513 javascipt number and must be no greater than <BigInteger.MAX_EXP>
54514 (0x7FFFFFFF), or an exception will be thrown.
54515
54516 Returns:
54517
54518 *this* * (10 ** *n*), truncated to an integer if necessary.
54519
54520 See Also:
54521
54522 <pow>, <multiply>
54523*/
54524BigInteger.prototype.exp10 = function(n) {
54525 n = +n;
54526 if (n === 0) {
54527 return this;
54528 }
54529 if (Math.abs(n) > Number(MAX_EXP)) {
54530 throw new Error("exponent too large in BigInteger.exp10");
54531 }
54532 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
54533 if (this._s === 0) {
54534 return ZERO;
54535 }
54536 if (n > 0) {
54537 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
54538
54539 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
54540 k._d.unshift(0);
54541 }
54542 if (n == 0)
54543 return k;
54544 k._s = 1;
54545 k = k.multiplySingleDigit(Math.pow(10, n));
54546 return (this._s < 0 ? k.negate() : k);
54547 } else if (-n >= this._d.length*BigInteger_base_log10) {
54548 return ZERO;
54549 } else {
54550 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
54551
54552 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
54553 k._d.shift();
54554 }
54555 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
54556 }
54557};
54558
54559/*
54560 Function: pow
54561 Raise a <BigInteger> to a power.
54562
54563 In this implementation, 0**0 is 1.
54564
54565 Parameters:
54566
54567 n - The exponent to raise *this* by. *n* must be no greater than
54568 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
54569
54570 Returns:
54571
54572 *this* raised to the *nth* power.
54573
54574 See Also:
54575
54576 <modPow>
54577*/
54578BigInteger.prototype.pow = function(n) {
54579 if (this.isUnit()) {
54580 if (this._s > 0) {
54581 return this;
54582 }
54583 else {
54584 return BigInteger(n).isOdd() ? this : this.negate();
54585 }
54586 }
54587
54588 n = BigInteger(n);
54589 if (n._s === 0) {
54590 return ONE;
54591 }
54592 else if (n._s < 0) {
54593 if (this._s === 0) {
54594 throw new Error("Divide by zero");
54595 }
54596 else {
54597 return ZERO;
54598 }
54599 }
54600 if (this._s === 0) {
54601 return ZERO;
54602 }
54603 if (n.isUnit()) {
54604 return this;
54605 }
54606
54607 if (n.compareAbs(MAX_EXP) > 0) {
54608 throw new Error("exponent too large in BigInteger.pow");
54609 }
54610 var x = this;
54611 var aux = ONE;
54612 var two = BigInteger.small[2];
54613
54614 while (n.isPositive()) {
54615 if (n.isOdd()) {
54616 aux = aux.multiply(x);
54617 if (n.isUnit()) {
54618 return aux;
54619 }
54620 }
54621 x = x.square();
54622 n = n.quotient(two);
54623 }
54624
54625 return aux;
54626};
54627
54628/*
54629 Function: modPow
54630 Raise a <BigInteger> to a power (mod m).
54631
54632 Because it is reduced by a modulus, <modPow> is not limited by
54633 <BigInteger.MAX_EXP> like <pow>.
54634
54635 Parameters:
54636
54637 exponent - The exponent to raise *this* by. Must be positive.
54638 modulus - The modulus.
54639
54640 Returns:
54641
54642 *this* ^ *exponent* (mod *modulus*).
54643
54644 See Also:
54645
54646 <pow>, <mod>
54647*/
54648BigInteger.prototype.modPow = function(exponent, modulus) {
54649 var result = ONE;
54650 var base = this;
54651
54652 while (exponent.isPositive()) {
54653 if (exponent.isOdd()) {
54654 result = result.multiply(base).remainder(modulus);
54655 }
54656
54657 exponent = exponent.quotient(BigInteger.small[2]);
54658 if (exponent.isPositive()) {
54659 base = base.square().remainder(modulus);
54660 }
54661 }
54662
54663 return result;
54664};
54665
54666/*
54667 Function: log
54668 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
54669
54670 This is equivalent to
54671
54672 > Math.log(this.toJSValue())
54673
54674 but handles values outside of the native number range.
54675
54676 Returns:
54677
54678 log( *this* )
54679
54680 See Also:
54681
54682 <toJSValue>
54683*/
54684BigInteger.prototype.log = function() {
54685 switch (this._s) {
54686 case 0: return -Infinity;
54687 case -1: return NaN;
54688 default: // Fall through.
54689 }
54690
54691 var l = this._d.length;
54692
54693 if (l*BigInteger_base_log10 < 30) {
54694 return Math.log(this.valueOf());
54695 }
54696
54697 var N = Math.ceil(30/BigInteger_base_log10);
54698 var firstNdigits = this._d.slice(l - N);
54699 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
54700};
54701
54702/*
54703 Function: valueOf
54704 Convert a <BigInteger> to a native JavaScript integer.
54705
54706 This is called automatically by JavaScipt to convert a <BigInteger> to a
54707 native value.
54708
54709 Returns:
54710
54711 > parseInt(this.toString(), 10)
54712
54713 See Also:
54714
54715 <toString>, <toJSValue>
54716*/
54717BigInteger.prototype.valueOf = function() {
54718 return parseInt(this.toString(), 10);
54719};
54720
54721/*
54722 Function: toJSValue
54723 Convert a <BigInteger> to a native JavaScript integer.
54724
54725 This is the same as valueOf, but more explicitly named.
54726
54727 Returns:
54728
54729 > parseInt(this.toString(), 10)
54730
54731 See Also:
54732
54733 <toString>, <valueOf>
54734*/
54735BigInteger.prototype.toJSValue = function() {
54736 return parseInt(this.toString(), 10);
54737};
54738
54739var MAX_EXP = BigInteger(0x7FFFFFFF);
54740// Constant: MAX_EXP
54741// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
54742BigInteger.MAX_EXP = MAX_EXP;
54743
54744(function() {
54745 function makeUnary(fn) {
54746 return function(a) {
54747 return fn.call(BigInteger(a));
54748 };
54749 }
54750
54751 function makeBinary(fn) {
54752 return function(a, b) {
54753 return fn.call(BigInteger(a), BigInteger(b));
54754 };
54755 }
54756
54757 function makeTrinary(fn) {
54758 return function(a, b, c) {
54759 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
54760 };
54761 }
54762
54763 (function() {
54764 var i, fn;
54765 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
54766 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
54767 var trinary = ["modPow"];
54768
54769 for (i = 0; i < unary.length; i++) {
54770 fn = unary[i];
54771 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
54772 }
54773
54774 for (i = 0; i < binary.length; i++) {
54775 fn = binary[i];
54776 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
54777 }
54778
54779 for (i = 0; i < trinary.length; i++) {
54780 fn = trinary[i];
54781 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
54782 }
54783
54784 BigInteger.exp10 = function(x, n) {
54785 return BigInteger(x).exp10(n);
54786 };
54787 })();
54788})();
54789
54790exports.BigInteger = BigInteger;
54791})(typeof exports !== 'undefined' ? exports : this);
95f04905
IC
54792</script>
54793 <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.zxcvbn = 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){
54794var adjacency_graphs;adjacency_graphs={qwerty:{"!":["`~",null,null,"2@","qQ",null],'"':[";:","[{","]}",null,null,"/?"],"#":["2@",null,null,"4$","eE","wW"],$:["3#",null,null,"5%","rR","eE"],"%":["4$",null,null,"6^","tT","rR"],"&":["6^",null,null,"8*","uU","yY"],"'":[";:","[{","]}",null,null,"/?"],"(":["8*",null,null,"0)","oO","iI"],")":["9(",null,null,"-_","pP","oO"],"*":["7&",null,null,"9(","iI","uU"],"+":["-_",null,null,null,"]}","[{"],",":["mM","kK","lL",".>",null,null],"-":["0)",null,null,"=+","[{","pP"],".":[",<","lL",";:","/?",null,null],"/":[".>",";:","'\"",null,null,null],0:["9(",null,null,"-_","pP","oO"],1:["`~",null,null,"2@","qQ",null],2:["1!",null,null,"3#","wW","qQ"],3:["2@",null,null,"4$","eE","wW"],4:["3#",null,null,"5%","rR","eE"],5:["4$",null,null,"6^","tT","rR"],6:["5%",null,null,"7&","yY","tT"],7:["6^",null,null,"8*","uU","yY"],8:["7&",null,null,"9(","iI","uU"],9:["8*",null,null,"0)","oO","iI"],":":["lL","pP","[{","'\"","/?",".>"],";":["lL","pP","[{","'\"","/?",".>"],"<":["mM","kK","lL",".>",null,null],"=":["-_",null,null,null,"]}","[{"],">":[",<","lL",";:","/?",null,null],"?":[".>",";:","'\"",null,null,null],"@":["1!",null,null,"3#","wW","qQ"],A:[null,"qQ","wW","sS","zZ",null],B:["vV","gG","hH","nN",null,null],C:["xX","dD","fF","vV",null,null],D:["sS","eE","rR","fF","cC","xX"],E:["wW","3#","4$","rR","dD","sS"],F:["dD","rR","tT","gG","vV","cC"],G:["fF","tT","yY","hH","bB","vV"],H:["gG","yY","uU","jJ","nN","bB"],I:["uU","8*","9(","oO","kK","jJ"],J:["hH","uU","iI","kK","mM","nN"],K:["jJ","iI","oO","lL",",<","mM"],L:["kK","oO","pP",";:",".>",",<"],M:["nN","jJ","kK",",<",null,null],N:["bB","hH","jJ","mM",null,null],O:["iI","9(","0)","pP","lL","kK"],P:["oO","0)","-_","[{",";:","lL"],Q:[null,"1!","2@","wW","aA",null],R:["eE","4$","5%","tT","fF","dD"],S:["aA","wW","eE","dD","xX","zZ"],T:["rR","5%","6^","yY","gG","fF"],U:["yY","7&","8*","iI","jJ","hH"],V:["cC","fF","gG","bB",null,null],W:["qQ","2@","3#","eE","sS","aA"],X:["zZ","sS","dD","cC",null,null],Y:["tT","6^","7&","uU","hH","gG"],Z:[null,"aA","sS","xX",null,null],"[":["pP","-_","=+","]}","'\"",";:"],"\\":["]}",null,null,null,null,null],"]":["[{","=+",null,"\\|",null,"'\""],"^":["5%",null,null,"7&","yY","tT"],_:["0)",null,null,"=+","[{","pP"],"`":[null,null,null,"1!",null,null],a:[null,"qQ","wW","sS","zZ",null],b:["vV","gG","hH","nN",null,null],c:["xX","dD","fF","vV",null,null],d:["sS","eE","rR","fF","cC","xX"],e:["wW","3#","4$","rR","dD","sS"],f:["dD","rR","tT","gG","vV","cC"],g:["fF","tT","yY","hH","bB","vV"],h:["gG","yY","uU","jJ","nN","bB"],i:["uU","8*","9(","oO","kK","jJ"],j:["hH","uU","iI","kK","mM","nN"],k:["jJ","iI","oO","lL",",<","mM"],l:["kK","oO","pP",";:",".>",",<"],m:["nN","jJ","kK",",<",null,null],n:["bB","hH","jJ","mM",null,null],o:["iI","9(","0)","pP","lL","kK"],p:["oO","0)","-_","[{",";:","lL"],q:[null,"1!","2@","wW","aA",null],r:["eE","4$","5%","tT","fF","dD"],s:["aA","wW","eE","dD","xX","zZ"],t:["rR","5%","6^","yY","gG","fF"],u:["yY","7&","8*","iI","jJ","hH"],v:["cC","fF","gG","bB",null,null],w:["qQ","2@","3#","eE","sS","aA"],x:["zZ","sS","dD","cC",null,null],y:["tT","6^","7&","uU","hH","gG"],z:[null,"aA","sS","xX",null,null],"{":["pP","-_","=+","]}","'\"",";:"],"|":["]}",null,null,null,null,null],"}":["[{","=+",null,"\\|",null,"'\""],"~":[null,null,null,"1!",null,null]},dvorak:{"!":["`~",null,null,"2@","'\"",null],'"':[null,"1!","2@",",<","aA",null],"#":["2@",null,null,"4$",".>",",<"],$:["3#",null,null,"5%","pP",".>"],"%":["4$",null,null,"6^","yY","pP"],"&":["6^",null,null,"8*","gG","fF"],"'":[null,"1!","2@",",<","aA",null],"(":["8*",null,null,"0)","rR","cC"],")":["9(",null,null,"[{","lL","rR"],"*":["7&",null,null,"9(","cC","gG"],"+":["/?","]}",null,"\\|",null,"-_"],",":["'\"","2@","3#",".>","oO","aA"],"-":["sS","/?","=+",null,null,"zZ"],".":[",<","3#","4$","pP","eE","oO"],"/":["lL","[{","]}","=+","-_","sS"],0:["9(",null,null,"[{","lL","rR"],1:["`~",null,null,"2@","'\"",null],2:["1!",null,null,"3#",",<","'\""],3:["2@",null,null,"4$",".>",",<"],4:["3#",null,null,"5%","pP",".>"],5:["4$",null,null,"6^","yY","pP"],6:["5%",null,null,"7&","fF","yY"],7:["6^",null,null,"8*","gG","fF"],8:["7&",null,null,"9(","cC","gG"],9:["8*",null,null,"0)","rR","cC"],":":[null,"aA","oO","qQ",null,null],";":[null,"aA","oO","qQ",null,null],"<":["'\"","2@","3#",".>","oO","aA"],"=":["/?","]}",null,"\\|",null,"-_"],">":[",<","3#","4$","pP","eE","oO"],"?":["lL","[{","]}","=+","-_","sS"],"@":["1!",null,null,"3#",",<","'\""],A:[null,"'\"",",<","oO",";:",null],B:["xX","dD","hH","mM",null,null],C:["gG","8*","9(","rR","tT","hH"],D:["iI","fF","gG","hH","bB","xX"],E:["oO",".>","pP","uU","jJ","qQ"],F:["yY","6^","7&","gG","dD","iI"],G:["fF","7&","8*","cC","hH","dD"],H:["dD","gG","cC","tT","mM","bB"],I:["uU","yY","fF","dD","xX","kK"],J:["qQ","eE","uU","kK",null,null],K:["jJ","uU","iI","xX",null,null],L:["rR","0)","[{","/?","sS","nN"],M:["bB","hH","tT","wW",null,null],N:["tT","rR","lL","sS","vV","wW"],O:["aA",",<",".>","eE","qQ",";:"],P:[".>","4$","5%","yY","uU","eE"],Q:[";:","oO","eE","jJ",null,null],R:["cC","9(","0)","lL","nN","tT"],S:["nN","lL","/?","-_","zZ","vV"],T:["hH","cC","rR","nN","wW","mM"],U:["eE","pP","yY","iI","kK","jJ"],V:["wW","nN","sS","zZ",null,null],W:["mM","tT","nN","vV",null,null],X:["kK","iI","dD","bB",null,null],Y:["pP","5%","6^","fF","iI","uU"],Z:["vV","sS","-_",null,null,null],"[":["0)",null,null,"]}","/?","lL"],"\\":["=+",null,null,null,null,null],"]":["[{",null,null,null,"=+","/?"],"^":["5%",null,null,"7&","fF","yY"],_:["sS","/?","=+",null,null,"zZ"],"`":[null,null,null,"1!",null,null],a:[null,"'\"",",<","oO",";:",null],b:["xX","dD","hH","mM",null,null],c:["gG","8*","9(","rR","tT","hH"],d:["iI","fF","gG","hH","bB","xX"],e:["oO",".>","pP","uU","jJ","qQ"],f:["yY","6^","7&","gG","dD","iI"],g:["fF","7&","8*","cC","hH","dD"],h:["dD","gG","cC","tT","mM","bB"],i:["uU","yY","fF","dD","xX","kK"],j:["qQ","eE","uU","kK",null,null],k:["jJ","uU","iI","xX",null,null],l:["rR","0)","[{","/?","sS","nN"],m:["bB","hH","tT","wW",null,null],n:["tT","rR","lL","sS","vV","wW"],o:["aA",",<",".>","eE","qQ",";:"],p:[".>","4$","5%","yY","uU","eE"],q:[";:","oO","eE","jJ",null,null],r:["cC","9(","0)","lL","nN","tT"],s:["nN","lL","/?","-_","zZ","vV"],t:["hH","cC","rR","nN","wW","mM"],u:["eE","pP","yY","iI","kK","jJ"],v:["wW","nN","sS","zZ",null,null],w:["mM","tT","nN","vV",null,null],x:["kK","iI","dD","bB",null,null],y:["pP","5%","6^","fF","iI","uU"],z:["vV","sS","-_",null,null,null],"{":["0)",null,null,"]}","/?","lL"],"|":["=+",null,null,null,null,null],"}":["[{",null,null,null,"=+","/?"],"~":[null,null,null,"1!",null,null]},keypad:{"*":["/",null,null,null,"-","+","9","8"],"+":["9","*","-",null,null,null,null,"6"],"-":["*",null,null,null,null,null,"+","9"],".":["0","2","3",null,null,null,null,null],"/":[null,null,null,null,"*","9","8","7"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6",null,null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","+",null,null,"3","2"],7:[null,null,null,"/","8","5","4",null],8:["7",null,"/","*","9","6","5","4"],9:["8","/","*","-","+",null,"6","5"]},mac_keypad:{"*":["/",null,null,null,null,null,"-","9"],"+":["6","9","-",null,null,null,null,"3"],"-":["9","/","*",null,null,null,"+","6"],".":["0","2","3",null,null,null,null,null],"/":["=",null,null,null,"*","-","9","8"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6","+",null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","-","+",null,"3","2"],7:[null,null,null,"=","8","5","4",null],8:["7",null,"=","/","9","6","5","4"],9:["8","=","/","*","-","+","6","5"],"=":[null,null,null,null,"/","9","8","7"]}},module.exports=adjacency_graphs;
54795
54796},{}],2:[function(require,module,exports){
54797var feedback,scoring;scoring=require("./scoring"),feedback={default_feedback:{warning:"",suggestions:["Use a few words, avoid common phrases","No need for symbols, digits, or uppercase letters"]},get_feedback:function(e,s){var a,t,r,n,o,i;if(0===s.length)return this.default_feedback;if(e>2)return{warning:"",suggestions:[]};for(n=s[0],i=s.slice(1),t=0,r=i.length;t<r;t++)o=i[t],o.token.length>n.token.length&&(n=o);return feedback=this.get_match_feedback(n,1===s.length),a="Add another word or two. Uncommon words are better.",null!=feedback?(feedback.suggestions.unshift(a),null==feedback.warning&&(feedback.warning="")):feedback={warning:"",suggestions:[a]},feedback},get_match_feedback:function(e,s){var a,t;switch(e.pattern){case"dictionary":return this.get_dictionary_match_feedback(e,s);case"spatial":return a=e.graph.toUpperCase(),t=1===e.turns?"Straight rows of keys are easy to guess":"Short keyboard patterns are easy to guess",{warning:t,suggestions:["Use a longer keyboard pattern with more turns"]};case"repeat":return t=1===e.base_token.length?'Repeats like "aaa" are easy to guess':'Repeats like "abcabcabc" are only slightly harder to guess than "abc"',{warning:t,suggestions:["Avoid repeated words and characters"]};case"sequence":return{warning:"Sequences like abc or 6543 are easy to guess",suggestions:["Avoid sequences"]};case"regex":if("recent_year"===e.regex_name)return{warning:"Recent years are easy to guess",suggestions:["Avoid recent years","Avoid years that are associated with you"]};break;case"date":return{warning:"Dates are often easy to guess",suggestions:["Avoid dates and years that are associated with you"]}}},get_dictionary_match_feedback:function(e,s){var a,t,r,n,o;return n="passwords"===e.dictionary_name?!s||e.l33t||e.reversed?e.guesses_log10<=4?"This is similar to a commonly used password":void 0:e.rank<=10?"This is a top-10 common password":e.rank<=100?"This is a top-100 common password":"This is a very common password":"english"===e.dictionary_name?s?"A word by itself is easy to guess":void 0:"surnames"===(a=e.dictionary_name)||"male_names"===a||"female_names"===a?s?"Names and surnames by themselves are easy to guess":"Common names and surnames are easy to guess":"",r=[],o=e.token,o.match(scoring.START_UPPER)?r.push("Capitalization doesn't help very much"):o.match(scoring.ALL_UPPER)&&o.toLowerCase()!==o&&r.push("All-uppercase is almost as easy to guess as all-lowercase"),e.reversed&&e.token.length>=4&&r.push("Reversed words aren't much harder to guess"),e.l33t&&r.push("Predictable substitutions like '@' instead of 'a' don't help very much"),t={warning:n,suggestions:r}}},module.exports=feedback;
54798
54799},{"./scoring":6}],3:[function(require,module,exports){
54800var frequency_lists;frequency_lists={passwords:"123456,password,12345678,qwerty,123456789,12345,1234,111111,1234567,dragon,123123,baseball,abc123,football,monkey,letmein,shadow,master,696969,mustang,666666,qwertyuiop,123321,1234567890,pussy,superman,654321,1qaz2wsx,7777777,fuckyou,qazwsx,jordan,123qwe,000000,killer,trustno1,hunter,harley,zxcvbnm,asdfgh,buster,batman,soccer,tigger,charlie,sunshine,iloveyou,fuckme,ranger,hockey,computer,starwars,asshole,pepper,klaster,112233,zxcvbn,freedom,princess,maggie,pass,ginger,11111111,131313,fuck,love,cheese,159753,summer,chelsea,dallas,biteme,matrix,yankees,6969,corvette,austin,access,thunder,merlin,secret,diamond,hello,hammer,fucker,1234qwer,silver,gfhjkm,internet,samantha,golfer,scooter,test,orange,cookie,q1w2e3r4t5,maverick,sparky,phoenix,mickey,bigdog,snoopy,guitar,whatever,chicken,camaro,mercedes,peanut,ferrari,falcon,cowboy,welcome,sexy,samsung,steelers,smokey,dakota,arsenal,boomer,eagles,tigers,marina,nascar,booboo,gateway,yellow,porsche,monster,spider,diablo,hannah,bulldog,junior,london,purple,compaq,lakers,iceman,qwer1234,hardcore,cowboys,money,banana,ncc1701,boston,tennis,q1w2e3r4,coffee,scooby,123654,nikita,yamaha,mother,barney,brandy,chester,fuckoff,oliver,player,forever,rangers,midnight,chicago,bigdaddy,redsox,angel,badboy,fender,jasper,slayer,rabbit,natasha,marine,bigdick,wizard,marlboro,raiders,prince,casper,fishing,flower,jasmine,iwantu,panties,adidas,winter,winner,gandalf,password1,enter,ghbdtn,1q2w3e4r,golden,cocacola,jordan23,winston,madison,angels,panther,blowme,sexsex,bigtits,spanky,bitch,sophie,asdfasdf,horny,thx1138,toyota,tiger,dick,canada,12344321,blowjob,8675309,muffin,liverpoo,apples,qwerty123,passw0rd,abcd1234,pokemon,123abc,slipknot,qazxsw,123456a,scorpion,qwaszx,butter,startrek,rainbow,asdfghjkl,razz,newyork,redskins,gemini,cameron,qazwsxedc,florida,liverpool,turtle,sierra,viking,booger,butthead,doctor,rocket,159357,dolphins,captain,bandit,jaguar,packers,pookie,peaches,789456,asdf,dolphin,helpme,blue,theman,maxwell,qwertyui,shithead,lovers,maddog,giants,nirvana,metallic,hotdog,rosebud,mountain,warrior,stupid,elephant,suckit,success,bond007,jackass,alexis,porn,lucky,scorpio,samson,q1w2e3,azerty,rush2112,driver,freddy,1q2w3e4r5t,sydney,gators,dexter,red123,123456q,12345a,bubba,creative,voodoo,golf,trouble,america,nissan,gunner,garfield,bullshit,asdfghjk,5150,fucking,apollo,1qazxsw2,2112,eminem,legend,airborne,bear,beavis,apple,brooklyn,godzilla,skippy,4815162342,buddy,qwert,kitten,magic,shelby,beaver,phantom,asdasd,xavier,braves,darkness,blink182,copper,platinum,qweqwe,tomcat,01012011,girls,bigboy,102030,animal,police,online,11223344,voyager,lifehack,12qwaszx,fish,sniper,315475,trinity,blazer,heaven,lover,snowball,playboy,loveme,bubbles,hooters,cricket,willow,donkey,topgun,nintendo,saturn,destiny,pakistan,pumpkin,digital,sergey,redwings,explorer,tits,private,runner,therock,guinness,lasvegas,beatles,789456123,fire,cassie,christin,qwerty1,celtic,asdf1234,andrey,broncos,007007,babygirl,eclipse,fluffy,cartman,michigan,carolina,testing,alexande,birdie,pantera,cherry,vampire,mexico,dickhead,buffalo,genius,montana,beer,minecraft,maximus,flyers,lovely,stalker,metallica,doggie,snickers,speedy,bronco,lol123,paradise,yankee,horses,magnum,dreams,147258369,lacrosse,ou812,goober,enigma,qwertyu,scotty,pimpin,bollocks,surfer,cock,poohbear,genesis,star,asd123,qweasdzxc,racing,hello1,hawaii,eagle1,viper,poopoo,einstein,boobies,12345q,bitches,drowssap,simple,badger,alaska,action,jester,drummer,111222,spitfire,forest,maryjane,champion,diesel,svetlana,friday,hotrod,147258,chevy,lucky1,westside,security,google,badass,tester,shorty,thumper,hitman,mozart,zaq12wsx,boobs,reddog,010203,lizard,a123456,123456789a,ruslan,eagle,1232323q,scarface,qwerty12,147852,a12345,buddha,porno,420420,spirit,money1,stargate,qwe123,naruto,mercury,liberty,12345qwert,semperfi,suzuki,popcorn,spooky,marley,scotland,kitty,cherokee,vikings,simpsons,rascal,qweasd,hummer,loveyou,michael1,patches,russia,jupiter,penguin,passion,cumshot,vfhbyf,honda,vladimir,sandman,passport,raider,bastard,123789,infinity,assman,bulldogs,fantasy,sucker,1234554321,horney,domino,budlight,disney,ironman,usuckballz1,softball,brutus,redrum,bigred,mnbvcxz,fktrcfylh,karina,marines,digger,kawasaki,cougar,fireman,oksana,monday,cunt,justice,nigger,super,wildcats,tinker,logitech,dancer,swordfis,avalon,everton,alexandr,motorola,patriots,hentai,madonna,pussy1,ducati,colorado,connor,juventus,galore,smooth,freeuser,warcraft,boogie,titanic,wolverin,elizabet,arizona,valentin,saints,asdfg,accord,test123,password123,christ,yfnfif,stinky,slut,spiderma,naughty,chopper,hello123,ncc1701d,extreme,skyline,poop,zombie,pearljam,123qweasd,froggy,awesome,vision,pirate,fylhtq,dreamer,bullet,predator,empire,123123a,kirill,charlie1,panthers,penis,skipper,nemesis,rasdzv3,peekaboo,rolltide,cardinal,psycho,danger,mookie,happy1,wanker,chevelle,manutd,goblue,9379992,hobbes,vegeta,fyfcnfcbz,852456,picard,159951,windows,loverboy,victory,vfrcbv,bambam,serega,123654789,turkey,tweety,galina,hiphop,rooster,changeme,berlin,taurus,suckme,polina,electric,avatar,134679,maksim,raptor,alpha1,hendrix,newport,bigcock,brazil,spring,a1b2c3,madmax,alpha,britney,sublime,darkside,bigman,wolfpack,classic,hercules,ronaldo,letmein1,1q2w3e,741852963,spiderman,blizzard,123456789q,cheyenne,cjkysirj,tiger1,wombat,bubba1,pandora,zxc123,holiday,wildcat,devils,horse,alabama,147852369,caesar,12312,buddy1,bondage,pussycat,pickle,shaggy,catch22,leather,chronic,a1b2c3d4,admin,qqq111,qaz123,airplane,kodiak,freepass,billybob,sunset,katana,phpbb,chocolat,snowman,angel1,stingray,firebird,wolves,zeppelin,detroit,pontiac,gundam,panzer,vagina,outlaw,redhead,tarheels,greenday,nastya,01011980,hardon,engineer,dragon1,hellfire,serenity,cobra,fireball,lickme,darkstar,1029384756,01011,mustang1,flash,124578,strike,beauty,pavilion,01012000,bobafett,dbrnjhbz,bigmac,bowling,chris1,ytrewq,natali,pyramid,rulez,welcome1,dodgers,apache,swimming,whynot,teens,trooper,fuckit,defender,precious,135790,packard,weasel,popeye,lucifer,cancer,icecream,142536,raven,swordfish,presario,viktor,rockstar,blonde,james1,wutang,spike,pimp,atlanta,airforce,thailand,casino,lennon,mouse,741852,hacker,bluebird,hawkeye,456123,theone,catfish,sailor,goldfish,nfnmzyf,tattoo,pervert,barbie,maxima,nipples,machine,trucks,wrangler,rocks,tornado,lights,cadillac,bubble,pegasus,madman,longhorn,browns,target,666999,eatme,qazwsx123,microsoft,dilbert,christia,baller,lesbian,shooter,xfiles,seattle,qazqaz,cthutq,amateur,prelude,corona,freaky,malibu,123qweasdzxc,assassin,246810,atlantis,integra,pussies,iloveu,lonewolf,dragons,monkey1,unicorn,software,bobcat,stealth,peewee,openup,753951,srinivas,zaqwsx,valentina,shotgun,trigger,veronika,bruins,coyote,babydoll,joker,dollar,lestat,rocky1,hottie,random,butterfly,wordpass,smiley,sweety,snake,chipper,woody,samurai,devildog,gizmo,maddie,soso123aljg,mistress,freedom1,flipper,express,hjvfirf,moose,cessna,piglet,polaris,teacher,montreal,cookies,wolfgang,scully,fatboy,wicked,balls,tickle,bunny,dfvgbh,foobar,transam,pepsi,fetish,oicu812,basketba,toshiba,hotstuff,sunday,booty,gambit,31415926,impala,stephani,jessica1,hooker,lancer,knicks,shamrock,fuckyou2,stinger,314159,redneck,deftones,squirt,siemens,blaster,trucker,subaru,renegade,ibanez,manson,swinger,reaper,blondie,mylove,galaxy,blahblah,enterpri,travel,1234abcd,babylon5,indiana,skeeter,master1,sugar,ficken,smoke,bigone,sweetpea,fucked,trfnthbyf,marino,escort,smitty,bigfoot,babes,larisa,trumpet,spartan,valera,babylon,asdfghj,yankees1,bigboobs,stormy,mister,hamlet,aardvark,butterfl,marathon,paladin,cavalier,manchester,skater,indigo,hornet,buckeyes,01011990,indians,karate,hesoyam,toronto,diamonds,chiefs,buckeye,1qaz2wsx3edc,highland,hotsex,charger,redman,passwor,maiden,drpepper,storm,pornstar,garden,12345678910,pencil,sherlock,timber,thuglife,insane,pizza,jungle,jesus1,aragorn,1a2b3c,hamster,david1,triumph,techno,lollol,pioneer,catdog,321654,fktrctq,morpheus,141627,pascal,shadow1,hobbit,wetpussy,erotic,consumer,blabla,justme,stones,chrissy,spartak,goforit,burger,pitbull,adgjmptw,italia,barcelona,hunting,colors,kissme,virgin,overlord,pebbles,sundance,emerald,doggy,racecar,irina,element,1478963,zipper,alpine,basket,goddess,poison,nipple,sakura,chichi,huskers,13579,pussys,q12345,ultimate,ncc1701e,blackie,nicola,rommel,matthew1,caserta,omega,geronimo,sammy1,trojan,123qwe123,philips,nugget,tarzan,chicks,aleksandr,bassman,trixie,portugal,anakin,dodger,bomber,superfly,madness,q1w2e3r4t5y6,loser,123asd,fatcat,ybrbnf,soldier,warlock,wrinkle1,desire,sexual,babe,seminole,alejandr,951753,11235813,westham,andrei,concrete,access14,weed,letmein2,ladybug,naked,christop,trombone,tintin,bluesky,rhbcnbyf,qazxswedc,onelove,cdtnkfyf,whore,vfvjxrf,titans,stallion,truck,hansolo,blue22,smiles,beagle,panama,kingkong,flatron,inferno,mongoose,connect,poiuyt,snatch,qawsed,juice,blessed,rocker,snakes,turbo,bluemoon,sex4me,finger,jamaica,a1234567,mulder,beetle,fuckyou1,passat,immortal,plastic,123454321,anthony1,whiskey,dietcoke,suck,spunky,magic1,monitor,cactus,exigen,planet,ripper,teen,spyder,apple1,nolimit,hollywoo,sluts,sticky,trunks,1234321,14789632,pickles,sailing,bonehead,ghbdtnbr,delta,charlott,rubber,911911,112358,molly1,yomama,hongkong,jumper,william1,ilovesex,faster,unreal,cumming,memphis,1123581321,nylons,legion,sebastia,shalom,pentium,geheim,werewolf,funtime,ferret,orion,curious,555666,niners,cantona,sprite,philly,pirates,abgrtyu,lollipop,eternity,boeing,super123,sweets,cooldude,tottenha,green1,jackoff,stocking,7895123,moomoo,martini,biscuit,drizzt,colt45,fossil,makaveli,snapper,satan666,maniac,salmon,patriot,verbatim,nasty,shasta,asdzxc,shaved,blackcat,raistlin,qwerty12345,punkrock,cjkywt,01012010,4128,waterloo,crimson,twister,oxford,musicman,seinfeld,biggie,condor,ravens,megadeth,wolfman,cosmos,sharks,banshee,keeper,foxtrot,gn56gn56,skywalke,velvet,black1,sesame,dogs,squirrel,privet,sunrise,wolverine,sucks,legolas,grendel,ghost,cats,carrot,frosty,lvbnhbq,blades,stardust,frog,qazwsxed,121314,coolio,brownie,groovy,twilight,daytona,vanhalen,pikachu,peanuts,licker,hershey,jericho,intrepid,ninja,1234567a,zaq123,lobster,goblin,punisher,strider,shogun,kansas,amadeus,seven7,jason1,neptune,showtime,muscle,oldman,ekaterina,rfrfirf,getsome,showme,111222333,obiwan,skittles,danni,tanker,maestro,tarheel,anubis,hannibal,anal,newlife,gothic,shark,fighter,blue123,blues,123456z,princes,slick,chaos,thunder1,sabine,1q2w3e4r5t6y,python,test1,mirage,devil,clover,tequila,chelsea1,surfing,delete,potato,chubby,panasonic,sandiego,portland,baggins,fusion,sooners,blackdog,buttons,californ,moscow,playtime,mature,1a2b3c4d,dagger,dima,stimpy,asdf123,gangster,warriors,iverson,chargers,byteme,swallow,liquid,lucky7,dingdong,nymets,cracker,mushroom,456852,crusader,bigguy,miami,dkflbvbh,bugger,nimrod,tazman,stranger,newpass,doodle,powder,gotcha,guardian,dublin,slapshot,septembe,147896325,pepsi1,milano,grizzly,woody1,knights,photos,2468,nookie,charly,rammstein,brasil,123321123,scruffy,munchkin,poopie,123098,kittycat,latino,walnut,1701,thegame,viper1,1passwor,kolobok,picasso,robert1,barcelon,bananas,trance,auburn,coltrane,eatshit,goodluck,starcraft,wheels,parrot,postal,blade,wisdom,pink,gorilla,katerina,pass123,andrew1,shaney14,dumbass,osiris,fuck_inside,oakland,discover,ranger1,spanking,lonestar,bingo,meridian,ping,heather1,dookie,stonecol,megaman,192837465,rjntyjr,ledzep,lowrider,25802580,richard1,firefly,griffey,racerx,paradox,ghjcnj,gangsta,zaq1xsw2,tacobell,weezer,sirius,halflife,buffett,shiloh,123698745,vertigo,sergei,aliens,sobaka,keyboard,kangaroo,sinner,soccer1,0.0.000,bonjour,socrates,chucky,hotboy,sprint,0007,sarah1,scarlet,celica,shazam,formula1,sommer,trebor,qwerasdf,jeep,mailcreated5240,bollox,asshole1,fuckface,honda1,rebels,vacation,lexmark,penguins,12369874,ragnarok,formula,258456,tempest,vfhecz,tacoma,qwertz,colombia,flames,rockon,duck,prodigy,wookie,dodgeram,mustangs,123qaz,sithlord,smoker,server,bang,incubus,scoobydo,oblivion,molson,kitkat,titleist,rescue,zxcv1234,carpet,1122,bigballs,tardis,jimbob,xanadu,blueeyes,shaman,mersedes,pooper,pussy69,golfing,hearts,mallard,12312312,kenwood,patrick1,dogg,cowboys1,oracle,123zxc,nuttertools,102938,topper,1122334455,shemale,sleepy,gremlin,yourmom,123987,gateway1,printer,monkeys,peterpan,mikey,kingston,cooler,analsex,jimbo,pa55word,asterix,freckles,birdman,frank1,defiant,aussie,stud,blondes,tatyana,445566,aspirine,mariners,jackal,deadhead,katrin,anime,rootbeer,frogger,polo,scooter1,hallo,noodles,thomas1,parola,shaolin,celine,11112222,plymouth,creampie,justdoit,ohyeah,fatass,assfuck,amazon,1234567q,kisses,magnus,camel,nopass,bosco,987456,6751520,harley1,putter,champs,massive,spidey,lightnin,camelot,letsgo,gizmodo,aezakmi,bones,caliente,12121,goodtime,thankyou,raiders1,brucelee,redalert,aquarius,456654,catherin,smokin,pooh,mypass,astros,roller,porkchop,sapphire,qwert123,kevin1,a1s2d3f4,beckham,atomic,rusty1,vanilla,qazwsxedcrfv,hunter1,kaktus,cxfcnmt,blacky,753159,elvis1,aggies,blackjac,bangkok,scream,123321q,iforgot,power1,kasper,abc12,buster1,slappy,shitty,veritas,chevrole,amber1,01012001,vader,amsterdam,jammer,primus,spectrum,eduard,granny,horny1,sasha1,clancy,usa123,satan,diamond1,hitler,avenger,1221,spankme,123456qwerty,simba,smudge,scrappy,labrador,john316,syracuse,front242,falcons,husker,candyman,commando,gator,pacman,delta1,pancho,krishna,fatman,clitoris,pineappl,lesbians,8j4ye3uz,barkley,vulcan,punkin,boner,celtics,monopoly,flyboy,romashka,hamburg,123456aa,lick,gangbang,223344,area51,spartans,aaa111,tricky,snuggles,drago,homerun,vectra,homer1,hermes,topcat,cuddles,infiniti,1234567890q,cosworth,goose,phoenix1,killer1,ivanov,bossman,qawsedrf,peugeot,exigent,doberman,durango,brandon1,plumber,telefon,horndog,laguna,rbhbkk,dawg,webmaster,breeze,beast,porsche9,beefcake,leopard,redbull,oscar1,topdog,godsmack,theking,pics,omega1,speaker,viktoria,fuckers,bowler,starbuck,gjkbyf,valhalla,anarchy,blacks,herbie,kingpin,starfish,nokia,loveit,achilles,906090,labtec,ncc1701a,fitness,jordan1,brando,arsenal1,bull,kicker,napass,desert,sailboat,bohica,tractor,hidden,muppet,jackson1,jimmy1,terminator,phillies,pa55w0rd,terror,farside,swingers,legacy,frontier,butthole,doughboy,jrcfyf,tuesday,sabbath,daniel1,nebraska,homers,qwertyuio,azamat,fallen,agent007,striker,camels,iguana,looker,pinkfloy,moloko,qwerty123456,dannyboy,luckydog,789654,pistol,whocares,charmed,skiing,select,franky,puppy,daniil,vladik,vette,vfrcbvrf,ihateyou,nevada,moneys,vkontakte,mandingo,puppies,666777,mystic,zidane,kotenok,dilligaf,budman,bunghole,zvezda,123457,triton,golfball,technics,trojans,panda,laptop,rookie,01011991,15426378,aberdeen,gustav,jethro,enterprise,igor,stripper,filter,hurrican,rfnthbyf,lespaul,gizmo1,butch,132435,dthjybrf,1366613,excalibu,963852,nofear,momoney,possum,cutter,oilers,moocow,cupcake,gbpltw,batman1,splash,svetik,super1,soleil,bogdan,melissa1,vipers,babyboy,tdutybq,lancelot,ccbill,keystone,passwort,flamingo,firefox,dogman,vortex,rebel,noodle,raven1,zaphod,killme,pokemon1,coolman,danila,designer,skinny,kamikaze,deadman,gopher,doobie,warhammer,deeznuts,freaks,engage,chevy1,steve1,apollo13,poncho,hammers,azsxdc,dracula,000007,sassy,bitch1,boots,deskjet,12332,macdaddy,mighty,rangers1,manchest,sterlin,casey1,meatball,mailman,sinatra,cthulhu,summer1,bubbas,cartoon,bicycle,eatpussy,truelove,sentinel,tolkien,breast,capone,lickit,summit,123456k,peter1,daisy1,kitty1,123456789z,crazy1,jamesbon,texas1,sexygirl,362436,sonic,billyboy,redhot,microsof,microlab,daddy1,rockets,iloveyo,fernand,gordon24,danie,cutlass,polska,star69,titties,pantyhos,01011985,thekid,aikido,gofish,mayday,1234qwe,coke,anfield,sony,lansing,smut,scotch,sexx,catman,73501505,hustler,saun,dfkthbz,passwor1,jenny1,azsxdcfv,cheers,irish1,gabrie,tinman,orioles,1225,charlton,fortuna,01011970,airbus,rustam,xtreme,bigmoney,zxcasd,retard,grumpy,huskies,boxing,4runner,kelly1,ultima,warlord,fordf150,oranges,rotten,asdfjkl,superstar,denali,sultan,bikini,saratoga,thor,figaro,sixers,wildfire,vladislav,128500,sparta,mayhem,greenbay,chewie,music1,number1,cancun,fabie,mellon,poiuytrewq,cloud9,crunch,bigtime,chicken1,piccolo,bigbird,321654987,billy1,mojo,01011981,maradona,sandro,chester1,bizkit,rjirfrgbde,789123,rightnow,jasmine1,hyperion,treasure,meatloaf,armani,rovers,jarhead,01011986,cruise,coconut,dragoon,utopia,davids,cosmo,rfhbyf,reebok,1066,charli,giorgi,sticks,sayang,pass1234,exodus,anaconda,zaqxsw,illini,woofwoof,emily1,sandy1,packer,poontang,govols,jedi,tomato,beaner,cooter,creamy,lionking,happy123,albatros,poodle,kenworth,dinosaur,greens,goku,happyday,eeyore,tsunami,cabbage,holyshit,turkey50,memorex,chaser,bogart,orgasm,tommy1,volley,whisper,knopka,ericsson,walleye,321123,pepper1,katie1,chickens,tyler1,corrado,twisted,100000,zorro,clemson,zxcasdqwe,tootsie,milana,zenith,fktrcfylhf,shania,frisco,polniypizdec0211,crazybab,junebug,fugazi,rereirf,vfvekz,1001,sausage,vfczyz,koshka,clapton,justin1,anhyeuem,condom,fubar,hardrock,skywalker,tundra,cocks,gringo,150781,canon,vitalik,aspire,stocks,samsung1,applepie,abc12345,arjay,gandalf1,boob,pillow,sparkle,gmoney,rockhard,lucky13,samiam,everest,hellyeah,bigsexy,skorpion,rfrnec,hedgehog,australi,candle,slacker,dicks,voyeur,jazzman,america1,bobby1,br0d3r,wolfie,vfksirf,1qa2ws3ed,13243546,fright,yosemite,temp,karolina,fart,barsik,surf,cheetah,baddog,deniska,starship,bootie,milena,hithere,kume,greatone,dildo,50cent,0.0.0.000,albion,amanda1,midget,lion,maxell,football1,cyclone,freeporn,nikola,bonsai,kenshin,slider,balloon,roadkill,killbill,222333,jerkoff,78945612,dinamo,tekken,rambler,goliath,cinnamon,malaka,backdoor,fiesta,packers1,rastaman,fletch,sojdlg123aljg,stefano,artemis,calico,nyjets,damnit,robotech,duchess,rctybz,hooter,keywest,18436572,hal9000,mechanic,pingpong,operator,presto,sword,rasputin,spank,bristol,faggot,shado,963852741,amsterda,321456,wibble,carrera,alibaba,majestic,ramses,duster,route66,trident,clipper,steeler,wrestlin,divine,kipper,gotohell,kingfish,snake1,passwords,buttman,pompey,viagra,zxcvbnm1,spurs,332211,slutty,lineage2,oleg,macross,pooter,brian1,qwert1,charles1,slave,jokers,yzerman,swimmer,ne1469,nwo4life,solnce,seamus,lolipop,pupsik,moose1,ivanova,secret1,matador,love69,420247,ktyjxrf,subway,cinder,vermont,pussie,chico,florian,magick,guiness,allsop,ghetto,flash1,a123456789,typhoon,dfkthf,depeche,skydive,dammit,seeker,fuckthis,crysis,kcj9wx5n,umbrella,r2d2c3po,123123q,snoopdog,critter,theboss,ding,162534,splinter,kinky,cyclops,jayhawk,456321,caramel,qwer123,underdog,caveman,onlyme,grapes,feather,hotshot,fuckher,renault,george1,sex123,pippen,000001,789987,floppy,cunts,megapass,1000,pornos,usmc,kickass,great1,quattro,135246,wassup,helloo,p0015123,nicole1,chivas,shannon1,bullseye,java,fishes,blackhaw,jamesbond,tunafish,juggalo,dkflbckfd,123789456,dallas1,translator,122333,beanie,alucard,gfhjkm123,supersta,magicman,ashley1,cohiba,xbox360,caligula,12131415,facial,7753191,dfktynbyf,cobra1,cigars,fang,klingon,bob123,safari,looser,10203,deepthroat,malina,200000,tazmania,gonzo,goalie,jacob1,monaco,cruiser,misfit,vh5150,tommyboy,marino13,yousuck,sharky,vfhufhbnf,horizon,absolut,brighton,123456r,death1,kungfu,maxx,forfun,mamapapa,enter1,budweise,banker,getmoney,kostya,qazwsx12,bigbear,vector,fallout,nudist,gunners,royals,chainsaw,scania,trader,blueboy,walrus,eastside,kahuna,qwerty1234,love123,steph,01011989,cypress,champ,undertaker,ybrjkfq,europa,snowboar,sabres,moneyman,chrisbln,minime,nipper,groucho,whitey,viewsonic,penthous,wolf359,fabric,flounder,coolguy,whitesox,passme,smegma,skidoo,thanatos,fucku2,snapple,dalejr,mondeo,thesims,mybaby,panasoni,sinbad,thecat,topher,frodo,sneakers,q123456,z1x2c3,alfa,chicago1,taylor1,ghjcnjnfr,cat123,olivier,cyber,titanium,0420,madison1,jabroni,dang,hambone,intruder,holly1,gargoyle,sadie1,static,poseidon,studly,newcastl,sexxxx,poppy,johannes,danzig,beastie,musica,buckshot,sunnyday,adonis,bluedog,bonkers,2128506,chrono,compute,spawn,01011988,turbo1,smelly,wapbbs,goldstar,ferrari1,778899,quantum,pisces,boomboom,gunnar,1024,test1234,florida1,nike,superman1,multiplelo,custom,motherlode,1qwerty,westwood,usnavy,apple123,daewoo,korn,stereo,sasuke,sunflowe,watcher,dharma,555777,mouse1,assholes,babyblue,123qwerty,marius,walmart,snoop,starfire,tigger1,paintbal,knickers,aaliyah,lokomotiv,theend,winston1,sapper,rover,erotica,scanner,racer,zeus,sexy69,doogie,bayern,joshua1,newbie,scott1,losers,droopy,outkast,martin1,dodge1,wasser,ufkbyf,rjycnfynby,thirteen,12345z,112211,hotred,deejay,hotpussy,192837,jessic,philippe,scout,panther1,cubbies,havefun,magpie,fghtkm,avalanch,newyork1,pudding,leonid,harry1,cbr600,audia4,bimmer,fucku,01011984,idontknow,vfvfgfgf,1357,aleksey,builder,01011987,zerocool,godfather,mylife,donuts,allmine,redfish,777888,sascha,nitram,bounce,333666,smokes,1x2zkg8w,rodman,stunner,zxasqw12,hoosier,hairy,beretta,insert,123456s,rtyuehe,francesc,tights,cheese1,micron,quartz,hockey1,gegcbr,searay,jewels,bogey,paintball,celeron,padres,bing,syncmaster,ziggy,simon1,beaches,prissy,diehard,orange1,mittens,aleksandra,queens,02071986,biggles,thongs,southpark,artur,twinkle,gretzky,rabota,cambiami,monalisa,gollum,chuckles,spike1,gladiator,whisky,spongebob,sexy1,03082006,mazafaka,meathead,4121,ou8122,barefoot,12345678q,cfitymrf,bigass,a1s2d3,kosmos,blessing,titty,clevelan,terrapin,ginger1,johnboy,maggot,clarinet,deeznutz,336699,stumpy,stoney,footbal,traveler,volvo,bucket,snapon,pianoman,hawkeyes,futbol,casanova,tango,goodboy,scuba,honey1,sexyman,warthog,mustard,abc1234,nickel,10203040,meowmeow,1012,boricua,prophet,sauron,12qwas,reefer,andromeda,crystal1,joker1,90210,goofy,loco,lovesex,triangle,whatsup,mellow,bengals,monster1,maste,01011910,lover1,love1,123aaa,sunshin,smeghead,hokies,sting,welder,rambo,cerberus,bunny1,rockford,monke,1q2w3e4r5,goldwing,gabriell,buzzard,crjhgbjy,james007,rainman,groove,tiberius,purdue,nokia6300,hayabusa,shou,jagger,diver,zigzag,poochie,usarmy,phish,redwood,redwing,12345679,salamander,silver1,abcd123,sputnik,boobie,ripple,eternal,12qw34er,thegreat,allstar,slinky,gesperrt,mishka,whiskers,pinhead,overkill,sweet1,rhfcjnrf,montgom240,sersolution,jamie1,starman,proxy,swords,nikolay,bacardi,rasta,badgirl,rebecca1,wildman,penny1,spaceman,1007,10101,logan1,hacked,bulldog1,helmet,windsor,buffy1,runescape,trapper,123451,banane,dbrnjh,ripken,12345qwe,frisky,shun,fester,oasis,lightning,ib6ub9,cicero,kool,pony,thedog,784512,01011992,megatron,illusion,edward1,napster,11223,squash,roadking,woohoo,19411945,hoosiers,01091989,tracker,bagira,midway,leavemealone,br549,14725836,235689,menace,rachel1,feng,laser,stoned,realmadrid,787898,balloons,tinkerbell,5551212,maria1,pobeda,heineken,sonics,moonlight,optimus,comet,orchid,02071982,jaybird,kashmir,12345678a,chuang,chunky,peach,mortgage,rulezzz,saleen,chuckie,zippy,fishing1,gsxr750,doghouse,maxim,reader,shai,buddah,benfica,chou,salomon,meister,eraser,blackbir,bigmike,starter,pissing,angus,deluxe,eagles1,hardcock,135792468,mian,seahawks,godfathe,bookworm,gregor,intel,talisman,blackjack,babyface,hawaiian,dogfood,zhong,01011975,sancho,ludmila,medusa,mortimer,123456654321,roadrunn,just4me,stalin,01011993,handyman,alphabet,pizzas,calgary,clouds,password2,cgfhnfr,f**k,cubswin,gong,lexus,max123,xxx123,digital1,gfhjkm1,7779311,missy1,michae,beautifu,gator1,1005,pacers,buddie,chinook,heckfy,dutchess,sally1,breasts,beowulf,darkman,jenn,tiffany1,zhei,quan,qazwsx1,satana,shang,idontkno,smiths,puddin,nasty1,teddybea,valkyrie,passwd,chao,boxster,killers,yoda,cheater,inuyasha,beast1,wareagle,foryou,dragonball,mermaid,bhbirf,teddy1,dolphin1,misty1,delphi,gromit,sponge,qazzaq,fytxrf,gameover,diao,sergi,beamer,beemer,kittykat,rancid,manowar,adam12,diggler,assword,austin1,wishbone,gonavy,sparky1,fisting,thedude,sinister,1213,venera,novell,salsero,jayden,fuckoff1,linda1,vedder,02021987,1pussy,redline,lust,jktymrf,02011985,dfcbkbq,dragon12,chrome,gamecube,titten,cong,bella1,leng,02081988,eureka,bitchass,147369,banner,lakota,123321a,mustafa,preacher,hotbox,02041986,z1x2c3v4,playstation,01011977,claymore,electra,checkers,zheng,qing,armagedon,02051986,wrestle,svoboda,bulls,nimbus,alenka,madina,newpass6,onetime,aa123456,bartman,02091987,silverad,electron,12345t,devil666,oliver1,skylar,rhtdtlrj,gobucks,johann,12011987,milkman,02101985,camper,thunderb,bigbutt,jammin,davide,cheeks,goaway,lighter,claudi,thumbs,pissoff,ghostrider,cocaine,teng,squall,lotus,hootie,blackout,doitnow,subzero,02031986,marine1,02021988,pothead,123456qw,skate,1369,peng,antoni,neng,miao,bcfields,1492,marika,794613,musashi,tulips,nong,piao,chai,ruan,southpar,02061985,nude,mandarin,654123,ninjas,cannabis,jetski,xerxes,zhuang,kleopatra,dickie,bilbo,pinky,morgan1,1020,1017,dieter,baseball1,tottenham,quest,yfnfkmz,dirtbike,1234567890a,mango,jackson5,ipswich,iamgod,02011987,tdutybz,modena,qiao,slippery,qweasd123,bluefish,samtron,toon,111333,iscool,02091986,petrov,fuzzy,zhou,1357924680,mollydog,deng,02021986,1236987,pheonix,zhun,ghblehjr,othello,starcraf,000111,sanfran,a11111,cameltoe,badman,vasilisa,jiang,1qaz2ws,luan,sveta,12qw12,akira,chuai,369963,cheech,beatle,pickup,paloma,01011983,caravan,elizaveta,gawker,banzai,pussey,mullet,seng,bingo1,bearcat,flexible,farscape,borussia,zhuai,templar,guitar1,toolman,yfcntymrf,chloe1,xiang,slave1,guai,nuggets,02081984,mantis,slim,scorpio1,fyutkbyf,thedoors,02081987,02061986,123qq123,zappa,fergie,7ugd5hip2j,huai,asdfzxcv,sunflower,pussyman,deadpool,bigtit,01011982,love12,lassie,skyler,gatorade,carpedie,jockey,mancity,spectre,02021984,cameron1,artemka,reng,02031984,iomega,jing,moritz,spice,rhino,spinner,heater,zhai,hover,talon,grease,qiong,corleone,ltybcrf,tian,cowboy1,hippie,chimera,ting,alex123,02021985,mickey1,corsair,sonoma,aaron1,xxxpass,bacchus,webmaste,chuo,xyz123,chrysler,spurs1,artem,shei,cosmic,01020304,deutsch,gabriel1,123455,oceans,987456321,binladen,latinas,a12345678,speedo,buttercu,02081989,21031988,merlot,millwall,ceng,kotaku,jiong,dragonba,2580,stonecold,snuffy,01011999,02011986,hellos,blaze,maggie1,slapper,istanbul,bonjovi,babylove,mazda,bullfrog,phoeni,meng,porsche1,nomore,02061989,bobdylan,capslock,orion1,zaraza,teddybear,ntktajy,myname,rong,wraith,mets,niao,02041984,smokie,chevrolet,dialog,gfhjkmgfhjkm,dotcom,vadim,monarch,athlon,mikey1,hamish,pian,liang,coolness,chui,thoma,ramones,ciccio,chippy,eddie1,house1,ning,marker,cougars,jackpot,barbados,reds,pdtplf,knockers,cobalt,amateurs,dipshit,napoli,kilroy,pulsar,jayhawks,daemon,alexey,weng,shuang,9293709b13,shiner,eldorado,soulmate,mclaren,golfer1,andromed,duan,50spanks,sexyboy,dogshit,02021983,shuo,kakashka,syzygy,111111a,yeahbaby,qiang,netscape,fulham,120676,gooner,zhui,rainbow6,laurent,dog123,halifax,freeway,carlitos,147963,eastwood,microphone,monkey12,1123,persik,coldbeer,geng,nuan,danny1,fgtkmcby,entropy,gadget,just4fun,sophi,baggio,carlito,1234567891,02021989,02041983,specialk,piramida,suan,bigblue,salasana,hopeful,mephisto,bailey1,hack,annie1,generic,violetta,spencer1,arcadia,02051983,hondas,9562876,trainer,jones1,smashing,liao,159632,iceberg,rebel1,snooker,temp123,zang,matteo,fastball,q2w3e4r5,bamboo,fuckyo,shutup,astro,buddyboy,nikitos,redbird,maxxxx,shitface,02031987,kuai,kissmyass,sahara,radiohea,1234asdf,wildcard,maxwell1,patric,plasma,heynow,bruno1,shao,bigfish,misfits,sassy1,sheng,02011988,02081986,testpass,nanook,cygnus,licking,slavik,pringles,xing,1022,ninja1,submit,dundee,tiburon,pinkfloyd,yummy,shuai,guang,chopin,obelix,insomnia,stroker,1a2s3d4f,1223,playboy1,lazarus,jorda,spider1,homerj,sleeper,02041982,darklord,cang,02041988,02041987,tripod,magician,jelly,telephon,15975,vsjasnel12,pasword,iverson3,pavlov,homeboy,gamecock,amigo,brodie,budapest,yjdsqgfhjkm,reckless,02011980,pang,tiger123,2469,mason1,orient,01011979,zong,cdtnbr,maksimka,1011,bushido,taxman,giorgio,sphinx,kazantip,02101984,concorde,verizon,lovebug,georg,sam123,seadoo,qazwsxedc123,jiao,jezebel,pharmacy,abnormal,jellybea,maxime,puffy,islander,bunnies,jiggaman,drakon,010180,pluto,zhjckfd,12365,classics,crusher,mordor,hooligan,strawberry,02081985,scrabble,hawaii50,1224,wg8e3wjf,cthtuf,premium,arrow,123456qwe,mazda626,ramrod,tootie,rhjrjlbk,ghost1,1211,bounty,niang,02071984,goat,killer12,sweetnes,porno1,masamune,426hemi,corolla,mariposa,hjccbz,doomsday,bummer,blue12,zhao,bird33,excalibur,samsun,kirsty,buttfuck,kfhbcf,zhuo,marcello,ozzy,02021982,dynamite,655321,master12,123465,lollypop,stepan,1qa2ws,spiker,goirish,callum,michael2,moonbeam,attila,henry1,lindros,andrea1,sporty,lantern,12365478,nextel,violin,volcom,998877,water1,imation,inspiron,dynamo,citadel,placebo,clowns,tiao,02061988,tripper,dabears,haggis,merlin1,02031985,anthrax,amerika,iloveme,vsegda,burrito,bombers,snowboard,forsaken,katarina,a1a2a3,woofer,tigger2,fullmoon,tiger2,spock,hannah1,snoopy1,sexxxy,sausages,stanislav,cobain,robotics,exotic,green123,mobydick,senators,pumpkins,fergus,asddsa,147741,258852,windsurf,reddevil,vfitymrf,nevermind,nang,woodland,4417,mick,shui,q1q2q3,wingman,69696,superb,zuan,ganesh,pecker,zephyr,anastasiya,icu812,larry1,02081982,broker,zalupa,mihail,vfibyf,dogger,7007,paddle,varvara,schalke,1z2x3c,presiden,yankees2,tuning,poopy,02051982,concord,vanguard,stiffy,rjhjktdf,felix1,wrench,firewall,boxer,bubba69,popper,02011984,temppass,gobears,cuan,tipper,fuckme1,kamila,thong,puss,bigcat,drummer1,02031982,sowhat,digimon,tigers1,rang,jingle,bian,uranus,soprano,mandy1,dusty1,fandango,aloha,pumpkin1,postman,02061980,dogcat,bombay,pussy123,onetwo,highheel,pippo,julie1,laura1,pepito,beng,smokey1,stylus,stratus,reload,duckie,karen1,jimbo1,225588,369258,krusty,snappy,asdf12,electro,111qqq,kuang,fishin,clit,abstr,christma,qqqqq1,1234560,carnage,guyver,boxers,kittens,zeng,1000000,qwerty11,toaster,cramps,yugioh,02061987,icehouse,zxcvbnm123,pineapple,namaste,harrypotter,mygirl,falcon1,earnhard,fender1,spikes,nutmeg,01081989,dogboy,02091983,369852,softail,mypassword,prowler,bigboss,1112,harvest,heng,jubilee,killjoy,basset,keng,zaqxswcde,redsox1,biao,titan,misfit99,robot,wifey,kidrock,02101987,gameboy,enrico,1z2x3c4v,broncos1,arrows,havana,banger,cookie1,chriss,123qw,platypus,cindy1,lumber,pinball,foxy,london1,1023,05051987,02041985,password12,superma,longbow,radiohead,nigga,12051988,spongebo,qwert12345,abrakadabra,dodgers1,02101989,chillin,niceguy,pistons,hookup,santafe,bigben,jets,1013,vikings1,mankind,viktoriya,beardog,hammer1,02071980,reddwarf,magelan,longjohn,jennife,gilles,carmex2,02071987,stasik,bumper,doofus,slamdunk,pixies,garion,steffi,alessandro,beerman,niceass,warrior1,honolulu,134679852,visa,johndeer,mother1,windmill,boozer,oatmeal,aptiva,busty,delight,tasty,slick1,bergkamp,badgers,guitars,puffin,02091981,nikki1,irishman,miller1,zildjian,123000,airwolf,magnet,anai,install,02041981,02061983,astra,romans,megan1,mudvayne,freebird,muscles,dogbert,02091980,02091984,snowflak,01011900,mang,joseph1,nygiants,playstat,junior1,vjcrdf,qwer12,webhompas,giraffe,pelican,jefferso,comanche,bruiser,monkeybo,kjkszpj,123456l,micro,albany,02051987,angel123,epsilon,aladin,death666,hounddog,josephin,altima,chilly,02071988,78945,ultra,02041979,gasman,thisisit,pavel,idunno,kimmie,05051985,paulie,ballin,medion,moondog,manolo,pallmall,climber,fishbone,genesis1,153624,toffee,tbone,clippers,krypton,jerry1,picturs,compass,111111q,02051988,1121,02081977,sairam,getout,333777,cobras,22041987,bigblock,severin,booster,norwich,whiteout,ctrhtn,123456m,02061984,hewlett,shocker,fuckinside,02031981,chase1,white1,versace,123456789s,basebal,iloveyou2,bluebell,08031986,anthon,stubby,foreve,undertak,werder,saiyan,mama123,medic,chipmunk,mike123,mazdarx7,qwe123qwe,bowwow,kjrjvjnbd,celeb,choochoo,demo,lovelife,02051984,colnago,lithium,02051989,15051981,zzzxxx,welcom,anastasi,fidelio,franc,26061987,roadster,stone55,drifter,hookem,hellboy,1234qw,cbr900rr,sinned,good123654,storm1,gypsy,zebra,zachary1,toejam,buceta,02021979,testing1,redfox,lineage,mike1,highbury,koroleva,nathan1,washingt,02061982,02091985,vintage,redbaron,dalshe,mykids,11051987,macbeth,julien,james123,krasotka,111000,10011986,987123,pipeline,tatarin,sensei,codered,komodo,frogman,7894561230,nascar24,juicy,01031988,redrose,mydick,pigeon,tkbpfdtnf,smirnoff,1215,spam,winner1,flyfish,moskva,81fukkc,21031987,olesya,starligh,summer99,13041988,fishhead,freesex,super12,06061986,azazel,scoobydoo,02021981,cabron,yogibear,sheba1,konstantin,tranny,chilli,terminat,ghbywtccf,slowhand,soccer12,cricket1,fuckhead,1002,seagull,achtung,blam,bigbob,bdsm,nostromo,survivor,cnfybckfd,lemonade,boomer1,rainbow1,rober,irinka,cocksuck,peaches1,itsme,sugar1,zodiac,upyours,dinara,135791,sunny1,chiara,johnson1,02041989,solitude,habibi,sushi,markiz,smoke1,rockies,catwoman,johnny1,qwerty7,bearcats,username,01011978,wanderer,ohshit,02101986,sigma,stephen1,paradigm,02011989,flanker,sanity,jsbach,spotty,bologna,fantasia,chevys,borabora,cocker,74108520,123ewq,12021988,01061990,gtnhjdbx,02071981,01011960,sundevil,3000gt,mustang6,gagging,maggi,armstron,yfnfkb,13041987,revolver,02021976,trouble1,madcat,jeremy1,jackass1,volkswag,30051985,corndog,pool6123,marines1,03041991,pizza1,piggy,sissy,02031979,sunfire,angelus,undead,24061986,14061991,wildbill,shinobi,45m2do5bs,123qwer,21011989,cleopatr,lasvega,hornets,amorcit,11081989,coventry,nirvana1,destin,sidekick,20061988,02081983,gbhfvblf,sneaky,bmw325,22021989,nfytxrf,sekret,kalina,zanzibar,hotone,qazws,wasabi,heidi1,highlander,blues1,hitachi,paolo,23041987,slayer1,simba1,02011981,tinkerbe,kieran,01121986,172839,boiler,1125,bluesman,waffle,asdfgh01,threesom,conan,1102,reflex,18011987,nautilus,everlast,fatty,vader1,01071986,cyborg,ghbdtn123,birddog,rubble,02071983,suckers,02021973,skyhawk,12qw12qw,dakota1,joebob,nokia6233,woodie,longdong,lamer,troll,ghjcnjgfhjkm,420000,boating,nitro,armada,messiah,1031,penguin1,02091989,americ,02071989,redeye,asdqwe123,07071987,monty1,goten,spikey,sonata,635241,tokiohotel,sonyericsson,citroen,compaq1,1812,umpire,belmont,jonny,pantera1,nudes,palmtree,14111986,fenway,bighead,razor,gryphon,andyod22,aaaaa1,taco,10031988,enterme,malachi,dogface,reptile,01041985,dindom,handball,marseille,candy1,19101987,torino,tigge,matthias,viewsoni,13031987,stinker,evangelion,24011985,123456123,rampage,sandrine,02081980,thecrow,astral,28041987,sprinter,private1,seabee,shibby,02101988,25081988,fearless,junkie,01091987,aramis,antelope,draven,fuck1,mazda6,eggman,02021990,barselona,buddy123,19061987,fyfnjkbq,nancy1,12121990,10071987,sluggo,kille,hotties,irishka,zxcasdqwe123,shamus,fairlane,honeybee,soccer10,13061986,fantomas,17051988,10051987,20111986,gladiato,karachi,gambler,gordo,01011995,biatch,matthe,25800852,papito,excite,buffalo1,bobdole,cheshire,player1,28021992,thewho,10101986,pinky1,mentor,tomahawk,brown1,03041986,bismillah,bigpoppa,ijrjkfl,01121988,runaway,08121986,skibum,studman,helper,squeak,holycow,manfred,harlem,glock,gideon,987321,14021985,yellow1,wizard1,margarit,success1,medved,sf49ers,lambda,pasadena,johngalt,quasar,1776,02031980,coldplay,amand,playa,bigpimp,04041991,capricorn,elefant,sweetness,bruce1,luca,dominik,10011990,biker,09051945,datsun,elcamino,trinitro,malice,audi,voyager1,02101983,joe123,carpente,spartan1,mario1,glamour,diaper,12121985,22011988,winter1,asimov,callisto,nikolai,pebble,02101981,vendetta,david123,boytoy,11061985,02031989,iloveyou1,stupid1,cayman,casper1,zippo,yamahar1,wildwood,foxylady,calibra,02041980,27061988,dungeon,leedsutd,30041986,11051990,bestbuy,antares,dominion,24680,01061986,skillet,enforcer,derparol,01041988,196969,29071983,f00tball,purple1,mingus,25031987,21031990,remingto,giggles,klaste,3x7pxr,01011994,coolcat,29051989,megane,20031987,02051980,04041988,synergy,0000007,macman,iforget,adgjmp,vjqgfhjkm,28011987,rfvfcenhf,16051989,25121987,16051987,rogue,mamamia,08051990,20091991,1210,carnival,bolitas,paris1,dmitriy,dimas,05051989,papillon,knuckles,29011985,hola,tophat,28021990,100500,cutiepie,devo,415263,ducks,ghjuhfvvf,asdqwe,22021986,freefall,parol,02011983,zarina,buste,vitamin,warez,bigones,17061988,baritone,jamess,twiggy,mischief,bitchy,hetfield,1003,dontknow,grinch,sasha_007,18061990,12031985,12031987,calimero,224466,letmei,15011987,acmilan,alexandre,02031977,08081988,whiteboy,21051991,barney1,02071978,money123,18091985,bigdawg,02031988,cygnusx1,zoloto,31011987,firefigh,blowfish,screamer,lfybbk,20051988,chelse,11121986,01031989,harddick,sexylady,30031988,02041974,auditt,pizdec,kojak,kfgjxrf,20091988,123456ru,wp2003wp,1204,15051990,slugger,kordell1,03031986,swinging,01011974,02071979,rockie,dimples,1234123,1dragon,trucking,rusty2,roger1,marijuana,kerouac,02051978,08031985,paco,thecure,keepout,kernel,noname123,13121985,francisc,bozo,02011982,22071986,02101979,obsidian,12345qw,spud,tabasco,02051985,jaguars,dfktynby,kokomo,popova,notused,sevens,4200,magneto,02051976,roswell,15101986,21101986,lakeside,bigbang,aspen,little1,14021986,loki,suckmydick,strawber,carlos1,nokian73,dirty1,joshu,25091987,16121987,02041975,advent,17011987,slimshady,whistler,10101990,stryker,22031984,15021985,01031985,blueball,26031988,ksusha,bahamut,robocop,w_pass,chris123,impreza,prozac,bookie,bricks,13021990,alice1,cassandr,11111q,john123,4ever,korova,02051973,142857,25041988,paramedi,eclipse1,salope,07091990,1124,darkangel,23021986,999666,nomad,02051981,smackdow,01021990,yoyoma,argentin,moonligh,57chevy,bootys,hardone,capricor,galant,spanker,dkflbr,24111989,magpies,krolik,21051988,cevthrb,cheddar,22041988,bigbooty,scuba1,qwedsa,duffman,bukkake,acura,johncena,sexxy,p@ssw0rd,258369,cherries,12345s,asgard,leopold,fuck123,mopar,lalakers,dogpound,matrix1,crusty,spanner,kestrel,fenris,universa,peachy,assasin,lemmein,eggplant,hejsan,canucks,wendy1,doggy1,aikman,tupac,turnip,godlike,fussball,golden1,19283746,april1,django,petrova,captain1,vincent1,ratman,taekwondo,chocha,serpent,perfect1,capetown,vampir,amore,gymnast,timeout,nbvjatq,blue32,ksenia,k.lvbkf,nazgul,budweiser,clutch,mariya,sylveste,02051972,beaker,cartman1,q11111,sexxx,forever1,loser1,marseill,magellan,vehpbr,sexgod,jktxrf,hallo123,132456,liverpool1,southpaw,seneca,camden,357159,camero,tenchi,johndoe,145236,roofer,741963,vlad,02041978,fktyrf,zxcv123,wingnut,wolfpac,notebook,pufunga7782,brandy1,biteme1,goodgirl,redhat,02031978,challeng,millenium,hoops,maveric,noname,angus1,gaell,onion,olympus,sabrina1,ricard,sixpack,gratis,gagged,camaross,hotgirls,flasher,02051977,bubba123,goldfing,moonshin,gerrard,volkov,sonyfuck,mandrake,258963,tracer,lakers1,asians,susan1,money12,helmut,boater,diablo2,1234zxcv,dogwood,bubbles1,happy2,randy1,aries,beach1,marcius2,navigator,goodie,hellokitty,fkbyjxrf,earthlink,lookout,jumbo,opendoor,stanley1,marie1,12345m,07071977,ashle,wormix,murzik,02081976,lakewood,bluejays,loveya,commande,gateway2,peppe,01011976,7896321,goth,oreo,slammer,rasmus,faith1,knight1,stone1,redskin,ironmaiden,gotmilk,destiny1,dejavu,1master,midnite,timosha,espresso,delfin,toriamos,oberon,ceasar,markie,1a2s3d,ghhh47hj7649,vjkjrj,daddyo,dougie,disco,auggie,lekker,therock1,ou8123,start1,noway,p4ssw0rd,shadow12,333444,saigon,2fast4u,capecod,23skidoo,qazxcv,beater,bremen,aaasss,roadrunner,peace1,12345qwer,02071975,platon,bordeaux,vbkfirf,135798642,test12,supernov,beatles1,qwert40,optimist,vanessa1,prince1,ilovegod,nightwish,natasha1,alchemy,bimbo,blue99,patches1,gsxr1000,richar,hattrick,hott,solaris,proton,nevets,enternow,beavis1,amigos,159357a,ambers,lenochka,147896,suckdick,shag,intercourse,blue1234,spiral,02061977,tosser,ilove,02031975,cowgirl,canuck,q2w3e4,munch,spoons,waterboy,123567,evgeniy,savior,zasada,redcar,mamacita,terefon,globus,doggies,htubcnhfwbz,1008,cuervo,suslik,azertyui,limewire,houston1,stratfor,steaua,coors,tennis1,12345qwerty,stigmata,derf,klondike,patrici,marijuan,hardball,odyssey,nineinch,boston1,pass1,beezer,sandr,charon,power123,a1234,vauxhall,875421,awesome1,reggae,boulder,funstuff,iriska,krokodil,rfntymrf,sterva,champ1,bball,peeper,m123456,toolbox,cabernet,sheepdog,magic32,pigpen,02041977,holein1,lhfrjy,banan,dabomb,natalie1,jennaj,montana1,joecool,funky,steven1,ringo,junio,sammy123,qqqwww,baltimor,footjob,geezer,357951,mash4077,cashmone,pancake,monic,grandam,bongo,yessir,gocubs,nastia,vancouve,barley,dragon69,watford,ilikepie,02071976,laddie,123456789m,hairball,toonarmy,pimpdadd,cvthnm,hunte,davinci,lback,sophie1,firenze,q1234567,admin1,bonanza,elway7,daman,strap,azert,wxcvbn,afrika,theforce,123456t,idefix,wolfen,houdini,scheisse,default,beech,maserati,02061976,sigmachi,dylan1,bigdicks,eskimo,mizzou,02101976,riccardo,egghead,111777,kronos,ghbrjk,chaos1,jomama,rfhnjirf,rodeo,dolemite,cafc91,nittany,pathfind,mikael,password9,vqsablpzla,purpl,gabber,modelsne,myxworld,hellsing,punker,rocknrol,fishon,fuck69,02041976,lolol,twinkie,tripleh,cirrus,redbone,killer123,biggun,allegro,gthcbr,smith1,wanking,bootsy,barry1,mohawk,koolaid,5329,futurama,samoht,klizma,996633,lobo,honeys,peanut1,556677,zxasqw,joemama,javelin,samm,223322,sandra1,flicks,montag,nataly,3006,tasha1,1235789,dogbone,poker1,p0o9i8u7,goodday,smoothie,toocool,max333,metroid,archange,vagabond,billabon,22061941,tyson1,02031973,darkange,skateboard,evolutio,morrowind,wizards,frodo1,rockin,cumslut,plastics,zaqwsxcde,5201314,doit,outback,bumble,dominiqu,persona,nevermore,alinka,02021971,forgetit,sexo,all4one,c2h5oh,petunia,sheeba,kenny1,elisabet,aolsucks,woodstoc,pumper,02011975,fabio,granada,scrapper,123459,minimoni,q123456789,breaker,1004,02091976,ncc74656,slimshad,friendster,austin31,wiseguy,donner,dilbert1,132465,blackbird,buffet,jellybean,barfly,behappy,01011971,carebear,fireblad,02051975,boxcar,cheeky,kiteboy,hello12,panda1,elvisp,opennow,doktor,alex12,02101977,pornking,flamengo,02091975,snowbird,lonesome,robin1,11111a,weed420,baracuda,bleach,12345abc,nokia1,metall,singapor,mariner,herewego,dingo,tycoon,cubs,blunts,proview,123456789d,kamasutra,lagnaf,vipergts,navyseal,starwar,masterbate,wildone,peterbil,cucumber,butkus,123qwert,climax,deniro,gotribe,cement,scooby1,summer69,harrier,shodan,newyear,02091977,starwars1,romeo1,sedona,harald,doubled,sasha123,bigguns,salami,awnyce,kiwi,homemade,pimping,azzer,bradley1,warhamme,linkin,dudeman,qwe321,pinnacle,maxdog,flipflop,lfitymrf,fucker1,acidburn,esquire,sperma,fellatio,jeepster,thedon,sexybitch,pookey,spliff,widget,vfntvfnbrf,trinity1,mutant,samuel1,meliss,gohome,1q2q3q,mercede,comein,grin,cartoons,paragon,henrik,rainyday,pacino,senna,bigdog1,alleycat,12345qaz,narnia,mustang2,tanya1,gianni,apollo11,wetter,clovis,escalade,rainbows,freddy1,smart1,daisydog,s123456,cocksucker,pushkin,lefty,sambo,fyutkjxtr,hiziad,boyz,whiplash,orchard,newark,adrenalin,1598753,bootsie,chelle,trustme,chewy,golfgti,tuscl,ambrosia,5wr2i7h8,penetration,shonuf,jughead,payday,stickman,gotham,kolokol,johnny5,kolbasa,stang,puppydog,charisma,gators1,mone,jakarta,draco,nightmar,01011973,inlove,laetitia,02091973,tarpon,nautica,meadow,0192837465,luckyone,14881488,chessie,goldeney,tarakan,69camaro,bungle,wordup,interne,fuckme2,515000,dragonfl,sprout,02081974,gerbil,bandit1,02071971,melanie1,phialpha,camber,kathy1,adriano,gonzo1,10293847,bigjohn,bismarck,7777777a,scamper,12348765,rabbits,222777,bynthytn,dima123,alexander1,mallorca,dragster,favorite6,beethove,burner,cooper1,fosters,hello2,normandy,777999,sebring,1michael,lauren1,blake1,killa,02091971,nounours,trumpet1,thumper1,playball,xantia,rugby1,rocknroll,guillaum,angela1,strelok,prosper,buttercup,masterp,dbnfkbr,cambridg,venom,treefrog,lumina,1234566,supra,sexybabe,freee,shen,frogs,driller,pavement,grace1,dicky,checker,smackdown,pandas,cannibal,asdffdsa,blue42,zyjxrf,nthvbyfnjh,melrose,neon,jabber,gamma,369258147,aprilia,atticus,benessere,catcher,skipper1,azertyuiop,sixty9,thierry,treetop,jello,melons,123456789qwe,tantra,buzzer,catnip,bouncer,computer1,sexyone,ananas,young1,olenka,sexman,mooses,kittys,sephiroth,contra,hallowee,skylark,sparkles,777333,1qazxsw23edc,lucas1,q1w2e3r,gofast,hannes,amethyst,ploppy,flower2,hotass,amatory,volleyba,dixie1,bettyboo,ticklish,02061974,frenchy,phish1,murphy1,trustno,02061972,leinad,mynameis,spooge,jupiter1,hyundai,frosch,junkmail,abacab,marbles,32167,casio,sunshine1,wayne1,longhair,caster,snicker,02101973,gannibal,skinhead,hansol,gatsby,segblue2,montecar,plato,gumby,kaboom,matty,bosco1,888999,jazzy,panter,jesus123,charlie2,giulia,candyass,sex69,travis1,farmboy,special1,02041973,letsdoit,password01,allison1,abcdefg1,notredam,ilikeit,789654123,liberty1,rugger,uptown,alcatraz,123456w,airman,007bond,navajo,kenobi,terrier,stayout,grisha,frankie1,fluff,1qazzaq1,1234561,virginie,1234568,tango1,werdna,octopus,fitter,dfcbkbcf,blacklab,115599,montrose,allen1,supernova,frederik,ilovepussy,justice1,radeon,playboy2,blubber,sliver,swoosh,motocros,lockdown,pearls,thebear,istheman,pinetree,biit,1234rewq,rustydog,tampabay,titts,babycake,jehovah,vampire1,streaming,collie,camil,fidelity,calvin1,stitch,gatit,restart,puppy1,budgie,grunt,capitals,hiking,dreamcas,zorro1,321678,riffraff,makaka,playmate,napalm,rollin,amstel,zxcvb123,samanth,rumble,fuckme69,jimmys,951357,pizzaman,1234567899,tralala,delpiero,alexi,yamato,itisme,1million,vfndtq,kahlua,londo,wonderboy,carrots,tazz,ratboy,rfgecnf,02081973,nico,fujitsu,tujhrf,sergbest,blobby,02051970,sonic1,1357911,smirnov,video1,panhead,bucky,02031974,44332211,duffer,cashmoney,left4dead,bagpuss,salman,01011972,titfuck,66613666,england1,malish,dresden,lemans,darina,zapper,123456as,123456qqq,met2002,02041972,redstar,blue23,1234509876,pajero,booyah,please1,tetsuo,semper,finder,hanuman,sunlight,123456n,02061971,treble,cupoi,password99,dimitri,3ip76k2,popcorn1,lol12345,stellar,nympho,shark1,keith1,saskia,bigtruck,revoluti,rambo1,asd222,feelgood,phat,gogators,bismark,cola,puck,furball,burnout,slonik,bowtie,mommy1,icecube,fabienn,mouser,papamama,rolex,giants1,blue11,trooper1,momdad,iklo,morten,rhubarb,gareth,123456d,blitz,canada1,r2d2,brest,tigercat,usmarine,lilbit,benny1,azrael,lebowski,12345r,madagaskar,begemot,loverman,dragonballz,italiano,mazda3,naughty1,onions,diver1,cyrano,capcom,asdfg123,forlife,fisherman,weare138,requiem,mufasa,alpha123,piercing,hellas,abracadabra,duckman,caracas,macintos,02011971,jordan2,crescent,fduecn,hogtied,eatmenow,ramjet,18121812,kicksass,whatthe,discus,rfhfvtkmrf,rufus1,sqdwfe,mantle,vegitto,trek,dan123,paladin1,rudeboy,liliya,lunchbox,riversid,acapulco,libero,dnsadm,maison,toomuch,boobear,hemlock,sextoy,pugsley,misiek,athome,migue,altoids,marcin,123450,rhfcfdbwf,jeter2,rhinos,rjhjkm,mercury1,ronaldinho,shampoo,makayla,kamilla,masterbating,tennesse,holger,john1,matchbox,hores,poptart,parlament,goodyear,asdfgh1,02081970,hardwood,alain,erection,hfytnrb,highlife,implants,benjami,dipper,jeeper,bendover,supersonic,babybear,laserjet,gotenks,bama,natedogg,aol123,pokemo,rabbit1,raduga,sopranos,cashflow,menthol,pharao,hacking,334455,ghjcnbnenrf,lizzy,muffin1,pooky,penis1,flyer,gramma,dipset,becca,ireland1,diana1,donjuan,pong,ziggy1,alterego,simple1,cbr900,logger,111555,claudia1,cantona7,matisse,ljxtymrf,victori,harle,mamas,encore,mangos,iceman1,diamon,alexxx,tiamat,5000,desktop,mafia,smurf,princesa,shojou,blueberr,welkom,maximka,123890,123q123,tammy1,bobmarley,clips,demon666,ismail,termite,laser1,missie,altair,donna1,bauhaus,trinitron,mogwai,flyers88,juniper,nokia5800,boroda,jingles,qwerasdfzxcv,shakur,777666,legos,mallrats,1qazxsw,goldeneye,tamerlan,julia1,backbone,spleen,49ers,shady,darkone,medic1,justi,giggle,cloudy,aisan,douche,parkour,bluejay,huskers1,redwine,1qw23er4,satchmo,1231234,nineball,stewart1,ballsack,probes,kappa,amiga,flipper1,dortmund,963258,trigun,1237895,homepage,blinky,screwy,gizzmo,belkin,chemist,coolhand,chachi,braves1,thebest,greedisgood,pro100,banana1,101091m,123456g,wonderfu,barefeet,8inches,1111qqqq,kcchiefs,qweasdzxc123,metal1,jennifer1,xian,asdasd123,pollux,cheerleaers,fruity,mustang5,turbos,shopper,photon,espana,hillbill,oyster,macaroni,gigabyte,jesper,motown,tuxedo,buster12,triplex,cyclones,estrell,mortis,holla,456987,fiddle,sapphic,jurassic,thebeast,ghjcnjq,baura,spock1,metallica1,karaoke,nemrac58,love1234,02031970,flvbybcnhfnjh,frisbee,diva,ajax,feathers,flower1,soccer11,allday,mierda,pearl1,amature,marauder,333555,redheads,womans,egorka,godbless,159263,nimitz,aaaa1111,sashka,madcow,socce,greywolf,baboon,pimpdaddy,123456789r,reloaded,lancia,rfhfylfi,dicker,placid,grimace,22446688,olemiss,whores,culinary,wannabe,maxi,1234567aa,amelie,riley1,trample,phantom1,baberuth,bramble,asdfqwer,vides,4you,abc123456,taichi,aztnm,smother,outsider,hakr,blackhawk,bigblack,girlie,spook,valeriya,gianluca,freedo,1q2q3q4q,handbag,lavalamp,cumm,pertinant,whatup,nokia123,redlight,patrik,111aaa,poppy1,dfytxrf,aviator,sweeps,kristin1,cypher,elway,yinyang,access1,poophead,tucson,noles1,monterey,waterfal,dank,dougal,918273,suede,minnesot,legman,bukowski,ganja,mammoth,riverrat,asswipe,daredevi,lian,arizona1,kamikadze,alex1234,smile1,angel2,55bgates,bellagio,0001,wanrltw,stiletto,lipton,arsena,biohazard,bbking,chappy,tetris,as123456,darthvad,lilwayne,nopassword,7412369,123456789987654321,natchez,glitter,14785236,mytime,rubicon,moto,pyon,wazzup,tbird,shane1,nightowl,getoff,beckham7,trueblue,hotgirl,nevermin,deathnote,13131,taffy,bigal,copenhag,apricot,gallaries,dtkjcbgtl,totoro,onlyone,civicsi,jesse1,baby123,sierra1,festus,abacus,sickboy,fishtank,fungus,charle,golfpro,teensex,mario66,seaside,aleksei,rosewood,blackberry,1020304050,bedlam,schumi,deerhunt,contour,darkelf,surveyor,deltas,pitchers,741258963,dipstick,funny1,lizzard,112233445566,jupiter2,softtail,titman,greenman,z1x2c3v4b5,smartass,12345677,notnow,myworld,nascar1,chewbacc,nosferatu,downhill,dallas22,kuan,blazers,whales,soldat,craving,powerman,yfcntyf,hotrats,cfvceyu,qweasdzx,princess1,feline,qqwwee,chitown,1234qaz,mastermind,114477,dingbat,care1839,standby,kismet,atreides,dogmeat,icarus,monkeyboy,alex1,mouses,nicetits,sealteam,chopper1,crispy,winter99,rrpass1,myporn,myspace1,corazo,topolino,ass123,lawman,muffy,orgy,1love,passord,hooyah,ekmzyf,pretzel,amonra,nestle,01011950,jimbeam,happyman,z12345,stonewal,helios,manunited,harcore,dick1,gaymen,2hot4u,light1,qwerty13,kakashi,pjkjnj,alcatel,taylo,allah,buddydog,ltkmaby,mongo,blonds,start123,audia6,123456v,civilwar,bellaco,turtles,mustan,deadspin,aaa123,fynjirf,lucky123,tortoise,amor,summe,waterski,zulu,drag0n,dtxyjcnm,gizmos,strife,interacial,pusyy,goose1,bear1,equinox,matri,jaguar1,tobydog,sammys,nachos,traktor,bryan1,morgoth,444555,dasani,miami1,mashka,xxxxxx1,ownage,nightwin,hotlips,passmast,cool123,skolko,eldiablo,manu,1357908642,screwyou,badabing,foreplay,hydro,kubrick,seductive,demon1,comeon,galileo,aladdin,metoo,happines,902100,mizuno,caddy,bizzare,girls1,redone,ohmygod,sable,bonovox,girlies,hamper,opus,gizmodo1,aaabbb,pizzahut,999888,rocky2,anton1,kikimora,peavey,ocelot,a1a2a3a4,2wsx3edc,jackie1,solace,sprocket,galary,chuck1,volvo1,shurik,poop123,locutus,virago,wdtnjxtr,tequier,bisexual,doodles,makeitso,fishy,789632145,nothing1,fishcake,sentry,libertad,oaktree,fivestar,adidas1,vegitta,mississi,spiffy,carme,neutron,vantage,agassi,boners,123456789v,hilltop,taipan,barrage,kenneth1,fister,martian,willem,lfybkf,bluestar,moonman,ntktdbpjh,paperino,bikers,daffy,benji,quake,dragonfly,suckcock,danilka,lapochka,belinea,calypso,asshol,camero1,abraxas,mike1234,womam,q1q2q3q4q5,youknow,maxpower,pic's,audi80,sonora,raymond1,tickler,tadpole,belair,crazyman,finalfantasy,999000,jonatha,paisley,kissmyas,morgana,monste,mantra,spunk,magic123,jonesy,mark1,alessand,741258,baddest,ghbdtnrfrltkf,zxccxz,tictac,augustin,racers,7grout,foxfire,99762000,openit,nathanie,1z2x3c4v5b,seadog,gangbanged,lovehate,hondacbr,harpoon,mamochka,fisherma,bismilla,locust,wally1,spiderman1,saffron,utjhubq,123456987,20spanks,safeway,pisser,bdfyjd,kristen1,bigdick1,magenta,vfhujif,anfisa,friday13,qaz123wsx,0987654321q,tyrant,guan,meggie,kontol,nurlan,ayanami,rocket1,yaroslav,websol76,mutley,hugoboss,websolutions,elpaso,gagarin,badboys,sephirot,918273645,newuser,qian,edcrfv,booger1,852258,lockout,timoxa94,mazda323,firedog,sokolova,skydiver,jesus777,1234567890z,soulfly,canary,malinka,guillerm,hookers,dogfart,surfer1,osprey,india123,rhjkbr,stoppedby,nokia5530,123456789o,blue1,werter,divers,3000,123456f,alpina,cali,whoknows,godspeed,986532,foreskin,fuzzy1,heyyou,didier,slapnuts,fresno,rosebud1,sandman1,bears1,blade1,honeybun,queen1,baronn,pakista,philipp,9111961,topsecret,sniper1,214365,slipper,letsfuck,pippen33,godawgs,mousey,qw123456,scrotum,loveis,lighthou,bp2002,nancy123,jeffrey1,susieq,buddy2,ralphie,trout1,willi,antonov,sluttey,rehbwf,marty1,darian,losangeles,letme1n,12345d,pusssy,godiva,ender,golfnut,leonidas,a1b2c3d4e5,puffer,general1,wizzard,lehjxrf,racer1,bigbucks,cool12,buddys,zinger,esprit,vbienrf,josep,tickling,froggie,987654321a,895623,daddys,crumbs,gucci,mikkel,opiate,tracy1,christophe,came11,777555,petrovich,humbug,dirtydog,allstate,horatio,wachtwoord,creepers,squirts,rotary,bigd,georgia1,fujifilm,2sweet,dasha,yorkie,slimjim,wiccan,kenzie,system1,skunk,b12345,getit,pommes,daredevil,sugars,bucker,piston,lionheart,1bitch,515051,catfight,recon,icecold,fantom,vodafone,kontakt,boris1,vfcnth,canine,01011961,valleywa,faraon,chickenwing101,qq123456,livewire,livelife,roosters,jeepers,ilya1234,coochie,pavlik,dewalt,dfhdfhf,architec,blackops,1qaz2wsx3edc4rfv,rhfcjnf,wsxedc,teaser,sebora,25252,rhino1,ankara,swifty,decimal,redleg,shanno,nermal,candies,smirnova,dragon01,photo1,ranetki,a1s2d3f4g5,axio,wertzu,maurizio,6uldv8,zxcvasdf,punkass,flowe,graywolf,peddler,3rjs1la7qe,mpegs,seawolf,ladyboy,pianos,piggies,vixen,alexus,orpheus,gdtrfb,z123456,macgyver,hugetits,ralph1,flathead,maurici,mailru,goofball,nissan1,nikon,stopit,odin,big1,smooch,reboot,famil,bullit,anthony7,gerhard,methos,124038,morena,eagle2,jessica2,zebras,getlost,gfynthf,123581321,sarajevo,indon,comets,tatjana,rfgbnjirf,joystick,batman12,123456c,sabre,beerme,victory1,kitties,1475369,badboy1,booboo1,comcast,slava,squid,saxophon,lionhear,qaywsx,bustle,nastena,roadway,loader,hillside,starlight,24681012,niggers,access99,bazooka,molly123,blackice,bandi,cocacol,nfhfrfy,timur,muschi,horse1,quant4307s,squerting,oscars,mygirls,flashman,tangerin,goofy1,p0o9i8,housewifes,newness,monkey69,escorpio,password11,hippo,warcraft3,qazxsw123,qpalzm,ribbit,ghbdtndctv,bogota,star123,258000,lincoln1,bigjim,lacoste,firestorm,legenda,indain,ludacris,milamber,1009,evangeli,letmesee,a111111,hooters1,bigred1,shaker,husky,a4tech,cnfkrth,argyle,rjhjdf,nataha,0o9i8u7y,gibson1,sooners1,glendale,archery,hoochie,stooge,aaaaaa1,scorpions,school1,vegas1,rapier,mike23,bassoon,groupd2013,macaco,baker1,labia,freewill,santiag,silverado,butch1,vflfufcrfh,monica1,rugrat,cornhole,aerosmit,bionicle,gfgfvfvf,daniel12,virgo,fmale,favorite2,detroit1,pokey,shredder,baggies,wednesda,cosmo1,mimosa,sparhawk,firehawk,romario,911turbo,funtimes,fhntvrf,nexus6,159753456,timothy1,bajingan,terry1,frenchie,raiden,1mustang,babemagnet,74123698,nadejda,truffles,rapture,douglas1,lamborghini,motocross,rjcvjc,748596,skeeter1,dante1,angel666,telecom,carsten,pietro,bmw318,astro1,carpediem,samir,orang,helium,scirocco,fuzzball,rushmore,rebelz,hotspur,lacrimosa,chevys10,madonna1,domenico,yfnfirf,jachin,shelby1,bloke,dawgs,dunhill,atlanta1,service1,mikado,devilman,angelit,reznor,euphoria,lesbain,checkmat,browndog,phreak,blaze1,crash1,farida,mutter,luckyme,horsemen,vgirl,jediknig,asdas,cesare,allnight,rockey,starlite,truck1,passfan,close-up,samue,cazzo,wrinkles,homely,eatme1,sexpot,snapshot,dima1995,asthma,thetruth,ducky,blender,priyanka,gaucho,dutchman,sizzle,kakarot,651550,passcode,justinbieber,666333,elodie,sanjay,110442,alex01,lotus1,2300mj,lakshmi,zoomer,quake3,12349876,teapot,12345687,ramada,pennywis,striper,pilot1,chingon,optima,nudity,ethan1,euclid,beeline,loyola,biguns,zaq12345,bravo1,disney1,buffa,assmunch,vivid,6661313,wellingt,aqwzsx,madala11,9874123,sigmar,pictere,tiptop,bettyboop,dinero,tahiti,gregory1,bionic,speed1,fubar1,lexus1,denis1,hawthorn,saxman,suntzu,bernhard,dominika,camaro1,hunter12,balboa,bmw2002,seville,diablo1,vfhbyjxrf,1234abc,carling,lockerroom,punani,darth,baron1,vaness,1password,libido,picher,232425,karamba,futyn007,daydream,11001001,dragon123,friends1,bopper,rocky123,chooch,asslover,shimmer,riddler,openme,tugboat,sexy123,midori,gulnara,christo,swatch,laker,offroad,puddles,hackers,mannheim,manager1,horseman,roman1,dancer1,komputer,pictuers,nokia5130,ejaculation,lioness,123456y,evilone,nastenka,pushok,javie,lilman,3141592,mjolnir,toulouse,pussy2,bigworm,smoke420,fullback,extensa,dreamcast,belize,delboy,willie1,casablanca,csyjxtr,ricky1,bonghit,salvator,basher,pussylover,rosie1,963258741,vivitron,cobra427,meonly,armageddon,myfriend,zardoz,qwedsazxc,kraken,fzappa,starfox,333999,illmatic,capoeira,weenie,ramzes,freedom2,toasty,pupkin,shinigami,fhvfutljy,nocturne,churchil,thumbnils,tailgate,neworder,sexymama,goarmy,cerebus,michelle1,vbifyz,surfsup,earthlin,dabulls,basketbal,aligator,mojojojo,saibaba,welcome2,wifes,wdtnjr,12345w,slasher,papabear,terran,footman,hocke,153759,texans,tom123,sfgiants,billabong,aassdd,monolith,xxx777,l3tm31n,ticktock,newone,hellno,japanees,contortionist,admin123,scout1,alabama1,divx1,rochard,privat,radar1,bigdad,fhctybq,tortuga,citrus,avanti,fantasy1,woodstock,s12345,fireman1,embalmer,woodwork,bonzai,konyor,newstart,jigga,panorama,goats,smithy,rugrats,hotmama,daedalus,nonstop,fruitbat,lisenok,quaker,violator,12345123,my3sons,cajun,fraggle,gayboy,oldfart,vulva,knickerless,orgasms,undertow,binky,litle,kfcnjxrf,masturbation,bunnie,alexis1,planner,transexual,sparty,leeloo,monies,fozzie,stinger1,landrove,anakonda,scoobie,yamaha1,henti,star12,rfhlbyfk,beyonce,catfood,cjytxrf,zealots,strat,fordtruc,archangel,silvi,sativa,boogers,miles1,bigjoe,tulip,petite,greentea,shitter,jonboy,voltron,morticia,evanescence,3edc4rfv,longshot,windows1,serge,aabbcc,starbucks,sinful,drywall,prelude1,www123,camel1,homebrew,marlins,123412,letmeinn,domini,swampy,plokij,fordf350,webcam,michele1,bolivi,27731828,wingzero,qawsedrftg,shinji,sverige,jasper1,piper1,cummer,iiyama,gocats,amour,alfarome,jumanji,mike69,fantasti,1monkey,w00t88,shawn1,lorien,1a2s3d4f5g,koleso,murph,natascha,sunkist,kennwort,emine,grinder,m12345,q1q2q3q4,cheeba,money2,qazwsxedc1,diamante,prosto,pdiddy,stinky1,gabby1,luckys,franci,pornographic,moochie,gfhjdjp,samdog,empire1,comicbookdb,emili,motdepasse,iphone,braveheart,reeses,nebula,sanjose,bubba2,kickflip,arcangel,superbow,porsche911,xyzzy,nigger1,dagobert,devil1,alatam,monkey2,barbara1,12345v,vfpfafrf,alessio,babemagn,aceman,arrakis,kavkaz,987789,jasons,berserk,sublime1,rogue1,myspace,buckwhea,csyekz,pussy4me,vette1,boots1,boingo,arnaud,budlite,redstorm,paramore,becky1,imtheman,chango,marley1,milkyway,666555,giveme,mahalo,lux2000,lucian,paddy,praxis,shimano,bigpenis,creeper,newproject2004,rammstei,j3qq4h7h2v,hfljcnm,lambchop,anthony2,bugman,gfhjkm12,dreamer1,stooges,cybersex,diamant,cowboyup,maximus1,sentra,615243,goethe,manhatta,fastcar,selmer,1213141516,yfnfitymrf,denni,chewey,yankee1,elektra,123456789p,trousers,fishface,topspin,orwell,vorona,sodapop,motherfu,ibilltes,forall,kookie,ronald1,balrog,maximilian,mypasswo,sonny1,zzxxcc,tkfkdg,magoo,mdogg,heeled,gitara,lesbos,marajade,tippy,morozova,enter123,lesbean,pounded,asd456,fialka,scarab,sharpie,spanky1,gstring,sachin,12345asd,princeto,hellohel,ursitesux,billows,1234kekc,kombat,cashew,duracell,kseniya,sevenof9,kostik,arthur1,corvet07,rdfhnbhf,songoku,tiberian,needforspeed,1qwert,dropkick,kevin123,panache,libra,a123456a,kjiflm,vfhnsirf,cntgfy,iamcool,narut,buffer,sk8ordie,urlaub,fireblade,blanked,marishka,gemini1,altec,gorillaz,chief1,revival47,ironman1,space1,ramstein,doorknob,devilmaycry,nemesis1,sosiska,pennstat,monday1,pioner,shevchenko,detectiv,evildead,blessed1,aggie,coffees,tical,scotts,bullwink,marsel,krypto,adrock,rjitxrf,asmodeus,rapunzel,theboys,hotdogs,deepthro,maxpayne,veronic,fyyeirf,otter,cheste,abbey1,thanos,bedrock,bartok,google1,xxxzzz,rodent,montecarlo,hernande,mikayla,123456789l,bravehea,12locked,ltymub,pegasus1,ameteur,saltydog,faisal,milfnew,momsuck,everques,ytngfhjkz,m0nkey,businessbabe,cooki,custard,123456ab,lbvjxrf,outlaws,753357,qwerty78,udacha,insider,chees,fuckmehard,shotokan,katya,seahorse,vtldtlm,turtle1,mike12,beebop,heathe,everton1,darknes,barnie,rbcekz,alisher,toohot,theduke,555222,reddog1,breezy,bulldawg,monkeyman,baylee,losangel,mastermi,apollo1,aurelie,zxcvb12345,cayenne,bastet,wsxzaq,geibcnbr,yello,fucmy69,redwall,ladybird,bitchs,cccccc1,rktjgfnhf,ghjdthrf,quest1,oedipus,linus,impalass,fartman,12345k,fokker,159753a,optiplex,bbbbbb1,realtor,slipkno,santacru,rowdy,jelena,smeller,3984240,ddddd1,sexyme,janet1,3698741,eatme69,cazzone,today1,poobear,ignatius,master123,newpass1,heather2,snoopdogg,blondinka,pass12,honeydew,fuckthat,890098890,lovem,goldrush,gecko,biker1,llama,pendejo,avalanche,fremont,snowman1,gandolf,chowder,1a2b3c4d5e,flyguy,magadan,1fuck,pingvin,nokia5230,ab1234,lothar,lasers,bignuts,renee1,royboy,skynet,12340987,1122334,dragrace,lovely1,22334455,booter,12345612,corvett,123456qq,capital1,videoes,funtik,wyvern,flange,sammydog,hulkster,13245768,not4you,vorlon,omegared,l58jkdjp!,filippo,123mudar,samadams,petrus,chris12,charlie123,123456789123,icetea,sunderla,adrian1,123qweas,kazanova,aslan,monkey123,fktyeirf,goodsex,123ab,lbtest,banaan,bluenose,837519,asd12345,waffenss,whateve,1a2a3a4a,trailers,vfhbirf,bhbcrf,klaatu,turk182,monsoon,beachbum,sunbeam,succes,clyde1,viking1,rawhide,bubblegum,princ,mackenzi,hershey1,222555,dima55,niggaz,manatee,aquila,anechka,pamel,bugsbunn,lovel,sestra,newport1,althor,hornyman,wakeup,zzz111,phishy,cerber,torrent,thething,solnishko,babel,buckeye1,peanu,ethernet,uncencored,baraka,665544,chris2,rb26dett,willy1,choppers,texaco,biggirl,123456b,anna2614,sukebe,caralho,callofduty,rt6ytere,jesus7,angel12,1money,timelord,allblack,pavlova,romanov,tequiero,yitbos,lookup,bulls23,snowflake,dickweed,barks,lever,irisha,firestar,fred1234,ghjnjnbg,danman,gatito,betty1,milhouse,kbctyjr,masterbaiting,delsol,papit,doggys,123698741,bdfyjdf,invictus,bloods,kayla1,yourmama,apple2,angelok,bigboy1,pontiac1,verygood,yeshua,twins2,porn4me,141516,rasta69,james2,bosshog,candys,adventur,stripe,djkjlz,dokken,austin316,skins,hogwarts,vbhevbh,navigato,desperado,xxx666,cneltyn,vasiliy,hazmat,daytek,eightbal,fred1,four20,74227422,fabia,aerosmith,manue,wingchun,boohoo,hombre,sanity72,goatboy,fuckm,partizan,avrora,utahjazz,submarin,pussyeat,heinlein,control1,costaric,smarty,chuan,triplets,snowy,snafu,teacher1,vangogh,vandal,evergree,cochise,qwerty99,pyramid1,saab900,sniffer,qaz741,lebron23,mark123,wolvie,blackbelt,yoshi,feeder,janeway,nutella,fuking,asscock,deepak,poppie,bigshow,housewife,grils,tonto,cynthia1,temptress,irakli,belle1,russell1,manders,frank123,seabass,gforce,songbird,zippy1,naught,brenda1,chewy1,hotshit,topaz,43046721,girfriend,marinka,jakester,thatsme,planeta,falstaff,patrizia,reborn,riptide,cherry1,shuan,nogard,chino,oasis1,qwaszx12,goodlife,davis1,1911a1,harrys,shitfuck,12345678900,russian7,007700,bulls1,porshe,danil,dolphi,river1,sabaka,gobigred,deborah1,volkswagen,miamo,alkaline,muffdive,1letmein,fkbyrf,goodguy,hallo1,nirvan,ozzie,cannonda,cvbhyjdf,marmite,germany1,joeblow,radio1,love11,raindrop,159852,jacko,newday,fathead,elvis123,caspe,citibank,sports1,deuce,boxter,fakepass,golfman,snowdog,birthday4,nonmembe,niklas,parsifal,krasota,theshit,1235813,maganda,nikita1,omicron,cassie1,columbo,buick,sigma1,thistle,bassin,rickster,apteka,sienna,skulls,miamor,coolgirl,gravis,1qazxc,virgini,hunter2,akasha,batma,motorcyc,bambino,tenerife,fordf250,zhuan,iloveporn,markiza,hotbabes,becool,fynjybyf,wapapapa,forme,mamont,pizda,dragonz,sharon1,scrooge,mrbill,pfloyd,leeroy,natedog,ishmael,777111,tecumseh,carajo,nfy.irf,0000000000o,blackcock,fedorov,antigone,feanor,novikova,bobert,peregrin,spartan117,pumkin,rayman,manuals,tooltime,555333,bonethug,marina1,bonnie1,tonyhawk,laracroft,mahalkita,18273645,terriers,gamer,hoser,littlema,molotok,glennwei,lemon1,caboose,tater,12345654321,brians,fritz1,mistral,jigsaw,fuckshit,hornyguy,southside,edthom,antonio1,bobmarle,pitures,ilikesex,crafty,nexus,boarder,fulcrum,astonvil,yanks1,yngwie,account1,zooropa,hotlegs,sammi,gumbo,rover1,perkele,maurolarastefy,lampard,357753,barracud,dmband,abcxyz,pathfinder,335577,yuliya,micky,jayman,asdfg12345,1596321,halcyon,rerfhtre,feniks,zaxscd,gotyoass,jaycee,samson1,jamesb,vibrate,grandpri,camino,colossus,davidb,mamo4ka,nicky1,homer123,pinguin,watermelon,shadow01,lasttime,glider,823762,helen1,pyramids,tulane,osama,rostov,john12,scoote,bhbyrf,gohan,galeries,joyful,bigpussy,tonka,mowgli,astalavista,zzz123,leafs,dalejr8,unicorn1,777000,primal,bigmama,okmijn,killzone,qaz12345,snookie,zxcvvcxz,davidc,epson,rockman,ceaser,beanbag,katten,3151020,duckhunt,segreto,matros,ragnar,699669,sexsexse,123123z,fuckyeah,bigbutts,gbcmrf,element1,marketin,saratov,elbereth,blaster1,yamahar6,grime,masha,juneau,1230123,pappy,lindsay1,mooner,seattle1,katzen,lucent,polly1,lagwagon,pixie,misiaczek,666666a,smokedog,lakers24,eyeball,ironhors,ametuer,volkodav,vepsrf,kimmy,gumby1,poi098,ovation,1q2w3,drinker,penetrating,summertime,1dallas,prima,modles,takamine,hardwork,macintosh,tahoe,passthie,chiks,sundown,flowers1,boromir,music123,phaedrus,albert1,joung,malakas,gulliver,parker1,balder,sonne,jessie1,domainlock2005,express1,vfkbyf,youandme,raketa,koala,dhjnvytyjub,nhfrnjh,testibil,ybrbnjc,987654321q,axeman,pintail,pokemon123,dogggg,shandy,thesaint,11122233,x72jhhu3z,theclash,raptors,zappa1,djdjxrf,hell666,friday1,vivaldi,pluto1,lance1,guesswho,jeadmi,corgan,skillz,skippy1,mango1,gymnastic,satori,362514,theedge,cxfcnkbdfz,sparkey,deicide,bagels,lololol,lemmings,r4e3w2q1,silve,staind,schnuffi,dazzle,basebal1,leroy1,bilbo1,luckie,qwerty2,goodfell,hermione,peaceout,davidoff,yesterda,killah,flippy,chrisb,zelda1,headless,muttley,fuckof,tittys,catdaddy,photog,beeker,reaver,ram1500,yorktown,bolero,tryagain,arman,chicco,learjet,alexei,jenna1,go2hell,12s3t4p55,momsanaladventure,mustang9,protoss,rooter,ginola,dingo1,mojave,erica1,1qazse4,marvin1,redwolf,sunbird,dangerou,maciek,girsl,hawks1,packard1,excellen,dashka,soleda,toonces,acetate,nacked,jbond007,alligator,debbie1,wellhung,monkeyma,supers,rigger,larsson,vaseline,rjnzhf,maripos,123456asd,cbr600rr,doggydog,cronic,jason123,trekker,flipmode,druid,sonyvaio,dodges,mayfair,mystuff,fun4me,samanta,sofiya,magics,1ranger,arcane,sixtynin,222444,omerta,luscious,gbyudby,bobcats,envision,chance1,seaweed,holdem,tomate,mensch,slicer,acura1,goochi,qweewq,punter,repoman,tomboy,never1,cortina,gomets,147896321,369852147,dogma,bhjxrf,loglatin,eragon,strato,gazelle,growler,885522,klaudia,payton34,fuckem,butchie,scorpi,lugano,123456789k,nichola,chipper1,spide,uhbujhbq,rsalinas,vfylfhby,longhorns,bugatti,everquest,!qaz2wsx,blackass,999111,snakeman,p455w0rd,fanatic,family1,pfqxbr,777vlad,mysecret,marat,phoenix2,october1,genghis,panties1,cooker,citron,ace123,1234569,gramps,blackcoc,kodiak1,hickory,ivanhoe,blackboy,escher,sincity,beaks,meandyou,spaniel,canon1,timmy1,lancaste,polaroid,edinburg,fuckedup,hotman,cueball,golfclub,gopack,bookcase,worldcup,dkflbvbhjdbx,twostep,17171717aa,letsplay,zolushka,stella1,pfkegf,kingtut,67camaro,barracuda,wiggles,gjhjkm,prancer,patata,kjifhf,theman1,romanova,sexyass,copper1,dobber,sokolov,pomidor,algernon,cadman,amoremio,william2,silly1,bobbys,hercule,hd764nw5d7e1vb1,defcon,deutschland,robinhood,alfalfa,machoman,lesbens,pandora1,easypay,tomservo,nadezhda,goonies,saab9000,jordyn,f15eagle,dbrecz,12qwerty,greatsex,thrawn,blunted,baywatch,doggystyle,loloxx,chevy2,january1,kodak,bushel,78963214,ub6ib9,zz8807zpl,briefs,hawker,224488,first1,bonzo,brent1,erasure,69213124,sidewind,soccer13,622521,mentos,kolibri,onepiece,united1,ponyboy,keksa12,wayer,mypussy,andrej,mischa,mille,bruno123,garter,bigpun,talgat,familia,jazzy1,mustang8,newjob,747400,bobber,blackbel,hatteras,ginge,asdfjkl;,camelot1,blue44,rebbyt34,ebony1,vegas123,myboys,aleksander,ijrjkflrf,lopata,pilsner,lotus123,m0nk3y,andreev,freiheit,balls1,drjynfrnt,mazda1,waterpolo,shibumi,852963,123bbb,cezer121,blondie1,volkova,rattler,kleenex,ben123,sanane,happydog,satellit,qazplm,qazwsxedcrfvtgb,meowmix,badguy,facefuck,spice1,blondy,major1,25000,anna123,654321a,sober1,deathrow,patterso,china1,naruto1,hawkeye1,waldo1,butchy,crayon,5tgb6yhn,klopik,crocodil,mothra,imhorny,pookie1,splatter,slippy,lizard1,router,buratino,yahweh,123698,dragon11,123qwe456,peepers,trucker1,ganjaman,1hxboqg2,cheyanne,storys,sebastie,zztop,maddison,4rfv3edc,darthvader,jeffro,iloveit,victor1,hotty,delphin,lifeisgood,gooseman,shifty,insertions,dude123,abrupt,123masha,boogaloo,chronos,stamford,pimpster,kthjxrf,getmein,amidala,flubber,fettish,grapeape,dantes,oralsex,jack1,foxcg33,winchest,francis1,getin,archon,cliffy,blueman,1basebal,sport1,emmitt22,porn123,bignasty,morga,123hfjdk147,ferrar,juanito,fabiol,caseydog,steveo,peternorth,paroll,kimchi,bootleg,gaijin,secre,acacia,eatme2,amarillo,monkey11,rfhfgep,tylers,a1a2a3a4a5,sweetass,blower,rodina,babushka,camilo,cimbom,tiffan,vfnbkmlf,ohbaby,gotigers,lindsey1,dragon13,romulus,qazxsw12,zxcvbn1,dropdead,hitman47,snuggle,eleven11,bloopers,357mag,avangard,bmw320,ginscoot,dshade,masterkey,voodoo1,rootedit,caramba,leahcim,hannover,8phrowz622,tim123,cassius,000000a,angelito,zzzzz1,badkarma,star1,malaga,glenwood,footlove,golf1,summer12,helpme1,fastcars,titan1,police1,polinka,k.jdm,marusya,augusto,shiraz,pantyhose,donald1,blaise,arabella,brigada,c3por2d2,peter01,marco1,hellow,dillweed,uzumymw,geraldin,loveyou2,toyota1,088011,gophers,indy500,slainte,5hsu75kpot,teejay,renat,racoon,sabrin,angie1,shiznit,harpua,sexyred,latex,tucker1,alexandru,wahoo,teamwork,deepblue,goodison,rundmc,r2d2c3p0,puppys,samba,ayrton,boobed,999777,topsecre,blowme1,123321z,loudog,random1,pantie,drevil,mandolin,121212q,hottub,brother1,failsafe,spade1,matvey,open1234,carmen1,priscill,schatzi,kajak,gooddog,trojans1,gordon1,kayak,calamity,argent,ufhvjybz,seviyi,penfold,assface,dildos,hawkwind,crowbar,yanks,ruffles,rastus,luv2epus,open123,aquafina,dawns,jared1,teufel,12345c,vwgolf,pepsi123,amores,passwerd,01478520,boliva,smutty,headshot,password3,davidd,zydfhm,gbgbcmrf,pornpass,insertion,ceckbr,test2,car123,checkit,dbnfkbq,niggas,nyyankee,muskrat,nbuhtyjr,gunner1,ocean1,fabienne,chrissy1,wendys,loveme89,batgirl,cerveza,igorek,steel1,ragman,boris123,novifarm,sexy12,qwerty777,mike01,giveitup,123456abc,fuckall,crevice,hackerz,gspot,eight8,assassins,texass,swallows,123458,baldur,moonshine,labatt,modem,sydney1,voland,dbnfkz,hotchick,jacker,princessa,dawgs1,holiday1,booper,reliant,miranda1,jamaica1,andre1,badnaamhere,barnaby,tiger7,david12,margaux,corsica,085tzzqi,universi,thewall,nevermor,martin6,qwerty77,cipher,apples1,0102030405,seraphim,black123,imzadi,gandon,ducati99,1shadow,dkflbvbhjdyf,44magnum,bigbad,feedme,samantha1,ultraman,redneck1,jackdog,usmc0311,fresh1,monique1,tigre,alphaman,cool1,greyhoun,indycar,crunchy,55chevy,carefree,willow1,063dyjuy,xrated,assclown,federica,hilfiger,trivia,bronco1,mamita,100200300,simcity,lexingky,akatsuki,retsam,johndeere,abudfv,raster,elgato,businka,satanas,mattingl,redwing1,shamil,patate,mannn,moonstar,evil666,b123456,bowl300,tanechka,34523452,carthage,babygir,santino,bondarenko,jesuss,chico1,numlock,shyguy,sound1,kirby1,needit,mostwanted,427900,funky1,steve123,passions,anduril,kermit1,prospero,lusty,barakuda,dream1,broodwar,porky,christy1,mahal,yyyyyy1,allan1,1sexy,flintsto,capri,cumeater,heretic,robert2,hippos,blindax,marykay,collecti,kasumi,1qaz!qaz,112233q,123258,chemistr,coolboy,0o9i8u,kabuki,righton,tigress,nessie,sergej,andrew12,yfafyz,ytrhjvfyn,angel7,victo,mobbdeep,lemming,transfor,1725782,myhouse,aeynbr,muskie,leno4ka,westham1,cvbhyjd,daffodil,pussylicker,pamela1,stuffer,warehous,tinker1,2w3e4r,pluton,louise1,polarbea,253634,prime1,anatoliy,januar,wysiwyg,cobraya,ralphy,whaler,xterra,cableguy,112233a,porn69,jamesd,aqualung,jimmy123,lumpy,luckyman,kingsize,golfing1,alpha7,leeds1,marigold,lol1234,teabag,alex11,10sne1,saopaulo,shanny,roland1,basser,3216732167,carol1,year2005,morozov,saturn1,joseluis,bushed,redrock,memnoch,lalaland,indiana1,lovegod,gulnaz,buffalos,loveyou1,anteater,pattaya,jaydee,redshift,bartek,summerti,coffee1,ricochet,incest,schastie,rakkaus,h2opolo,suikoden,perro,dance1,loveme1,whoopass,vladvlad,boober,flyers1,alessia,gfcgjhn,pipers,papaya,gunsling,coolone,blackie1,gonads,gfhjkzytn,foxhound,qwert12,gangrel,ghjvtntq,bluedevi,mywife,summer01,hangman,licorice,patter,vfr750,thorsten,515253,ninguna,dakine,strange1,mexic,vergeten,12345432,8phrowz624,stampede,floyd1,sailfish,raziel,ananda,giacomo,freeme,crfprf,74185296,allstars,master01,solrac,gfnhbjn,bayliner,bmw525,3465xxx,catter,single1,michael3,pentium4,nitrox,mapet123456,halibut,killroy,xxxxx1,phillip1,poopsie,arsenalfc,buffys,kosova,all4me,32165498,arslan,opensesame,brutis,charles2,pochta,nadegda,backspac,mustang0,invis,gogeta,654321q,adam25,niceday,truckin,gfdkbr,biceps,sceptre,bigdave,lauras,user345,sandys,shabba,ratdog,cristiano,natha,march13,gumball,getsdown,wasdwasd,redhead1,dddddd1,longlegs,13572468,starsky,ducksoup,bunnys,omsairam,whoami,fred123,danmark,flapper,swanky,lakings,yfhenj,asterios,rainier,searcher,dapper,ltdjxrf,horsey,seahawk,shroom,tkfkdgo,aquaman,tashkent,number9,messi10,1asshole,milenium,illumina,vegita,jodeci,buster01,bareback,goldfinger,fire1,33rjhjds,sabian,thinkpad,smooth1,sully,bonghits,sushi1,magnavox,colombi,voiture,limpone,oldone,aruba,rooster1,zhenya,nomar5,touchdow,limpbizkit,rhfcfdxbr,baphomet,afrodita,bball1,madiso,ladles,lovefeet,matthew2,theworld,thunderbird,dolly1,123rrr,forklift,alfons,berkut,speedy1,saphire,oilman,creatine,pussylov,bastard1,456258,wicked1,filimon,skyline1,fucing,yfnfkbz,hot123,abdulla,nippon,nolimits,billiard,booty1,buttplug,westlife,coolbean,aloha1,lopas,asasin,1212121,october2,whodat,good4u,d12345,kostas,ilya1992,regal,pioneer1,volodya,focus1,bastos,nbvjif,fenix,anita1,vadimka,nickle,jesusc,123321456,teste,christ1,essendon,evgenii,celticfc,adam1,forumwp,lovesme,26exkp,chillout,burly,thelast1,marcus1,metalgear,test11,ronaldo7,socrate,world1,franki,mommie,vicecity,postov1000,charlie3,oldschool,333221,legoland,antoshka,counterstrike,buggy,mustang3,123454,qwertzui,toons,chesty,bigtoe,tigger12,limpopo,rerehepf,diddle,nokia3250,solidsnake,conan1,rockroll,963369,titanic1,qwezxc,cloggy,prashant,katharin,maxfli,takashi,cumonme,michael9,mymother,pennstate,khalid,48151623,fightclub,showboat,mateusz,elrond,teenie,arrow1,mammamia,dustydog,dominator,erasmus,zxcvb1,1a2a3a,bones1,dennis1,galaxie,pleaseme,whatever1,junkyard,galadriel,charlies,2wsxzaq1,crimson1,behemoth,teres,master11,fairway,shady1,pass99,1batman,joshua12,baraban,apelsin,mousepad,melon,twodogs,123321qwe,metalica,ryjgrf,pipiska,rerfhfxf,lugnut,cretin,iloveu2,powerade,aaaaaaa1,omanko,kovalenko,isabe,chobits,151nxjmt,shadow11,zcxfcnkbdf,gy3yt2rgls,vfhbyrf,159753123,bladerunner,goodone,wonton,doodie,333666999,fuckyou123,kitty123,chisox,orlando1,skateboa,red12345,destroye,snoogans,satan1,juancarlo,goheels,jetson,scottt,fuckup,aleksa,gfhfljrc,passfind,oscar123,derrick1,hateme,viper123,pieman,audi100,tuffy,andover,shooter1,10000,makarov,grant1,nighthaw,13576479,browneye,batigol,nfvfhf,chocolate1,7hrdnw23,petter,bantam,morlii,jediknight,brenden,argonaut,goodstuf,wisconsi,315920,abigail1,dirtbag,splurge,k123456,lucky777,valdepen,gsxr600,322223,ghjnjrjk,zaq1xsw2cde3,schwanz,walter1,letmein22,nomads,124356,codeblue,nokian70,fucke,footbal1,agyvorc,aztecs,passw0r,smuggles,femmes,ballgag,krasnodar,tamuna,schule,sixtynine,empires,erfolg,dvader,ladygaga,elite1,venezuel,nitrous,kochamcie,olivia1,trustn01,arioch,sting1,131415,tristar,555000,maroon,135799,marsik,555556,fomoco,natalka,cwoui,tartan,davecole,nosferat,hotsauce,dmitry,horus,dimasik,skazka,boss302,bluebear,vesper,ultras,tarantul,asd123asd,azteca,theflash,8ball,1footbal,titlover,lucas123,number6,sampson1,789852,party1,dragon99,adonai,carwash,metropol,psychnau,vthctltc,hounds,firework,blink18,145632,wildcat1,satchel,rice80,ghtktcnm,sailor1,cubano,anderso,rocks1,mike11,famili,dfghjc,besiktas,roygbiv,nikko,bethan,minotaur,rakesh,orange12,hfleuf,jackel,myangel,favorite7,1478520,asssss,agnieszka,haley1,raisin,htubyf,1buster,cfiekz,derevo,1a2a3a4a5a,baltika,raffles,scruffy1,clitlick,louis1,buddha1,fy.nrf,walker1,makoto,shadow2,redbeard,vfvfvskfhfve,mycock,sandydog,lineman,network1,favorite8,longdick,mustangg,mavericks,indica,1killer,cisco1,angelofwar,blue69,brianna1,bubbaa,slayer666,level42,baldrick,brutus1,lowdown,haribo,lovesexy,500000,thissuck,picker,stephy,1fuckme,characte,telecast,1bigdog,repytwjdf,thematrix,hammerhe,chucha,ganesha,gunsmoke,georgi,sheltie,1harley,knulla,sallas,westie,dragon7,conker,crappie,margosha,lisboa,3e2w1q,shrike,grifter,ghjcnjghjcnj,asdfg1,mnbvcxz1,myszka,posture,boggie,rocketman,flhtyfkby,twiztid,vostok,pi314159,force1,televizor,gtkmvtym,samhain,imcool,jadzia,dreamers,strannik,k2trix,steelhea,nikitin,commodor,brian123,chocobo,whopper,ibilljpf,megafon,ararat,thomas12,ghbrjkbcn,q1234567890,hibernia,kings1,jim123,redfive,68camaro,iawgk2,xavier1,1234567u,d123456,ndirish,airborn,halfmoon,fluffy1,ranchero,sneaker,soccer2,passion1,cowman,birthday1,johnn,razzle,glock17,wsxqaz,nubian,lucky2,jelly1,henderso,eric1,123123e,boscoe01,fuck0ff,simpson1,sassie,rjyjgkz,nascar3,watashi,loredana,janus,wilso,conman,david2,mothe,iloveher,snikers,davidj,fkmnthyfnbdf,mettss,ratfink,123456h,lostsoul,sweet16,brabus,wobble,petra1,fuckfest,otters,sable1,svetka,spartacu,bigstick,milashka,1lover,pasport,champagn,papichul,hrvatska,hondacivic,kevins,tacit,moneybag,gohogs,rasta1,246813579,ytyfdbcnm,gubber,darkmoon,vitaliy,233223,playboys,tristan1,joyce1,oriflame,mugwump,access2,autocad,thematri,qweqwe123,lolwut,ibill01,multisyn,1233211,pelikan,rob123,chacal,1234432,griffon,pooch,dagestan,geisha,satriani,anjali,rocketma,gixxer,pendrago,vincen,hellokit,killyou,ruger,doodah,bumblebe,badlands,galactic,emachines,foghorn,jackso,jerem,avgust,frontera,123369,daisymae,hornyboy,welcome123,tigger01,diabl,angel13,interex,iwantsex,rockydog,kukolka,sawdust,online1,3234412,bigpapa,jewboy,3263827,dave123,riches,333222,tony1,toggle,farter,124816,tities,balle,brasilia,southsid,micke,ghbdtn12,patit,ctdfcnjgjkm,olds442,zzzzzz1,nelso,gremlins,gypsy1,carter1,slut69,farcry,7415963,michael8,birdie1,charl,123456789abc,100001,aztec,sinjin,bigpimpi,closeup,atlas1,nvidia,doggone,classic1,manana,malcolm1,rfkbyf,hotbabe,rajesh,dimebag,ganjubas,rodion,jagr68,seren,syrinx,funnyman,karapuz,123456789n,bloomin,admin18533362,biggdogg,ocarina,poopy1,hellome,internet1,booties,blowjobs,matt1,donkey1,swede,1jennife,evgeniya,lfhbyf,coach1,444777,green12,patryk,pinewood,justin12,271828,89600506779,notredame,tuborg,lemond,sk8ter,million1,wowser,pablo1,st0n3,jeeves,funhouse,hiroshi,gobucs,angeleye,bereza,winter12,catalin,qazedc,andros,ramazan,vampyre,sweethea,imperium,murat,jamest,flossy,sandeep,morgen,salamandra,bigdogg,stroller,njdevils,nutsack,vittorio,%%passwo,playful,rjyatnrf,tookie,ubnfhf,michi,777444,shadow13,devils1,radiance,toshiba1,beluga,amormi,dandfa,trust1,killemall,smallville,polgara,billyb,landscap,steves,exploite,zamboni,damage11,dzxtckfd,trader12,pokey1,kobe08,damager,egorov,dragon88,ckfdbr,lisa69,blade2,audis4,nelson1,nibbles,23176djivanfros,mutabor,artofwar,matvei,metal666,hrfzlz,schwinn,poohbea,seven77,thinker,123456789qwerty,sobriety,jakers,karamelka,vbkfyf,volodin,iddqd,dale03,roberto1,lizaveta,qqqqqq1,cathy1,08154711,davidm,quixote,bluenote,tazdevil,katrina1,bigfoot1,bublik,marma,olechka,fatpussy,marduk,arina,nonrev67,qqqq1111,camill,wtpfhm,truffle,fairview,mashina,voltaire,qazxswedcvfr,dickface,grassy,lapdance,bosstone,crazy8,yackwin,mobil,danielit,mounta1n,player69,bluegill,mewtwo,reverb,cnthdf,pablito,a123321,elena1,warcraft1,orland,ilovemyself,rfntyjr,joyride,schoo,dthjxrf,thetachi,goodtimes,blacksun,humpty,chewbacca,guyute,123xyz,lexicon,blue45,qwe789,galatasaray,centrino,hendrix1,deimos,saturn5,craig1,vlad1996,sarah123,tupelo,ljrnjh,hotwife,bingos,1231231,nicholas1,flamer,pusher,1233210,heart1,hun999,jiggy,giddyup,oktober,123456zxc,budda,galahad,glamur,samwise,oneton,bugsbunny,dominic1,scooby2,freetime,internat,159753852,sc00ter,wantit,mazinger,inflames,laracrof,greedo,014789,godofwar,repytwjd,water123,fishnet,venus1,wallace1,tenpin,paula1,1475963,mania,novikov,qwertyasdfgh,goldmine,homies,777888999,8balls,holeinon,paper1,samael,013579,mansur,nikit,ak1234,blueline,polska1,hotcock,laredo,windstar,vbkbwbz,raider1,newworld,lfybkrf,catfish1,shorty1,piranha,treacle,royale,2234562,smurfs,minion,cadence,flapjack,123456p,sydne,135531,robinhoo,nasdaq,decatur,cyberonline,newage,gemstone,jabba,touchme,hooch,pigdog,indahous,fonzie,zebra1,juggle,patrick2,nihongo,hitomi,oldnavy,qwerfdsa,ukraina,shakti,allure,kingrich,diane1,canad,piramide,hottie1,clarion,college1,5641110,connect1,therion,clubber,velcro,dave1,astra1,13579-,astroboy,skittle,isgreat,photoes,cvzefh1gkc,001100,2cool4u,7555545,ginger12,2wsxcde3,camaro69,invader,domenow,asd1234,colgate,qwertasdfg,jack123,pass01,maxman,bronte,whkzyc,peter123,bogie,yecgaa,abc321,1qay2wsx,enfield,camaroz2,trashman,bonefish,system32,azsxdcfvgb,peterose,iwantyou,dick69,temp1234,blastoff,capa200,connie1,blazin,12233445,sexybaby,123456j,brentfor,pheasant,hommer,jerryg,thunders,august1,lager,kapusta,boobs1,nokia5300,rocco1,xytfu7,stars1,tugger,123sas,blingbling,1bubba,0wnsyo0,1george,baile,richard2,habana,1diamond,sensatio,1golfer,maverick1,1chris,clinton1,michael7,dragons1,sunrise1,pissant,fatim,mopar1,levani,rostik,pizzapie,987412365,oceans11,748159263,cum4me,palmetto,4r3e2w1q,paige1,muncher,arsehole,kratos,gaffer,banderas,billys,prakash,crabby,bungie,silver12,caddis,spawn1,xboxlive,sylvania,littlebi,524645,futura,valdemar,isacs155,prettygirl,big123,555444,slimer,chicke,newstyle,skypilot,sailormoon,fatluvr69,jetaime,sitruc,jesuschrist,sameer,bear12,hellion,yendor,country1,etnies,conejo,jedimast,darkknight,toobad,yxcvbn,snooks,porn4life,calvary,alfaromeo,ghostman,yannick,fnkfynblf,vatoloco,homebase,5550666,barret,1111111111zz,odysseus,edwardss,favre4,jerrys,crybaby,xsw21qaz,firestor,spanks,indians1,squish,kingair,babycakes,haters,sarahs,212223,teddyb,xfactor,cumload,rhapsody,death123,three3,raccoon,thomas2,slayer66,1q2q3q4q5q,thebes,mysterio,thirdeye,orkiox.,nodoubt,bugsy,schweiz,dima1996,angels1,darkwing,jeronimo,moonpie,ronaldo9,peaches2,mack10,manish,denise1,fellowes,carioca,taylor12,epaulson,makemoney,oc247ngucz,kochanie,3edcvfr4,vulture,1qw23e,1234567z,munchie,picard1,xthtgfirf,sportste,psycho1,tahoe1,creativ,perils,slurred,hermit,scoob,diesel1,cards1,wipeout,weeble,integra1,out3xf,powerpc,chrism,kalle,ariadne,kailua,phatty,dexter1,fordman,bungalow,paul123,compa,train1,thejoker,jys6wz,pussyeater,eatmee,sludge,dominus,denisa,tagheuer,yxcvbnm,bill1,ghfdlf,300zx,nikita123,carcass,semaj,ramone,muenchen,animal1,greeny,annemari,dbrf134,jeepcj7,mollys,garten,sashok,ironmaid,coyotes,astoria,george12,westcoast,primetim,123456o,panchito,rafae,japan1,framer,auralo,tooshort,egorova,qwerty22,callme,medicina,warhawk,w1w2w3w4,cristia,merli,alex22,kawaii,chatte,wargames,utvols,muaddib,trinket,andreas1,jjjjj1,cleric,scooters,cuntlick,gggggg1,slipknot1,235711,handcuff,stussy,guess1,leiceste,ppppp1,passe,lovegun,chevyman,hugecock,driver1,buttsex,psychnaut1,cyber1,black2,alpha12,melbourn,man123,metalman,yjdsqujl,blondi,bungee,freak1,stomper,caitlin1,nikitina,flyaway,prikol,begood,desperad,aurelius,john1234,whosyourdaddy,slimed123,bretagne,den123,hotwheel,king123,roodypoo,izzicam,save13tx,warpten,nokia3310,samolet,ready1,coopers,scott123,bonito,1aaaaa,yomomma,dawg1,rache,itworks,asecret,fencer,451236,polka,olivetti,sysadmin,zepplin,sanjuan,479373,lickem,hondacrx,pulamea,future1,naked1,sexyguy,w4g8at,lollol1,declan,runner1,rumple,daddy123,4snz9g,grandprix,calcio,whatthefuck,nagrom,asslick,pennst,negrit,squiggy,1223334444,police22,giovann,toronto1,tweet,yardbird,seagate,truckers,554455,scimitar,pescator,slydog,gaysex,dogfish,fuck777,12332112,qazxswed,morkovka,daniela1,imback,horny69,789123456,123456789w,jimmy2,bagger,ilove69,nikolaus,atdhfkm,rebirth,1111aaaa,pervasive,gjgeufq,dte4uw,gfhnbpfy,skeletor,whitney1,walkman,delorean,disco1,555888,as1234,ishikawa,fuck12,reaper1,dmitrii,bigshot,morrisse,purgen,qwer4321,itachi,willys,123123qwe,kisska,roma123,trafford,sk84life,326159487,pedros,idiom,plover,bebop,159875321,jailbird,arrowhea,qwaszx123,zaxscdvf,catlover,bakers,13579246,bones69,vermont1,helloyou,simeon,chevyz71,funguy,stargaze,parolparol,steph1,bubby,apathy,poppet,laxman,kelly123,goodnews,741236,boner1,gaetano,astonvilla,virtua,luckyboy,rocheste,hello2u,elohim,trigger1,cstrike,pepsicola,miroslav,96385274,fistfuck,cheval,magyar,svetlanka,lbfyjxrf,mamedov,123123123q,ronaldo1,scotty1,1nicole,pittbull,fredd,bbbbb1,dagwood,gfhkfvtyn,ghblehrb,logan5,1jordan,sexbomb,omega2,montauk,258741,dtythf,gibbon,winamp,thebomb,millerli,852654,gemin,baldy,halflife2,dragon22,mulberry,morrigan,hotel6,zorglub,surfin,951159,excell,arhangel,emachine,moses1,968574,reklama,bulldog2,cuties,barca,twingo,saber,elite11,redtruck,casablan,ashish,moneyy,pepper12,cnhtktw,rjcnbr,arschloch,phenix,cachorro,sunita,madoka,joselui,adams1,mymoney,hemicuda,fyutkjr,jake12,chicas,eeeee1,sonnyboy,smarties,birdy,kitten1,cnfcbr,island1,kurosaki,taekwond,konfetka,bennett1,omega3,jackson2,fresca,minako,octavian,kban667,feyenoord,muaythai,jakedog,fktrcfylhjdyf,1357911q,phuket,sexslave,fktrcfylhjdbx,asdfjk,89015173454,qwerty00,kindbud,eltoro,sex6969,nyknicks,12344321q,caballo,evenflow,hoddle,love22,metro1,mahalko,lawdog,tightass,manitou,buckie,whiskey1,anton123,335533,password4,primo,ramair,timbo,brayden,stewie,pedro1,yorkshir,ganster,hellothe,tippy1,direwolf,genesi,rodrig,enkeli,vaz21099,sorcerer,winky,oneshot,boggle,serebro,badger1,japanes,comicbook,kamehame,alcat,denis123,echo45,sexboy,gr8ful,hondo,voetbal,blue33,2112rush,geneviev,danni1,moosey,polkmn,matthew7,ironhead,hot2trot,ashley12,sweeper,imogen,blue21,retep,stealth1,guitarra,bernard1,tatian,frankfur,vfnhbwf,slacking,haha123,963741,asdasdas,katenok,airforce1,123456789qaz,shotgun1,12qwasz,reggie1,sharo,976431,pacifica,dhip6a,neptun,kardon,spooky1,beaut,555555a,toosweet,tiedup,11121314,startac,lover69,rediska,pirata,vfhrbp,1234qwerty,energize,hansolo1,playbo,larry123,oemdlg,cnjvfnjkju,a123123,alexan,gohawks,antonius,fcbayern,mambo,yummy1,kremlin,ellen1,tremere,vfiekz,bellevue,charlie9,izabella,malishka,fermat,rotterda,dawggy,becket,chasey,kramer1,21125150,lolit,cabrio,schlong,arisha,verity,3some,favorit,maricon,travelle,hotpants,red1234,garrett1,home123,knarf,seven777,figment,asdewq,canseco,good2go,warhol,thomas01,pionee,al9agd,panacea,chevy454,brazzers,oriole,azerty123,finalfan,patricio,northsta,rebelde,bulldo,stallone,boogie1,7uftyx,cfhfnjd,compusa,cornholi,config,deere,hoopster,sepultura,grasshop,babygurl,lesbo,diceman,proverbs,reddragon,nurbek,tigerwoo,superdup,buzzsaw,kakaroto,golgo13,edwar,123qaz123,butter1,sssss1,texas2,respekt,ou812ic,123456qaz,55555a,doctor1,mcgwire,maria123,aol999,cinders,aa1234,joness,ghbrjkmyj,makemone,sammyboy,567765,380zliki,theraven,testme,mylene,elvira26,indiglo,tiramisu,shannara,baby1,123666,gfhreh,papercut,johnmish,orange8,bogey1,mustang7,bagpipes,dimarik,vsijyjr,4637324,ravage,cogito,seven11,natashka,warzone,hr3ytm,4free,bigdee,000006,243462536,bigboi,123333,trouts,sandy123,szevasz,monica2,guderian,newlife1,ratchet,r12345,razorbac,12345i,piazza31,oddjob,beauty1,fffff1,anklet,nodrog,pepit,olivi,puravida,robert12,transam1,portman,bubbadog,steelers1,wilson1,eightball,mexico1,superboy,4rfv5tgb,mzepab,samurai1,fuckslut,colleen1,girdle,vfrcbvec,q1w2e3r4t,soldier1,19844891,alyssa1,a12345a,fidelis,skelter,nolove,mickeymouse,frehley,password69,watermel,aliska,soccer15,12345e,ladybug1,abulafia,adagio,tigerlil,takehana,hecate,bootneck,junfan,arigato,wonkette,bobby123,trustnoone,phantasm,132465798,brianjo,w12345,t34vfrc1991,deadeye,1robert,1daddy,adida,check1,grimlock,muffi,airwalk,prizrak,onclick,longbeac,ernie1,eadgbe,moore1,geniu,shadow123,bugaga,jonathan1,cjrjkjdf,orlova,buldog,talon1,westport,aenima,541233432442,barsuk,chicago2,kellys,hellbent,toughguy,iskander,skoal,whatisit,jake123,scooter2,fgjrfkbgcbc,ghandi,love13,adelphia,vjhrjdrf,adrenali,niunia,jemoeder,rainbo,all4u8,anime1,freedom7,seraph,789321,tommys,antman,firetruc,neogeo,natas,bmwm3,froggy1,paul1,mamit,bayview,gateways,kusanagi,ihateu,frederi,rock1,centurion,grizli,biggin,fish1,stalker1,3girls,ilovepor,klootzak,lollo,redsox04,kirill123,jake1,pampers,vasya,hammers1,teacup,towing,celtic1,ishtar,yingyang,4904s677075,dahc1,patriot1,patrick9,redbirds,doremi,rebecc,yoohoo,makarova,epiphone,rfgbnfy,milesd,blister,chelseafc,katana1,blackrose,1james,primrose,shock5,hard1,scooby12,c6h12o6,dustoff,boing,chisel,kamil,1william,defiant1,tyvugq,mp8o6d,aaa340,nafets,sonnet,flyhigh,242526,crewcom,love23,strike1,stairway,katusha,salamand,cupcake1,password0,007james,sunnie,multisync,harley01,tequila1,fred12,driver8,q8zo8wzq,hunter01,mozzer,temporar,eatmeraw,mrbrownxx,kailey,sycamore,flogger,tincup,rahasia,ganymede,bandera,slinger,1111122222,vander,woodys,1cowboy,khaled,jamies,london12,babyboo,tzpvaw,diogenes,budice,mavrick,135797531,cheeta,macros,squonk,blackber,topfuel,apache1,falcon16,darkjedi,cheeze,vfhvtkfl,sparco,change1,gfhfif,freestyl,kukuruza,loveme2,12345f,kozlov,sherpa,marbella,44445555,bocephus,1winner,alvar,hollydog,gonefish,iwantin,barman,godislove,amanda18,rfpfynbg,eugen,abcdef1,redhawk,thelema,spoonman,baller1,harry123,475869,tigerman,cdtnjxrf,marillio,scribble,elnino,carguy,hardhead,l2g7k3,troopers,selen,dragon76,antigua,ewtosi,ulysse,astana,paroli,cristo,carmex,marjan,bassfish,letitbe,kasparov,jay123,19933991,blue13,eyecandy,scribe,mylord,ukflbjkec,ellie1,beaver1,destro,neuken,halfpint,ameli,lilly1,satanic,xngwoj,12345trewq,asdf1,bulldogg,asakura,jesucrist,flipside,packers4,biggy,kadett,biteme69,bobdog,silverfo,saint1,bobbo,packman,knowledg,foolio,fussbal,12345g,kozerog,westcoas,minidisc,nbvcxw,martini1,alastair,rasengan,superbee,memento,porker,lena123,florenc,kakadu,bmw123,getalife,bigsky,monkee,people1,schlampe,red321,memyself,0147896325,12345678900987654321,soccer14,realdeal,gfgjxrf,bella123,juggs,doritos,celtics1,peterbilt,ghbdtnbrb,gnusmas,xcountry,ghbdtn1,batman99,deusex,gtnhjdf,blablabl,juster,marimba,love2,rerjkrf,alhambra,micros,siemens1,assmaste,moonie,dashadasha,atybrc,eeeeee1,wildrose,blue55,davidl,xrp23q,skyblue,leo123,ggggg1,bestfriend,franny,1234rmvb,fun123,rules1,sebastien,chester2,hakeem,winston2,fartripper,atlant,07831505,iluvsex,q1a2z3,larrys,009900,ghjkju,capitan,rider1,qazxsw21,belochka,andy123,hellya,chicca,maximal,juergen,password1234,howard1,quetzal,daniel123,qpwoeiruty,123555,bharat,ferrari3,numbnuts,savant,ladydog,phipsi,lovepussy,etoile,power2,mitten,britneys,chilidog,08522580,2fchbg,kinky1,bluerose,loulo,ricardo1,doqvq3,kswbdu,013cpfza,timoha,ghbdtnghbdtn,3stooges,gearhead,browns1,g00ber,super7,greenbud,kitty2,pootie,toolshed,gamers,coffe,ibill123,freelove,anasazi,sister1,jigger,natash,stacy1,weronika,luzern,soccer7,hoopla,dmoney,valerie1,canes,razdvatri,washere,greenwoo,rfhjkbyf,anselm,pkxe62,maribe,daniel2,maxim1,faceoff,carbine,xtkjdtr,buddy12,stratos,jumpman,buttocks,aqswdefr,pepsis,sonechka,steeler1,lanman,nietzsch,ballz,biscuit1,wrxsti,goodfood,juventu,federic,mattman,vika123,strelec,jledfyxbr,sideshow,4life,fredderf,bigwilly,12347890,12345671,sharik,bmw325i,fylhtqrf,dannon4,marky,mrhappy,drdoom,maddog1,pompier,cerbera,goobers,howler,jenny69,evely,letitrid,cthuttdyf,felip,shizzle,golf12,t123456,yamah,bluearmy,squishy,roxan,10inches,dollface,babygirl1,blacksta,kaneda,lexingto,canadien,222888,kukushka,sistema,224422,shadow69,ppspankp,mellons,barbie1,free4all,alfa156,lostone,2w3e4r5t,painkiller,robbie1,binger,8dihc6,jaspe,rellik,quark,sogood,hoopstar,number2,snowy1,dad2ownu,cresta,qwe123asd,hjvfyjdf,gibsonsg,qbg26i,dockers,grunge,duckling,lfiekz,cuntsoup,kasia1,1tigger,woaini,reksio,tmoney,firefighter,neuron,audia3,woogie,powerboo,powermac,fatcock,12345666,upnfmc,lustful,porn1,gotlove,amylee,kbytqrf,11924704,25251325,sarasota,sexme,ozzie1,berliner,nigga1,guatemal,seagulls,iloveyou!,chicken2,qwerty21,010203040506,1pillow,libby1,vodoley,backlash,piglets,teiubesc,019283,vonnegut,perico,thunde,buckey,gtxtymrf,manunite,iiiii1,lost4815162342,madonn,270873_,britney1,kevlar,piano1,boondock,colt1911,salamat,doma77ns,anuradha,cnhjqrf,rottweil,newmoon,topgun1,mauser,fightclu,birthday21,reviewpa,herons,aassddff,lakers32,melissa2,vredina,jiujitsu,mgoblue,shakey,moss84,12345zxcvb,funsex,benji1,garci,113322,chipie,windex,nokia5310,pwxd5x,bluemax,cosita,chalupa,trotsky,new123,g3ujwg,newguy,canabis,gnaget,happydays,felixx,1patrick,cumface,sparkie,kozlova,123234,newports,broncos7,golf18,recycle,hahah,harrypot,cachondo,open4me,miria,guessit,pepsione,knocker,usmc1775,countach,playe,wiking,landrover,cracksevi,drumline,a7777777,smile123,manzana,panty,liberta,pimp69,dolfan,quality1,schnee,superson,elaine22,webhompass,mrbrownx,deepsea,4wheel,mamasita,rockport,rollie,myhome,jordan12,kfvgjxrf,hockey12,seagrave,ford1,chelsea2,samsara,marissa1,lamesa,mobil1,piotrek,tommygun,yyyyy1,wesley1,billy123,homersim,julies,amanda12,shaka,maldini,suzenet,springst,iiiiii1,yakuza,111111aa,westwind,helpdesk,annamari,bringit,hopefull,hhhhhhh1,saywhat,mazdarx8,bulova,jennife1,baikal,gfhjkmxbr,victoria1,gizmo123,alex99,defjam,2girls,sandrock,positivo,shingo,syncmast,opensesa,silicone,fuckina,senna1,karlos,duffbeer,montagne,gehrig,thetick,pepino,hamburge,paramedic,scamp,smokeweed,fabregas,phantoms,venom121293,2583458,badone,porno69,manwhore,vfvf123,notagain,vbktyf,rfnthbyrf,wildblue,kelly001,dragon66,camell,curtis1,frolova,1212123,dothedew,tyler123,reddrago,planetx,promethe,gigolo,1001001,thisone,eugeni,blackshe,cruzazul,incognito,puller,joonas,quick1,spirit1,gazza,zealot,gordito,hotrod1,mitch1,pollito,hellcat,mythos,duluth,383pdjvl,easy123,hermos,binkie,its420,lovecraf,darien,romina,doraemon,19877891,syclone,hadoken,transpor,ichiro,intell,gargamel,dragon2,wavpzt,557744,rjw7x4,jennys,kickit,rjynfrn,likeit,555111,corvus,nec3520,133113,mookie1,bochum,samsung2,locoman0,154ugeiu,vfvfbgfgf,135792,[start],tenni,20001,vestax,hufmqw,neveragain,wizkid,kjgfnf,nokia6303,tristen,saltanat,louie1,gandalf2,sinfonia,alpha3,tolstoy,ford150,f00bar,1hello,alici,lol12,riker1,hellou,333888,1hunter,qw1234,vibrator,mets86,43211234,gonzale,cookies1,sissy1,john11,bubber,blue01,cup2006,gtkmvtyb,nazareth,heybaby,suresh,teddie,mozilla,rodeo1,madhouse,gamera,123123321,naresh,dominos,foxtrot1,taras,powerup,kipling,jasonb,fidget,galena,meatman,alpacino,bookmark,farting,humper,titsnass,gorgon,castaway,dianka,anutka,gecko1,fucklove,connery,wings1,erika1,peoria,moneymaker,ichabod,heaven1,paperboy,phaser,breakers,nurse1,westbrom,alex13,brendan1,123asd123,almera,grubber,clarkie,thisisme,welkom01,51051051051,crypto,freenet,pflybwf,black12,testme2,changeit,autobahn,attica,chaoss,denver1,tercel,gnasher23,master2,vasilii,sherman1,gomer,bigbuck,derek1,qwerzxcv,jumble,dragon23,art131313,numark,beasty,cxfcnmttcnm,updown,starion,glist,sxhq65,ranger99,monkey7,shifter,wolves1,4r5t6y,phone1,favorite5,skytommy,abracada,1martin,102030405060,gatech,giulio,blacktop,cheer1,africa1,grizzly1,inkjet,shemales,durango1,booner,11223344q,supergirl,vanyarespekt,dickless,srilanka,weaponx,6string,nashvill,spicey,boxer1,fabien,2sexy2ho,bowhunt,jerrylee,acrobat,tawnee,ulisse,nolimit8,l8g3bkde,pershing,gordo1,allover,gobrowns,123432,123444,321456987,spoon1,hhhhh1,sailing1,gardenia,teache,sexmachine,tratata,pirate1,niceone,jimbos,314159265,qsdfgh,bobbyy,ccccc1,carla1,vjkjltw,savana,biotech,frigid,123456789g,dragon10,yesiam,alpha06,oakwood,tooter,winsto,radioman,vavilon,asnaeb,google123,nariman,kellyb,dthyjcnm,password6,parol1,golf72,skate1,lthtdj,1234567890s,kennet,rossia,lindas,nataliya,perfecto,eminem1,kitana,aragorn1,rexona,arsenalf,planot,coope,testing123,timex,blackbox,bullhead,barbarian,dreamon,polaris1,cfvjktn,frdfhbev,gametime,slipknot666,nomad1,hfgcjlbz,happy69,fiddler,brazil1,joeboy,indianali,113355,obelisk,telemark,ghostrid,preston1,anonim,wellcome,verizon1,sayangku,censor,timeport,dummies,adult1,nbnfybr,donger,thales,iamgay,sexy1234,deadlift,pidaras,doroga,123qwe321,portuga,asdfgh12,happys,cadr14nu,pi3141,maksik,dribble,cortland,darken,stepanova,bommel,tropic,sochi2014,bluegras,shahid,merhaba,nacho,2580456,orange44,kongen,3cudjz,78girl,my3kids,marcopol,deadmeat,gabbie,saruman,jeepman,freddie1,katie123,master99,ronal,ballbag,centauri,killer7,xqgann,pinecone,jdeere,geirby,aceshigh,55832811,pepsimax,rayden,razor1,tallyho,ewelina,coldfire,florid,glotest,999333,sevenup,bluefin,limaperu,apostol,bobbins,charmed1,michelin,sundin,centaur,alphaone,christof,trial1,lions1,45645,just4you,starflee,vicki1,cougar1,green2,jellyfis,batman69,games1,hihje863,crazyzil,w0rm1,oklick,dogbite,yssup,sunstar,paprika,postov10,124578963,x24ik3,kanada,buckster,iloveamy,bear123,smiler,nx74205,ohiostat,spacey,bigbill,doudo,nikolaeva,hcleeb,sex666,mindy1,buster11,deacons,boness,njkcnsq,candy2,cracker1,turkey1,qwertyu1,gogreen,tazzzz,edgewise,ranger01,qwerty6,blazer1,arian,letmeinnow,cigar1,jjjjjj1,grigio,frien,tenchu,f9lmwd,imissyou,filipp,heathers,coolie,salem1,woodduck,scubadiv,123kat,raffaele,nikolaev,dapzu455,skooter,9inches,lthgfhjkm,gr8one,ffffff1,zujlrf,amanda69,gldmeo,m5wkqf,rfrltkf,televisi,bonjou,paleale,stuff1,cumalot,fuckmenow,climb7,mark1234,t26gn4,oneeye,george2,utyyflbq,hunting1,tracy71,ready2go,hotguy,accessno,charger1,rudedog,kmfdm,goober1,sweetie1,wtpmjgda,dimensio,ollie1,pickles1,hellraiser,mustdie,123zzz,99887766,stepanov,verdun,tokenbad,anatol,bartende,cidkid86,onkelz,timmie,mooseman,patch1,12345678c,marta1,dummy1,bethany1,myfamily,history1,178500,lsutiger,phydeaux,moren,dbrnjhjdbx,gnbxrf,uniden,drummers,abpbrf,godboy,daisy123,hogan1,ratpack,irland,tangerine,greddy,flore,sqrunch,billyjoe,q55555,clemson1,98745632,marios,ishot,angelin,access12,naruto12,lolly,scxakv,austin12,sallad,cool99,rockit,mongo1,mark22,ghbynth,ariadna,senha,docto,tyler2,mobius,hammarby,192168,anna12,claire1,pxx3eftp,secreto,greeneye,stjabn,baguvix,satana666,rhbcnbyjxrf,dallastx,garfiel,michaelj,1summer,montan,1234ab,filbert,squids,fastback,lyudmila,chucho,eagleone,kimberle,ar3yuk3,jake01,nokids,soccer22,1066ad,ballon,cheeto,review69,madeira,taylor2,sunny123,chubbs,lakeland,striker1,porche,qwertyu8,digiview,go1234,ferari,lovetits,aditya,minnow,green3,matman,cellphon,fortytwo,minni,pucara,69a20a,roman123,fuente,12e3e456,paul12,jacky,demian,littleman,jadakiss,vlad1997,franca,282860,midian,nunzio,xaccess2,colibri,jessica0,revilo,654456,harvey1,wolf1,macarena,corey1,husky1,arsen,milleniu,852147,crowes,redcat,combat123654,hugger,psalms,quixtar,ilovemom,toyot,ballss,ilovekim,serdar,james23,avenger1,serendip,malamute,nalgas,teflon,shagger,letmein6,vyjujnjxbt,assa1234,student1,dixiedog,gznybwf13,fuckass,aq1sw2de3,robroy,hosehead,sosa21,123345,ias100,teddy123,poppin,dgl70460,zanoza,farhan,quicksilver,1701d,tajmahal,depechemode,paulchen,angler,tommy2,recoil,megamanx,scarecro,nicole2,152535,rfvtgb,skunky,fatty1,saturno,wormwood,milwauke,udbwsk,sexlover,stefa,7bgiqk,gfnhbr,omar10,bratan,lbyfvj,slyfox,forest1,jambo,william3,tempus,solitari,lucydog,murzilka,qweasdzxc1,vehpbkrf,12312345,fixit,woobie,andre123,123456789x,lifter,zinaida,soccer17,andone,foxbat,torsten,apple12,teleport,123456i,leglover,bigcocks,vologda,dodger1,martyn,d6o8pm,naciona,eagleeye,maria6,rimshot,bentley1,octagon,barbos,masaki,gremio,siemen,s1107d,mujeres,bigtits1,cherr,saints1,mrpink,simran,ghzybr,ferrari2,secret12,tornado1,kocham,picolo,deneme,onelove1,rolan,fenster,1fuckyou,cabbie,pegaso,nastyboy,password5,aidana,mine2306,mike13,wetone,tigger69,ytreza,bondage1,myass,golova,tolik,happyboy,poilkj,nimda2k,rammer,rubies,hardcore1,jetset,hoops1,jlaudio,misskitt,1charlie,google12,theone1,phred,porsch,aalborg,luft4,charlie5,password7,gnosis,djgabbab,1daniel,vinny,borris,cumulus,member1,trogdor,darthmau,andrew2,ktjybl,relisys,kriste,rasta220,chgobndg,weener,qwerty66,fritter,followme,freeman1,ballen,blood1,peache,mariso,trevor1,biotch,gtfullam,chamonix,friendste,alligato,misha1,1soccer,18821221,venkat,superd,molotov,bongos,mpower,acun3t1x,dfcmrf,h4x3d,rfhfufylf,tigran,booyaa,plastic1,monstr,rfnhby,lookatme,anabolic,tiesto,simon123,soulman,canes1,skyking,tomcat1,madona,bassline,dasha123,tarheel1,dutch1,xsw23edc,qwerty123456789,imperator,slaveboy,bateau,paypal,house123,pentax,wolf666,drgonzo,perros,digger1,juninho,hellomoto,bladerun,zzzzzzz1,keebler,take8422,fffffff1,ginuwine,israe,caesar1,crack1,precious1,garand,magda1,zigazaga,321ewq,johnpaul,mama1234,iceman69,sanjeev,treeman,elric,rebell,1thunder,cochon,deamon,zoltan,straycat,uhbyuj,luvfur,mugsy,primer,wonder1,teetime,candycan,pfchfytw,fromage,gitler,salvatio,piggy1,23049307,zafira,chicky,sergeev,katze,bangers,andriy,jailbait,vaz2107,ghbhjlf,dbjktnnf,aqswde,zaratustra,asroma,1pepper,alyss,kkkkk1,ryan1,radish,cozumel,waterpol,pentium1,rosebowl,farmall,steinway,dbrekz,baranov,jkmuf,another1,chinacat,qqqqqqq1,hadrian,devilmaycry4,ratbag,teddy2,love21,pullings,packrat,robyn1,boobo,qw12er34,tribe1,rosey,celestia,nikkie,fortune12,olga123,danthema,gameon,vfrfhjys,dilshod,henry14,jenova,redblue,chimaera,pennywise,sokrates,danimal,qqaazz,fuaqz4,killer2,198200,tbone1,kolyan,wabbit,lewis1,maxtor,egoist,asdfas,spyglass,omegas,jack12,nikitka,esperanz,doozer,matematika,wwwww1,ssssss1,poiu0987,suchka,courtney1,gungho,alpha2,fktyjxrf,summer06,bud420,devildriver,heavyd,saracen,foucault,choclate,rjdfktyrj,goblue1,monaro,jmoney,dcpugh,efbcapa201,qqh92r,pepsicol,bbb747,ch5nmk,honeyb,beszoptad,tweeter,intheass,iseedeadpeople,123dan,89231243658s,farside1,findme,smiley1,55556666,sartre,ytcnjh,kacper,costarica,134679258,mikeys,nolimit9,vova123,withyou,5rxypn,love143,freebie,rescue1,203040,michael6,12monkey,redgreen,steff,itstime,naveen,good12345,acidrain,1dawg,miramar,playas,daddio,orion2,852741,studmuff,kobe24,senha123,stephe,mehmet,allalone,scarface1,helloworld,smith123,blueyes,vitali,memphis1,mybitch,colin1,159874,1dick,podaria,d6wnro,brahms,f3gh65,dfcbkmtd,xxxman,corran,ugejvp,qcfmtz,marusia,totem,arachnid,matrix2,antonell,fgntrf,zemfira,christos,surfing1,naruto123,plato1,56qhxs,madzia,vanille,043aaa,asq321,mutton,ohiostate,golde,cdznjckfd,rhfcysq,green5,elephan,superdog,jacqueli,bollock,lolitas,nick12,1orange,maplelea,july23,argento,waldorf,wolfer,pokemon12,zxcvbnmm,flicka,drexel,outlawz,harrie,atrain,juice2,falcons1,charlie6,19391945,tower1,dragon21,hotdamn,dirtyboy,love4ever,1ginger,thunder2,virgo1,alien1,bubblegu,4wwvte,123456789qqq,realtime,studio54,passss,vasilek,awsome,giorgia,bigbass,2002tii,sunghile,mosdef,simbas,count0,uwrl7c,summer05,lhepmz,ranger21,sugarbea,principe,5550123,tatanka,9638v,cheerios,majere,nomercy,jamesbond007,bh90210,7550055,jobber,karaganda,pongo,trickle,defamer,6chid8,1q2a3z,tuscan,nick123,.adgjm,loveyo,hobbes1,note1234,shootme,171819,loveporn,9788960,monty123,fabrice,macduff,monkey13,shadowfa,tweeker,hanna1,madball,telnet,loveu2,qwedcxzas,thatsit,vfhcbr,ptfe3xxp,gblfhfcs,ddddddd1,hakkinen,liverune,deathsta,misty123,suka123,recon1,inferno1,232629,polecat,sanibel,grouch,hitech,hamradio,rkfdbfnehf,vandam,nadin,fastlane,shlong,iddqdidkfa,ledzeppelin,sexyfeet,098123,stacey1,negras,roofing,lucifer1,ikarus,tgbyhn,melnik,barbaria,montego,twisted1,bigal1,jiggle,darkwolf,acerview,silvio,treetops,bishop1,iwanna,pornsite,happyme,gfccdjhl,114411,veritech,batterse,casey123,yhntgb,mailto,milli,guster,q12345678,coronet,sleuth,fuckmeha,armadill,kroshka,geordie,lastochka,pynchon,killall,tommy123,sasha1996,godslove,hikaru,clticic,cornbrea,vfkmdbyf,passmaster,123123123a,souris,nailer,diabolo,skipjack,martin12,hinata,mof6681,brookie,dogfight,johnso,karpov,326598,rfvbrflpt,travesti,caballer,galaxy1,wotan,antoha,art123,xakep1234,ricflair,pervert1,p00kie,ambulanc,santosh,berserker,larry33,bitch123,a987654321,dogstar,angel22,cjcbcrf,redhouse,toodles,gold123,hotspot,kennedy1,glock21,chosen1,schneide,mainman,taffy1,3ki42x,4zqauf,ranger2,4meonly,year2000,121212a,kfylsi,netzwerk,diese,picasso1,rerecz,225522,dastan,swimmer1,brooke1,blackbea,oneway,ruslana,dont4get,phidelt,chrisp,gjyxbr,xwing,kickme,shimmy,kimmy1,4815162342lost,qwerty5,fcporto,jazzbo,mierd,252627,basses,sr20det,00133,florin,howdy1,kryten,goshen,koufax,cichlid,imhotep,andyman,wrest666,saveme,dutchy,anonymou,semprini,siempre,mocha1,forest11,wildroid,aspen1,sesam,kfgekz,cbhbec,a55555,sigmanu,slash1,giggs11,vatech,marias,candy123,jericho1,kingme,123a123,drakula,cdjkjxm,mercur,oneman,hoseman,plumper,ilovehim,lancers,sergey1,takeshi,goodtogo,cranberr,ghjcnj123,harvick,qazxs,1972chev,horsesho,freedom3,letmein7,saitek,anguss,vfvfgfgfz,300000,elektro,toonporn,999111999q,mamuka,q9umoz,edelweis,subwoofer,bayside,disturbe,volition,lucky3,12345678z,3mpz4r,march1,atlantida,strekoza,seagrams,090909t,yy5rbfsc,jack1234,sammy12,sampras,mark12,eintrach,chaucer,lllll1,nochance,whitepower,197000,lbvekz,passer,torana,12345as,pallas,koolio,12qw34,nokia8800,findout,1thomas,mmmmm1,654987,mihaela,chinaman,superduper,donnas,ringo1,jeroen,gfdkjdf,professo,cdtnrf,tranmere,tanstaaf,himera,ukflbfnjh,667788,alex32,joschi,w123456,okidoki,flatline,papercli,super8,doris1,2good4u,4z34l0ts,pedigree,freeride,gsxr1100,wulfgar,benjie,ferdinan,king1,charlie7,djdxbr,fhntvbq,ripcurl,2wsx1qaz,kingsx,desade,sn00py,loveboat,rottie,evgesha,4money,dolittle,adgjmpt,buzzers,brett1,makita,123123qweqwe,rusalka,sluts1,123456e,jameson1,bigbaby,1z2z3z,ckjybr,love4u,fucker69,erhfbyf,jeanluc,farhad,fishfood,merkin,giant1,golf69,rfnfcnhjaf,camera1,stromb,smoothy,774411,nylon,juice1,rfn.irf,newyor,123456789t,marmot,star11,jennyff,jester1,hisashi,kumquat,alex777,helicopt,merkur,dehpye,cummin,zsmj2v,kristjan,april12,englan,honeypot,badgirls,uzumaki,keines,p12345,guita,quake1,duncan1,juicer,milkbone,hurtme,123456789b,qq123456789,schwein,p3wqaw,54132442,qwertyytrewq,andreeva,ruffryde,punkie,abfkrf,kristinka,anna1987,ooooo1,335533aa,umberto,amber123,456123789,456789123,beelch,manta,peeker,1112131415,3141592654,gipper,wrinkle5,katies,asd123456,james11,78n3s5af,michael0,daboss,jimmyb,hotdog1,david69,852123,blazed,sickan,eljefe,2n6wvq,gobills,rfhfcm,squeaker,cabowabo,luebri,karups,test01,melkor,angel777,smallvil,modano,olorin,4rkpkt,leslie1,koffie,shadows1,littleon,amiga1,topeka,summer20,asterix1,pitstop,aloysius,k12345,magazin,joker69,panocha,pass1word,1233214,ironpony,368ejhih,88keys,pizza123,sonali,57np39,quake2,1234567890qw,1020304,sword1,fynjif,abcde123,dfktyjr,rockys,grendel1,harley12,kokakola,super2,azathoth,lisa123,shelley1,girlss,ibragim,seven1,jeff24,1bigdick,dragan,autobot,t4nvp7,omega123,900000,hecnfv,889988,nitro1,doggie1,fatjoe,811pahc,tommyt,savage1,pallino,smitty1,jg3h4hfn,jamielee,1qazwsx,zx123456,machine1,asdfgh123,guinnes,789520,sharkman,jochen,legend1,sonic2,extreme1,dima12,photoman,123459876,nokian95,775533,vaz2109,april10,becks,repmvf,pooker,qwer12345,themaster,nabeel,monkey10,gogetit,hockey99,bbbbbbb1,zinedine,dolphin2,anelka,1superma,winter01,muggsy,horny2,669966,kuleshov,jesusis,calavera,bullet1,87t5hdf,sleepers,winkie,vespa,lightsab,carine,magister,1spider,shitbird,salavat,becca1,wc18c2,shirak,galactus,zaskar,barkley1,reshma,dogbreat,fullsail,asasa,boeder,12345ta,zxcvbnm12,lepton,elfquest,tony123,vkaxcs,savatage,sevilia1,badkitty,munkey,pebbles1,diciembr,qapmoc,gabriel2,1qa2ws3e,cbcmrb,welldone,nfyufh,kaizen,jack11,manisha,grommit,g12345,maverik,chessman,heythere,mixail,jjjjjjj1,sylvia1,fairmont,harve,skully,global1,youwish,pikachu1,badcat,zombie1,49527843,ultra1,redrider,offsprin,lovebird,153426,stymie,aq1sw2,sorrento,0000001,r3ady41t,webster1,95175,adam123,coonass,159487,slut1,gerasim,monkey99,slutwife,159963,1pass1page,hobiecat,bigtymer,all4you,maggie2,olamide,comcast1,infinit,bailee,vasileva,.ktxrf,asdfghjkl1,12345678912,setter,fuckyou7,nnagqx,lifesuck,draken,austi,feb2000,cable1,1234qwerasdf,hax0red,zxcv12,vlad7788,nosaj,lenovo,underpar,huskies1,lovegirl,feynman,suerte,babaloo,alskdjfhg,oldsmobi,bomber1,redrover,pupuce,methodman,phenom,cutegirl,countyli,gretsch,godisgood,bysunsu,hardhat,mironova,123qwe456rty,rusty123,salut,187211,555666777,11111z,mahesh,rjntyjxtr,br00klyn,dunce1,timebomb,bovine,makelove,littlee,shaven,rizwan,patrick7,42042042,bobbijo,rustem,buttmunc,dongle,tiger69,bluecat,blackhol,shirin,peaces,cherub,cubase,longwood,lotus7,gwju3g,bruin,pzaiu8,green11,uyxnyd,seventee,dragon5,tinkerbel,bluess,bomba,fedorova,joshua2,bodyshop,peluche,gbpacker,shelly1,d1i2m3a4,ghtpbltyn,talons,sergeevna,misato,chrisc,sexmeup,brend,olddog,davros,hazelnut,bridget1,hzze929b,readme,brethart,wild1,ghbdtnbr1,nortel,kinger,royal1,bucky1,allah1,drakkar,emyeuanh,gallaghe,hardtime,jocker,tanman,flavio,abcdef123,leviatha,squid1,skeet,sexse,123456x,mom4u4mm,lilred,djljktq,ocean11,cadaver,baxter1,808state,fighton,primavera,1andrew,moogle,limabean,goddess1,vitalya,blue56,258025,bullride,cicci,1234567d,connor1,gsxr11,oliveoil,leonard1,legsex,gavrik,rjnjgtc,mexicano,2bad4u,goodfellas,ornw6d,mancheste,hawkmoon,zlzfrh,schorsch,g9zns4,bashful,rossi46,stephie,rfhfntkm,sellout,123fuck,stewar1,solnze,00007,thor5200,compaq12,didit,bigdeal,hjlbyf,zebulon,wpf8eu,kamran,emanuele,197500,carvin,ozlq6qwm,3syqo15hil,pennys,epvjb6,asdfghjkl123,198000,nfbcbz,jazzer,asfnhg66,zoloft,albundy,aeiou,getlaid,planet1,gjkbyjxrf,alex2000,brianb,moveon,maggie11,eieio,vcradq,shaggy1,novartis,cocoloco,dunamis,554uzpad,sundrop,1qwertyu,alfie,feliks,briand,123www,red456,addams,fhntv1998,goodhead,theway,javaman,angel01,stratoca,lonsdale,15987532,bigpimpin,skater1,issue43,muffie,yasmina,slowride,crm114,sanity729,himmel,carolcox,bustanut,parabola,masterlo,computador,crackhea,dynastar,rockbott,doggysty,wantsome,bigten,gaelle,juicy1,alaska1,etower,sixnine,suntan,froggies,nokia7610,hunter11,njnets,alicante,buttons1,diosesamo,elizabeth1,chiron,trustnoo,amatuers,tinytim,mechta,sammy2,cthulu,trs8f7,poonam,m6cjy69u35,cookie12,blue25,jordans,santa1,kalinka,mikey123,lebedeva,12345689,kissss,queenbee,vjybnjh,ghostdog,cuckold,bearshare,rjcntyrj,alinochka,ghjcnjrdfibyj,aggie1,teens1,3qvqod,dauren,tonino,hpk2qc,iqzzt580,bears85,nascar88,theboy,njqcw4,masyanya,pn5jvw,intranet,lollone,shadow99,00096462,techie,cvtifhbrb,redeemed,gocanes,62717315,topman,intj3a,cobrajet,antivirus,whyme,berserke,ikilz083,airedale,brandon2,hopkig,johanna1,danil8098,gojira,arthu,vision1,pendragon,milen,chrissie,vampiro,mudder,chris22,blowme69,omega7,surfers,goterps,italy1,baseba11,diego1,gnatsum,birdies,semenov,joker123,zenit2011,wojtek,cab4ma99,watchmen,damia,forgotte,fdm7ed,strummer,freelanc,cingular,orange77,mcdonalds,vjhjpjdf,kariya,tombston,starlet,hawaii1,dantheman,megabyte,nbvjirf,anjing,ybrjkftdbx,hotmom,kazbek,pacific1,sashimi,asd12,coorslig,yvtte545,kitte,elysium,klimenko,cobblers,kamehameha,only4me,redriver,triforce,sidorov,vittoria,fredi,dank420,m1234567,fallout2,989244342a,crazy123,crapola,servus,volvos,1scooter,griffin1,autopass,ownzyou,deviant,george01,2kgwai,boeing74,simhrq,hermosa,hardcor,griffy,rolex1,hackme,cuddles1,master3,bujhtr,aaron123,popolo,blader,1sexyred,gerry1,cronos,ffvdj474,yeehaw,bob1234,carlos2,mike77,buckwheat,ramesh,acls2h,monster2,montess,11qq22ww,lazer,zx123456789,chimpy,masterch,sargon,lochness,archana,1234qwert,hbxfhl,sarahb,altoid,zxcvbn12,dakot,caterham,dolomite,chazz,r29hqq,longone,pericles,grand1,sherbert,eagle3,pudge,irontree,synapse,boome,nogood,summer2,pooki,gangsta1,mahalkit,elenka,lbhtrnjh,dukedog,19922991,hopkins1,evgenia,domino1,x123456,manny1,tabbycat,drake1,jerico,drahcir,kelly2,708090a,facesit,11c645df,mac123,boodog,kalani,hiphop1,critters,hellothere,tbirds,valerka,551scasi,love777,paloalto,mrbrown,duke3d,killa1,arcturus,spider12,dizzy1,smudger,goddog,75395,spammy,1357997531,78678,datalife,zxcvbn123,1122112211,london22,23dp4x,rxmtkp,biggirls,ownsu,lzbs2twz,sharps,geryfe,237081a,golakers,nemesi,sasha1995,pretty1,mittens1,d1lakiss,speedrac,gfhjkmm,sabbat,hellrais,159753258,qwertyuiop123,playgirl,crippler,salma,strat1,celest,hello5,omega5,cheese12,ndeyl5,edward12,soccer3,cheerio,davido,vfrcbr,gjhjctyjr,boscoe,inessa,shithole,ibill,qwepoi,201jedlz,asdlkj,davidk,spawn2,ariel1,michael4,jamie123,romantik,micro1,pittsbur,canibus,katja,muhtar,thomas123,studboy,masahiro,rebrov,patrick8,hotboys,sarge1,1hammer,nnnnn1,eistee,datalore,jackdani,sasha2010,mwq6qlzo,cmfnpu,klausi,cnhjbntkm,andrzej,ilovejen,lindaa,hunter123,vvvvv1,novembe,hamster1,x35v8l,lacey1,1silver,iluvporn,valter,herson,alexsandr,cojones,backhoe,womens,777angel,beatit,klingon1,ta8g4w,luisito,benedikt,maxwel,inspecto,zaq12ws,wladimir,bobbyd,peterj,asdfg12,hellspawn,bitch69,nick1234,golfer23,sony123,jello1,killie,chubby1,kodaira52,yanochka,buckfast,morris1,roaddogg,snakeeye,sex1234,mike22,mmouse,fucker11,dantist,brittan,vfrfhjdf,doc123,plokijuh,emerald1,batman01,serafim,elementa,soccer9,footlong,cthuttdbx,hapkido,eagle123,getsmart,getiton,batman2,masons,mastiff,098890,cfvfhf,james7,azalea,sherif,saun24865709,123red,cnhtrjpf,martina1,pupper,michael5,alan12,shakir,devin1,ha8fyp,palom,mamulya,trippy,deerhunter,happyone,monkey77,3mta3,123456789f,crownvic,teodor,natusik,0137485,vovchik,strutter,triumph1,cvetok,moremone,sonnen,screwbal,akira1,sexnow,pernille,independ,poopies,samapi,kbcbxrf,master22,swetlana,urchin,viper2,magica,slurpee,postit,gilgames,kissarmy,clubpenguin,limpbizk,timber1,celin,lilkim,fuckhard,lonely1,mom123,goodwood,extasy,sdsadee23,foxglove,malibog,clark1,casey2,shell1,odense,balefire,dcunited,cubbie,pierr,solei,161718,bowling1,areyukesc,batboy,r123456,1pionee,marmelad,maynard1,cn42qj,cfvehfq,heathrow,qazxcvbn,connecti,secret123,newfie,xzsawq21,tubitzen,nikusha,enigma1,yfcnz123,1austin,michaelc,splunge,wanger,phantom2,jason2,pain4me,primetime21,babes1,liberte,sugarray,undergro,zonker,labatts,djhjyf,watch1,eagle5,madison2,cntgfirf,sasha2,masterca,fiction7,slick50,bruins1,sagitari,12481632,peniss,insuranc,2b8riedt,12346789,mrclean,ssptx452,tissot,q1w2e3r4t5y6u7,avatar1,comet1,spacer,vbrjkf,pass11,wanker1,14vbqk9p,noshit,money4me,sayana,fish1234,seaways,pipper,romeo123,karens,wardog,ab123456,gorilla1,andrey123,lifesucks,jamesr,4wcqjn,bearman,glock22,matt11,dflbvrf,barbi,maine1,dima1997,sunnyboy,6bjvpe,bangkok1,666666q,rafiki,letmein0,0raziel0,dalla,london99,wildthin,patrycja,skydog,qcactw,tmjxn151,yqlgr667,jimmyd,stripclub,deadwood,863abgsg,horses1,qn632o,scatman,sonia1,subrosa,woland,kolya,charlie4,moleman,j12345,summer11,angel11,blasen,sandal,mynewpas,retlaw,cambria,mustang4,nohack04,kimber45,fatdog,maiden1,bigload,necron,dupont24,ghost123,turbo2,.ktymrf,radagast,balzac,vsevolod,pankaj,argentum,2bigtits,mamabear,bumblebee,mercury7,maddie1,chomper,jq24nc,snooky,pussylic,1lovers,taltos,warchild,diablo66,jojo12,sumerki,aventura,gagger,annelies,drumset,cumshots,azimut,123580,clambake,bmw540,birthday54,psswrd,paganini,wildwest,filibert,teaseme,1test,scampi,thunder5,antosha,purple12,supersex,hhhhhh1,brujah,111222333a,13579a,bvgthfnjh,4506802a,killians,choco,qqqwwweee,raygun,1grand,koetsu13,sharp1,mimi92139,fastfood,idontcare,bluered,chochoz,4z3al0ts,target1,sheffiel,labrat,stalingrad,147123,cubfan,corvett1,holden1,snapper1,4071505,amadeo,pollo,desperados,lovestory,marcopolo,mumbles,familyguy,kimchee,marcio,support1,tekila,shygirl1,trekkie,submissi,ilaria,salam,loveu,wildstar,master69,sales1,netware,homer2,arseniy,gerrity1,raspberr,atreyu,stick1,aldric,tennis12,matahari,alohomora,dicanio,michae1,michaeld,666111,luvbug,boyscout,esmerald,mjordan,admiral1,steamboa,616913,ybhdfyf,557711,555999,sunray,apokalipsis,theroc,bmw330,buzzy,chicos,lenusik,shadowma,eagles05,444222,peartree,qqq123,sandmann,spring1,430799,phatass,andi03,binky1,arsch,bamba,kenny123,fabolous,loser123,poop12,maman,phobos,tecate,myxworld4,metros,cocorico,nokia6120,johnny69,hater,spanked,313233,markos,love2011,mozart1,viktoriy,reccos,331234,hornyone,vitesse,1um83z,55555q,proline,v12345,skaven,alizee,bimini,fenerbahce,543216,zaqqaz,poi123,stabilo,brownie1,1qwerty1,dinesh,baggins1,1234567t,davidkin,friend1,lietuva,octopuss,spooks,12345qq,myshit,buttface,paradoxx,pop123,golfin,sweet69,rfghbp,sambuca,kayak1,bogus1,girlz,dallas12,millers,123456zx,operatio,pravda,eternal1,chase123,moroni,proust,blueduck,harris1,redbarch,996699,1010101,mouche,millenni,1123456,score1,1234565,1234576,eae21157,dave12,pussyy,gfif1991,1598741,hoppy,darrian,snoogins,fartface,ichbins,vfkbyrf,rusrap,2741001,fyfrjylf,aprils,favre,thisis,bannana,serval,wiggum,satsuma,matt123,ivan123,gulmira,123zxc123,oscar2,acces,annie2,dragon0,emiliano,allthat,pajaro,amandine,rawiswar,sinead,tassie,karma1,piggys,nokias,orions,origami,type40,mondo,ferrets,monker,biteme2,gauntlet,arkham,ascona,ingram01,klem1,quicksil,bingo123,blue66,plazma,onfire,shortie,spjfet,123963,thered,fire777,lobito,vball,1chicken,moosehea,elefante,babe23,jesus12,parallax,elfstone,number5,shrooms,freya,hacker1,roxette,snoops,number7,fellini,dtlmvf,chigger,mission1,mitsubis,kannan,whitedog,james01,ghjgecr,rfnfgekmnf,everythi,getnaked,prettybo,sylvan,chiller,carrera4,cowbo,biochem,azbuka,qwertyuiop1,midnight1,informat,audio1,alfred1,0range,sucker1,scott2,russland,1eagle,torben,djkrjlfd,rocky6,maddy1,bonobo,portos,chrissi,xjznq5,dexte,vdlxuc,teardrop,pktmxr,iamtheone,danijela,eyphed,suzuki1,etvww4,redtail,ranger11,mowerman,asshole2,coolkid,adriana1,bootcamp,longcut,evets,npyxr5,bighurt,bassman1,stryder,giblet,nastja,blackadd,topflite,wizar,cumnow,technolo,bassboat,bullitt,kugm7b,maksimus,wankers,mine12,sunfish,pimpin1,shearer9,user1,vjzgjxnf,tycobb,80070633pc,stanly,vitaly,shirley1,cinzia,carolyn1,angeliqu,teamo,qdarcv,aa123321,ragdoll,bonit,ladyluck,wiggly,vitara,jetbalance,12345600,ozzman,dima12345,mybuddy,shilo,satan66,erebus,warrio,090808qwe,stupi,bigdan,paul1234,chiapet,brooks1,philly1,dually,gowest,farmer1,1qa2ws3ed4rf,alberto1,beachboy,barne,aa12345,aliyah,radman,benson1,dfkthbq,highball,bonou2,i81u812,workit,darter,redhook,csfbr5yy,buttlove,episode1,ewyuza,porthos,lalal,abcd12,papero,toosexy,keeper1,silver7,jujitsu,corset,pilot123,simonsay,pinggolf,katerinka,kender,drunk1,fylhjvtlf,rashmi,nighthawk,maggy,juggernaut,larryb,cabibble,fyabcf,247365,gangstar,jaybee,verycool,123456789qw,forbidde,prufrock,12345zxc,malaika,blackbur,docker,filipe,koshechka,gemma1,djamaal,dfcbkmtdf,gangst,9988aa,ducks1,pthrfkj,puertorico,muppets,griffins,whippet,sauber,timofey,larinso,123456789zxc,quicken,qsefth,liteon,headcase,bigdadd,zxc321,maniak,jamesc,bassmast,bigdogs,1girls,123xxx,trajan,lerochka,noggin,mtndew,04975756,domin,wer123,fumanchu,lambada,thankgod,june22,kayaking,patchy,summer10,timepass,poiu1234,kondor,kakka,lament,zidane10,686xqxfg,l8v53x,caveman1,nfvthkfy,holymoly,pepita,alex1996,mifune,fighter1,asslicker,jack22,abc123abc,zaxxon,midnigh,winni,psalm23,punky,monkey22,password13,mymusic,justyna,annushka,lucky5,briann,495rus19,withlove,almaz,supergir,miata,bingbong,bradpitt,kamasutr,yfgjktjy,vanman,pegleg,amsterdam1,123a321,letmein9,shivan,korona,bmw520,annette1,scotsman,gandal,welcome12,sc00by,qpwoei,fred69,m1sf1t,hamburg1,1access,dfkmrbhbz,excalibe,boobies1,fuckhole,karamel,starfuck,star99,breakfas,georgiy,ywvxpz,smasher,fatcat1,allanon,12345n,coondog,whacko,avalon1,scythe,saab93,timon,khorne,atlast,nemisis,brady12,blenheim,52678677,mick7278,9skw5g,fleetwoo,ruger1,kissass,pussy7,scruff,12345l,bigfun,vpmfsz,yxkck878,evgeny,55667788,lickher,foothill,alesis,poppies,77777778,californi,mannie,bartjek,qhxbij,thehulk,xirt2k,angelo4ek,rfkmrekznjh,tinhorse,1david,sparky12,night1,luojianhua,bobble,nederland,rosemari,travi,minou,ciscokid,beehive,565hlgqo,alpine1,samsung123,trainman,xpress,logistic,vw198m2n,hanter,zaqwsx123,qwasz,mariachi,paska,kmg365,kaulitz,sasha12,north1,polarbear,mighty1,makeksa11,123456781,one4all,gladston,notoriou,polniypizdec110211,gosia,grandad,xholes,timofei,invalidp,speaker1,zaharov,maggiema,loislane,gonoles,br5499,discgolf,kaskad,snooper,newman1,belial,demigod,vicky1,pridurok,alex1990,tardis1,cruzer,hornie,sacramen,babycat,burunduk,mark69,oakland1,me1234,gmctruck,extacy,sexdog,putang,poppen,billyd,1qaz2w,loveable,gimlet,azwebitalia,ragtop,198500,qweas,mirela,rock123,11bravo,sprewell,tigrenok,jaredleto,vfhbif,blue2,rimjob,catwalk,sigsauer,loqse,doromich,jack01,lasombra,jonny5,newpassword,profesor,garcia1,123as123,croucher,demeter,4_life,rfhfvtkm,superman2,rogues,assword1,russia1,jeff1,mydream,z123456789,rascal1,darre,kimberl,pickle1,ztmfcq,ponchik,lovesporn,hikari,gsgba368,pornoman,chbjun,choppy,diggity,nightwolf,viktori,camar,vfhecmrf,alisa1,minstrel,wishmaster,mulder1,aleks,gogirl,gracelan,8womys,highwind,solstice,dbrnjhjdyf,nightman,pimmel,beertje,ms6nud,wwfwcw,fx3tuo,poopface,asshat,dirtyd,jiminy,luv2fuck,ptybnxtvgbjy,dragnet,pornogra,10inch,scarlet1,guido1,raintree,v123456,1aaaaaaa,maxim1935,hotwater,gadzooks,playaz,harri,brando1,defcon1,ivanna,123654a,arsenal2,candela,nt5d27,jaime1,duke1,burton1,allstar1,dragos,newpoint,albacore,1236987z,verygoodbot,1wildcat,fishy1,ptktysq,chris11,puschel,itdxtyrj,7kbe9d,serpico,jazzie,1zzzzz,kindbuds,wenef45313,1compute,tatung,sardor,gfyfcjybr,test99,toucan,meteora,lysander,asscrack,jowgnx,hevnm4,suckthis,masha123,karinka,marit,oqglh565,dragon00,vvvbbb,cheburashka,vfrfrf,downlow,unforgiven,p3e85tr,kim123,sillyboy,gold1,golfvr6,quicksan,irochka,froglegs,shortsto,caleb1,tishka,bigtitts,smurfy,bosto,dropzone,nocode,jazzbass,digdug,green7,saltlake,therat,dmitriev,lunita,deaddog,summer0,1212qq,bobbyg,mty3rh,isaac1,gusher,helloman,sugarbear,corvair,extrem,teatime,tujazopi,titanik,efyreg,jo9k2jw2,counchac,tivoli,utjvtnhbz,bebit,jacob6,clayton1,incubus1,flash123,squirter,dima2010,cock1,rawks,komatsu,forty2,98741236,cajun1,madelein,mudhoney,magomed,q111111,qaswed,consense,12345b,bakayaro,silencer,zoinks,bigdic,werwolf,pinkpuss,96321478,alfie1,ali123,sarit,minette,musics,chato,iaapptfcor,cobaka,strumpf,datnigga,sonic123,yfnecbr,vjzctvmz,pasta1,tribbles,crasher,htlbcrf,1tiger,shock123,bearshar,syphon,a654321,cubbies1,jlhanes,eyespy,fucktheworld,carrie1,bmw325is,suzuk,mander,dorina,mithril,hondo1,vfhnbyb,sachem,newton1,12345x,7777755102q,230857z,xxxsex,scubapro,hayastan,spankit,delasoul,searock6,fallout3,nilrem,24681357,pashka,voluntee,pharoh,willo,india1,badboy69,roflmao,gunslinger,lovergir,mama12,melange,640xwfkv,chaton,darkknig,bigman1,aabbccdd,harleyd,birdhouse,giggsy,hiawatha,tiberium,joker7,hello1234,sloopy,tm371855,greendog,solar1,bignose,djohn11,espanol,oswego,iridium,kavitha,pavell,mirjam,cyjdsvujljv,alpha5,deluge,hamme,luntik,turismo,stasya,kjkbnf,caeser,schnecke,tweety1,tralfaz,lambrett,prodigy1,trstno1,pimpshit,werty1,karman,bigboob,pastel,blackmen,matthew8,moomin,q1w2e,gilly,primaver,jimmyg,house2,elviss,15975321,1jessica,monaliza,salt55,vfylfhbyrf,harley11,tickleme,murder1,nurgle,kickass1,theresa1,fordtruck,pargolf,managua,inkognito,sherry1,gotit,friedric,metro2033,slk230,freeport,cigarett,492529,vfhctkm,thebeach,twocats,bakugan,yzerman1,charlieb,motoko,skiman,1234567w,pussy3,love77,asenna,buffie,260zntpc,kinkos,access20,mallard1,fuckyou69,monami,rrrrr1,bigdog69,mikola,1boomer,godzila,ginger2,dima2000,skorpion39,dima1234,hawkdog79,warrior2,ltleirf,supra1,jerusale,monkey01,333z333,666888,kelsey1,w8gkz2x1,fdfnfh,msnxbi,qwe123rty,mach1,monkey3,123456789qq,c123456,nezabudka,barclays,nisse,dasha1,12345678987654321,dima1993,oldspice,frank2,rabbitt,prettyboy,ov3ajy,iamthema,kawasak,banjo1,gtivr6,collants,gondor,hibees,cowboys2,codfish,buster2,purzel,rubyred,kayaker,bikerboy,qguvyt,masher,sseexx,kenshiro,moonglow,semenova,rosari,eduard1,deltaforce,grouper,bongo1,tempgod,1taylor,goldsink,qazxsw1,1jesus,m69fg2w,maximili,marysia,husker1,kokanee,sideout,googl,south1,plumber1,trillian,00001,1357900,farkle,1xxxxx,pascha,emanuela,bagheera,hound1,mylov,newjersey,swampfox,sakic19,torey,geforce,wu4etd,conrail,pigman,martin2,ber02,nascar2,angel69,barty,kitsune,cornet,yes90125,goomba,daking,anthea,sivart,weather1,ndaswf,scoubidou,masterchief,rectum,3364068,oranges1,copter,1samanth,eddies,mimoza,ahfywbz,celtic88,86mets,applemac,amanda11,taliesin,1angel,imhere,london11,bandit12,killer666,beer1,06225930,psylocke,james69,schumach,24pnz6kc,endymion,wookie1,poiu123,birdland,smoochie,lastone,rclaki,olive1,pirat,thunder7,chris69,rocko,151617,djg4bb4b,lapper,ajcuivd289,colole57,shadow7,dallas21,ajtdmw,executiv,dickies,omegaman,jason12,newhaven,aaaaaas,pmdmscts,s456123789,beatri,applesauce,levelone,strapon,benladen,creaven,ttttt1,saab95,f123456,pitbul,54321a,sex12345,robert3,atilla,mevefalkcakk,1johnny,veedub,lilleke,nitsuj,5t6y7u8i,teddys,bluefox,nascar20,vwjetta,buffy123,playstation3,loverr,qweasd12,lover2,telekom,benjamin1,alemania,neutrino,rockz,valjean,testicle,trinity3,realty,firestarter,794613852,ardvark,guadalup,philmont,arnold1,holas,zw6syj,birthday299,dover1,sexxy1,gojets,741236985,cance,blue77,xzibit,qwerty88,komarova,qweszxc,footer,rainger,silverst,ghjcnb,catmando,tatooine,31217221027711,amalgam,69dude,qwerty321,roscoe1,74185,cubby,alfa147,perry1,darock,katmandu,darknight,knicks1,freestuff,45454,kidman,4tlved,axlrose,cutie1,quantum1,joseph10,ichigo,pentium3,rfhectkm,rowdy1,woodsink,justforfun,sveta123,pornografia,mrbean,bigpig,tujheirf,delta9,portsmou,hotbod,kartal,10111213,fkbyf001,pavel1,pistons1,necromancer,verga,c7lrwu,doober,thegame1,hatesyou,sexisfun,1melissa,tuczno18,bowhunte,gobama,scorch,campeon,bruce2,fudge1,herpderp,bacon1,redsky,blackeye,19966991,19992000,ripken8,masturba,34524815,primax,paulina1,vp6y38,427cobra,4dwvjj,dracon,fkg7h4f3v6,longview,arakis,panama1,honda2,lkjhgfdsaz,razors,steels,fqkw5m,dionysus,mariajos,soroka,enriqu,nissa,barolo,king1234,hshfd4n279,holland1,flyer1,tbones,343104ky,modems,tk421,ybrbnrf,pikapp,sureshot,wooddoor,florida2,mrbungle,vecmrf,catsdogs,axolotl,nowayout,francoi,chris21,toenail,hartland,asdjkl,nikkii,onlyyou,buckskin,fnord,flutie,holen1,rincewind,lefty1,ducky1,199000,fvthbrf,redskin1,ryno23,lostlove,19mtpgam19,abercrom,benhur,jordan11,roflcopter,ranma,phillesh,avondale,igromania,p4ssword,jenny123,tttttt1,spycams,cardigan,2112yyz,sleepy1,paris123,mopars,lakers34,hustler1,james99,matrix3,popimp,12pack,eggbert,medvedev,testit,performa,logitec,marija,sexybeast,supermanboy,iwantit,rjktcj,jeffer,svarog,halo123,whdbtp,nokia3230,heyjoe,marilyn1,speeder,ibxnsm,prostock,bennyboy,charmin,codydog,parol999,ford9402,jimmer,crayola,159357258,alex77,joey1,cayuga,phish420,poligon,specops,tarasova,caramelo,draconis,dimon,cyzkhw,june29,getbent,1guitar,jimjam,dictiona,shammy,flotsam,0okm9ijn,crapper,technic,fwsadn,rhfdxtyrj,zaq11qaz,anfield1,159753q,curious1,hip-hop,1iiiii,gfhjkm2,cocteau,liveevil,friskie,crackhead,b1afra,elektrik,lancer1,b0ll0cks,jasond,z1234567,tempest1,alakazam,asdfasd,duffy1,oneday,dinkle,qazedctgb,kasimir,happy7,salama,hondaciv,nadezda,andretti,cannondale,sparticu,znbvjd,blueice,money01,finster,eldar,moosie,pappa,delta123,neruda,bmw330ci,jeanpaul,malibu1,alevtina,sobeit,travolta,fullmetal,enamorad,mausi,boston12,greggy,smurf1,ratrace,ichiban,ilovepus,davidg,wolf69,villa1,cocopuff,football12,starfury,zxc12345,forfree,fairfiel,dreams1,tayson,mike2,dogday,hej123,oldtimer,sanpedro,clicker,mollycat,roadstar,golfe,lvbnhbq1,topdevice,a1b2c,sevastopol,calli,milosc,fire911,pink123,team3x,nolimit5,snickers1,annies,09877890,jewel1,steve69,justin11,autechre,killerbe,browncow,slava1,christer,fantomen,redcloud,elenberg,beautiful1,passw0rd1,nazira,advantag,cockring,chaka,rjpzdrf,99941,az123456,biohazar,energie,bubble1,bmw323,tellme,printer1,glavine,1starwar,coolbeans,april17,carly1,quagmire,admin2,djkujuhfl,pontoon,texmex,carlos12,thermo,vaz2106,nougat,bob666,1hockey,1john,cricke,qwerty10,twinz,totalwar,underwoo,tijger,lildevil,123q321,germania,freddd,1scott,beefy,5t4r3e2w1q,fishbait,nobby,hogger,dnstuff,jimmyc,redknapp,flame1,tinfloor,balla,nfnfhby,yukon1,vixens,batata,danny123,1zxcvbnm,gaetan,homewood,greats,tester1,green99,1fucker,sc0tland,starss,glori,arnhem,goatman,1234asd,supertra,bill123,elguapo,sexylegs,jackryan,usmc69,innow,roaddog,alukard,winter11,crawler,gogiants,rvd420,alessandr,homegrow,gobbler,esteba,valeriy,happy12,1joshua,hawking,sicnarf,waynes,iamhappy,bayadera,august2,sashas,gotti,dragonfire,pencil1,halogen,borisov,bassingw,15975346,zachar,sweetp,soccer99,sky123,flipyou,spots3,xakepy,cyclops1,dragon77,rattolo58,motorhea,piligrim,helloween,dmb2010,supermen,shad0w,eatcum,sandokan,pinga,ufkfrnbrf,roksana,amista,pusser,sony1234,azerty1,1qasw2,ghbdt,q1w2e3r4t5y6u7i8,ktutylf,brehznev,zaebali,shitass,creosote,gjrtvjy,14938685,naughtyboy,pedro123,21crack,maurice1,joesakic,nicolas1,matthew9,lbyfhf,elocin,hfcgbplzq,pepper123,tiktak,mycroft,ryan11,firefly1,arriva,cyecvevhbr,loreal,peedee,jessica8,lisa01,anamari,pionex,ipanema,airbag,frfltvbz,123456789aa,epwr49,casper12,sweethear,sanandreas,wuschel,cocodog,france1,119911,redroses,erevan,xtvgbjy,bigfella,geneve,volvo850,evermore,amy123,moxie,celebs,geeman,underwor,haslo1,joy123,hallow,chelsea0,12435687,abarth,12332145,tazman1,roshan,yummie,genius1,chrisd,ilovelife,seventy7,qaz1wsx2,rocket88,gaurav,bobbyboy,tauchen,roberts1,locksmit,masterof,www111,d9ungl,volvos40,asdasd1,golfers,jillian1,7xm5rq,arwpls4u,gbhcf2,elloco,football2,muerte,bob101,sabbath1,strider1,killer66,notyou,lawnboy,de7mdf,johnnyb,voodoo2,sashaa,homedepo,bravos,nihao123,braindea,weedhead,rajeev,artem1,camille1,rockss,bobbyb,aniston,frnhbcf,oakridge,biscayne,cxfcnm,dressage,jesus3,kellyann,king69,juillet,holliste,h00ters,ripoff,123645,1999ar,eric12,123777,tommi,dick12,bilder,chris99,rulezz,getpaid,chicubs,ender1,byajhvfnbrf,milkshak,sk8board,freakshow,antonella,monolit,shelb,hannah01,masters1,pitbull1,1matthew,luvpussy,agbdlcid,panther2,alphas,euskadi,8318131,ronnie1,7558795,sweetgirl,cookie59,sequoia,5552555,ktyxbr,4500455,money7,severus,shinobu,dbityrf,phisig,rogue2,fractal,redfred,sebastian1,nelli,b00mer,cyberman,zqjphsyf6ctifgu,oldsmobile,redeemer,pimpi,lovehurts,1slayer,black13,rtynfdh,airmax,g00gle,1panther,artemon,nopasswo,fuck1234,luke1,trinit,666000,ziadma,oscardog,davex,hazel1,isgood,demond,james5,construc,555551,january2,m1911a1,flameboy,merda,nathan12,nicklaus,dukester,hello99,scorpio7,leviathan,dfcbktr,pourquoi,vfrcbv123,shlomo,rfcgth,rocky3,ignatz,ajhneyf,roger123,squeek,4815162342a,biskit,mossimo,soccer21,gridlock,lunker,popstar,ghhh47hj764,chutney,nitehawk,vortec,gamma1,codeman,dragula,kappasig,rainbow2,milehigh,blueballs,ou8124me,rulesyou,collingw,mystere,aster,astrovan,firetruck,fische,crawfish,hornydog,morebeer,tigerpaw,radost,144000,1chance,1234567890qwe,gracie1,myopia,oxnard,seminoles,evgeni,edvard,partytim,domani,tuffy1,jaimatadi,blackmag,kzueirf,peternor,mathew1,maggie12,henrys,k1234567,fasted,pozitiv,cfdtkbq,jessica7,goleafs,bandito,girl78,sharingan,skyhigh,bigrob,zorros,poopers,oldschoo,pentium2,gripper,norcal,kimba,artiller,moneymak,00197400,272829,shadow1212,thebull,handbags,all4u2c,bigman2,civics,godisgoo,section8,bandaid,suzanne1,zorba,159123,racecars,i62gbq,rambo123,ironroad,johnson2,knobby,twinboys,sausage1,kelly69,enter2,rhjirf,yessss,james12,anguilla,boutit,iggypop,vovochka,06060,budwiser,romuald,meditate,good1,sandrin,herkules,lakers8,honeybea,11111111a,miche,rangers9,lobster1,seiko,belova,midcon,mackdadd,bigdaddy1,daddie,sepultur,freddy12,damon1,stormy1,hockey2,bailey12,hedimaptfcor,dcowboys,sadiedog,thuggin,horny123,josie1,nikki2,beaver69,peewee1,mateus,viktorija,barrys,cubswin1,matt1234,timoxa,rileydog,sicilia,luckycat,candybar,julian1,abc456,pussylip,phase1,acadia,catty,246800,evertonf,bojangle,qzwxec,nikolaj,fabrizi,kagome,noncapa0,marle,popol,hahaha1,cossie,carla10,diggers,spankey,sangeeta,cucciolo,breezer,starwar1,cornholio,rastafari,spring99,yyyyyyy1,webstar,72d5tn,sasha1234,inhouse,gobuffs,civic1,redstone,234523,minnie1,rivaldo,angel5,sti2000,xenocide,11qq11,1phoenix,herman1,holly123,tallguy,sharks1,madri,superbad,ronin,jalal123,hardbody,1234567r,assman1,vivahate,buddylee,38972091,bonds25,40028922,qrhmis,wp2005,ceejay,pepper01,51842543,redrum1,renton,varadero,tvxtjk7r,vetteman,djhvbrc,curly1,fruitcak,jessicas,maduro,popmart,acuari,dirkpitt,buick1,bergerac,golfcart,pdtpljxrf,hooch1,dudelove,d9ebk7,123452000,afdjhbn,greener,123455432,parachut,mookie12,123456780,jeepcj5,potatoe,sanya,qwerty2010,waqw3p,gotika,freaky1,chihuahu,buccanee,ecstacy,crazyboy,slickric,blue88,fktdnbyf,2004rj,delta4,333222111,calient,ptbdhw,1bailey,blitz1,sheila1,master23,hoagie,pyf8ah,orbita,daveyboy,prono1,delta2,heman,1horny,tyrik123,ostrov,md2020,herve,rockfish,el546218,rfhbyjxrf,chessmaster,redmoon,lenny1,215487,tomat,guppy,amekpass,amoeba,my3girls,nottingh,kavita,natalia1,puccini,fabiana,8letters,romeos,netgear,casper2,taters,gowings,iforgot1,pokesmot,pollit,lawrun,petey1,rosebuds,007jr,gthtcnhjqrf,k9dls02a,neener,azertyu,duke11,manyak,tiger01,petros,supermar,mangas,twisty,spotter,takagi,dlanod,qcmfd454,tusymo,zz123456,chach,navyblue,gilbert1,2kash6zq,avemaria,1hxboqg2s,viviane,lhbjkjubz2957704,nowwowtg,1a2b3c4,m0rn3,kqigb7,superpuper,juehtw,gethigh,theclown,makeme,pradeep,sergik,deion21,nurik,devo2706,nbvibt,roman222,kalima,nevaeh,martin7,anathema,florian1,tamwsn3sja,dinmamma,133159,123654q,slicks,pnp0c08,yojimbo,skipp,kiran,pussyfuck,teengirl,apples12,myballs,angeli,1234a,125678,opelastra,blind1,armagedd,fish123,pitufo,chelseaf,thedevil,nugget1,cunt69,beetle1,carter15,apolon,collant,password00,fishboy,djkrjdf,deftone,celti,three11,cyrus1,lefthand,skoal1,ferndale,aries1,fred01,roberta1,chucks,cornbread,lloyd1,icecrea,cisco123,newjerse,vfhrbpf,passio,volcom1,rikimaru,yeah11,djembe,facile,a1l2e3x4,batman7,nurbol,lorenzo1,monica69,blowjob1,998899,spank1,233391,n123456,1bear,bellsout,999998,celtic67,sabre1,putas,y9enkj,alfabeta,heatwave,honey123,hard4u,insane1,xthysq,magnum1,lightsaber,123qweqwe,fisher1,pixie1,precios,benfic,thegirls,bootsman,4321rewq,nabokov,hightime,djghjc,1chelsea,junglist,august16,t3fkvkmj,1232123,lsdlsd12,chuckie1,pescado,granit,toogood,cathouse,natedawg,bmw530,123kid,hajime,198400,engine1,wessonnn,kingdom1,novembre,1rocks,kingfisher,qwerty89,jordan22,zasranec,megat,sucess,installutil,fetish01,yanshi1982,1313666,1314520,clemence,wargod,time1,newzealand,snaker,13324124,cfrehf,hepcat,mazahaka,bigjay,denisov,eastwest,1yellow,mistydog,cheetos,1596357,ginger11,mavrik,bubby1,bhbyf,pyramide,giusepp,luthien,honda250,andrewjackie,kentavr,lampoon,zaq123wsx,sonicx,davidh,1ccccc,gorodok,windsong,programm,blunt420,vlad1995,zxcvfdsa,tarasov,mrskin,sachas,mercedes1,koteczek,rawdog,honeybear,stuart1,kaktys,richard7,55555n,azalia,hockey10,scouter,francy,1xxxxxx,julie456,tequilla,penis123,schmoe,tigerwoods,1ferrari,popov,snowdrop,matthieu,smolensk,cornflak,jordan01,love2000,23wesdxc,kswiss,anna2000,geniusnet,baby2000,33ds5x,waverly,onlyone4,networkingpe,raven123,blesse,gocards,wow123,pjflkork,juicey,poorboy,freeee,billybo,shaheen,zxcvbnm.,berlit,truth1,gepard,ludovic,gunther1,bobby2,bob12345,sunmoon,septembr,bigmac1,bcnjhbz,seaking,all4u,12qw34er56ty,bassie,nokia5228,7355608,sylwia,charvel,billgate,davion,chablis,catsmeow,kjiflrf,amylynn,rfvbkkf,mizredhe,handjob,jasper12,erbol,solara,bagpipe,biffer,notime,erlan,8543852,sugaree,oshkosh,fedora,bangbus,5lyedn,longball,teresa1,bootyman,aleksand,qazwsxedc12,nujbhc,tifosi,zpxvwy,lights1,slowpoke,tiger12,kstate,password10,alex69,collins1,9632147,doglover,baseball2,security1,grunts,orange2,godloves,213qwe879,julieb,1qazxsw23edcvfr4,noidea,8uiazp,betsy1,junior2,parol123,123456zz,piehonkii,kanker,bunky,hingis,reese1,qaz123456,sidewinder,tonedup,footsie,blackpoo,jalapeno,mummy1,always1,josh1,rockyboy,plucky,chicag,nadroj,blarney,blood123,wheaties,packer1,ravens1,mrjones,gfhjkm007,anna2010,awatar,guitar12,hashish,scale1,tomwaits,amrita,fantasma,rfpfym,pass2,tigris,bigair,slicker,sylvi,shilpa,cindylou,archie1,bitches1,poppys,ontime,horney1,camaroz28,alladin,bujhm,cq2kph,alina1,wvj5np,1211123a,tetons,scorelan,concordi,morgan2,awacs,shanty,tomcat14,andrew123,bear69,vitae,fred99,chingy,octane,belgario,fatdaddy,rhodan,password23,sexxes,boomtown,joshua01,war3demo,my2kids,buck1,hot4you,monamour,12345aa,yumiko,parool,carlton1,neverland,rose12,right1,sociald,grouse,brandon0,cat222,alex00,civicex,bintang,malkav,arschloc,dodgeviper,qwerty666,goduke,dante123,boss1,ontheroc,corpsman,love14,uiegu451,hardtail,irondoor,ghjrehfnehf,36460341,konijn,h2slca,kondom25,123456ss,cfytxrf,btnjey,nando,freemail,comander,natas666,siouxsie,hummer1,biomed,dimsum,yankees0,diablo666,lesbian1,pot420,jasonm,glock23,jennyb,itsmine,lena2010,whattheh,beandip,abaddon,kishore,signup,apogee,biteme12,suzieq,vgfun4,iseeyou,rifleman,qwerta,4pussy,hawkman,guest1,june17,dicksuck,bootay,cash12,bassale,ktybyuhfl,leetch,nescafe,7ovtgimc,clapton1,auror,boonie,tracker1,john69,bellas,cabinboy,yonkers,silky1,ladyffesta,drache,kamil1,davidp,bad123,snoopy12,sanche,werthvfy,achille,nefertiti,gerald1,slage33,warszawa,macsan26,mason123,kotopes,welcome8,nascar99,kiril,77778888,hairy1,monito,comicsans,81726354,killabee,arclight,yuo67,feelme,86753099,nnssnn,monday12,88351132,88889999,websters,subito,asdf12345,vaz2108,zvbxrpl,159753456852,rezeda,multimed,noaccess,henrique,tascam,captiva,zadrot,hateyou,sophie12,123123456,snoop1,charlie8,birmingh,hardline,libert,azsxdcf,89172735872,rjpthju,bondar,philips1,olegnaruto,myword,yakman,stardog,banana12,1234567890w,farout,annick,duke01,rfj422,billard,glock19,shaolin1,master10,cinderel,deltaone,manning1,biggreen,sidney1,patty1,goforit1,766rglqy,sevendus,aristotl,armagedo,blumen,gfhfyjz,kazakov,lekbyxxx,accord1,idiota,soccer16,texas123,victoire,ololo,chris01,bobbbb,299792458,eeeeeee1,confiden,07070,clarks,techno1,kayley,stang1,wwwwww1,uuuuu1,neverdie,jasonr,cavscout,481516234,mylove1,shaitan,1qazxcvb,barbaros,123456782000,123wer,thissucks,7seven,227722,faerie,hayduke,dbacks,snorkel,zmxncbv,tiger99,unknown1,melmac,polo1234,sssssss1,1fire,369147,bandung,bluejean,nivram,stanle,ctcnhf,soccer20,blingbli,dirtball,alex2112,183461,skylin,boobman,geronto,brittany1,yyz2112,gizmo69,ktrcec,dakota12,chiken,sexy11,vg08k714,bernadet,1bulldog,beachs,hollyb,maryjoy,margo1,danielle1,chakra,alexand,hullcity,matrix12,sarenna,pablos,antler,supercar,chomsky,german1,airjordan,545ettvy,camaron,flight1,netvideo,tootall,valheru,481516,1234as,skimmer,redcross,inuyash,uthvfy,1012nw,edoardo,bjhgfi,golf11,9379992a,lagarto,socball,boopie,krazy,.adgjmptw,gaydar,kovalev,geddylee,firstone,turbodog,loveee,135711,badbo,trapdoor,opopop11,danny2,max2000,526452,kerry1,leapfrog,daisy2,134kzbip,1andrea,playa1,peekab00,heskey,pirrello,gsewfmck,dimon4ik,puppie,chelios,554433,hypnodanny,fantik,yhwnqc,ghbdtngjrf,anchorag,buffett1,fanta,sappho,024680,vialli,chiva,lucylu,hashem,exbntkm,thema,23jordan,jake11,wildside,smartie,emerica,2wj2k9oj,ventrue,timoth,lamers,baerchen,suspende,boobis,denman85,1adam12,otello,king12,dzakuni,qsawbbs,isgay,porno123,jam123,daytona1,tazzie,bunny123,amaterasu,jeffre,crocus,mastercard,bitchedup,chicago7,aynrand,intel1,tamila,alianza,mulch,merlin12,rose123,alcapone,mircea,loveher,joseph12,chelsea6,dorothy1,wolfgar,unlimite,arturik,qwerty3,paddy1,piramid,linda123,cooool,millie1,warlock1,forgotit,tort02,ilikeyou,avensis,loveislife,dumbass1,clint1,2110se,drlove,olesia,kalinina,sergey123,123423,alicia1,markova,tri5a3,media1,willia1,xxxxxxx1,beercan,smk7366,jesusislord,motherfuck,smacker,birthday5,jbaby,harley2,hyper1,a9387670a,honey2,corvet,gjmptw,rjhjkmbien,apollon,madhuri,3a5irt,cessna17,saluki,digweed,tamia1,yja3vo,cfvlehfr,1111111q,martyna,stimpy1,anjana,yankeemp,jupiler,idkfa,1blue,fromv,afric,3xbobobo,liverp00l,nikon1,amadeus1,acer123,napoleo,david7,vbhjckfdf,mojo69,percy1,pirates1,grunt1,alenushka,finbar,zsxdcf,mandy123,1fred,timewarp,747bbb,druids,julia123,123321qq,spacebar,dreads,fcbarcelona,angela12,anima,christopher1,stargazer,123123s,hockey11,brewski,marlbor,blinker,motorhead,damngood,werthrf,letmein3,moremoney,killer99,anneke,eatit,pilatus,andrew01,fiona1,maitai,blucher,zxgdqn,e5pftu,nagual,panic1,andron,openwide,alphabeta,alison1,chelsea8,fende,mmm666,1shot2,a19l1980,123456@,1black,m1chael,vagner,realgood,maxxx,vekmnbr,stifler,2509mmh,tarkan,sherzod,1234567b,gunners1,artem2010,shooby,sammie1,p123456,piggie,abcde12345,nokia6230,moldir,piter,1qaz3edc,frequenc,acuransx,1star,nikeair,alex21,dapimp,ranjan,ilovegirls,anastasiy,berbatov,manso,21436587,leafs1,106666,angelochek,ingodwetrust,123456aaa,deano,korsar,pipetka,thunder9,minka,himura,installdevic,1qqqqq,digitalprodu,suckmeoff,plonker,headers,vlasov,ktr1996,windsor1,mishanya,garfield1,korvin,littlebit,azaz09,vandamme,scripto,s4114d,passward,britt1,r1chard,ferrari5,running1,7xswzaq,falcon2,pepper76,trademan,ea53g5,graham1,volvos80,reanimator,micasa,1234554321q,kairat,escorpion,sanek94,karolina1,kolovrat,karen2,1qaz@wsx,racing1,splooge,sarah2,deadman1,creed1,nooner,minicoop,oceane,room112,charme,12345ab,summer00,wetcunt,drewman,nastyman,redfire,appels,merlin69,dolfin,bornfree,diskette,ohwell,12345678qwe,jasont,madcap,cobra2,dolemit1,whatthehell,juanit,voldemar,rocke,bianc,elendil,vtufgjkbc,hotwheels,spanis,sukram,pokerface,k1ller,freakout,dontae,realmadri,drumss,gorams,258789,snakey,jasonn,whitewolf,befree,johnny99,pooka,theghost,kennys,vfvektxrf,toby1,jumpman23,deadlock,barbwire,stellina,alexa1,dalamar,mustanggt,northwes,tesoro,chameleo,sigtau,satoshi,george11,hotcum,cornell1,golfer12,geek01d,trololo,kellym,megapolis,pepsi2,hea666,monkfish,blue52,sarajane,bowler1,skeets,ddgirls,hfccbz,bailey01,isabella1,dreday,moose123,baobab,crushme,000009,veryhot,roadie,meanone,mike18,henriett,dohcvtec,moulin,gulnur,adastra,angel9,western1,natura,sweetpe,dtnfkm,marsbar,daisys,frogger1,virus1,redwood1,streetball,fridolin,d78unhxq,midas,michelob,cantik,sk2000,kikker,macanudo,rambone,fizzle,20000,peanuts1,cowpie,stone32,astaroth,dakota01,redso,mustard1,sexylove,giantess,teaparty,bobbin,beerbong,monet1,charles3,anniedog,anna1988,cameleon,longbeach,tamere,qpful542,mesquite,waldemar,12345zx,iamhere,lowboy,canard,granp,daisymay,love33,moosejaw,nivek,ninjaman,shrike01,aaa777,88002000600,vodolei,bambush,falcor,harley69,alphaomega,severine,grappler,bosox,twogirls,gatorman,vettes,buttmunch,chyna,excelsio,crayfish,birillo,megumi,lsia9dnb9y,littlebo,stevek,hiroyuki,firehous,master5,briley2,gangste,chrisk,camaleon,bulle,troyboy,froinlaven,mybutt,sandhya,rapala,jagged,crazycat,lucky12,jetman,wavmanuk,1heather,beegee,negril,mario123,funtime1,conehead,abigai,mhorgan,patagoni,travel1,backspace,frenchfr,mudcat,dashenka,baseball3,rustys,741852kk,dickme,baller23,griffey1,suckmycock,fuhrfzgc,jenny2,spuds,berlin1,justfun,icewind,bumerang,pavlusha,minecraft123,shasta1,ranger12,123400,twisters,buthead,miked,finance1,dignity7,hello9,lvjdp383,jgthfnjh,dalmatio,paparoach,miller31,2bornot2b,fathe,monterre,theblues,satans,schaap,jasmine2,sibelius,manon,heslo,jcnhjd,shane123,natasha2,pierrot,bluecar,iloveass,harriso,red12,london20,job314,beholder,reddawg,fuckyou!,pussylick,bologna1,austintx,ole4ka,blotto,onering,jearly,balbes,lightbul,bighorn,crossfir,lee123,prapor,1ashley,gfhjkm22,wwe123,09090,sexsite,marina123,jagua,witch1,schmoo,parkview,dragon3,chilango,ultimo,abramova,nautique,2bornot2,duende,1arthur,nightwing,surfboar,quant4307,15s9pu03,karina1,shitball,walleye1,wildman1,whytesha,1morgan,my2girls,polic,baranova,berezuckiy,kkkkkk1,forzima,fornow,qwerty02,gokart,suckit69,davidlee,whatnow,edgard,tits1,bayshore,36987412,ghbphfr,daddyy,explore1,zoidberg,5qnzjx,morgane,danilov,blacksex,mickey12,balsam,83y6pv,sarahc,slaye,all4u2,slayer69,nadia1,rlzwp503,4cranker,kaylie,numberon,teremok,wolf12,deeppurple,goodbeer,aaa555,66669999,whatif,harmony1,ue8fpw,3tmnej,254xtpss,dusty197,wcksdypk,zerkalo,dfnheirf,motorol,digita,whoareyou,darksoul,manics,rounders,killer11,d2000lb,cegthgfhjkm,catdog1,beograd,pepsico,julius1,123654987,softbal,killer23,weasel1,lifeson,q123456q,444555666,bunches,andy1,darby1,service01,bear11,jordan123,amega,duncan21,yensid,lerxst,rassvet,bronco2,fortis,pornlove,paiste,198900,asdflkjh,1236547890,futur,eugene1,winnipeg261,fk8bhydb,seanjohn,brimston,matthe1,bitchedu,crisco,302731,roxydog,woodlawn,volgograd,ace1210,boy4u2ownnyc,laura123,pronger,parker12,z123456z,andrew13,longlife,sarang,drogba,gobruins,soccer4,holida,espace,almira,murmansk,green22,safina,wm00022,1chevy,schlumpf,doroth,ulises,golf99,hellyes,detlef,mydog,erkina,bastardo,mashenka,sucram,wehttam,generic1,195000,spaceboy,lopas123,scammer,skynyrd,daddy2,titani,ficker,cr250r,kbnthfnehf,takedown,sticky1,davidruiz,desant,nremtp,painter1,bogies,agamemno,kansas1,smallfry,archi,2b4dnvsx,1player,saddie,peapod,6458zn7a,qvw6n2,gfxqx686,twice2,sh4d0w3d,mayfly,375125,phitau,yqmbevgk,89211375759,kumar1,pfhfpf,toyboy,way2go,7pvn4t,pass69,chipster,spoony,buddycat,diamond3,rincewin,hobie,david01,billbo,hxp4life,matild,pokemon2,dimochka,clown1,148888,jenmt3,cuxldv,cqnwhy,cde34rfv,simone1,verynice,toobig,pasha123,mike00,maria2,lolpop,firewire,dragon9,martesana,a1234567890,birthday3,providen,kiska,pitbulls,556655,misawa,damned69,martin11,goldorak,gunship,glory1,winxclub,sixgun,splodge,agent1,splitter,dome69,ifghjb,eliza1,snaiper,wutang36,phoenix7,666425,arshavin,paulaner,namron,m69fg1w,qwert1234,terrys,zesyrmvu,joeman,scoots,dwml9f,625vrobg,sally123,gostoso,symow8,pelota,c43qpul5rz,majinbuu,lithium1,bigstuff,horndog1,kipelov,kringle,1beavis,loshara,octobe,jmzacf,12342000,qw12qw,runescape1,chargers1,krokus,piknik,jessy,778811,gjvbljh,474jdvff,pleaser,misskitty,breaker1,7f4df451,dayan,twinky,yakumo,chippers,matia,tanith,len2ski1,manni,nichol1,f00b4r,nokia3110,standart,123456789i,shami,steffie,larrywn,chucker,john99,chamois,jjjkkk,penmouse,ktnj2010,gooners,hemmelig,rodney1,merlin01,bearcat1,1yyyyy,159753z,1fffff,1ddddd,thomas11,gjkbyrf,ivanka,f1f2f3,petrovna,phunky,conair,brian2,creative1,klipsch,vbitymrf,freek,breitlin,cecili,westwing,gohabsgo,tippmann,1steve,quattro6,fatbob,sp00ky,rastas,1123581,redsea,rfnmrf,jerky1,1aaaaaa,spk666,simba123,qwert54321,123abcd,beavis69,fyfyfc,starr1,1236547,peanutbutter,sintra,12345abcde,1357246,abcde1,climbon,755dfx,mermaids,monte1,serkan,geilesau,777win,jasonc,parkside,imagine1,rockhead,producti,playhard,principa,spammer,gagher,escada,tsv1860,dbyjuhfl,cruiser1,kennyg,montgome,2481632,pompano,cum123,angel6,sooty,bear01,april6,bodyhamm,pugsly,getrich,mikes,pelusa,fosgate,jasonp,rostislav,kimberly1,128mo,dallas11,gooner1,manuel1,cocacola1,imesh,5782790,password8,daboys,1jones,intheend,e3w2q1,whisper1,madone,pjcgujrat,1p2o3i,jamesp,felicida,nemrac,phikap,firecat,jrcfyjxrf,matt12,bigfan,doedel,005500,jasonx,1234567k,badfish,goosey,utjuhfabz,wilco,artem123,igor123,spike123,jor23dan,dga9la,v2jmsz,morgan12,avery1,dogstyle,natasa,221195ws,twopac,oktober7,karthik,poop1,mightymo,davidr,zermatt,jehova,aezakmi1,dimwit,monkey5,serega123,qwerty111,blabl,casey22,boy123,1clutch,asdfjkl1,hariom,bruce10,jeep95,1smith,sm9934,karishma,bazzzz,aristo,669e53e1,nesterov,kill666,fihdfv,1abc2,anna1,silver11,mojoman,telefono,goeagles,sd3lpgdr,rfhfynby,melinda1,llcoolj,idteul,bigchief,rocky13,timberwo,ballers,gatekeep,kashif,hardass,anastasija,max777,vfuyjkbz,riesling,agent99,kappas,dalglish,tincan,orange3,turtoise,abkbvjy,mike24,hugedick,alabala,geolog,aziza,devilboy,habanero,waheguru,funboy,freedom5,natwest,seashore,impaler,qwaszx1,pastas,bmw535,tecktonik,mika00,jobsearc,pinche,puntang,aw96b6,1corvett,skorpio,foundati,zzr1100,gembird,vfnhjcrby,soccer18,vaz2110,peterp,archer1,cross1,samedi,dima1992,hunter99,lipper,hotbody,zhjckfdf,ducati1,trailer1,04325956,cheryl1,benetton,kononenko,sloneczko,rfgtkmrf,nashua,balalaika,ampere,eliston,dorsai,digge,flyrod,oxymoron,minolta,ironmike,majortom,karimov,fortun,putaria,an83546921an13,blade123,franchis,mxaigtg5,dynxyu,devlt4,brasi,terces,wqmfuh,nqdgxz,dale88,minchia,seeyou,housepen,1apple,1buddy,mariusz,bighouse,tango2,flimflam,nicola1,qwertyasd,tomek1,shumaher,kartoshka,bassss,canaries,redman1,123456789as,preciosa,allblacks,navidad,tommaso,beaudog,forrest1,green23,ryjgjxrf,go4it,ironman2,badnews,butterba,1grizzly,isaeva,rembrand,toront,1richard,bigjon,yfltymrf,1kitty,4ng62t,littlejo,wolfdog,ctvtyjd,spain1,megryan,tatertot,raven69,4809594q,tapout,stuntman,a131313,lagers,hotstuf,lfdbl11,stanley2,advokat,boloto,7894561,dooker,adxel187,cleodog,4play,0p9o8i,masterb,bimota,charlee,toystory,6820055,6666667,crevette,6031769,corsa,bingoo,dima1990,tennis11,samuri,avocado,melissa6,unicor,habari,metart,needsex,cockman,hernan,3891576,3334444,amigo1,gobuffs2,mike21,allianz,2835493,179355,midgard,joey123,oneluv,ellis1,towncar,shonuff,scouse,tool69,thomas19,chorizo,jblaze,lisa1,dima1999,sophia1,anna1989,vfvekbxrf,krasavica,redlegs,jason25,tbontb,katrine,eumesmo,vfhufhbnrf,1654321,asdfghj1,motdepas,booga,doogle,1453145,byron1,158272,kardinal,tanne,fallen1,abcd12345,ufyljy,n12345,kucing,burberry,bodger,1234578,februar,1234512,nekkid,prober,harrison1,idlewild,rfnz90,foiegras,pussy21,bigstud,denzel,tiffany2,bigwill,1234567890zzz,hello69,compute1,viper9,hellspaw,trythis,gococks,dogballs,delfi,lupine,millenia,newdelhi,charlest,basspro,1mike,joeblack,975310,1rosebud,batman11,misterio,fucknut,charlie0,august11,juancho,ilonka,jigei743ks,adam1234,889900,goonie,alicat,ggggggg1,1zzzzzzz,sexywife,northstar,chris23,888111,containe,trojan1,jason5,graikos,1ggggg,1eeeee,tigers01,indigo1,hotmale,jacob123,mishima,richard3,cjxb2014,coco123,meagain,thaman,wallst,edgewood,bundas,1power,matilda1,maradon,hookedup,jemima,r3vi3wpass,2004-10-,mudman,taz123,xswzaq,emerson1,anna21,warlord1,toering,pelle,tgwdvu,masterb8,wallstre,moppel,priora,ghjcnjrdfif,yoland,12332100,1j9e7f6f,jazzzz,yesman,brianm,42qwerty42,12345698,darkmanx,nirmal,john31,bb123456,neuspeed,billgates,moguls,fj1200,hbhlair,shaun1,ghbdfn,305pwzlr,nbu3cd,susanb,pimpdad,mangust6403,joedog,dawidek,gigante,708090,703751,700007,ikalcr,tbivbn,697769,marvi,iyaayas,karen123,jimmyboy,dozer1,e6z8jh,bigtime1,getdown,kevin12,brookly,zjduc3,nolan1,cobber,yr8wdxcq,liebe,m1garand,blah123,616879,action1,600000,sumitomo,albcaz,asian1,557799,dave69,556699,sasa123,streaker,michel1,karate1,buddy7,daulet,koks888,roadtrip,wapiti,oldguy,illini1,1234qq,mrspock,kwiatek,buterfly,august31,jibxhq,jackin,taxicab,tristram,talisker,446655,444666,chrisa,freespace,vfhbfyyf,chevell,444333,notyours,442244,christian1,seemore,sniper12,marlin1,joker666,multik,devilish,crf450,cdfoli,eastern1,asshead,duhast,voyager2,cyberia,1wizard,cybernet,iloveme1,veterok,karandash,392781,looksee,diddy,diabolic,foofight,missey,herbert1,bmw318i,premier1,zsfmpv,eric1234,dun6sm,fuck11,345543,spudman,lurker,bitem,lizzy1,ironsink,minami,339311,s7fhs127,sterne,332233,plankton,galax,azuywe,changepa,august25,mouse123,sikici,killer69,xswqaz,quovadis,gnomik,033028pw,777777a,barrakuda,spawn666,goodgod,slurp,morbius,yelnats,cujo31,norman1,fastone,earwig,aureli,wordlife,bnfkbz,yasmi,austin123,timberla,missy2,legalize,netcom,liljon,takeit,georgin,987654321z,warbird,vitalina,all4u3,mmmmmm1,bichon,ellobo,wahoos,fcazmj,aksarben,lodoss,satnam,vasili,197800,maarten,sam138989,0u812,ankita,walte,prince12,anvils,bestia,hoschi,198300,univer,jack10,ktyecbr,gr00vy,hokie,wolfman1,fuckwit,geyser,emmanue,ybrjkftd,qwerty33,karat,dblock,avocat,bobbym,womersle,1please,nostra,dayana,billyray,alternat,iloveu1,qwerty69,rammstein1,mystikal,winne,drawde,executor,craxxxs,ghjcnjnf,999888777,welshman,access123,963214785,951753852,babe69,fvcnthlfv,****me,666999666,testing2,199200,nintendo64,oscarr,guido8,zhanna,gumshoe,jbird,159357456,pasca,123452345,satan6,mithrand,fhbirf,aa1111aa,viggen,ficktjuv,radial9,davids1,rainbow7,futuro,hipho,platin,poppy123,rhenjq,fulle,rosit,chicano,scrumpy,lumpy1,seifer,uvmrysez,autumn1,xenon,susie1,7u8i9o0p,gamer1,sirene,muffy1,monkeys1,kalinin,olcrackmaster,hotmove,uconn,gshock,merson,lthtdyz,pizzaboy,peggy1,pistache,pinto1,fishka,ladydi,pandor,baileys,hungwell,redboy,rookie1,amanda01,passwrd,clean1,matty1,tarkus,jabba1,bobster,beer30,solomon1,moneymon,sesamo,fred11,sunnysid,jasmine5,thebears,putamadre,workhard,flashbac,counter1,liefde,magnat,corky1,green6,abramov,lordik,univers,shortys,david3,vip123,gnarly,1234567s,billy2,honkey,deathstar,grimmy,govinda,direktor,12345678s,linus1,shoppin,rekbrjdf,santeria,prett,berty75,mohican,daftpunk,uekmyfhf,chupa,strats,ironbird,giants56,salisbur,koldun,summer04,pondscum,jimmyj,miata1,george3,redshoes,weezie,bartman1,0p9o8i7u,s1lver,dorkus,125478,omega9,sexisgood,mancow,patric1,jetta1,074401,ghjuhtcc,gfhjk,bibble,terry2,123213,medicin,rebel2,hen3ry,4freedom,aldrin,lovesyou,browny,renwod,winnie1,belladon,1house,tyghbn,blessme,rfhfrfnbwf,haylee,deepdive,booya,phantasy,gansta,cock69,4mnveh,gazza1,redapple,structur,anakin1,manolito,steve01,poolman,chloe123,vlad1998,qazwsxe,pushit,random123,ontherocks,o236nq,brain1,dimedrol,agape,rovnogod,1balls,knigh,alliso,love01,wolf01,flintstone,beernuts,tuffguy,isengard,highfive,alex23,casper99,rubina,getreal,chinita,italian1,airsoft,qwerty23,muffdiver,willi1,grace123,orioles1,redbull1,chino1,ziggy123,breadman,estefan,ljcneg,gotoit,logan123,wideglid,mancity1,treess,qwe123456,kazumi,qweasdqwe,oddworld,naveed,protos,towson,a801016,godislov,at_asp,bambam1,soccer5,dark123,67vette,carlos123,hoser1,scouser,wesdxc,pelus,dragon25,pflhjn,abdula,1freedom,policema,tarkin,eduardo1,mackdad,gfhjkm11,lfplhfgthvf,adilet,zzzzxxxx,childre,samarkand,cegthgegth,shama,fresher,silvestr,greaser,allout,plmokn,sexdrive,nintendo1,fantasy7,oleander,fe126fd,crumpet,pingzing,dionis,hipster,yfcnz,requin,calliope,jerome1,housecat,abc123456789,doghot,snake123,augus,brillig,chronic1,gfhjkbot,expediti,noisette,master7,caliban,whitetai,favorite3,lisamari,educatio,ghjhjr,saber1,zcegth,1958proman,vtkrbq,milkdud,imajica,thehip,bailey10,hockey19,dkflbdjcnjr,j123456,bernar,aeiouy,gamlet,deltachi,endzone,conni,bcgfybz,brandi1,auckland2010,7653ajl1,mardigra,testuser,bunko18,camaro67,36936,greenie,454dfmcq,6xe8j2z4,mrgreen,ranger5,headhunt,banshee1,moonunit,zyltrc,hello3,pussyboy,stoopid,tigger11,yellow12,drums1,blue02,kils123,junkman,banyan,jimmyjam,tbbucs,sportster,badass1,joshie,braves10,lajolla,1amanda,antani,78787,antero,19216801,chich,rhett32,sarahm,beloit,sucker69,corkey,nicosnn,rccola,caracol,daffyduc,bunny2,mantas,monkies,hedonist,cacapipi,ashton1,sid123,19899891,patche,greekgod,cbr1000,leader1,19977991,ettore,chongo,113311,picass,cfif123,rhtfnbd,frances1,andy12,minnette,bigboy12,green69,alices,babcia,partyboy,javabean,freehand,qawsed123,xxx111,harold1,passwo,jonny1,kappa1,w2dlww3v5p,1merlin,222999,tomjones,jakeman,franken,markhegarty,john01,carole1,daveman,caseys,apeman,mookey,moon123,claret,titans1,residentevil,campari,curitiba,dovetail,aerostar,jackdaniels,basenji,zaq12w,glencoe,biglove,goober12,ncc170,far7766,monkey21,eclipse9,1234567v,vanechka,aristote,grumble,belgorod,abhishek,neworleans,pazzword,dummie,sashadog,diablo11,mst3000,koala1,maureen1,jake99,isaiah1,funkster,gillian1,ekaterina20,chibears,astra123,4me2no,winte,skippe,necro,windows9,vinograd,demolay,vika2010,quiksilver,19371ayj,dollar1,shecky,qzwxecrv,butterfly1,merrill1,scoreland,1crazy,megastar,mandragora,track1,dedhed,jacob2,newhope,qawsedrftgyh,shack1,samvel,gatita,shyster,clara1,telstar,office1,crickett,truls,nirmala,joselito,chrisl,lesnik,aaaabbbb,austin01,leto2010,bubbie,aaa12345,widder,234432,salinger,mrsmith,qazsedcft,newshoes,skunks,yt1300,bmw316,arbeit,smoove,123321qweewq,123qazwsx,22221111,seesaw,0987654321a,peach1,1029384756q,sereda,gerrard8,shit123,batcave,energy1,peterb,mytruck,peter12,alesya,tomato1,spirou,laputaxx,magoo1,omgkremidia,knight12,norton1,vladislava,shaddy,austin11,jlbyjxrf,kbdthgekm,punheta,fetish69,exploiter,roger2,manstein,gtnhjd,32615948worms,dogbreath,ujkjdjkjvrf,vodka1,ripcord,fatrat,kotek1,tiziana,larrybir,thunder3,nbvfnb,9kyq6fge,remembe,likemike,gavin1,shinigam,yfcnfcmz,13245678,jabbar,vampyr,ane4ka,lollipo,ashwin,scuderia,limpdick,deagle,3247562,vishenka,fdhjhf,alex02,volvov70,mandys,bioshock,caraca,tombraider,matrix69,jeff123,13579135,parazit,black3,noway1,diablos,hitmen,garden1,aminor,decembe,august12,b00ger,006900,452073t,schach,hitman1,mariner1,vbnmrf,paint1,742617000027,bitchboy,pfqxjyjr,5681392,marryher,sinnet,malik1,muffin12,aninha,piolin,lady12,traffic1,cbvjyf,6345789,june21,ivan2010,ryan123,honda99,gunny,coorslight,asd321,hunter69,7224763,sonofgod,dolphins1,1dolphin,pavlenko,woodwind,lovelov,pinkpant,gblfhfcbyf,hotel1,justinbiebe,vinter,jeff1234,mydogs,1pizza,boats1,parrothe,shawshan,brooklyn1,cbrown,1rocky,hemi426,dragon64,redwings1,porsches,ghostly,hubbahub,buttnut,b929ezzh,sorokina,flashg,fritos,b7mguk,metatron,treehous,vorpal,8902792,marcu,free123,labamba,chiefs1,zxc123zxc,keli_14,hotti,1steeler,money4,rakker,foxwoods,free1,ahjkjd,sidorova,snowwhit,neptune1,mrlover,trader1,nudelamb,baloo,power7,deltasig,bills1,trevo,7gorwell,nokia6630,nokia5320,madhatte,1cowboys,manga1,namtab,sanjar,fanny1,birdman1,adv12775,carlo1,dude1998,babyhuey,nicole11,madmike,ubvyfpbz,qawsedr,lifetec,skyhook,stalker123,toolong,robertso,ripazha,zippy123,1111111a,manol,dirtyman,analslut,jason3,dutches,minhasenha,cerise,fenrir,jayjay1,flatbush,franka,bhbyjxrf,26429vadim,lawntrax,198700,fritzy,nikhil,ripper1,harami,truckman,nemvxyheqdd5oqxyxyzi,gkfytnf,bugaboo,cableman,hairpie,xplorer,movado,hotsex69,mordred,ohyeah1,patrick3,frolov,katieh,4311111q,mochaj,presari,bigdo,753951852,freedom4,kapitan,tomas1,135795,sweet123,pokers,shagme,tane4ka,sentinal,ufgyndmv,jonnyb,skate123,123456798,123456788,very1,gerrit,damocles,dollarbi,caroline1,lloyds,pizdets,flatland,92702689,dave13,meoff,ajnjuhfabz,achmed,madison9,744744z,amonte,avrillavigne,elaine1,norma1,asseater,everlong,buddy23,cmgang1,trash1,mitsu,flyman,ulugbek,june27,magistr,fittan,sebora64,dingos,sleipnir,caterpil,cindys,212121qaz,partys,dialer,gjytltkmybr,qweqaz,janvier,rocawear,lostboy,aileron,sweety1,everest1,pornman,boombox,potter1,blackdic,44448888,eric123,112233aa,2502557i,novass,nanotech,yourname,x12345,indian1,15975300,1234567l,carla51,chicago0,coleta,cxzdsaewq,qqwweerr,marwan,deltic,hollys,qwerasd,pon32029,rainmake,nathan0,matveeva,legioner,kevink,riven,tombraid,blitzen,a54321,jackyl,chinese1,shalimar,oleg1995,beaches1,tommylee,eknock,berli,monkey23,badbob,pugwash,likewhoa,jesus2,yujyd360,belmar,shadow22,utfp5e,angelo1,minimax,pooder,cocoa1,moresex,tortue,lesbia,panthe,snoopy2,drumnbass,alway,gmcz71,6jhwmqku,leppard,dinsdale,blair1,boriqua,money111,virtuagirl,267605,rattlesn,1sunshin,monica12,veritas1,newmexic,millertime,turandot,rfvxfnrf,jaydog,kakawka,bowhunter,booboo12,deerpark,erreway,taylorma,rfkbybyf,wooglin,weegee,rexdog,iamhorny,cazzo1,vhou812,bacardi1,dctktyyfz,godpasi,peanut12,bertha1,fuckyoubitch,ghosty,altavista,jertoot,smokeit,ghjcnbvtyz,fhnehxbr,rolsen,qazxcdews,maddmaxx,redrocke,qazokm,spencer2,thekiller,asdf11,123sex,tupac1,p1234567,dbrown,1biteme,tgo4466,316769,sunghi,shakespe,frosty1,gucci1,arcana,bandit01,lyubov,poochy,dartmout,magpies1,sunnyd,mouseman,summer07,chester7,shalini,danbury,pigboy,dave99,deniss,harryb,ashley11,pppppp1,01081988m,balloon1,tkachenko,bucks1,master77,pussyca,tricky1,zzxxccvv,zoulou,doomer,mukesh,iluv69,supermax,todays,thefox,don123,dontask,diplom,piglett,shiney,fahbrf,qaz12wsx,temitope,reggin,project1,buffy2,inside1,lbpfqyth,vanilla1,lovecock,u4slpwra,fylh.irf,123211,7ertu3ds,necroman,chalky,artist1,simpso,4x7wjr,chaos666,lazyacres,harley99,ch33s3,marusa,eagle7,dilligas,computadora,lucky69,denwer,nissan350z,unforgiv,oddball,schalke0,aztec1,borisova,branden1,parkave,marie123,germa,lafayett,878kckxy,405060,cheeseca,bigwave,fred22,andreea,poulet,mercutio,psycholo,andrew88,o4izdmxu,sanctuar,newhome,milion,suckmydi,rjvgm.nth,warior,goodgame,1qwertyuiop,6339cndh,scorpio2,macker,southbay,crabcake,toadie,paperclip,fatkid,maddo,cliff1,rastafar,maries,twins1,geujdrf,anjela,wc4fun,dolina,mpetroff,rollout,zydeco,shadow3,pumpki,steeda,volvo240,terras,blowjo,blue2000,incognit,badmojo,gambit1,zhukov,station1,aaronb,graci,duke123,clipper1,qazxsw2,ledzeppe,kukareku,sexkitte,cinco,007008,lakers12,a1234b,acmilan1,afhfjy,starrr,slutty3,phoneman,kostyan,bonzo1,sintesi07,ersatz,cloud1,nephilim,nascar03,rey619,kairos,123456789e,hardon1,boeing1,juliya,hfccdtn,vgfun8,polizei,456838,keithb,minouche,ariston,savag,213141,clarkken,microwav,london2,santacla,campeo,qr5mx7,464811,mynuts,bombo,1mickey,lucky8,danger1,ironside,carter12,wyatt1,borntorun,iloveyou123,jose1,pancake1,tadmichaels,monsta,jugger,hunnie,triste,heat7777,ilovejesus,queeny,luckycharm,lieben,gordolee85,jtkirk,forever21,jetlag,skylane,taucher,neworlea,holera,000005,anhnhoem,melissa7,mumdad,massimiliano,dima1994,nigel1,madison3,slicky,shokolad,serenit,jmh1978,soccer123,chris3,drwho,rfpzdrf,1qasw23ed,free4me,wonka,sasquatc,sanan,maytag,verochka,bankone,molly12,monopoli,xfqybr,lamborgini,gondolin,candycane,needsome,jb007,scottie1,brigit,0147258369,kalamazo,lololyo123,bill1234,ilovejes,lol123123,popkorn,april13,567rntvm,downunde,charle1,angelbab,guildwars,homeworld,qazxcvbnm,superma1,dupa123,kryptoni,happyy,artyom,stormie,cool11,calvin69,saphir,konovalov,jansport,october8,liebling,druuna,susans,megans,tujhjdf,wmegrfux,jumbo1,ljb4dt7n,012345678910,kolesnik,speculum,at4gftlw,kurgan,93pn75,cahek0980,dallas01,godswill,fhifdby,chelsea4,jump23,barsoom,catinhat,urlacher,angel99,vidadi1,678910,lickme69,topaz1,westend,loveone,c12345,gold12,alex1959,mamon,barney12,1maggie,alex12345,lp2568cskt,s1234567,gjikbdctyf,anthony0,browns99,chips1,sunking,widespre,lalala1,tdutif,fucklife,master00,alino4ka,stakan,blonde1,phoebus,tenore,bvgthbz,brunos,suzjv8,uvdwgt,revenant,1banana,veroniqu,sexfun,sp1der,4g3izhox,isakov,shiva1,scooba,bluefire,wizard12,dimitris,funbags,perseus,hoodoo,keving,malboro,157953,a32tv8ls,latics,animate,mossad,yejntb,karting,qmpq39zr,busdrive,jtuac3my,jkne9y,sr20dett,4gxrzemq,keylargo,741147,rfktylfhm,toast1,skins1,xcalibur,gattone,seether,kameron,glock9mm,julio1,delenn,gameday,tommyd,str8edge,bulls123,66699,carlsberg,woodbird,adnama,45auto,codyman,truck2,1w2w3w4w,pvjegu,method1,luetdi,41d8cd98f00b,bankai,5432112345,94rwpe,reneee,chrisx,melvins,775577,sam2000,scrappy1,rachid,grizzley,margare,morgan01,winstons,gevorg,gonzal,crawdad,gfhfdjp,babilon,noneya,pussy11,barbell,easyride,c00li0,777771,311music,karla1,golions,19866891,peejay,leadfoot,hfvbkm,kr9z40sy,cobra123,isotwe,grizz,sallys,****you,aaa123a,dembel,foxs14,hillcres,webman,mudshark,alfredo1,weeded,lester1,hovepark,ratface,000777fffa,huskie,wildthing,elbarto,waikiki,masami,call911,goose2,regin,dovajb,agricola,cjytxrj,andy11,penny123,family01,a121212,1braves,upupa68,happy100,824655,cjlove,firsttim,kalel,redhair,dfhtymt,sliders,bananna,loverbo,fifa2008,crouton,chevy350,panties2,kolya1,alyona,hagrid,spagetti,q2w3e4r,867530,narkoman,nhfdvfnjkju123,1ccccccc,napolean,0072563,allay,w8sted,wigwam,jamesk,state1,parovoz,beach69,kevinb,rossella,logitech1,celula,gnocca,canucks1,loginova,marlboro1,aaaa1,kalleanka,mester,mishutka,milenko,alibek,jersey1,peterc,1mouse,nedved,blackone,ghfplybr,682regkh,beejay,newburgh,ruffian,clarets,noreaga,xenophon,hummerh2,tenshi,smeagol,soloyo,vfhnby,ereiamjh,ewq321,goomie,sportin,cellphone,sonnie,jetblack,saudan,gblfhfc,matheus,uhfvjnf,alicja,jayman1,devon1,hexagon,bailey2,vtufajy,yankees7,salty1,908070,killemal,gammas,eurocard,sydney12,tuesday1,antietam,wayfarer,beast666,19952009sa,aq12ws,eveli,hockey21,haloreach,dontcare,xxxx1,andrea11,karlmarx,jelszo,tylerb,protools,timberwolf,ruffneck,pololo,1bbbbb,waleed,sasami,twinss,fairlady,illuminati,alex007,sucks1,homerjay,scooter7,tarbaby,barmaley,amistad,vanes,randers,tigers12,dreamer2,goleafsg,googie,bernie1,as12345,godeep,james3,phanto,gwbush,cumlover,2196dc,studioworks,995511,golf56,titova,kaleka,itali,socks1,kurwamac,daisuke,hevonen,woody123,daisie,wouter,henry123,gostosa,guppie,porpoise,iamsexy,276115,paula123,1020315,38gjgeuftd,rjrfrjkf,knotty,idiot1,sasha12345,matrix13,securit,radical1,ag764ks,jsmith,coolguy1,secretar,juanas,sasha1988,itout,00000001,tiger11,1butthea,putain,cavalo,basia1,kobebryant,1232323,12345asdfg,sunsh1ne,cyfqgth,tomkat,dorota,dashit,pelmen,5t6y7u,whipit,smokeone,helloall,bonjour1,snowshoe,nilknarf,x1x2x3,lammas,1234599,lol123456,atombomb,ironchef,noclue,alekseev,gwbush1,silver2,12345678m,yesican,fahjlbnf,chapstic,alex95,open1,tiger200,lisichka,pogiako,cbr929,searchin,tanya123,alex1973,phil413,alex1991,dominati,geckos,freddi,silenthill,egroeg,vorobey,antoxa,dark666,shkola,apple22,rebellio,shamanking,7f8srt,cumsucker,partagas,bill99,22223333,arnster55,fucknuts,proxima,silversi,goblues,parcells,vfrcbvjdf,piloto,avocet,emily2,1597530,miniskir,himitsu,pepper2,juiceman,venom1,bogdana,jujube,quatro,botafogo,mama2010,junior12,derrickh,asdfrewq,miller2,chitarra,silverfox,napol,prestigio,devil123,mm111qm,ara123,max33484,sex2000,primo1,sephan,anyuta,alena2010,viborg,verysexy,hibiscus,terps,josefin,oxcart,spooker,speciali,raffaello,partyon,vfhvtkflrf,strela,a123456z,worksuck,glasss,lomonosov,dusty123,dukeblue,1winter,sergeeva,lala123,john22,cmc09,sobolev,bettylou,dannyb,gjkrjdybr,hagakure,iecnhbr,awsedr,pmdmsctsk,costco,alekseeva,fktrcttd,bazuka,flyingv,garuda,buffy16,gutierre,beer12,stomatolog,ernies,palmeiras,golf123,love269,n.kmgfy,gjkysqgbpltw,youare,joeboo,baksik,lifeguar,111a111,nascar8,mindgame,dude1,neopets,frdfkfyu,june24,phoenix8,penelopa,merlin99,mercenar,badluck,mishel,bookert,deadsexy,power9,chinchil,1234567m,alex10,skunk1,rfhkcjy,sammycat,wright1,randy2,marakesh,temppassword,elmer251,mooki,patrick0,bonoedge,1tits,chiar,kylie1,graffix,milkman1,cornel,mrkitty,nicole12,ticketmaster,beatles4,number20,ffff1,terps1,superfre,yfdbufnjh,jake1234,flblfc,1111qq,zanuda,jmol01,wpoolejr,polopol,nicolett,omega13,cannonba,123456789.,sandy69,ribeye,bo243ns,marilena,bogdan123,milla,redskins1,19733791,alias1,movie1,ducat,marzena,shadowru,56565,coolman1,pornlover,teepee,spiff,nafanya,gateway3,fuckyou0,hasher,34778,booboo69,staticx,hang10,qq12345,garnier,bosco123,1234567qw,carson1,samso,1xrg4kcq,cbr929rr,allan123,motorbik,andrew22,pussy101,miroslava,cytujdbr,camp0017,cobweb,snusmumrik,salmon1,cindy2,aliya,serendipity,co437at,tincouch,timmy123,hunter22,st1100,vvvvvv1,blanka,krondor,sweeti,nenit,kuzmich,gustavo1,bmw320i,alex2010,trees1,kyliem,essayons,april26,kumari,sprin,fajita,appletre,fghbjhb,1green,katieb,steven2,corrado1,satelite,1michell,123456789c,cfkfvfylhf,acurarsx,slut543,inhere,bob2000,pouncer,k123456789,fishie,aliso,audia8,bluetick,soccer69,jordan99,fromhell,mammoth1,fighting54,mike25,pepper11,extra1,worldwid,chaise,vfr800,sordfish,almat,nofate,listopad,hellgate,dctvghbdf,jeremia,qantas,lokiju,honker,sprint1,maral,triniti,compaq3,sixsix6,married1,loveman,juggalo1,repvtyrj,zxcasdqw,123445,whore1,123678,monkey6,west123,warcraf,pwnage,mystery1,creamyou,ant123,rehjgfnrf,corona1,coleman1,steve121,alderaan,barnaul,celeste1,junebug1,bombshel,gretzky9,tankist,targa,cachou,vaz2101,playgolf,boneyard,strateg,romawka,iforgotit,pullup,garbage1,irock,archmage,shaft1,oceano,sadies,alvin1,135135ab,psalm69,lmfao,ranger02,zaharova,33334444,perkman,realman,salguod,cmoney,astonmartin,glock1,greyfox,viper99,helpm,blackdick,46775575,family5,shazbot,dewey1,qwertyas,shivani,black22,mailman1,greenday1,57392632,red007,stanky,sanchez1,tysons,daruma,altosax,krayzie,85852008,1forever,98798798,irock.,123456654,142536789,ford22,brick1,michela,preciou,crazy4u,01telemike01,nolife,concac,safety1,annie123,brunswic,destini,123456qwer,madison0,snowball1,137946,1133557799,jarule,scout2,songohan,thedead,00009999,murphy01,spycam,hirsute,aurinko,associat,1miller,baklan,hermes1,2183rm,martie,kangoo,shweta,yvonne1,westsid,jackpot1,rotciv,maratik,fabrika,claude1,nursultan,noentry,ytnhjufnm,electra1,ghjcnjnfr1,puneet,smokey01,integrit,bugeye,trouble2,14071789,paul01,omgwtf,dmh415,ekilpool,yourmom1,moimeme,sparky11,boludo,ruslan123,kissme1,demetrio,appelsin,asshole3,raiders2,bunns,fynjybj,billygoa,p030710p$e4o,macdonal,248ujnfk,acorns,schmidt1,sparrow1,vinbylrj,weasle,jerom,ycwvrxxh,skywalk,gerlinde,solidus,postal1,poochie1,1charles,rhianna,terorist,rehnrf,omgwtfbbq,assfucke,deadend,zidan,jimboy,vengence,maroon5,7452tr,dalejr88,sombra,anatole,elodi,amazonas,147789,q12345q,gawker1,juanma,kassidy,greek1,bruces,bilbob,mike44,0o9i8u7y6t,kaligula,agentx,familie,anders1,pimpjuice,0128um,birthday10,lawncare,hownow,grandorgue,juggerna,scarfac,kensai,swatteam,123four,motorbike,repytxbr,other1,celicagt,pleomax,gen0303,godisgreat,icepick,lucifer666,heavy1,tea4two,forsure,02020,shortdog,webhead,chris13,palenque,3techsrl,knights1,orenburg,prong,nomarg,wutang1,80637852730,laika,iamfree,12345670,pillow1,12343412,bigears,peterg,stunna,rocky5,12123434,damir,feuerwehr,7418529630,danone,yanina,valenci,andy69,111222q,silvia1,1jjjjj,loveforever,passwo1,stratocaster,8928190a,motorolla,lateralu,ujujkm,chubba,ujkjdf,signon,123456789zx,serdce,stevo,wifey200,ololo123,popeye1,1pass,central1,melena,luxor,nemezida,poker123,ilovemusic,qaz1234,noodles1,lakeshow,amarill,ginseng,billiam,trento,321cba,fatback,soccer33,master13,marie2,newcar,bigtop,dark1,camron,nosgoth,155555,biglou,redbud,jordan7,159789,diversio,actros,dazed,drizzit,hjcnjd,wiktoria,justic,gooses,luzifer,darren1,chynna,tanuki,11335577,icculus,boobss,biggi,firstson,ceisi123,gatewa,hrothgar,jarhead1,happyjoy,felipe1,bebop1,medman,athena1,boneman,keiths,djljgfl,dicklick,russ120,mylady,zxcdsa,rock12,bluesea,kayaks,provista,luckies,smile4me,bootycal,enduro,123123f,heartbre,ern3sto,apple13,bigpappa,fy.njxrf,bigtom,cool69,perrito,quiet1,puszek,cious,cruella,temp1,david26,alemap,aa123123,teddies,tricolor,smokey12,kikiriki,mickey01,robert01,super5,ranman,stevenso,deliciou,money777,degauss,mozar,susanne1,asdasd12,shitbag,mommy123,wrestle1,imfree,fuckyou12,barbaris,florent,ujhijr,f8yruxoj,tefjps,anemone,toltec,2gether,left4dead2,ximen,gfkmvf,dunca,emilys,diana123,16473a,mark01,bigbro,annarbor,nikita2000,11aa11,tigres,llllll1,loser2,fbi11213,jupite,qwaszxqw,macabre,123ert,rev2000,mooooo,klapaucius,bagel1,chiquit,iyaoyas,bear101,irocz28,vfktymrfz,smokey2,love99,rfhnbyf,dracul,keith123,slicko,peacock1,orgasmic,thesnake,solder,wetass,doofer,david5,rhfcyjlfh,swanny,tammys,turkiye,tubaman,estefani,firehose,funnyguy,servo,grace17,pippa1,arbiter,jimmy69,nfymrf,asdf67nm,rjcnzy,demon123,thicknes,sexysex,kristall,michail,encarta,banderos,minty,marchenko,de1987ma,mo5kva,aircav,naomi1,bonni,tatoo,cronaldo,49ers1,mama1963,1truck,telecaster,punksnotdead,erotik,1eagles,1fender,luv269,acdeehan,tanner1,freema,1q3e5t7u,linksys,tiger6,megaman1,neophyte,australia1,mydaddy,1jeffrey,fgdfgdfg,gfgekz,1986irachka,keyman,m0b1l3,dfcz123,mikeyg,playstation2,abc125,slacker1,110491g,lordsoth,bhavani,ssecca,dctvghbdtn,niblick,hondacar,baby01,worldcom,4034407,51094didi,3657549,3630000,3578951,sweetpussy,majick,supercoo,robert11,abacabb,panda123,gfhjkm13,ford4x4,zippo1,lapin,1726354,lovesong,dude11,moebius,paravoz,1357642,matkhau,solnyshko,daniel4,multiplelog,starik,martusia,iamtheman,greentre,jetblue,motorrad,vfrcbvev,redoak,dogma1,gnorman,komlos,tonka1,1010220,666satan,losenord,lateralus,absinthe,command1,jigga1,iiiiiii1,pants1,jungfrau,926337,ufhhbgjnnth,yamakasi,888555,sunny7,gemini69,alone1,zxcvbnmz,cabezon,skyblues,zxc1234,456123a,zero00,caseih,azzurra,legolas1,menudo,murcielago,785612,779977,benidorm,viperman,dima1985,piglet1,hemligt,hotfeet,7elephants,hardup,gamess,a000000,267ksyjf,kaitlynn,sharkie,sisyphus,yellow22,667766,redvette,666420,mets69,ac2zxdty,hxxrvwcy,cdavis,alan1,noddy,579300,druss,eatshit1,555123,appleseed,simpleplan,kazak,526282,fynfyfyfhbde,birthday6,dragon6,1pookie,bluedevils,omg123,hj8z6e,x5dxwp,455445,batman23,termin,chrisbrown,animals1,lucky9,443322,kzktxrf,takayuki,fermer,assembler,zomu9q,sissyboy,sergant,felina,nokia6230i,eminem12,croco,hunt4red,festina,darknigh,cptnz062,ndshnx4s,twizzler,wnmaz7sd,aamaax,gfhfcjkmrf,alabama123,barrynov,happy5,punt0it,durandal,8xuuobe4,cmu9ggzh,bruno12,316497,crazyfrog,vfvfktyf,apple3,kasey1,mackdaddy,anthon1,sunnys,angel3,cribbage,moon1,donal,bryce1,pandabear,mwss474,whitesta,freaker,197100,bitche,p2ssw0rd,turnb,tiktonik,moonlite,ferret1,jackas,ferrum,bearclaw,liberty2,1diablo,caribe,snakeeyes,janbam,azonic,rainmaker,vetalik,bigeasy,baby1234,sureno13,blink1,kluivert,calbears,lavanda,198600,dhtlbyf,medvedeva,fox123,whirling,bonscott,freedom9,october3,manoman,segredo,cerulean,robinso,bsmith,flatus,dannon,password21,rrrrrr1,callista,romai,rainman1,trantor,mickeymo,bulldog7,g123456,pavlin,pass22,snowie,hookah,7ofnine,bubba22,cabible,nicerack,moomoo1,summer98,yoyo123,milan1,lieve27,mustang69,jackster,exocet,nadege,qaz12,bahama,watson1,libras,eclipse2,bahram,bapezm,up9x8rww,ghjcnjz,themaste,deflep27,ghost16,gattaca,fotograf,junior123,gilber,gbjyth,8vjzus,rosco1,begonia,aldebara,flower12,novastar,buzzman,manchild,lopez1,mama11,william7,yfcnz1,blackstar,spurs123,moom4242,1amber,iownyou,tightend,07931505,paquito,1johnson,smokepot,pi31415,snowmass,ayacdc,jessicam,giuliana,5tgbnhy6,harlee,giuli,bigwig,tentacle,scoubidou2,benelli,vasilina,nimda,284655,jaihind,lero4ka,1tommy,reggi,ididit,jlbyjxtcndj,mike26,qbert,wweraw,lukasz,loosee123,palantir,flint1,mapper,baldie,saturne,virgin1,meeeee,elkcit,iloveme2,blue15,themoon,radmir,number3,shyanne,missle,hannelor,jasmina,karin1,lewie622,ghjcnjqgfhjkm,blasters,oiseau,sheela,grinders,panget,rapido,positiv,twink,fltkbyf,kzsfj874,daniel01,enjoyit,nofags,doodad,rustler,squealer,fortunat,peace123,khushi,devils2,7inches,candlebo,topdawg,armen,soundman,zxcqweasd,april7,gazeta,netman,hoppers,bear99,ghbjhbntn,mantle7,bigbo,harpo,jgordon,bullshi,vinny1,krishn,star22,thunderc,galinka,phish123,tintable,nightcrawler,tigerboy,rbhgbx,messi,basilisk,masha1998,nina123,yomamma,kayla123,geemoney,0000000000d,motoman,a3jtni,ser123,owen10,italien,vintelok,12345rewq,nightime,jeepin,ch1tt1ck,mxyzptlk,bandido,ohboy,doctorj,hussar,superted,parfilev,grundle,1jack,livestrong,chrisj,matthew3,access22,moikka,fatone,miguelit,trivium,glenn1,smooches,heiko,dezember,spaghett,stason,molokai,bossdog,guitarma,waderh,boriska,photosho,path13,hfrtnf,audre,junior24,monkey24,silke,vaz21093,bigblue1,trident1,candide,arcanum,klinker,orange99,bengals1,rosebu,mjujuj,nallepuh,mtwapa1a,ranger69,level1,bissjop,leica,1tiffany,rutabega,elvis77,kellie1,sameas,barada,karabas,frank12,queenb,toutoune,surfcity,samanth1,monitor1,littledo,kazakova,fodase,mistral1,april22,carlit,shakal,batman123,fuckoff2,alpha01,5544332211,buddy3,towtruck,kenwood1,vfiekmrf,jkl123,pypsik,ranger75,sitges,toyman,bartek1,ladygirl,booman,boeing77,installsqlst,222666,gosling,bigmack,223311,bogos,kevin2,gomez1,xohzi3g4,kfnju842,klubnika,cubalibr,123456789101,kenpo,0147852369,raptor1,tallulah,boobys,jjones,1q2s3c,moogie,vid2600,almas,wombat1,extra300,xfiles1,green77,sexsex1,heyjude,sammyy,missy123,maiyeuem,nccpl25282,thicluv,sissie,raven3,fldjrfn,buster22,broncos2,laurab,letmein4,harrydog,solovey,fishlips,asdf4321,ford123,superjet,norwegen,movieman,psw333333,intoit,postbank,deepwate,ola123,geolog323,murphys,eshort,a3eilm2s2y,kimota,belous,saurus,123321qaz,i81b4u,aaa12,monkey20,buckwild,byabybnb,mapleleafs,yfcnzyfcnz,baby69,summer03,twista,246890,246824,ltcnhjth,z1z2z3,monika1,sad123,uto29321,bathory,villan,funkey,poptarts,spam967888,705499fh,sebast,porn1234,earn381,1porsche,whatthef,123456789y,polo12,brillo,soreilly,waters1,eudora,allochka,is_a_bot,winter00,bassplay,531879fiz,onemore,bjarne,red911,kot123,artur1,qazxdr,c0rvette,diamond7,matematica,klesko,beaver12,2enter,seashell,panam,chaching,edward2,browni,xenogear,cornfed,aniram,chicco22,darwin1,ancella2,sophie2,vika1998,anneli,shawn41,babie,resolute,pandora2,william8,twoone,coors1,jesusis1,teh012,cheerlea,renfield,tessa1,anna1986,madness1,bkmlfh,19719870,liebherr,ck6znp42,gary123,123654z,alsscan,eyedoc,matrix7,metalgea,chinito,4iter,falcon11,7jokx7b9du,bigfeet,tassadar,retnuh,muscle1,klimova,darion,batistuta,bigsur,1herbier,noonie,ghjrehjh,karimova,faustus,snowwhite,1manager,dasboot,michael12,analfuck,inbed,dwdrums,jaysoncj,maranell,bsheep75,164379,rolodex,166666,rrrrrrr1,almaz666,167943,russel1,negrito,alianz,goodpussy,veronik,1w2q3r4e,efremov,emb377,sdpass,william6,alanfahy,nastya1995,panther5,automag,123qwe12,vfvf2011,fishe,1peanut,speedie,qazwsx1234,pass999,171204j,ketamine,sheena1,energizer,usethis1,123abc123,buster21,thechamp,flvbhfk,frank69,chane,hopeful1,claybird,pander,anusha,bigmaxxx,faktor,housebed,dimidrol,bigball,shashi,derby1,fredy,dervish,bootycall,80988218126,killerb,cheese2,pariss,mymail,dell123,catbert,christa1,chevytru,gjgjdf,00998877,overdriv,ratten,golf01,nyyanks,dinamite,bloembol,gismo,magnus1,march2,twinkles,ryan22,duckey,118a105b,kitcat,brielle,poussin,lanzarot,youngone,ssvegeta,hero63,battle1,kiler,fktrcfylh1,newera,vika1996,dynomite,oooppp,beer4me,foodie,ljhjuf,sonshine,godess,doug1,constanc,thinkbig,steve2,damnyou,autogod,www333,kyle1,ranger7,roller1,harry2,dustin1,hopalong,tkachuk,b00bies,bill2,deep111,stuffit,fire69,redfish1,andrei123,graphix,1fishing,kimbo1,mlesp31,ifufkbyf,gurkan,44556,emily123,busman,and123,8546404,paladine,1world,bulgakov,4294967296,bball23,1wwwww,mycats,elain,delta6,36363,emilyb,color1,6060842,cdtnkfyrf,hedonism,gfgfrfhkj,5551298,scubad,gostate,sillyme,hdbiker,beardown,fishers,sektor,00000007,newbaby,rapid1,braves95,gator2,nigge,anthony3,sammmy,oou812,heffer,phishin,roxanne1,yourass,hornet1,albator,2521659,underwat,tanusha,dianas,3f3fpht7op,dragon20,bilbobag,cheroke,radiatio,dwarf1,majik,33st33,dochka,garibald,robinh,sham69,temp01,wakeboar,violet1,1w2w3w,registr,tonite,maranello,1593570,parolamea,galatasara,loranthos,1472583,asmodean,1362840,scylla,doneit,jokerr,porkypig,kungen,mercator,koolhaas,come2me,debbie69,calbear,liverpoolfc,yankees4,12344321a,kennyb,madma,85200258,dustin23,thomas13,tooling,mikasa,mistic,crfnbyf,112233445,sofia1,heinz57,colts1,price1,snowey,joakim,mark11,963147,cnhfcnm,kzinti,1bbbbbbb,rubberdu,donthate,rupert1,sasha1992,regis1,nbuhbwf,fanboy,sundial,sooner1,wayout,vjnjhjkf,deskpro,arkangel,willie12,mikeyb,celtic1888,luis1,buddy01,duane1,grandma1,aolcom,weeman,172839456,basshead,hornball,magnu,pagedown,molly2,131517,rfvtgbyhn,astonmar,mistery,madalina,cash1,1happy,shenlong,matrix01,nazarova,369874125,800500,webguy,rse2540,ashley2,briank,789551,786110,chunli,j0nathan,greshnik,courtne,suckmyco,mjollnir,789632147,asdfg1234,754321,odelay,ranma12,zebedee,artem777,bmw318is,butt1,rambler1,yankees9,alabam,5w76rnqp,rosies,mafioso,studio1,babyruth,tranzit,magical123,gfhjkm135,12345$,soboleva,709394,ubique,drizzt1,elmers,teamster,pokemons,1472583690,1597532486,shockers,merckx,melanie2,ttocs,clarisse,earth1,dennys,slobber,flagman,farfalla,troika,4fa82hyx,hakan,x4ww5qdr,cumsuck,leather1,forum1,july20,barbel,zodiak,samuel12,ford01,rushfan,bugsy1,invest1,tumadre,screwme,a666666,money5,henry8,tiddles,sailaway,starburs,100years,killer01,comando,hiromi,ranetka,thordog,blackhole,palmeira,verboten,solidsna,q1w1e1,humme,kevinc,gbrfxe,gevaudan,hannah11,peter2,vangar,sharky7,talktome,jesse123,chuchi,pammy,!qazxsw2,siesta,twenty1,wetwilly,477041,natural1,sun123,daniel3,intersta,shithead1,hellyea,bonethugs,solitair,bubbles2,father1,nick01,444000,adidas12,dripik,cameron2,442200,a7nz8546,respublika,fkojn6gb,428054,snoppy,rulez1,haslo,rachael1,purple01,zldej102,ab12cd34,cytuehjxrf,madhu,astroman,preteen,handsoff,mrblonde,biggio,testin,vfdhif,twolves,unclesam,asmara,kpydskcw,lg2wmgvr,grolsch,biarritz,feather1,williamm,s62i93,bone1,penske,337733,336633,taurus1,334433,billet,diamondd,333000,nukem,fishhook,godogs,thehun,lena1982,blue00,smelly1,unb4g9ty,65pjv22,applegat,mikehunt,giancarlo,krillin,felix123,december1,soapy,46doris,nicole23,bigsexy1,justin10,pingu,bambou,falcon12,dgthtl,1surfer,qwerty01,estrellit,nfqcjy,easygo,konica,qazqwe,1234567890m,stingers,nonrev,3e4r5t,champio,bbbbbb99,196400,allen123,seppel,simba2,rockme,zebra3,tekken3,endgame,sandy2,197300,fitte,monkey00,eldritch,littleone,rfyfgkz,1member,66chevy,oohrah,cormac,hpmrbm41,197600,grayfox,elvis69,celebrit,maxwell7,rodders,krist,1camaro,broken1,kendall1,silkcut,katenka,angrick,maruni,17071994a,tktyf,kruemel,snuffles,iro4ka,baby12,alexis01,marryme,vlad1994,forward1,culero,badaboom,malvin,hardtoon,hatelove,molley,knopo4ka,duchess1,mensuck,cba321,kickbutt,zastava,wayner,fuckyou6,eddie123,cjkysir,john33,dragonfi,cody1,jabell,cjhjrf,badseed,sweden1,marihuana,brownlov,elland,nike1234,kwiettie,jonnyboy,togepi,billyk,robert123,bb334,florenci,ssgoku,198910,bristol1,bob007,allister,yjdujhjl,gauloise,198920,bellaboo,9lives,aguilas,wltfg4ta,foxyroxy,rocket69,fifty50,babalu,master21,malinois,kaluga,gogosox,obsessio,yeahrigh,panthers1,capstan,liza2000,leigh1,paintball1,blueskie,cbr600f3,bagdad,jose98,mandreki,shark01,wonderbo,muledeer,xsvnd4b2,hangten,200001,grenden,anaell,apa195,model1,245lufpq,zip100,ghjcgtrn,wert1234,misty2,charro,juanjose,fkbcrf,frostbit,badminto,buddyy,1doctor,vanya,archibal,parviz,spunky1,footboy,dm6tzsgp,legola,samadhi,poopee,ytdxz2ca,hallowboy,dposton,gautie,theworm,guilherme,dopehead,iluvtits,bobbob1,ranger6,worldwar,lowkey,chewbaca,oooooo99,ducttape,dedalus,celular,8i9o0p,borisenko,taylor01,111111z,arlingto,p3nnywiz,rdgpl3ds,boobless,kcmfwesg,blacksab,mother2,markus1,leachim,secret2,s123456789,1derful,espero,russell2,tazzer,marykate,freakme,mollyb,lindros8,james00,gofaster,stokrotka,kilbosik,aquamann,pawel1,shedevil,mousie,slot2009,october6,146969,mm259up,brewcrew,choucho,uliana,sexfiend,fktirf,pantss,vladimi,starz,sheeps,12341234q,bigun,tiggers,crjhjcnm,libtech,pudge1,home12,zircon,klaus1,jerry2,pink1,lingus,monkey66,dumass,polopolo09,feuerweh,rjyatnf,chessy,beefer,shamen,poohbear1,4jjcho,bennevis,fatgirls,ujnbrf,cdexswzaq,9noize9,rich123,nomoney,racecar1,hacke,clahay,acuario,getsum,hondacrv,william0,cheyenn,techdeck,atljhjdf,wtcacq,suger,fallenangel,bammer,tranquil,carla123,relayer,lespaul1,portvale,idontno,bycnbnen,trooper2,gennadiy,pompon,billbob,amazonka,akitas,chinatow,atkbrc,busters,fitness1,cateye,selfok2013,1murphy,fullhous,mucker,bajskorv,nectarin,littlebitch,love24,feyenoor,bigal37,lambo1,pussybitch,icecube1,biged,kyocera,ltybcjdf,boodle,theking1,gotrice,sunset1,abm1224,fromme,sexsells,inheat,kenya1,swinger1,aphrodit,kurtcobain,rhind101,poidog,poiulkjh,kuzmina,beantown,tony88,stuttgar,drumer,joaqui,messenge,motorman,amber2,nicegirl,rachel69,andreia,faith123,studmuffin,jaiden,red111,vtkmybr,gamecocks,gumper,bosshogg,4me2know,tokyo1,kleaner,roadhog,fuckmeno,phoenix3,seeme,buttnutt,boner69,andreyka,myheart,katerin,rugburn,jvtuepip,dc3ubn,chile1,ashley69,happy99,swissair,balls2,fylhttdf,jimboo,55555d,mickey11,voronin,m7hsqstm,stufff,merete,weihnachte,dowjones,baloo1,freeones,bears34,auburn1,beverl,timberland,1elvis,guinness1,bombadil,flatron1,logging7,telefoon,merl1n,masha1,andrei1,cowabung,yousuck1,1matrix,peopl,asd123qwe,sweett,mirror1,torrente,joker12,diamond6,jackaroo,00000a,millerlite,ironhorse,2twins,stryke,gggg1,zzzxxxccc,roosevel,8363eddy,angel21,depeche1,d0ct0r,blue14,areyou,veloce,grendal,frederiksberg,cbcntvf,cb207sl,sasha2000,was.here,fritzz,rosedale,spinoza,cokeisit,gandalf3,skidmark,ashley01,12345j,1234567890qaz,sexxxxxx,beagles,lennart,12345789,pass10,politic,max007,gcheckou,12345611,tiffy,lightman,mushin,velosiped,brucewayne,gauthie,elena123,greenegg,h2oski,clocker,nitemare,123321s,megiddo,cassidy1,david13,boywonde,flori,peggy12,pgszt6md,batterie,redlands,scooter6,bckhere,trueno,bailey11,maxwell2,bandana,timoth1,startnow,ducati74,tiern,maxine1,blackmetal,suzyq,balla007,phatfarm,kirsten1,titmouse,benhogan,culito,forbin,chess1,warren1,panman,mickey7,24lover,dascha,speed2,redlion,andrew10,johnwayn,nike23,chacha1,bendog,bullyboy,goldtree,spookie,tigger99,1cookie,poutine,cyclone1,woodpony,camaleun,bluesky1,dfadan,eagles20,lovergirl,peepshow,mine1,dima1989,rjdfkmxer,11111aaaaa,machina,august17,1hhhhh,0773417k,1monster,freaksho,jazzmin,davidw,kurupt,chumly,huggies,sashenka,ccccccc1,bridge1,giggalo,cincinna,pistol1,hello22,david77,lightfoo,lucky6,jimmy12,261397,lisa12,tabaluga,mysite,belo4ka,greenn,eagle99,punkrawk,salvado,slick123,wichsen,knight99,dummys,fefolico,contrera,kalle1,anna1984,delray,robert99,garena,pretende,racefan,alons,serenada,ludmilla,cnhtkjr,l0swf9gx,hankster,dfktynbyrf,sheep1,john23,cv141ab,kalyani,944turbo,crystal2,blackfly,zrjdktdf,eus1sue1,mario5,riverplate,harddriv,melissa3,elliott1,sexybitc,cnhfyybr,jimdavis,bollix,beta1,amberlee,skywalk1,natala,1blood,brattax,shitty1,gb15kv99,ronjon,rothmans,thedoc,joey21,hotboi,firedawg,bimbo38,jibber,aftermat,nomar,01478963,phishing,domodo,anna13,materia,martha1,budman1,gunblade,exclusiv,sasha1997,anastas,rebecca2,fackyou,kallisti,fuckmyass,norseman,ipswich1,151500,1edward,intelinside,darcy1,bcrich,yjdjcnbf,failte,buzzzz,cream1,tatiana1,7eleven,green8,153351,1a2s3d4f5g6h,154263,milano1,bambi1,bruins77,rugby2,jamal1,bolita,sundaypunch,bubba12,realmadr,vfyxtcnth,iwojima,notlob,black666,valkiria,nexus1,millerti,birthday100,swiss1,appollo,gefest,greeneyes,celebrat,tigerr,slava123,izumrud,bubbabub,legoman,joesmith,katya123,sweetdream,john44,wwwwwww1,oooooo1,socal,lovespor,s5r8ed67s,258147,heidis,cowboy22,wachovia,michaelb,qwe1234567,i12345,255225,goldie1,alfa155,45colt,safeu851,antonova,longtong,1sparky,gfvznm,busen,hjlbjy,whateva,rocky4,cokeman,joshua3,kekskek1,sirocco,jagman,123456qwert,phinupi,thomas10,loller,sakur,vika2011,fullred,mariska,azucar,ncstate,glenn74,halima,aleshka,ilovemylife,verlaat,baggie,scoubidou6,phatboy,jbruton,scoop1,barney11,blindman,def456,maximus2,master55,nestea,11223355,diego123,sexpistols,sniffy,philip1,f12345,prisonbreak,nokia2700,ajnjuhfa,yankees3,colfax,ak470000,mtnman,bdfyeirf,fotball,ichbin,trebla,ilusha,riobravo,beaner1,thoradin,polkaudi,kurosawa,honda123,ladybu,valerik,poltava,saviola,fuckyouguys,754740g0,anallove,microlab1,juris01,ncc1864,garfild,shania1,qagsud,makarenko,cindy69,lebedev,andrew11,johnnybo,groovy1,booster1,sanders1,tommyb,johnson4,kd189nlcih,hondaman,vlasova,chick1,sokada,sevisgur,bear2327,chacho,sexmania,roma1993,hjcnbckfd,valley1,howdie,tuppence,jimandanne,strike3,y4kuz4,nhfnfnf,tsubasa,19955991,scabby,quincunx,dima1998,uuuuuu1,logica,skinner1,pinguino,lisa1234,xpressmusic,getfucked,qqqq1,bbbb1,matulino,ulyana,upsman,johnsmith,123579,co2000,spanner1,todiefor,mangoes,isabel1,123852,negra,snowdon,nikki123,bronx1,booom,ram2500,chuck123,fireboy,creek1,batman13,princesse,az12345,maksat,1knight,28infern,241455,r7112s,muselman,mets1986,katydid,vlad777,playme,kmfdm1,asssex,1prince,iop890,bigbroth,mollymoo,waitron,lizottes,125412,juggler,quinta,0sister0,zanardi,nata123,heckfyxbr,22q04w90e,engine2,nikita95,zamira,hammer22,lutscher,carolina1,zz6319,sanman,vfuflfy,buster99,rossco,kourniko,aggarwal,tattoo1,janice1,finger1,125521,19911992,shdwlnds,rudenko,vfvfgfgf123,galatea,monkeybu,juhani,premiumcash,classact,devilmay,helpme2,knuddel,hardpack,ramil,perrit,basil1,zombie13,stockcar,tos8217,honeypie,nowayman,alphadog,melon1,talula,125689,tiribon12,tornike,haribol,telefone,tiger22,sucka,lfytxrf,chicken123,muggins,a23456,b1234567,lytdybr,otter1,pippa,vasilisk,cooking1,helter,78978,bestboy,viper7,ahmed1,whitewol,mommys,apple5,shazam1,chelsea7,kumiko,masterma,rallye,bushmast,jkz123,entrar,andrew6,nathan01,alaric,tavasz,heimdall,gravy1,jimmy99,cthlwt,powerr,gthtrhtcnjr,canesfan,sasha11,ybrbnf_25,august9,brucie,artichok,arnie1,superdude,tarelka,mickey22,dooper,luners,holeshot,good123,gettysbu,bicho,hammer99,divine5,1zxcvbn,stronzo,q22222,disne,bmw750il,godhead,hallodu,aerith,nastik,differen,cestmoi,amber69,5string,pornosta,dirtygirl,ginger123,formel1,scott12,honda200,hotspurs,johnatha,firstone123,lexmark1,msconfig,karlmasc,l123456,123qweasdzx,baldman,sungod,furka,retsub,9811020,ryder1,tcglyued,astron,lbvfcbr,minddoc,dirt49,baseball12,tbear,simpl,schuey,artimus,bikman,plat1num,quantex,gotyou,hailey1,justin01,ellada,8481068,000002,manimal,dthjybxrf,buck123,dick123,6969696,nospam,strong1,kodeord,bama12,123321w,superman123,gladiolus,nintend,5792076,dreamgirl,spankme1,gautam,arianna1,titti,tetas,cool1234,belladog,importan,4206969,87e5nclizry,teufelo7,doller,yfl.irf,quaresma,3440172,melis,bradle,nnmaster,fast1,iverso,blargh,lucas12,chrisg,iamsam,123321az,tomjerry,kawika,2597174,standrew,billyg,muskan,gizmodo2,rz93qpmq,870621345,sathya,qmezrxg4,januari,marthe,moom4261,cum2me,hkger286,lou1988,suckit1,croaker,klaudia1,753951456,aidan1,fsunoles,romanenko,abbydog,isthebes,akshay,corgi,fuck666,walkman555,ranger98,scorpian,hardwareid,bluedragon,fastman,2305822q,iddqdiddqd,1597532,gopokes,zvfrfcb,w1234567,sputnik1,tr1993,pa$$w0rd,2i5fdruv,havvoc,1357913,1313131,bnm123,cowd00d,flexscan,thesims2,boogiema,bigsexxy,powerstr,ngc4565,joshman,babyboy1,123jlb,funfunfu,qwe456,honor1,puttana,bobbyj,daniel21,pussy12,shmuck,1232580,123578951,maxthedo,hithere1,bond0007,gehenna,nomames,blueone,r1234567,bwana,gatinho,1011111,torrents,cinta,123451234,tiger25,money69,edibey,pointman,mmcm19,wales1,caffreys,phaedra,bloodlus,321ret32,rufuss,tarbit,joanna1,102030405,stickboy,lotrfotr34,jamshid,mclarenf1,ataman,99ford,yarrak,logan2,ironlung,pushistik,dragoon1,unclebob,tigereye,pinokio,tylerj,mermaid1,stevie1,jaylen,888777,ramana,roman777,brandon7,17711771s,thiago,luigi1,edgar1,brucey,videogam,classi,birder,faramir,twiddle,cubalibre,grizzy,fucky,jjvwd4,august15,idinahui,ranita,nikita1998,123342,w1w2w3,78621323,4cancel,789963,(null,vassago,jaydog472,123452,timt42,canada99,123589,rebenok,htyfnf,785001,osipov,maks123,neverwinter,love2010,777222,67390436,eleanor1,bykemo,aquemini,frogg,roboto,thorny,shipmate,logcabin,66005918,nokian,gonzos,louisian,1abcdefg,triathlo,ilovemar,couger,letmeino,supera,runvs,fibonacci,muttly,58565254,5thgbqi,vfnehsv,electr,jose12,artemis1,newlove,thd1shr,hawkey,grigoryan,saisha,tosca,redder,lifesux,temple1,bunnyman,thekids,sabbeth,tarzan1,182838,158uefas,dell50,1super,666222,47ds8x,jackhamm,mineonly,rfnfhbyf,048ro,665259,kristina1,bombero,52545856,secure1,bigloser,peterk,alex2,51525354,anarchy1,superx,teenslut,money23,sigmapi,sanfrancisco,acme34,private5,eclips,qwerttrewq,axelle,kokain,hardguy,peter69,jesuschr,dyanna,dude69,sarah69,toyota91,amberr,45645645,bugmenot,bigted,44556677,556644,wwr8x9pu,alphaome,harley13,kolia123,wejrpfpu,revelati,nairda,sodoff,cityboy,pinkpussy,dkalis,miami305,wow12345,triplet,tannenbau,asdfasdf1,darkhors,527952,retired1,soxfan,nfyz123,37583867,goddes,515069,gxlmxbewym,1warrior,36925814,dmb2011,topten,karpova,89876065093rax,naturals,gateway9,cepseoun,turbot,493949,cock22,italia1,sasafras,gopnik,stalke,1qazxdr5,wm2006,ace1062,alieva,blue28,aracel,sandia,motoguzz,terri1,emmajane,conej,recoba,alex1995,jerkyboy,cowboy12,arenrone,precisio,31415927,scsa316,panzer1,studly1,powerhou,bensam,mashoutq,billee,eeyore1,reape,thebeatl,rul3z,montesa,doodle1,cvzefh1gk,424365,a159753,zimmerma,gumdrop,ashaman,grimreap,icandoit,borodina,branca,dima2009,keywest1,vaders,bubluk,diavolo,assss,goleta,eatass,napster1,382436,369741,5411pimo,lenchik,pikach,gilgamesh,kalimera,singer1,gordon2,rjycnbnewbz,maulwurf,joker13,2much4u,bond00,alice123,robotec,fuckgirl,zgjybz,redhorse,margaret1,brady1,pumpkin2,chinky,fourplay,1booger,roisin,1brandon,sandan,blackheart,cheez,blackfin,cntgfyjdf,mymoney1,09080706,goodboss,sebring1,rose1,kensingt,bigboner,marcus12,ym3cautj,struppi,thestone,lovebugs,stater,silver99,forest99,qazwsx12345,vasile,longboar,mkonji,huligan,rhfcbdfz,airmail,porn11,1ooooo,sofun,snake2,msouthwa,dougla,1iceman,shahrukh,sharona,dragon666,france98,196800,196820,ps253535,zjses9evpa,sniper01,design1,konfeta,jack99,drum66,good4you,station2,brucew,regedit,school12,mvtnr765,pub113,fantas,tiburon1,king99,ghjcnjgbpltw,checkito,308win,1ladybug,corneliu,svetasveta,197430,icicle,imaccess,ou81269,jjjdsl,brandon6,bimbo1,smokee,piccolo1,3611jcmg,children2,cookie2,conor1,darth1,margera,aoi856,paully,ou812345,sklave,eklhigcz,30624700,amazing1,wahooo,seau55,1beer,apples2,chulo,dolphin9,heather6,198206,198207,hergood,miracle1,njhyflj,4real,milka,silverfi,fabfive,spring12,ermine,mammy,jumpjet,adilbek,toscana,caustic,hotlove,sammy69,lolita1,byoung,whipme,barney01,mistys,tree1,buster3,kaylin,gfccgjhn,132333,aishiteru,pangaea,fathead1,smurph,198701,ryslan,gasto,xexeylhf,anisimov,chevyss,saskatoo,brandy12,tweaker,irish123,music2,denny1,palpatin,outlaw1,lovesuck,woman1,mrpibb,diadora,hfnfneq,poulette,harlock,mclaren1,cooper12,newpass3,bobby12,rfgecnfcerf,alskdjfh,mini14,dukers,raffael,199103,cleo123,1234567qwertyu,mossberg,scoopy,dctulf,starline,hjvjxrf,misfits1,rangers2,bilbos,blackhea,pappnase,atwork,purple2,daywalker,summoner,1jjjjjjj,swansong,chris10,laluna,12345qqq,charly1,lionsden,money99,silver33,hoghead,bdaddy,199430,saisg002,nosaints,tirpitz,1gggggg,jason13,kingss,ernest1,0cdh0v99ue,pkunzip,arowana,spiri,deskjet1,armine,lances,magic2,thetaxi,14159265,cacique,14142135,orange10,richard0,backdraf,255ooo,humtum,kohsamui,c43dae874d,wrestling1,cbhtym,sorento,megha,pepsiman,qweqwe12,bliss7,mario64,korolev,balls123,schlange,gordit,optiquest,fatdick,fish99,richy,nottoday,dianne1,armyof1,1234qwerasdfzxcv,bbonds,aekara,lidiya,baddog1,yellow5,funkie,ryan01,greentree,gcheckout,marshal1,liliput,000000z,rfhbyrf,gtogto43,rumpole,tarado,marcelit,aqwzsxedc,kenshin1,sassydog,system12,belly1,zilla,kissfan,tools1,desember,donsdad,nick11,scorpio6,poopoo1,toto99,steph123,dogfuck,rocket21,thx113,dude12,sanek,sommar,smacky,pimpsta,letmego,k1200rs,lytghjgtnhjdcr,abigale,buddog,deles,baseball9,roofus,carlsbad,hamzah,hereiam,genial,schoolgirlie,yfz450,breads,piesek,washear,chimay,apocalyp,nicole18,gfgf1234,gobulls,dnevnik,wonderwall,beer1234,1moose,beer69,maryann1,adpass,mike34,birdcage,hottuna,gigant,penquin,praveen,donna123,123lol123,thesame,fregat,adidas11,selrahc,pandoras,test3,chasmo,111222333000,pecos,daniel11,ingersol,shana1,mama12345,cessna15,myhero,1simpson,nazarenko,cognit,seattle2,irina1,azfpc310,rfycthdf,hardy1,jazmyn,sl1200,hotlanta,jason22,kumar123,sujatha,fsd9shtyu,highjump,changer,entertai,kolding,mrbig,sayuri,eagle21,qwertzu,jorge1,0101dd,bigdong,ou812a,sinatra1,htcnjhfy,oleg123,videoman,pbyfblf,tv612se,bigbird1,kenaidog,gunite,silverma,ardmore,123123qq,hotbot,cascada,cbr600f4,harakiri,chico123,boscos,aaron12,glasgow1,kmn5hc,lanfear,1light,liveoak,fizika,ybrjkftdyf,surfside,intermilan,multipas,redcard,72chevy,balata,coolio1,schroede,kanat,testerer,camion,kierra,hejmeddig,antonio2,tornados,isidor,pinkey,n8skfswa,ginny1,houndog,1bill,chris25,hastur,1marine,greatdan,french1,hatman,123qqq,z1z2z3z4,kicker1,katiedog,usopen,smith22,mrmagoo,1234512i,assa123,7seven7,monster7,june12,bpvtyf,149521,guenter,alex1985,voronina,mbkugegs,zaqwsxcderfv,rusty5,mystic1,master0,abcdef12,jndfkb,r4zpm3,cheesey,skripka,blackwhite,sharon69,dro8smwq,lektor,techman,boognish,deidara,heckfyf,quietkey,authcode,monkey4,jayboy,pinkerto,merengue,chulita,bushwick,turambar,kittykit,joseph2,dad123,kristo,pepote,scheiss,hambone1,bigballa,restaura,tequil,111luzer,euro2000,motox,denhaag,chelsi,flaco1,preeti,lillo,1001sin,passw,august24,beatoff,555555d,willis1,kissthis,qwertyz,rvgmw2gl,iloveboobies,timati,kimbo,msinfo,dewdrop,sdbaker,fcc5nky2,messiah1,catboy,small1,chode,beastie1,star77,hvidovre,short1,xavie,dagobah,alex1987,papageno,dakota2,toonami,fuerte,jesus33,lawina,souppp,dirtybir,chrish,naturist,channel1,peyote,flibble,gutentag,lactate,killem,zucchero,robinho,ditka,grumpy1,avr7000,boxxer,topcop,berry1,mypass1,beverly1,deuce1,9638527410,cthuttdf,kzkmrf,lovethem,band1t,cantona1,purple11,apples123,wonderwo,123a456,fuzzie,lucky99,dancer2,hoddling,rockcity,winner12,spooty,mansfiel,aimee1,287hf71h,rudiger,culebra,god123,agent86,daniel0,bunky1,notmine,9ball,goofus,puffy1,xyh28af4,kulikov,bankshot,vurdf5i2,kevinm,ercole,sexygirls,razvan,october7,goater,lollie,raissa,thefrog,mdmaiwa3,mascha,jesussaves,union1,anthony9,crossroa,brother2,areyuke,rodman91,toonsex,dopeman,gericom,vaz2115,cockgobbler,12356789,12345699,signatur,alexandra1,coolwhip,erwin1,awdrgyjilp,pens66,ghjrjgtyrj,linkinpark,emergenc,psych0,blood666,bootmort,wetworks,piroca,johnd,iamthe1,supermario,homer69,flameon,image1,bebert,fylhtq1,annapoli,apple11,hockey22,10048,indahouse,mykiss,1penguin,markp,misha123,foghat,march11,hank1,santorin,defcon4,tampico,vbnhjafy,robert22,bunkie,athlon64,sex777,nextdoor,koskesh,lolnoob,seemnemaailm,black23,march15,yeehaa,chiqui,teagan,siegheil,monday2,cornhusk,mamusia,chilis,sthgrtst,feldspar,scottm,pugdog,rfghjy,micmac,gtnhjdyf,terminato,1jackson,kakosja,bogomol,123321aa,rkbvtyrj,tresor,tigertig,fuckitall,vbkkbjy,caramon,zxc12,balin,dildo1,soccer09,avata,abby123,cheetah1,marquise,jennyc,hondavfr,tinti,anna1985,dennis2,jorel,mayflowe,icema,hal2000,nikkis,bigmouth,greenery,nurjan,leonov,liberty7,fafnir,larionov,sat321321,byteme1,nausicaa,hjvfynbrf,everto,zebra123,sergio1,titone,wisdom1,kahala,104328q,marcin1,salima,pcitra,1nnnnn,nalini,galvesto,neeraj,rick1,squeeky,agnes1,jitterbu,agshar,maria12,0112358,traxxas,stivone,prophet1,bananza,sommer1,canoneos,hotfun,redsox11,1bigmac,dctdjkjl,legion1,everclea,valenok,black9,danny001,roxie1,1theman,mudslide,july16,lechef,chula,glamis,emilka,canbeef,ioanna,cactus1,rockshox,im2cool,ninja9,thvfrjdf,june28,milo17,missyou,micky1,nbibyf,nokiaa,goldi,mattias,fuckthem,asdzxc123,ironfist,junior01,nesta,crazzy,killswit,hygge,zantac,kazama,melvin1,allston,maandag,hiccup,prototyp,specboot,dwl610,hello6,159456,baldhead,redwhite,calpoly,whitetail,agile1,cousteau,matt01,aust1n,malcolmx,gjlfhjr,semperf1,ferarri,a1b2c3d,vangelis,mkvdari,bettis36,andzia,comand,tazzman,morgaine,pepluv,anna1990,inandout,anetka,anna1997,wallpape,moonrake,huntress,hogtie,cameron7,sammy7,singe11,clownboy,newzeala,wilmar,safrane,rebeld,poopi,granat,hammertime,nermin,11251422,xyzzy1,bogeys,jkmxbr,fktrcfyl,11223311,nfyrbcn,11223300,powerpla,zoedog,ybrbnbyf,zaphod42,tarawa,jxfhjdfirf,dude1234,g5wks9,goobe,czekolada,blackros,amaranth,medical1,thereds,julija,nhecsyfujkjdt,promopas,buddy4,marmalad,weihnachten,tronic,letici,passthief,67mustan,ds7zamnw,morri,w8woord,cheops,pinarell,sonofsam,av473dv,sf161pn,5c92v5h6,purple13,tango123,plant1,1baby,xufrgemw,fitta,1rangers,spawns,kenned,taratata,19944991,11111118,coronas,4ebouux8,roadrash,corvette1,dfyjdf846,marley12,qwaszxerdfcv,68stang,67stang,racin,ellehcim,sofiko,nicetry,seabass1,jazzman1,zaqwsx1,laz2937,uuuuuuu1,vlad123,rafale,j1234567,223366,nnnnnn1,226622,junkfood,asilas,cer980,daddymac,persepho,neelam,00700,shithappens,255555,qwertyy,xbox36,19755791,qweasd1,bearcub,jerryb,a1b1c1,polkaudio,basketball1,456rty,1loveyou,marcus2,mama1961,palace1,transcend,shuriken,sudhakar,teenlove,anabelle,matrix99,pogoda,notme,bartend,jordana,nihaoma,ataris,littlegi,ferraris,redarmy,giallo,fastdraw,accountbloc,peludo,pornostar,pinoyako,cindee,glassjaw,dameon,johnnyd,finnland,saudade,losbravo,slonko,toplay,smalltit,nicksfun,stockhol,penpal,caraj,divedeep,cannibus,poppydog,pass88,viktory,walhalla,arisia,lucozade,goldenbo,tigers11,caball,ownage123,tonna,handy1,johny,capital5,faith2,stillher,brandan,pooky1,antananarivu,hotdick,1justin,lacrimos,goathead,bobrik,cgtwbfkbcn,maywood,kamilek,gbplf123,gulnar,beanhead,vfvjyn,shash,viper69,ttttttt1,hondacr,kanako,muffer,dukies,justin123,agapov58,mushka,bad11bad,muleman,jojo123,andreika,makeit,vanill,boomers,bigals,merlin11,quacker,aurelien,spartak1922,ligeti,diana2,lawnmowe,fortune1,awesom,rockyy,anna1994,oinker,love88,eastbay,ab55484,poker0,ozzy666,papasmurf,antihero,photogra,ktm250,painkill,jegr2d2,p3orion,canman,dextur,qwest123,samboy,yomismo,sierra01,herber,vfrcbvvfrcbv,gloria1,llama1,pie123,bobbyjoe,buzzkill,skidrow,grabber,phili,javier1,9379992q,geroin,oleg1994,sovereig,rollover,zaq12qaz,battery1,killer13,alina123,groucho1,mario12,peter22,butterbean,elise1,lucycat,neo123,ferdi,golfer01,randie,gfhfyjbr,ventura1,chelsea3,pinoy,mtgox,yrrim7,shoeman,mirko,ffggyyo,65mustan,ufdibyjd,john55,suckfuck,greatgoo,fvfnjhb,mmmnnn,love20,1bullshi,sucesso,easy1234,robin123,rockets1,diamondb,wolfee,nothing0,joker777,glasnost,richar1,guille,sayan,koresh,goshawk,alexx,batman21,a123456b,hball,243122,rockandr,coolfool,isaia,mary1,yjdbrjdf,lolopc,cleocat,cimbo,lovehina,8vfhnf,passking,bonapart,diamond2,bigboys,kreator,ctvtyjdf,sassy123,shellac,table54781,nedkelly,philbert,sux2bu,nomis,sparky99,python1,littlebear,numpty,silmaril,sweeet,jamesw,cbufhtnf,peggysue,wodahs,luvsex,wizardry,venom123,love4you,bama1,samat,reviewpass,ned467,cjkjdtq,mamula,gijoe,amersham,devochka,redhill,gisel,preggo,polock,cando,rewster,greenlantern,panasonik,dave1234,mikeee,1carlos,miledi,darkness1,p0o9i8u7y6,kathryn1,happyguy,dcp500,assmaster,sambuka,sailormo,antonio3,logans,18254288,nokiax2,qwertzuiop,zavilov,totti,xenon1,edward11,targa1,something1,tony_t,q1w2e3r4t5y6u7i8o9p0,02551670,vladimir1,monkeybutt,greenda,neel21,craiger,saveliy,dei008,honda450,fylhtq95,spike2,fjnq8915,passwordstandard,vova12345,talonesi,richi,gigemags,pierre1,westin,trevoga,dorothee,bastogne,25563o,brandon3,truegrit,krimml,iamgreat,servis,a112233,paulinka,azimuth,corperfmonsy,358hkyp,homerun1,dogbert1,eatmyass,cottage1,savina,baseball7,bigtex,gimmesum,asdcxz,lennon1,a159357,1bastard,413276191q,pngfilt,pchealth,netsnip,bodiroga,1matt,webtvs,ravers,adapters,siddis,mashamasha,coffee2,myhoney,anna1982,marcia1,fairchil,maniek,iloveluc,batmonh,wildon,bowie1,netnwlnk,fancy1,tom204,olga1976,vfif123,queens1,ajax01,lovess,mockba,icam4usb,triada,odinthor,rstlne,exciter,sundog,anchorat,girls69,nfnmzyrf,soloma,gti16v,shadowman,ottom,rataros,tonchin,vishal,chicken0,pornlo,christiaan,volante,likesit,mariupol,runfast,gbpltw123,missys,villevalo,kbpjxrf,ghibli,calla,cessna172,kinglear,dell11,swift1,walera,1cricket,pussy5,turbo911,tucke,maprchem56458,rosehill,thekiwi1,ygfxbkgt,mandarinka,98xa29,magnit,cjfrf,paswoord,grandam1,shenmue,leedsuni,hatrick,zagadka,angeldog,michaell,dance123,koichi,bballs,29palms,xanth,228822,ppppppp1,1kkkkk,1lllll,mynewbots,spurss,madmax1,224455,city1,mmmmmmm1,nnnnnnn1,biedronka,thebeatles,elessar,f14tomcat,jordan18,bobo123,ayi000,tedbear,86chevyx,user123,bobolink,maktub,elmer1,flyfishi,franco1,gandalf0,traxdata,david21,enlighte,dmitrij,beckys,1giants,flippe,12345678w,jossie,rugbyman,snowcat,rapeme,peanut11,gemeni,udders,techn9ne,armani1,chappie,war123,vakantie,maddawg,sewanee,jake5253,tautt1,anthony5,letterma,jimbo2,kmdtyjr,hextall,jessica6,amiga500,hotcunt,phoenix9,veronda,saqartvelo,scubas,sixer3,williamj,nightfal,shihan,melnikova,kosssss,handily,killer77,jhrl0821,march17,rushman,6gcf636i,metoyou,irina123,mine11,primus1,formatters,matthew5,infotech,gangster1,jordan45,moose69,kompas,motoxxx,greatwhi,cobra12,kirpich,weezer1,hello23,montse,tracy123,connecte,cjymrf,hemingwa,azreal,gundam00,mobila,boxman,slayers1,ravshan,june26,fktrcfylhjd,bermuda1,tylerd,maersk,qazwsx11,eybdthcbntn,ash123,camelo,kat123,backd00r,cheyenne1,1king,jerkin,tnt123,trabant,warhammer40k,rambos,punto,home77,pedrito,1frank,brille,guitarman,george13,rakas,tgbxtcrbq,flute1,bananas1,lovezp1314,thespot,postie,buster69,sexytime,twistys,zacharia,sportage,toccata,denver7,terry123,bogdanova,devil69,higgins1,whatluck,pele10,kkk666,jeffery1,1qayxsw2,riptide1,chevy11,munchy,lazer1,hooker1,ghfgjh,vergesse,playgrou,4077mash,gusev,humpin,oneputt,hydepark,monster9,tiger8,tangsoo,guy123,hesoyam1,uhtqneyu,thanku,lomond,ortezza,kronik,geetha,rabbit66,killas,qazxswe,alabaste,1234567890qwerty,capone1,andrea12,geral,beatbox,slutfuck,booyaka,jasmine7,ostsee,maestro1,beatme,tracey1,buster123,donaldduck,ironfish,happy6,konnichi,gintonic,momoney1,dugan1,today2,enkidu,destiny2,trim7gun,katuha,fractals,morganstanley,polkadot,gotime,prince11,204060,fifa2010,bobbyt,seemee,amanda10,airbrush,bigtitty,heidie,layla1,cotton1,5speed,fyfnjkmtdyf,flynavy,joxury8f,meeko,akuma,dudley1,flyboy1,moondog1,trotters,mariami,signin,chinna,legs11,pussy4,1s1h1e1f1,felici,optimus1,iluvu,marlins1,gavaec,balance1,glock40,london01,kokot,southwes,comfort1,sammy11,rockbottom,brianc,litebeer,homero,chopsuey,greenlan,charit,freecell,hampster,smalldog,viper12,blofeld,1234567890987654321,realsex,romann,cartman2,cjdthitycndj,nelly1,bmw528,zwezda,masterba,jeep99,turtl,america2,sunburst,sanyco,auntjudy,125wm,blue10,qwsazx,cartma,toby12,robbob,red222,ilovecock,losfix16,1explore,helge,vaz2114,whynotme,baba123,mugen,1qazwsxedc,albertjr,0101198,sextime,supras,nicolas2,wantsex,pussy6,checkm8,winam,24gordon,misterme,curlew,gbljhfcs,medtech,franzi,butthea,voivod,blackhat,egoiste,pjkeirf,maddog69,pakalolo,hockey4,igor1234,rouges,snowhite,homefree,sexfreak,acer12,dsmith,blessyou,199410,vfrcbvjd,falco02,belinda1,yaglasph,april21,groundho,jasmin1,nevergiveup,elvir,gborv526,c00kie,emma01,awesome2,larina,mike12345,maximu,anupam,bltynbabrfwbz,tanushka,sukkel,raptor22,josh12,schalke04,cosmodog,fuckyou8,busybee,198800,bijoux,frame1,blackmor,giveit,issmall,bear13,123-123,bladez,littlegirl,ultra123,fletch1,flashnet,loploprock,rkelly,12step,lukas1,littlewhore,cuntfinger,stinkyfinger,laurenc,198020,n7td4bjl,jackie69,camel123,ben1234,1gateway,adelheid,fatmike,thuglove,zzaaqq,chivas1,4815162342q,mamadou,nadano,james22,benwin,andrea99,rjirf,michou,abkbgg,d50gnn,aaazzz,a123654,blankman,booboo11,medicus,bigbone,197200,justine1,bendix,morphius,njhvjp,44mag,zsecyus56,goodbye1,nokiadermo,a333444,waratsea,4rzp8ab7,fevral,brillian,kirbys,minim,erathia,grazia,zxcvb1234,dukey,snaggle,poppi,hymen,1video,dune2000,jpthjdf,cvbn123,zcxfcnkbdfz,astonv,ginnie,316271,engine3,pr1ncess,64chevy,glass1,laotzu,hollyy,comicbooks,assasins,nuaddn9561,scottsda,hfcnfvfy,accobra,7777777z,werty123,metalhead,romanson,redsand,365214,shalo,arsenii,1989cc,sissi,duramax,382563,petera,414243,mamapap,jollymon,field1,fatgirl,janets,trompete,matchbox20,rambo2,nepenthe,441232,qwertyuiop10,bozo123,phezc419hv,romantika,lifestyl,pengui,decembre,demon6,panther6,444888,scanman,ghjcnjabkz,pachanga,buzzword,indianer,spiderman3,tony12,startre,frog1,fyutk,483422,tupacshakur,albert12,1drummer,bmw328i,green17,aerdna,invisibl,summer13,calimer,mustaine,lgnu9d,morefun,hesoyam123,escort1,scrapland,stargat,barabbas,dead13,545645,mexicali,sierr,gfhfpbn,gonchar,moonstafa,searock,counte,foster1,jayhawk1,floren,maremma,nastya2010,softball1,adaptec,halloo,barrabas,zxcasd123,hunny,mariana1,kafedra,freedom0,green420,vlad1234,method7,665566,tooting,hallo12,davinchi,conducto,medias,666444,invernes,madhatter,456asd,12345678i,687887,le33px,spring00,help123,bellybut,billy5,vitalik1,river123,gorila,bendis,power666,747200,footslav,acehigh,qazxswedc123,q1a1z1,richard9,peterburg,tabletop,gavrilov,123qwe1,kolosov,fredrau,run4fun,789056,jkbvgbflf,chitra,87654321q,steve22,wideopen,access88,surfe,tdfyutkbjy,impossib,kevin69,880888,cantina,887766,wxcvb,dontforg,qwer1209,asslicke,mamma123,indig,arkasha,scrapp,morelia,vehxbr,jones2,scratch1,cody11,cassie12,gerbera,dontgotm,underhil,maks2010,hollywood1,hanibal,elena2010,jason11,1010321,stewar,elaman,fireplug,goodby,sacrific,babyphat,bobcat12,bruce123,1233215,tony45,tiburo,love15,bmw750,wallstreet,2h0t4me,1346795,lamerz,munkee,134679q,granvill,1512198,armastus,aiden1,pipeutvj,g1234567,angeleyes,usmc1,102030q,putangina,brandnew,shadowfax,eagles12,1falcon,brianw,lokomoti,2022958,scooper,pegas,jabroni1,2121212,buffal,siffredi,wewiz,twotone,rosebudd,nightwis,carpet1,mickey2,2525252,sleddog,red333,jamesm,2797349,jeff12,onizuka,felixxxx,rf6666,fine1,ohlala,forplay,chicago5,muncho,scooby11,ptichka,johnnn,19851985p,dogphil3650,totenkopf,monitor2,macross7,3816778,dudder,semaj1,bounder,racerx1,5556633,7085506,ofclr278,brody1,7506751,nantucke,hedj2n4q,drew1,aessedai,trekbike,pussykat,samatron,imani,9124852,wiley1,dukenukem,iampurehaha2,9556035,obvious1,mccool24,apache64,kravchenko,justforf,basura,jamese,s0ccer,safado,darksta,surfer69,damian1,gjpbnbd,gunny1,wolley,sananton,zxcvbn123456,odt4p6sv8,sergei1,modem1,mansikka,zzzz1,rifraf,dima777,mary69,looking4,donttell,red100,ninjutsu,uaeuaeman,bigbri,brasco,queenas8151,demetri,angel007,bubbl,kolort,conny,antonia1,avtoritet,kaka22,kailayu,sassy2,wrongway,chevy3,1nascar,patriots1,chrisrey,mike99,sexy22,chkdsk,sd3utre7,padawan,a6pihd,doming,mesohorny,tamada,donatello,emma22,eather,susan69,pinky123,stud69,fatbitch,pilsbury,thc420,lovepuss,1creativ,golf1234,hurryup,1honda,huskerdu,marino1,gowron,girl1,fucktoy,gtnhjpfdjlcr,dkjfghdk,pinkfl,loreli,7777777s,donkeykong,rockytop,staples1,sone4ka,xxxjay,flywheel,toppdogg,bigbubba,aaa123456,2letmein,shavkat,paule,dlanor,adamas,0147852,aassaa,dixon1,bmw328,mother12,ilikepussy,holly2,tsmith,excaliber,fhutynbyf,nicole3,tulipan,emanue,flyvholm,currahee,godsgift,antonioj,torito,dinky1,sanna,yfcnzvjz,june14,anime123,123321456654,hanswurst,bandman,hello101,xxxyyy,chevy69,technica,tagada,arnol,v00d00,lilone,filles,drumandbass,dinamit,a1234a,eatmeat,elway07,inout,james6,dawid1,thewolf,diapason,yodaddy,qscwdv,fuckit1,liljoe,sloeber,simbacat,sascha1,qwe1234,1badger,prisca,angel17,gravedig,jakeyboy,longboard,truskawka,golfer11,pyramid7,highspee,pistola,theriver,hammer69,1packers,dannyd,alfonse,qwertgfdsa,11119999,basket1,ghjtrn,saralee,12inches,paolo1,zse4xdr5,taproot,sophieh6,grizzlie,hockey69,danang,biggums,hotbitch,5alive,beloved1,bluewave,dimon95,koketka,multiscan,littleb,leghorn,poker2,delite,skyfir,bigjake,persona1,amberdog,hannah12,derren,ziffle,1sarah,1assword,sparky01,seymur,tomtom1,123321qw,goskins,soccer19,luvbekki,bumhole,2balls,1muffin,borodin,monkey9,yfeiybrb,1alex,betmen,freder,nigger123,azizbek,gjkzrjdf,lilmike,1bigdadd,1rock,taganrog,snappy1,andrey1,kolonka,bunyan,gomango,vivia,clarkkent,satur,gaudeamus,mantaray,1month,whitehea,fargus,andrew99,ray123,redhawks,liza2009,qw12345,den12345,vfhnsyjdf,147258369a,mazepa,newyorke,1arsenal,hondas2000,demona,fordgt,steve12,birthday2,12457896,dickster,edcwsxqaz,sahalin,pantyman,skinny1,hubertus,cumshot1,chiro,kappaman,mark3434,canada12,lichking,bonkers1,ivan1985,sybase,valmet,doors1,deedlit,kyjelly,bdfysx,ford11,throatfuck,backwood,fylhsq,lalit,boss429,kotova,bricky,steveh,joshua19,kissa,imladris,star1234,lubimka,partyman,crazyd,tobias1,ilike69,imhome,whome,fourstar,scanner1,ujhjl312,anatoli,85bears,jimbo69,5678ytr,potapova,nokia7070,sunday1,kalleank,1996gta,refinnej,july1,molodec,nothanks,enigm,12play,sugardog,nhfkbdfkb,larousse,cannon1,144444,qazxcdew,stimorol,jhereg,spawn7,143000,fearme,hambur,merlin21,dobie,is3yeusc,partner1,dekal,varsha,478jfszk,flavi,hippo1,9hmlpyjd,july21,7imjfstw,lexxus,truelov,nokia5200,carlos6,anais,mudbone,anahit,taylorc,tashas,larkspur,animal2000,nibiru,jan123,miyvarxar,deflep,dolore,communit,ifoptfcor,laura2,anadrol,mamaliga,mitzi1,blue92,april15,matveev,kajlas,wowlook1,1flowers,shadow14,alucard1,1golf,bantha,scotlan,singapur,mark13,manchester1,telus01,superdav,jackoff1,madnes,bullnuts,world123,clitty,palmer1,david10,spider10,sargsyan,rattlers,david4,windows2,sony12,visigoth,qqqaaa,penfloor,cabledog,camilla1,natasha123,eagleman,softcore,bobrov,dietmar,divad,sss123,d1234567,tlbyjhju,1q1q1q1,paraiso,dav123,lfiekmrf,drachen,lzhan16889,tplate,gfghbrf,casio1,123boots1,123test,sys64738,heavymetal,andiamo,meduza,soarer,coco12,negrita,amigas,heavymet,bespin,1asdfghj,wharfrat,wetsex,tight1,janus1,sword123,ladeda,dragon98,austin2,atep1,jungle1,12345abcd,lexus300,pheonix1,alex1974,123qw123,137955,bigtim,shadow88,igor1994,goodjob,arzen,champ123,121ebay,changeme1,brooksie,frogman1,buldozer,morrowin,achim,trish1,lasse,festiva,bubbaman,scottb,kramit,august22,tyson123,passsword,oompah,al123456,fucking1,green45,noodle1,looking1,ashlynn,al1716,stang50,coco11,greese,bob111,brennan1,jasonj,1cherry,1q2345,1xxxxxxx,fifa2011,brondby,zachar1,satyam,easy1,magic7,1rainbow,cheezit,1eeeeeee,ashley123,assass1,amanda123,jerbear,1bbbbbb,azerty12,15975391,654321z,twinturb,onlyone1,denis1988,6846kg3r,jumbos,pennydog,dandelion,haileris,epervier,snoopy69,afrodite,oldpussy,green55,poopypan,verymuch,katyusha,recon7,mine69,tangos,contro,blowme2,jade1,skydive1,fiveiron,dimo4ka,bokser,stargirl,fordfocus,tigers2,platina,baseball11,raque,pimper,jawbreak,buster88,walter34,chucko,penchair,horizon1,thecure1,scc1975,adrianna1,kareta,duke12,krille,dumbfuck,cunt1,aldebaran,laverda,harumi,knopfler,pongo1,pfhbyf,dogman1,rossigno,1hardon,scarlets,nuggets1,ibelieve,akinfeev,xfhkbr,athene,falcon69,happie,billly,nitsua,fiocco,qwerty09,gizmo2,slava2,125690,doggy123,craigs,vader123,silkeborg,124365,peterm,123978,krakatoa,123699,123592,kgvebmqy,pensacol,d1d2d3,snowstor,goldenboy,gfg65h7,ev700,church1,orange11,g0dz1ll4,chester3,acheron,cynthi,hotshot1,jesuschris,motdepass,zymurgy,one2one,fietsbel,harryp,wisper,pookster,nn527hp,dolla,milkmaid,rustyboy,terrell1,epsilon1,lillian1,dale3,crhbgrf,maxsim,selecta,mamada,fatman1,ufkjxrf,shinchan,fuckuall,women1,000008,bossss,greta1,rbhjxrf,mamasboy,purple69,felicidade,sexy21,cathay,hunglow,splatt,kahless,shopping1,1gandalf,themis,delta7,moon69,blue24,parliame,mamma1,miyuki,2500hd,jackmeof,razer,rocker1,juvis123,noremac,boing747,9z5ve9rrcz,icewater,titania,alley1,moparman,christo1,oliver2,vinicius,tigerfan,chevyy,joshua99,doda99,matrixx,ekbnrf,jackfrost,viper01,kasia,cnfhsq,triton1,ssbt8ae2,rugby8,ramman,1lucky,barabash,ghtlfntkm,junaid,apeshit,enfant,kenpo1,shit12,007000,marge1,shadow10,qwerty789,richard8,vbitkm,lostboys,jesus4me,richard4,hifive,kolawole,damilola,prisma,paranoya,prince2,lisaann,happyness,cardss,methodma,supercop,a8kd47v5,gamgee,polly123,irene1,number8,hoyasaxa,1digital,matthew0,dclxvi,lisica,roy123,2468013579,sparda,queball,vaffanculo,pass1wor,repmvbx,999666333,freedom8,botanik,777555333,marcos1,lubimaya,flash2,einstei,08080,123456789j,159951159,159357123,carrot1,alina1995,sanjos,dilara,mustang67,wisteria,jhnjgtl12,98766789,darksun,arxangel,87062134,creativ1,malyshka,fuckthemall,barsic,rocksta,2big4u,5nizza,genesis2,romance1,ofcourse,1horse,latenite,cubana,sactown,789456123a,milliona,61808861,57699434,imperia,bubba11,yellow3,change12,55495746,flappy,jimbo123,19372846,19380018,cutlass1,craig123,klepto,beagle1,solus,51502112,pasha1,19822891,46466452,19855891,petshop,nikolaevna,119966,nokia6131,evenpar,hoosier1,contrasena,jawa350,gonzo123,mouse2,115511,eetfuk,gfhfvgfvgfv,1crystal,sofaking,coyote1,kwiatuszek,fhrflbq,valeria1,anthro,0123654789,alltheway,zoltar,maasikas,wildchil,fredonia,earlgrey,gtnhjczy,matrix123,solid1,slavko,12monkeys,fjdksl,inter1,nokia6500,59382113kevinp,spuddy,cachero,coorslit,password!,kiba1z,karizma,vova1994,chicony,english1,bondra12,1rocket,hunden,jimbob1,zpflhjn1,th0mas,deuce22,meatwad,fatfree,congas,sambora,cooper2,janne,clancy1,stonie,busta,kamaz,speedy2,jasmine3,fahayek,arsenal0,beerss,trixie1,boobs69,luansantana,toadman,control2,ewing33,maxcat,mama1964,diamond4,tabaco,joshua0,piper2,music101,guybrush,reynald,pincher,katiebug,starrs,pimphard,frontosa,alex97,cootie,clockwor,belluno,skyeseth,booty69,chaparra,boochie,green4,bobcat1,havok,saraann,pipeman,aekdb,jumpshot,wintermu,chaika,1chester,rjnjatq,emokid,reset1,regal1,j0shua,134679a,asmodey,sarahh,zapidoo,ciccione,sosexy,beckham23,hornets1,alex1971,delerium,manageme,connor11,1rabbit,sane4ek,caseyboy,cbljhjdf,redsox20,tttttt99,haustool,ander,pantera6,passwd1,journey1,9988776655,blue135,writerspace,xiaoyua123,justice2,niagra,cassis,scorpius,bpgjldsgjldthnf,gamemaster,bloody1,retrac,stabbin,toybox,fight1,ytpyf.,glasha,va2001,taylor11,shameles,ladylove,10078,karmann,rodeos,eintritt,lanesra,tobasco,jnrhjqcz,navyman,pablit,leshka,jessica3,123vika,alena1,platinu,ilford,storm7,undernet,sasha777,1legend,anna2002,kanmax1994,porkpie,thunder0,gundog,pallina,easypass,duck1,supermom,roach1,twincam,14028,tiziano,qwerty32,123654789a,evropa,shampoo1,yfxfkmybr,cubby1,tsunami1,fktrcttdf,yasacrac,17098,happyhap,bullrun,rodder,oaktown,holde,isbest,taylor9,reeper,hammer11,julias,rolltide1,compaq123,fourx4,subzero1,hockey9,7mary3,busines,ybrbnjcbr,wagoneer,danniash,portishead,digitex,alex1981,david11,infidel,1snoopy,free30,jaden,tonto1,redcar27,footie,moskwa,thomas21,hammer12,burzum,cosmo123,50000,burltree,54343,54354,vwpassat,jack5225,cougars1,burlpony,blackhorse,alegna,petert,katemoss,ram123,nels0n,ferrina,angel77,cstock,1christi,dave55,abc123a,alex1975,av626ss,flipoff,folgore,max1998,science1,si711ne,yams7,wifey1,sveiks,cabin1,volodia,ox3ford,cartagen,platini,picture1,sparkle1,tiedomi,service321,wooody,christi1,gnasher,brunob,hammie,iraffert,bot2010,dtcyeirf,1234567890p,cooper11,alcoholi,savchenko,adam01,chelsea5,niewiem,icebear,lllooottt,ilovedick,sweetpus,money8,cookie13,rfnthbyf1988,booboo2,angus123,blockbus,david9,chica1,nazaret,samsung9,smile4u,daystar,skinnass,john10,thegirl,sexybeas,wasdwasd1,sigge1,1qa2ws3ed4rf5tg,czarny,ripley1,chris5,ashley19,anitha,pokerman,prevert,trfnthby,tony69,georgia2,stoppedb,qwertyuiop12345,miniclip,franky1,durdom,cabbages,1234567890o,delta5,liudmila,nhfycajhvths,court1,josiew,abcd1,doghead,diman,masiania,songline,boogle,triston,deepika,sexy4me,grapple,spacebal,ebonee,winter0,smokewee,nargiza,dragonla,sassys,andy2000,menards,yoshio,massive1,suckmy1k,passat99,sexybo,nastya1996,isdead,stratcat,hokuto,infix,pidoras,daffyduck,cumhard,baldeagl,kerberos,yardman,shibainu,guitare,cqub6553,tommyy,bk.irf,bigfoo,hecto,july27,james4,biggus,esbjerg,isgod,1irish,phenmarr,jamaic,roma1990,diamond0,yjdbrjd,girls4me,tampa1,kabuto,vaduz,hanse,spieng,dianochka,csm101,lorna1,ogoshi,plhy6hql,2wsx4rfv,cameron0,adebayo,oleg1996,sharipov,bouboule,hollister1,frogss,yeababy,kablam,adelante,memem,howies,thering,cecilia1,onetwo12,ojp123456,jordan9,msorcloledbr,neveraga,evh5150,redwin,1august,canno,1mercede,moody1,mudbug,chessmas,tiikeri,stickdaddy77,alex15,kvartira,7654321a,lollol123,qwaszxedc,algore,solana,vfhbyfvfhbyf,blue72,misha1111,smoke20,junior13,mogli,threee,shannon2,fuckmylife,kevinh,saransk,karenw,isolde,sekirarr,orion123,thomas0,debra1,laketaho,alondra,curiva,jazz1234,1tigers,jambos,lickme2,suomi,gandalf7,028526,zygote,brett123,br1ttany,supafly,159000,kingrat,luton1,cool-ca,bocman,thomasd,skiller,katter,mama777,chanc,tomass,1rachel,oldno7,rfpfyjdf,bigkev,yelrah,primas,osito,kipper1,msvcr71,bigboy11,thesun,noskcaj,chicc,sonja1,lozinka,mobile1,1vader,ummagumma,waves1,punter12,tubgtn,server1,irina1991,magic69,dak001,pandemonium,dead1,berlingo,cherrypi,1montana,lohotron,chicklet,asdfgh123456,stepside,ikmvw103,icebaby,trillium,1sucks,ukrnet,glock9,ab12345,thepower,robert8,thugstools,hockey13,buffon,livefree,sexpics,dessar,ja0000,rosenrot,james10,1fish,svoloch,mykitty,muffin11,evbukb,shwing,artem1992,andrey1992,sheldon1,passpage,nikita99,fubar123,vannasx,eight888,marial,max2010,express2,violentj,2ykn5ccf,spartan11,brenda69,jackiech,abagail,robin2,grass1,andy76,bell1,taison,superme,vika1995,xtr451,fred20,89032073168,denis1984,2000jeep,weetabix,199020,daxter,tevion,panther8,h9iymxmc,bigrig,kalambur,tsalagi,12213443,racecar02,jeffrey4,nataxa,bigsam,purgator,acuracl,troutbum,potsmoke,jimmyz,manutd1,nytimes,pureevil,bearss,cool22,dragonage,nodnarb,dbrbyu,4seasons,freude,elric1,werule,hockey14,12758698,corkie,yeahright,blademan,tafkap,clave,liziko,hofner,jeffhardy,nurich,runne,stanisla,lucy1,monk3y,forzaroma,eric99,bonaire,blackwoo,fengshui,1qaz0okm,newmoney,pimpin69,07078,anonymer,laptop1,cherry12,ace111,salsa1,wilbur1,doom12,diablo23,jgtxzbhr,under1,honda01,breadfan,megan2,juancarlos,stratus1,ackbar,love5683,happytim,lambert1,cbljhtyrj,komarov,spam69,nfhtkrf,brownn,sarmat,ifiksr,spike69,hoangen,angelz,economia,tanzen,avogadro,1vampire,spanners,mazdarx,queequeg,oriana,hershil,sulaco,joseph11,8seconds,aquariu,cumberla,heather9,anthony8,burton12,crystal0,maria3,qazwsxc,snow123,notgood,198520,raindog,heehaw,consulta,dasein,miller01,cthulhu1,dukenuke,iubire,baytown,hatebree,198505,sistem,lena12,welcome01,maraca,middleto,sindhu,mitsou,phoenix5,vovan,donaldo,dylandog,domovoy,lauren12,byrjuybnj,123llll,stillers,sanchin,tulpan,smallvill,1mmmmm,patti1,folgers,mike31,colts18,123456rrr,njkmrjz,phoenix0,biene,ironcity,kasperok,password22,fitnes,matthew6,spotligh,bujhm123,tommycat,hazel5,guitar11,145678,vfcmrf,compass1,willee,1barney,jack2000,littleminge,shemp,derrek,xxx12345,littlefuck,spuds1,karolinka,camneely,qwertyu123,142500,brandon00,munson15,falcon3,passssap,z3cn2erv,goahead,baggio10,141592,denali1,37kazoo,copernic,123456789asd,orange88,bravada,rush211,197700,pablo123,uptheass,samsam1,demoman,mattylad10,heydude,mister2,werken,13467985,marantz,a22222,f1f2f3f4,fm12mn12,gerasimova,burrito1,sony1,glenny,baldeagle,rmfidd,fenomen,verbati,forgetme,5element,wer138,chanel1,ooicu812,10293847qp,minicooper,chispa,myturn,deisel,vthrehbq,boredboi4u,filatova,anabe,poiuyt1,barmalei,yyyy1,fourkids,naumenko,bangbros,pornclub,okaykk,euclid90,warrior3,kornet,palevo,patatina,gocart,antanta,jed1054,clock1,111111w,dewars,mankind1,peugeot406,liten,tahira,howlin,naumov,rmracing,corone,cunthole,passit,rock69,jaguarxj,bumsen,197101,sweet2,197010,whitecat,sawadee,money100,yfhrjnbrb,andyboy,9085603566,trace1,fagget,robot1,angel20,6yhn7ujm,specialinsta,kareena,newblood,chingada,boobies2,bugger1,squad51,133andre,call06,ashes1,ilovelucy,success2,kotton,cavalla,philou,deebee,theband,nine09,artefact,196100,kkkkkkk1,nikolay9,onelov,basia,emilyann,sadman,fkrjujkbr,teamomuch,david777,padrino,money21,firdaus,orion3,chevy01,albatro,erdfcv,2legit,sarah7,torock,kevinn,holio,soloy,enron714,starfleet,qwer11,neverman,doctorwh,lucy11,dino12,trinity7,seatleon,o123456,pimpman,1asdfgh,snakebit,chancho,prorok,bleacher,ramire,darkseed,warhorse,michael123,1spanky,1hotdog,34erdfcv,n0th1ng,dimanche,repmvbyf,michaeljackson,login1,icequeen,toshiro,sperme,racer2,veget,birthday26,daniel9,lbvekmrf,charlus,bryan123,wspanic,schreibe,1andonly,dgoins,kewell,apollo12,egypt1,fernie,tiger21,aa123456789,blowj,spandau,bisquit,12345678d,deadmau5,fredie,311420,happyface,samant,gruppa,filmstar,andrew17,bakesale,sexy01,justlook,cbarkley,paul11,bloodred,rideme,birdbath,nfkbcvfy,jaxson,sirius1,kristof,virgos,nimrod1,hardc0re,killerbee,1abcdef,pitcher1,justonce,vlada,dakota99,vespucci,wpass,outside1,puertori,rfvbkf,teamlosi,vgfun2,porol777,empire11,20091989q,jasong,webuivalidat,escrima,lakers08,trigger2,addpass,342500,mongini,dfhtybr,horndogg,palermo1,136900,babyblu,alla98,dasha2010,jkelly,kernow,yfnecz,rockhopper,toeman,tlaloc,silver77,dave01,kevinr,1234567887654321,135642,me2you,8096468644q,remmus,spider7,jamesa,jilly,samba1,drongo,770129ji,supercat,juntas,tema1234,esthe,1234567892000,drew11,qazqaz123,beegees,blome,rattrace,howhigh,tallboy,rufus2,sunny2,sou812,miller12,indiana7,irnbru,patch123,letmeon,welcome5,nabisco,9hotpoin,hpvteb,lovinit,stormin,assmonke,trill,atlanti,money1234,cubsfan,mello1,stars2,ueptkm,agate,dannym88,lover123,wordz,worldnet,julemand,chaser1,s12345678,pissword,cinemax,woodchuc,point1,hotchkis,packers2,bananana,kalender,420666,penguin8,awo8rx3wa8t,hoppie,metlife,ilovemyfamily,weihnachtsbau,pudding1,luckystr,scully1,fatboy1,amizade,dedham,jahbless,blaat,surrende,****er,1panties,bigasses,ghjuhfvbcn,asshole123,dfktyrb,likeme,nickers,plastik,hektor,deeman,muchacha,cerebro,santana5,testdrive,dracula1,canalc,l1750sq,savannah1,murena,1inside,pokemon00,1iiiiiii,jordan20,sexual1,mailliw,calipso,014702580369,1zzzzzz,1jjjjjj,break1,15253545,yomama1,katinka,kevin11,1ffffff,martijn,sslazio,daniel5,porno2,nosmas,leolion,jscript,15975312,pundai,kelli1,kkkddd,obafgkm,marmaris,lilmama,london123,rfhfnt,elgordo,talk87,daniel7,thesims3,444111,bishkek,afrika2002,toby22,1speedy,daishi,2children,afroman,qqqqwwww,oldskool,hawai,v55555,syndicat,pukimak,fanatik,tiger5,parker01,bri5kev6,timexx,wartburg,love55,ecosse,yelena03,madinina,highway1,uhfdbwfgf,karuna,buhjvfybz,wallie,46and2,khalif,europ,qaz123wsx456,bobbybob,wolfone,falloutboy,manning18,scuba10,schnuff,ihateyou1,lindam,sara123,popcor,fallengun,divine1,montblanc,qwerty8,rooney10,roadrage,bertie1,latinus,lexusis,rhfvfnjhcr,opelgt,hitme,agatka,1yamaha,dmfxhkju,imaloser,michell1,sb211st,silver22,lockedup,andrew9,monica01,sassycat,dsobwick,tinroof,ctrhtnyj,bultaco,rhfcyjzhcr,aaaassss,14ss88,joanne1,momanddad,ahjkjdf,yelhsa,zipdrive,telescop,500600,1sexsex,facial1,motaro,511647,stoner1,temujin,elephant1,greatman,honey69,kociak,ukqmwhj6,altezza,cumquat,zippos,kontiki,123max,altec1,bibigon,tontos,qazsew,nopasaran,militar,supratt,oglala,kobayash,agathe,yawetag,dogs1,cfiekmrf,megan123,jamesdea,porosenok,tiger23,berger1,hello11,seemann,stunner1,walker2,imissu,jabari,minfd,lollol12,hjvfy,1-oct,stjohns,2278124q,123456789qwer,alex1983,glowworm,chicho,mallards,bluedevil,explorer1,543211,casita,1time,lachesis,alex1982,airborn1,dubesor,changa,lizzie1,captaink,socool,bidule,march23,1861brr,k.ljxrf,watchout,fotze,1brian,keksa2,aaaa1122,matrim,providian,privado,dreame,merry1,aregdone,davidt,nounour,twenty2,play2win,artcast2,zontik,552255,shit1,sluggy,552861,dr8350,brooze,alpha69,thunder6,kamelia2011,caleb123,mmxxmm,jamesh,lfybkjd,125267,125000,124536,bliss1,dddsss,indonesi,bob69,123888,tgkbxfgy,gerar,themack,hijodeputa,good4now,ddd123,clk430,kalash,tolkien1,132forever,blackb,whatis,s1s2s3s4,lolkin09,yamahar,48n25rcc,djtiesto,111222333444555,bigbull,blade55,coolbree,kelse,ichwill,yamaha12,sakic,bebeto,katoom,donke,sahar,wahine,645202,god666,berni,starwood,june15,sonoio,time123,llbean,deadsoul,lazarev,cdtnf,ksyusha,madarchod,technik,jamesy,4speed,tenorsax,legshow,yoshi1,chrisbl,44e3ebda,trafalga,heather7,serafima,favorite4,havefun1,wolve,55555r,james13,nosredna,bodean,jlettier,borracho,mickael,marinus,brutu,sweet666,kiborg,rollrock,jackson6,macross1,ousooner,9085084232,takeme,123qwaszx,firedept,vfrfhjd,jackfros,123456789000,briane,cookie11,baby22,bobby18,gromova,systemofadown,martin01,silver01,pimaou,darthmaul,hijinx,commo,chech,skyman,sunse,2vrd6,vladimirovna,uthvfybz,nicole01,kreker,bobo1,v123456789,erxtgb,meetoo,drakcap,vfvf12,misiek1,butane,network2,flyers99,riogrand,jennyk,e12345,spinne,avalon11,lovejone,studen,maint,porsche2,qwerty100,chamberl,bluedog1,sungam,just4u,andrew23,summer22,ludic,musiclover,aguil,beardog1,libertin,pippo1,joselit,patito,bigberth,digler,sydnee,jockstra,poopo,jas4an,nastya123,profil,fuesse,default1,titan2,mendoz,kpcofgs,anamika,brillo021,bomberman,guitar69,latching,69pussy,blues2,phelge,ninja123,m7n56xo,qwertasd,alex1976,cunningh,estrela,gladbach,marillion,mike2000,258046,bypop,muffinman,kd5396b,zeratul,djkxbwf,john77,sigma2,1linda,selur,reppep,quartz1,teen1,freeclus,spook1,kudos4ever,clitring,sexiness,blumpkin,macbook,tileman,centra,escaflowne,pentable,shant,grappa,zverev,1albert,lommerse,coffee11,777123,polkilo,muppet1,alex74,lkjhgfdsazx,olesica,april14,ba25547,souths,jasmi,arashi,smile2,2401pedro,mybabe,alex111,quintain,pimp1,tdeir8b2,makenna,122333444455555,%e2%82%ac,tootsie1,pass111,zaqxsw123,gkfdfybt,cnfnbcnbrf,usermane,iloveyou12,hard69,osasuna,firegod,arvind,babochka,kiss123,cookie123,julie123,kamakazi,dylan2,223355,tanguy,nbhtqa,tigger13,tubby1,makavel,asdflkj,sambo1,mononoke,mickeys,gayguy,win123,green33,wcrfxtvgbjy,bigsmall,1newlife,clove,babyfac,bigwaves,mama1970,shockwav,1friday,bassey,yarddog,codered1,victory7,bigrick,kracker,gulfstre,chris200,sunbanna,bertuzzi,begemotik,kuolema,pondus,destinee,123456789zz,abiodun,flopsy,amadeusptfcor,geronim,yggdrasi,contex,daniel6,suck1,adonis1,moorea,el345612,f22raptor,moviebuf,raunchy,6043dkf,zxcvbnm123456789,eric11,deadmoin,ratiug,nosliw,fannies,danno,888889,blank1,mikey2,gullit,thor99,mamiya,ollieb,thoth,dagger1,websolutionssu,bonker,prive,1346798520,03038,q1234q,mommy2,contax,zhipo,gwendoli,gothic1,1234562000,lovedick,gibso,digital2,space199,b26354,987654123,golive,serious1,pivkoo,better1,824358553,794613258,nata1980,logout,fishpond,buttss,squidly,good4me,redsox19,jhonny,zse45rdx,matrixxx,honey12,ramina,213546879,motzart,fall99,newspape,killit,gimpy,photowiz,olesja,thebus,marco123,147852963,bedbug,147369258,hellbound,gjgjxrf,123987456,lovehurt,five55,hammer01,1234554321a,alina2011,peppino,ang238,questor,112358132,alina1994,alina1998,money77,bobjones,aigerim,cressida,madalena,420smoke,tinchair,raven13,mooser,mauric,lovebu,adidas69,krypton1,1111112,loveline,divin,voshod,michaelm,cocotte,gbkbuhbv,76689295,kellyj,rhonda1,sweetu70,steamforums,geeque,nothere,124c41,quixotic,steam181,1169900,rfcgthcrbq,rfvbkm,sexstuff,1231230,djctvm,rockstar1,fulhamfc,bhecbr,rfntyf,quiksilv,56836803,jedimaster,pangit,gfhjkm777,tocool,1237654,stella12,55378008,19216811,potte,fender12,mortalkombat,ball1,nudegirl,palace22,rattrap,debeers,lickpussy,jimmy6,not4u2c,wert12,bigjuggs,sadomaso,1357924,312mas,laser123,arminia,branford,coastie,mrmojo,19801982,scott11,banaan123,ingres,300zxtt,hooters6,sweeties,19821983,19831985,19833891,sinnfein,welcome4,winner69,killerman,tachyon,tigre1,nymets1,kangol,martinet,sooty1,19921993,789qwe,harsingh,1597535,thecount,phantom3,36985214,lukas123,117711,pakistan1,madmax11,willow01,19932916,fucker12,flhrci,opelagila,theword,ashley24,tigger3,crazyj,rapide,deadfish,allana,31359092,sasha1993,sanders2,discman,zaq!2wsx,boilerma,mickey69,jamesg,babybo,jackson9,orion7,alina2010,indien,breeze1,atease,warspite,bazongaz,1celtic,asguard,mygal,fitzgera,1secret,duke33,cyklone,dipascuc,potapov,1escobar2,c0l0rad0,kki177hk,1little,macondo,victoriya,peter7,red666,winston6,kl?benhavn,muneca,jackme,jennan,happylife,am4h39d8nh,bodybuil,201980,dutchie,biggame,lapo4ka,rauchen,black10,flaquit,water12,31021364,command2,lainth88,mazdamx5,typhon,colin123,rcfhlfc,qwaszx11,g0away,ramir,diesirae,hacked1,cessna1,woodfish,enigma2,pqnr67w5,odgez8j3,grisou,hiheels,5gtgiaxm,2580258,ohotnik,transits,quackers,serjik,makenzie,mdmgatew,bryana,superman12,melly,lokit,thegod,slickone,fun4all,netpass,penhorse,1cooper,nsync,asdasd22,otherside,honeydog,herbie1,chiphi,proghouse,l0nd0n,shagg,select1,frost1996,casper123,countr,magichat,greatzyo,jyothi,3bears,thefly,nikkita,fgjcnjk,nitros,hornys,san123,lightspe,maslova,kimber1,newyork2,spammm,mikejone,pumpk1n,bruiser1,bacons,prelude9,boodie,dragon4,kenneth2,love98,power5,yodude,pumba,thinline,blue30,sexxybj,2dumb2live,matt21,forsale,1carolin,innova,ilikeporn,rbgtkjd,a1s2d3f,wu9942,ruffus,blackboo,qwerty999,draco1,marcelin,hideki,gendalf,trevon,saraha,cartmen,yjhbkmcr,time2go,fanclub,ladder1,chinni,6942987,united99,lindac,quadra,paolit,mainstre,beano002,lincoln7,bellend,anomie,8520456,bangalor,goodstuff,chernov,stepashka,gulla,mike007,frasse,harley03,omnislash,8538622,maryjan,sasha2011,gineok,8807031,hornier,gopinath,princesit,bdr529,godown,bosslady,hakaone,1qwe2,madman1,joshua11,lovegame,bayamon,jedi01,stupid12,sport123,aaa666,tony44,collect1,charliem,chimaira,cx18ka,trrim777,chuckd,thedream,redsox99,goodmorning,delta88,iloveyou11,newlife2,figvam,chicago3,jasonk,12qwer,9875321,lestat1,satcom,conditio,capri50,sayaka,9933162,trunks1,chinga,snooch,alexand1,findus,poekie,cfdbyf,kevind,mike1969,fire13,leftie,bigtuna,chinnu,silence1,celos1,blackdra,alex24,gfgfif,2boobs,happy8,enolagay,sataniv1993,turner1,dylans,peugeo,sasha1994,hoppel,conno,moonshot,santa234,meister1,008800,hanako,tree123,qweras,gfitymrf,reggie31,august29,supert,joshua10,akademia,gbljhfc,zorro123,nathalia,redsox12,hfpdjl,mishmash,nokiae51,nyyankees,tu190022,strongbo,none1,not4u2no,katie2,popart,harlequi,santan,michal1,1therock,screwu,csyekmrf,olemiss1,tyrese,hoople,sunshin1,cucina,starbase,topshelf,fostex,california1,castle1,symantec,pippolo,babare,turntabl,1angela,moo123,ipvteb,gogolf,alex88,cycle1,maxie1,phase2,selhurst,furnitur,samfox,fromvermine,shaq34,gators96,captain2,delonge,tomatoe,bisous,zxcvbnma,glacius,pineapple1,cannelle,ganibal,mko09ijn,paraklast1974,hobbes12,petty43,artema,junior8,mylover,1234567890d,fatal1ty,prostreet,peruan,10020,nadya,caution1,marocas,chanel5,summer08,metal123,111lox,scrapy,thatguy,eddie666,washingto,yannis,minnesota_hp,lucky4,playboy6,naumova,azzurro,patat,dale33,pa55wd,speedster,zemanova,saraht,newto,tony22,qscesz,arkady,1oliver,death6,vkfwx046,antiflag,stangs,jzf7qf2e,brianp,fozzy,cody123,startrek1,yoda123,murciela,trabajo,lvbnhbtdf,canario,fliper,adroit,henry5,goducks,papirus,alskdj,soccer6,88mike,gogetter,tanelorn,donking,marky1,leedsu,badmofo,al1916,wetdog,akmaral,pallet,april24,killer00,nesterova,rugby123,coffee12,browseui,ralliart,paigow,calgary1,armyman,vtldtltd,frodo2,frxtgb,iambigal,benno,jaytee,2hot4you,askar,bigtee,brentwoo,palladin,eddie2,al1916w,horosho,entrada,ilovetits,venture1,dragon19,jayde,chuvak,jamesl,fzr600,brandon8,vjqvbh,snowbal,snatch1,bg6njokf,pudder,karolin,candoo,pfuflrf,satchel1,manteca,khongbiet,critter1,partridg,skyclad,bigdon,ginger69,brave1,anthony4,spinnake,chinadol,passout,cochino,nipples1,15058,lopesk,sixflags,lloo999,parkhead,breakdance,cia123,fidodido,yuitre12,fooey,artem1995,gayathri,medin,nondriversig,l12345,bravo7,happy13,kazuya,camster,alex1998,luckyy,zipcode,dizzle,boating1,opusone,newpassw,movies23,kamikazi,zapato,bart316,cowboys0,corsair1,kingshit,hotdog12,rolyat,h200svrm,qwerty4,boofer,rhtyltkm,chris999,vaz21074,simferopol,pitboss,love3,britania,tanyshka,brause,123qwerty123,abeille,moscow1,ilkaev,manut,process1,inetcfg,dragon05,fortknox,castill,rynner,mrmike,koalas,jeebus,stockpor,longman,juanpabl,caiman,roleplay,jeremi,26058,prodojo,002200,magical1,black5,bvlgari,doogie1,cbhtqa,mahina,a1s2d3f4g5h6,jblpro,usmc01,bismilah,guitar01,april9,santana1,1234aa,monkey14,sorokin,evan1,doohan,animalsex,pfqxtyjr,dimitry,catchme,chello,silverch,glock45,dogleg,litespee,nirvana9,peyton18,alydar,warhamer,iluvme,sig229,minotavr,lobzik,jack23,bushwack,onlin,football123,joshua5,federov,winter2,bigmax,fufnfrhbcnb,hfpldfnhb,1dakota,f56307,chipmonk,4nick8,praline,vbhjh123,king11,22tango,gemini12,street1,77879,doodlebu,homyak,165432,chuluthu,trixi,karlito,salom,reisen,cdtnkzxjr,pookie11,tremendo,shazaam,welcome0,00000ty,peewee51,pizzle,gilead,bydand,sarvar,upskirt,legends1,freeway1,teenfuck,ranger9,darkfire,dfymrf,hunt0802,justme1,buffy1ma,1harry,671fsa75yt,burrfoot,budster,pa437tu,jimmyp,alina2006,malacon,charlize,elway1,free12,summer02,gadina,manara,gomer1,1cassie,sanja,kisulya,money3,pujols,ford50,midiland,turga,orange6,demetriu,freakboy,orosie1,radio123,open12,vfufpby,mustek,chris33,animes,meiling,nthtvjr,jasmine9,gfdkjd,oligarh,marimar,chicago9,.kzirf,bugssgub,samuraix,jackie01,pimpjuic,macdad,cagiva,vernost,willyboy,fynjyjdf,tabby1,privet123,torres9,retype,blueroom,raven11,q12we3,alex1989,bringiton,ridered,kareltje,ow8jtcs8t,ciccia,goniners,countryb,24688642,covingto,24861793,beyblade,vikin,badboyz,wlafiga,walstib,mirand,needajob,chloes,balaton,kbpfdtnf,freyja,bond9007,gabriel12,stormbri,hollage,love4eve,fenomeno,darknite,dragstar,kyle123,milfhunter,ma123123123,samia,ghislain,enrique1,ferien12,xjy6721,natalie2,reglisse,wilson2,wesker,rosebud7,amazon1,robertr,roykeane,xtcnth,mamatata,crazyc,mikie,savanah,blowjob69,jackie2,forty1,1coffee,fhbyjxrf,bubbah,goteam,hackedit,risky1,logoff,h397pnvr,buck13,robert23,bronc,st123st,godflesh,pornog,iamking,cisco69,septiembr,dale38,zhongguo,tibbar,panther9,buffa1,bigjohn1,mypuppy,vehvfycr,april16,shippo,fire1234,green15,q123123,gungadin,steveg,olivier1,chinaski,magnoli,faithy,storm12,toadfrog,paul99,78791,august20,automati,squirtle,cheezy,positano,burbon,nunya,llebpmac,kimmi,turtle2,alan123,prokuror,violin1,durex,pussygal,visionar,trick1,chicken6,29024,plowboy,rfybreks,imbue,sasha13,wagner1,vitalogy,cfymrf,thepro,26028,gorbunov,dvdcom,letmein5,duder,fastfun,pronin,libra1,conner1,harley20,stinker1,20068,20038,amitech,syoung,dugway,18068,welcome7,jimmypag,anastaci,kafka1,pfhfnecnhf,catsss,campus100,shamal,nacho1,fire12,vikings2,brasil1,rangerover,mohamma,peresvet,14058,cocomo,aliona,14038,qwaser,vikes,cbkmdf,skyblue1,ou81234,goodlove,dfkmltvfh,108888,roamer,pinky2,static1,zxcv4321,barmen,rock22,shelby2,morgans,1junior,pasword1,logjam,fifty5,nhfrnjhbcn,chaddy,philli,nemesis2,ingenier,djkrjd,ranger3,aikman8,knothead,daddy69,love007,vsythb,ford350,tiger00,renrut,owen11,energy12,march14,alena123,robert19,carisma,orange22,murphy11,podarok,prozak,kfgeirf,wolf13,lydia1,shazza,parasha,akimov,tobbie,pilote,heather4,baster,leones,gznfxjr,megama,987654321g,bullgod,boxster1,minkey,wombats,vergil,colegiata,lincol,smoothe,pride1,carwash1,latrell,bowling3,fylhtq123,pickwick,eider,bubblebox,bunnies1,loquit,slipper1,nutsac,purina,xtutdfhf,plokiju,1qazxs,uhjpysq,zxcvbasdfg,enjoy1,1pumpkin,phantom7,mama22,swordsma,wonderbr,dogdays,milker,u23456,silvan,dfkthbr,slagelse,yeahman,twothree,boston11,wolf100,dannyg,troll1,fynjy123,ghbcnfd,bftest,ballsdeep,bobbyorr,alphasig,cccdemo,fire123,norwest,claire2,august10,lth1108,problemas,sapito,alex06,1rusty,maccom,goirish1,ohyes,bxdumb,nabila,boobear1,rabbit69,princip,alexsander,travail,chantal1,dogggy,greenpea,diablo69,alex2009,bergen09,petticoa,classe,ceilidh,vlad2011,kamakiri,lucidity,qaz321,chileno,cexfhf,99ranger,mcitra,estoppel,volvos60,carter80,webpass,temp12,touareg,fcgbhby,bubba8,sunitha,200190ru,bitch2,shadow23,iluvit,nicole0,ruben1,nikki69,butttt,shocker1,souschef,lopotok01,kantot,corsano,cfnfyf,riverat,makalu,swapna,all4u9,cdtnkfy,ntktgepbr,ronaldo99,thomasj,bmw540i,chrisw,boomba,open321,z1x2c3v4b5n6m7,gaviota,iceman44,frosya,chris100,chris24,cosette,clearwat,micael,boogyman,pussy9,camus1,chumpy,heccrbq,konoplya,chester8,scooter5,ghjgfufylf,giotto,koolkat,zero000,bonita1,ckflrbq,j1964,mandog,18n28n24a,renob,head1,shergar,ringo123,tanita,sex4free,johnny12,halberd,reddevils,biolog,dillinge,fatb0y,c00per,hyperlit,wallace2,spears1,vitamine,buheirf,sloboda,alkash,mooman,marion1,arsenal7,sunder,nokia5610,edifier,pippone,fyfnjkmtdbx,fujimo,pepsi12,kulikova,bolat,duetto,daimon,maddog01,timoshka,ezmoney,desdemon,chesters,aiden,hugues,patrick5,aikman08,robert4,roenick,nyranger,writer1,36169544,foxmulder,118801,kutter,shashank,jamjar,118811,119955,aspirina,dinkus,1sailor,nalgene,19891959,snarf,allie1,cracky,resipsa,45678912,kemerovo,19841989,netware1,alhimik,19801984,nicole123,19761977,51501984,malaka1,montella,peachfuz,jethro1,cypress1,henkie,holdon,esmith,55443322,1friend,quique,bandicoot,statistika,great123,death13,ucht36,master4,67899876,bobsmith,nikko1,jr1234,hillary1,78978978,rsturbo,lzlzdfcz,bloodlust,shadow00,skagen,bambina,yummies,88887777,91328378,matthew4,itdoes,98256518,102938475,alina2002,123123789,fubared,dannys,123456321,nikifor,suck69,newmexico,scubaman,rhbcnb,fifnfy,puffdadd,159357852,dtheyxbr,theman22,212009164,prohor,shirle,nji90okm,newmedia,goose5,roma1995,letssee,iceman11,aksana,wirenut,pimpdady,1212312121,tamplier,pelican1,domodedovo,1928374655,fiction6,duckpond,ybrecz,thwack,onetwo34,gunsmith,murphydo,fallout1,spectre1,jabberwo,jgjesq,turbo6,bobo12,redryder,blackpus,elena1971,danilova,antoin,bobo1234,bobob,bobbobbo,dean1,222222a,jesusgod,matt23,musical1,darkmage,loppol,werrew,josepha,rebel12,toshka,gadfly,hawkwood,alina12,dnomyar,sexaddict,dangit,cool23,yocrack,archimed,farouk,nhfkzkz,lindalou,111zzzzz,ghjatccjh,wethepeople,m123456789,wowsers,kbkbxrf,bulldog5,m_roesel,sissinit,yamoon6,123ewqasd,dangel,miruvor79,kaytee,falcon7,bandit11,dotnet,dannii,arsenal9,miatamx5,1trouble,strip4me,dogpile,sexyred1,rjdfktdf,google10,shortman,crystal7,awesome123,cowdog,haruka,birthday28,jitter,diabolik,boomer12,dknight,bluewate,hockey123,crm0624,blueboys,willy123,jumpup,google2,cobra777,llabesab,vicelord,hopper1,gerryber,remmah,j10e5d4,qqqqqqw,agusti,fre_ak8yj,nahlik,redrobin,scott3,epson1,dumpy,bundao,aniolek,hola123,jergens,itsasecret,maxsam,bluelight,mountai1,bongwater,1london,pepper14,freeuse,dereks,qweqw,fordgt40,rfhfdfy,raider12,hunnybun,compac,splicer,megamon,tuffgong,gymnast1,butter11,modaddy,wapbbs_1,dandelio,soccer77,ghjnbdjcnjzybt,123xyi2,fishead,x002tp00,whodaman,555aaa,oussama,brunodog,technici,pmtgjnbl,qcxdw8ry,schweden,redsox3,throbber,collecto,japan10,dbm123dm,hellhoun,tech1,deadzone,kahlan,wolf123,dethklok,xzsawq,bigguy1,cybrthc,chandle,buck01,qq123123,secreta,williams1,c32649135,delta12,flash33,123joker,spacejam,polopo,holycrap,daman1,tummybed,financia,nusrat,euroline,magicone,jimkirk,ameritec,daniel26,sevenn,topazz,kingpins,dima1991,macdog,spencer5,oi812,geoffre,music11,baffle,123569,usagi,cassiope,polla,lilcrowe,thecakeisalie,vbhjndjhtw,vthokies,oldmans,sophie01,ghoster,penny2,129834,locutus1,meesha,magik,jerry69,daddysgirl,irondesk,andrey12,jasmine123,vepsrfyn,likesdick,1accord,jetboat,grafix,tomuch,showit,protozoa,mosias98,taburetka,blaze420,esenin,anal69,zhv84kv,puissant,charles0,aishwarya,babylon6,bitter1,lenina,raleigh1,lechat,access01,kamilka,fynjy,sparkplu,daisy3112,choppe,zootsuit,1234567j,rubyrose,gorilla9,nightshade,alternativa,cghfdjxybr,snuggles1,10121v,vova1992,leonardo1,dave2,matthewd,vfhfnbr,1986mets,nobull,bacall,mexican1,juanjo,mafia1,boomer22,soylent,edwards1,jordan10,blackwid,alex86,gemini13,lunar2,dctvcjcfnm,malaki,plugger,eagles11,snafu2,1shelly,cintaku,hannah22,tbird1,maks5843,irish88,homer22,amarok,fktrcfylhjdf,lincoln2,acess,gre69kik,need4speed,hightech,core2duo,blunt1,ublhjgjybrf,dragon33,1autopas,autopas1,wwww1,15935746,daniel20,2500aa,massim,1ggggggg,96ford,hardcor1,cobra5,blackdragon,vovan_lt,orochimaru,hjlbntkb,qwertyuiop12,tallen,paradoks,frozenfish,ghjuhfvvbcn,gerri1,nuggett,camilit,doright,trans1,serena1,catch2,bkmyeh,fireston,afhvfwtdn,purple3,figure8,fuckya,scamp1,laranja,ontheoutside,louis123,yellow7,moonwalk,mercury2,tolkein,raide,amenra,a13579,dranreb,5150vh,harish,tracksta,sexking,ozzmosis,katiee,alomar,matrix19,headroom,jahlove,ringding,apollo8,132546,132613,12345672000,saretta,135798,136666,thomas7,136913,onetwothree,hockey33,calida,nefertit,bitwise,tailhook,boop4,kfgecbr,bujhmbujhm,metal69,thedark,meteoro,felicia1,house12,tinuviel,istina,vaz2105,pimp13,toolfan,nina1,tuesday2,maxmotives,lgkp500,locksley,treech,darling1,kurama,aminka,ramin,redhed,dazzler,jager1,stpiliot,cardman,rfvtym,cheeser,14314314,paramoun,samcat,plumpy,stiffie,vsajyjr,panatha,qqq777,car12345,098poi,asdzx,keegan1,furelise,kalifornia,vbhjckfd,beast123,zcfvfzkexifz,harry5,1birdie,96328i,escola,extra330,henry12,gfhfyjqz,14u2nv,max1234,templar1,1dave,02588520,catrin,pangolin,marhaba,latin1,amorcito,dave22,escape1,advance1,yasuhiro,grepw,meetme,orange01,ernes,erdna,zsergn,nautica1,justinb,soundwav,miasma,greg78,nadine1,sexmad,lovebaby,promo1,excel1,babys,dragonma,camry1,sonnenschein,farooq,wazzkaprivet,magal,katinas,elvis99,redsox24,rooney1,chiefy,peggys,aliev,pilsung,mudhen,dontdoit,dennis12,supercal,energia,ballsout,funone,claudiu,brown2,amoco,dabl1125,philos,gjdtkbntkm,servette,13571113,whizzer,nollie,13467982,upiter,12string,bluejay1,silkie,william4,kosta1,143333,connor12,sustanon,06068,corporat,ssnake,laurita,king10,tahoes,arsenal123,sapato,charless,jeanmarc,levent,algerie,marine21,jettas,winsome,dctvgbplf,1701ab,xxxp455w0rd5,lllllll1,ooooooo1,monalis,koufax32,anastasya,debugger,sarita2,jason69,ufkxjyjr,gjlcnfdf,1jerry,daniel10,balinor,sexkitten,death2,qwertasdfgzxcvb,s9te949f,vegeta1,sysman,maxxam,dimabilan,mooose,ilovetit,june23,illest,doesit,mamou,abby12,longjump,transalp,moderato,littleguy,magritte,dilnoza,hawaiiguy,winbig,nemiroff,kokaine,admira,myemail,dream2,browneyes,destiny7,dragonss,suckme1,asa123,andranik,suckem,fleshbot,dandie,timmys,scitra,timdog,hasbeen,guesss,smellyfe,arachne,deutschl,harley88,birthday27,nobody1,papasmur,home1,jonass,bunia3,epatb1,embalm,vfvekmrf,apacer,12345656,estreet,weihnachtsbaum,mrwhite,admin12,kristie1,kelebek,yoda69,socken,tima123,bayern1,fktrcfylth,tamiya,99strenght,andy01,denis2011,19delta,stokecit,aotearoa,stalker2,nicnac,conrad1,popey,agusta,bowl36,1bigfish,mossyoak,1stunner,getinnow,jessejames,gkfnjy,drako,1nissan,egor123,hotness,1hawaii,zxc123456,cantstop,1peaches,madlen,west1234,jeter1,markis,judit,attack1,artemi,silver69,153246,crazy2,green9,yoshimi,1vette,chief123,jasper2,1sierra,twentyon,drstrang,aspirant,yannic,jenna123,bongtoke,slurpy,1sugar,civic97,rusty21,shineon,james19,anna12345,wonderwoman,1kevin,karol1,kanabis,wert21,fktif6115,evil1,kakaha,54gv768,826248s,tyrone1,1winston,sugar2,falcon01,adelya,mopar440,zasxcd,leecher,kinkysex,mercede1,travka,11234567,rebon,geekboy".split(","),
54801english_wikipedia:"the,of,and,in,was,is,for,as,on,with,by,he,at,from,his,an,were,are,which,doc,https,also,or,has,had,first,one,their,its,after,new,who,they,two,her,she,been,other,when,time,during,there,into,school,more,may,years,over,only,year,most,would,world,city,some,where,between,later,three,state,such,then,national,used,made,known,under,many,university,united,while,part,season,team,these,american,than,film,second,born,south,became,states,war,through,being,including,both,before,north,high,however,people,family,early,history,album,area,them,series,against,until,since,district,county,name,work,life,group,music,following,number,company,several,four,called,played,released,career,league,game,government,house,each,based,day,same,won,use,station,club,international,town,located,population,general,college,east,found,age,march,end,september,began,home,public,church,line,june,river,member,system,place,century,band,july,york,january,october,song,august,best,former,british,party,named,held,village,show,local,november,took,service,december,built,another,major,within,along,members,five,single,due,although,small,old,left,final,large,include,building,served,president,received,games,death,february,main,third,set,children,own,order,species,park,law,air,published,road,died,book,men,women,army,often,according,education,central,country,division,english,top,included,development,french,community,among,water,play,side,list,times,near,late,form,original,different,center,power,led,students,german,moved,court,six,land,council,island,u.s.,record,million,research,art,established,award,street,military,television,given,region,support,western,production,non,political,point,cup,period,business,title,started,various,election,using,england,role,produced,become,program,works,field,total,office,class,written,association,radio,union,level,championship,director,few,force,created,department,founded,services,married,though,per,n't,site,open,act,short,society,version,royal,present,northern,worked,professional,full,returned,joined,story,france,european,currently,language,social,california,india,days,design,st.,further,round,australia,wrote,san,project,control,southern,railway,board,popular,continued,free,battle,considered,video,common,position,living,half,playing,recorded,red,post,described,average,records,special,modern,appeared,announced,areas,rock,release,elected,others,example,term,opened,similar,formed,route,census,current,schools,originally,lake,developed,race,himself,forces,addition,information,upon,province,match,event,songs,result,events,win,eastern,track,lead,teams,science,human,construction,minister,germany,awards,available,throughout,training,style,body,museum,australian,health,seven,signed,chief,eventually,appointed,sea,centre,debut,tour,points,media,light,range,character,across,features,families,largest,indian,network,less,performance,players,refer,europe,sold,festival,usually,taken,despite,designed,committee,process,return,official,episode,institute,stage,followed,performed,japanese,personal,thus,arts,space,low,months,includes,china,study,middle,magazine,leading,japan,groups,aircraft,featured,federal,civil,rights,model,coach,canadian,books,remained,eight,type,independent,completed,capital,academy,instead,kingdom,organization,countries,studies,competition,sports,size,above,section,finished,gold,involved,reported,management,systems,industry,directed,market,fourth,movement,technology,bank,ground,campaign,base,lower,sent,rather,added,provided,coast,grand,historic,valley,conference,bridge,winning,approximately,films,chinese,awarded,degree,russian,shows,native,female,replaced,municipality,square,studio,medical,data,african,successful,mid,bay,attack,previous,operations,spanish,theatre,student,republic,beginning,provide,ship,primary,owned,writing,tournament,culture,introduced,texas,related,natural,parts,governor,reached,ireland,units,senior,decided,italian,whose,higher,africa,standard,income,professor,placed,regional,los,buildings,championships,active,novel,energy,generally,interest,via,economic,previously,stated,itself,channel,below,operation,leader,traditional,trade,structure,limited,runs,prior,regular,famous,saint,navy,foreign,listed,artist,catholic,airport,results,parliament,collection,unit,officer,goal,attended,command,staff,commission,lived,location,plays,commercial,places,foundation,significant,older,medal,self,scored,companies,highway,activities,programs,wide,musical,notable,library,numerous,paris,towards,individual,allowed,plant,property,annual,contract,whom,highest,initially,required,earlier,assembly,artists,rural,seat,practice,defeated,ended,soviet,length,spent,manager,press,associated,author,issues,additional,characters,lord,zealand,policy,engine,township,noted,historical,complete,financial,religious,mission,contains,nine,recent,represented,pennsylvania,administration,opening,secretary,lines,report,executive,youth,closed,theory,writer,italy,angeles,appearance,feature,queen,launched,legal,terms,entered,issue,edition,singer,greek,majority,background,source,anti,cultural,complex,changes,recording,stadium,islands,operated,particularly,basketball,month,uses,port,castle,mostly,names,fort,selected,increased,status,earth,subsequently,pacific,cover,variety,certain,goals,remains,upper,congress,becoming,studied,irish,nature,particular,loss,caused,chart,dr.,forced,create,era,retired,material,review,rate,singles,referred,larger,individuals,shown,provides,products,speed,democratic,poland,parish,olympics,cities,themselves,temple,wing,genus,households,serving,cost,wales,stations,passed,supported,view,cases,forms,actor,male,matches,males,stars,tracks,females,administrative,median,effect,biography,train,engineering,camp,offered,chairman,houses,mainly,19th,surface,therefore,nearly,score,ancient,subject,prime,seasons,claimed,experience,specific,jewish,failed,overall,believed,plot,troops,greater,spain,consists,broadcast,heavy,increase,raised,separate,campus,1980s,appears,presented,lies,composed,recently,influence,fifth,nations,creek,references,elections,britain,double,cast,meaning,earned,carried,producer,latter,housing,brothers,attempt,article,response,border,remaining,nearby,direct,ships,value,workers,politician,academic,label,1970s,commander,rule,fellow,residents,authority,editor,transport,dutch,projects,responsible,covered,territory,flight,races,defense,tower,emperor,albums,facilities,daily,stories,assistant,managed,primarily,quality,function,proposed,distribution,conditions,prize,journal,code,vice,newspaper,corps,highly,constructed,mayor,critical,secondary,corporation,rugby,regiment,ohio,appearances,serve,allow,nation,multiple,discovered,directly,scene,levels,growth,elements,acquired,1990s,officers,physical,20th,latin,host,jersey,graduated,arrived,issued,literature,metal,estate,vote,immediately,quickly,asian,competed,extended,produce,urban,1960s,promoted,contemporary,global,formerly,appear,industrial,types,opera,ministry,soldiers,commonly,mass,formation,smaller,typically,drama,shortly,density,senate,effects,iran,polish,prominent,naval,settlement,divided,basis,republican,languages,distance,treatment,continue,product,mile,sources,footballer,format,clubs,leadership,initial,offers,operating,avenue,officially,columbia,grade,squadron,fleet,percent,farm,leaders,agreement,likely,equipment,website,mount,grew,method,transferred,intended,renamed,iron,asia,reserve,capacity,politics,widely,activity,advanced,relations,scottish,dedicated,crew,founder,episodes,lack,amount,build,efforts,concept,follows,ordered,leaves,positive,economy,entertainment,affairs,memorial,ability,illinois,communities,color,text,railroad,scientific,focus,comedy,serves,exchange,environment,cars,direction,organized,firm,description,agency,analysis,purpose,destroyed,reception,planned,revealed,infantry,architecture,growing,featuring,household,candidate,removed,situated,models,knowledge,solo,technical,organizations,assigned,conducted,participated,largely,purchased,register,gained,combined,headquarters,adopted,potential,protection,scale,approach,spread,independence,mountains,titled,geography,applied,safety,mixed,accepted,continues,captured,rail,defeat,principal,recognized,lieutenant,mentioned,semi,owner,joint,liberal,actress,traffic,creation,basic,notes,unique,supreme,declared,simply,plants,sales,massachusetts,designated,parties,jazz,compared,becomes,resources,titles,concert,learning,remain,teaching,versions,content,alongside,revolution,sons,block,premier,impact,champions,districts,generation,estimated,volume,image,sites,account,roles,sport,quarter,providing,zone,yard,scoring,classes,presence,performances,representatives,hosted,split,taught,origin,olympic,claims,critics,facility,occurred,suffered,municipal,damage,defined,resulted,respectively,expanded,platform,draft,opposition,expected,educational,ontario,climate,reports,atlantic,surrounding,performing,reduced,ranked,allows,birth,nominated,younger,newly,kong,positions,theater,philadelphia,heritage,finals,disease,sixth,laws,reviews,constitution,tradition,swedish,theme,fiction,rome,medicine,trains,resulting,existing,deputy,environmental,labour,classical,develop,fans,granted,receive,alternative,begins,nuclear,fame,buried,connected,identified,palace,falls,letters,combat,sciences,effort,villages,inspired,regions,towns,conservative,chosen,animals,labor,attacks,materials,yards,steel,representative,orchestra,peak,entitled,officials,returning,reference,northwest,imperial,convention,examples,ocean,publication,painting,subsequent,frequently,religion,brigade,fully,sides,acts,cemetery,relatively,oldest,suggested,succeeded,achieved,application,programme,cells,votes,promotion,graduate,armed,supply,flying,communist,figures,literary,netherlands,korea,worldwide,citizens,1950s,faculty,draw,stock,seats,occupied,methods,unknown,articles,claim,holds,authorities,audience,sweden,interview,obtained,covers,settled,transfer,marked,allowing,funding,challenge,southeast,unlike,crown,rise,portion,transportation,sector,phase,properties,edge,tropical,standards,institutions,philosophy,legislative,hills,brand,fund,conflict,unable,founding,refused,attempts,metres,permanent,starring,applications,creating,effective,aired,extensive,employed,enemy,expansion,billboard,rank,battalion,multi,vehicle,fought,alliance,category,perform,federation,poetry,bronze,bands,entry,vehicles,bureau,maximum,billion,trees,intelligence,greatest,screen,refers,commissioned,gallery,injury,confirmed,setting,treaty,adult,americans,broadcasting,supporting,pilot,mobile,writers,programming,existence,squad,minnesota,copies,korean,provincial,sets,defence,offices,agricultural,internal,core,northeast,retirement,factory,actions,prevent,communications,ending,weekly,containing,functions,attempted,interior,weight,bowl,recognition,incorporated,increasing,ultimately,documentary,derived,attacked,lyrics,mexican,external,churches,centuries,metropolitan,selling,opposed,personnel,mill,visited,presidential,roads,pieces,norwegian,controlled,18th,rear,influenced,wrestling,weapons,launch,composer,locations,developing,circuit,specifically,studios,shared,canal,wisconsin,publishing,approved,domestic,consisted,determined,comic,establishment,exhibition,southwest,fuel,electronic,cape,converted,educated,melbourne,hits,wins,producing,norway,slightly,occur,surname,identity,represent,constituency,funds,proved,links,structures,athletic,birds,contest,users,poet,institution,display,receiving,rare,contained,guns,motion,piano,temperature,publications,passenger,contributed,toward,cathedral,inhabitants,architect,exist,athletics,muslim,courses,abandoned,signal,successfully,disambiguation,tennessee,dynasty,heavily,maryland,jews,representing,budget,weather,missouri,introduction,faced,pair,chapel,reform,height,vietnam,occurs,motor,cambridge,lands,focused,sought,patients,shape,invasion,chemical,importance,communication,selection,regarding,homes,voivodeship,maintained,borough,failure,aged,passing,agriculture,oregon,teachers,flow,philippines,trail,seventh,portuguese,resistance,reaching,negative,fashion,scheduled,downtown,universities,trained,skills,scenes,views,notably,typical,incident,candidates,engines,decades,composition,commune,chain,inc.,austria,sale,values,employees,chamber,regarded,winners,registered,task,investment,colonial,swiss,user,entirely,flag,stores,closely,entrance,laid,journalist,coal,equal,causes,turkish,quebec,techniques,promote,junction,easily,dates,kentucky,singapore,residence,violence,advance,survey,humans,expressed,passes,streets,distinguished,qualified,folk,establish,egypt,artillery,visual,improved,actual,finishing,medium,protein,switzerland,productions,operate,poverty,neighborhood,organisation,consisting,consecutive,sections,partnership,extension,reaction,factor,costs,bodies,device,ethnic,racial,flat,objects,chapter,improve,musicians,courts,controversy,membership,merged,wars,expedition,interests,arab,comics,gain,describes,mining,bachelor,crisis,joining,decade,1930s,distributed,habitat,routes,arena,cycle,divisions,briefly,vocals,directors,degrees,object,recordings,installed,adjacent,demand,voted,causing,businesses,ruled,grounds,starred,drawn,opposite,stands,formal,operates,persons,counties,compete,wave,israeli,ncaa,resigned,brief,greece,combination,demographics,historian,contain,commonwealth,musician,collected,argued,louisiana,session,cabinet,parliamentary,electoral,loan,profit,regularly,conservation,islamic,purchase,17th,charts,residential,earliest,designs,paintings,survived,moth,items,goods,grey,anniversary,criticism,images,discovery,observed,underground,progress,additionally,participate,thousands,reduce,elementary,owners,stating,iraq,resolution,capture,tank,rooms,hollywood,finance,queensland,reign,maintain,iowa,landing,broad,outstanding,circle,path,manufacturing,assistance,sequence,gmina,crossing,leads,universal,shaped,kings,attached,medieval,ages,metro,colony,affected,scholars,oklahoma,coastal,soundtrack,painted,attend,definition,meanwhile,purposes,trophy,require,marketing,popularity,cable,mathematics,mississippi,represents,scheme,appeal,distinct,factors,acid,subjects,roughly,terminal,economics,senator,diocese,prix,contrast,argentina,czech,wings,relief,stages,duties,16th,novels,accused,whilst,equivalent,charged,measure,documents,couples,request,danish,defensive,guide,devices,statistics,credited,tries,passengers,allied,frame,puerto,peninsula,concluded,instruments,wounded,differences,associate,forests,afterwards,replace,requirements,aviation,solution,offensive,ownership,inner,legislation,hungarian,contributions,actors,translated,denmark,steam,depending,aspects,assumed,injured,severe,admitted,determine,shore,technique,arrival,measures,translation,debuted,delivered,returns,rejected,separated,visitors,damaged,storage,accompanied,markets,industries,losses,gulf,charter,strategy,corporate,socialist,somewhat,significantly,physics,mounted,satellite,experienced,constant,relative,pattern,restored,belgium,connecticut,partners,harvard,retained,networks,protected,mode,artistic,parallel,collaboration,debate,involving,journey,linked,salt,authors,components,context,occupation,requires,occasionally,policies,tamil,ottoman,revolutionary,hungary,poem,versus,gardens,amongst,audio,makeup,frequency,meters,orthodox,continuing,suggests,legislature,coalition,guitarist,eighth,classification,practices,soil,tokyo,instance,limit,coverage,considerable,ranking,colleges,cavalry,centers,daughters,twin,equipped,broadway,narrow,hosts,rates,domain,boundary,arranged,12th,whereas,brazilian,forming,rating,strategic,competitions,trading,covering,baltimore,commissioner,infrastructure,origins,replacement,praised,disc,collections,expression,ukraine,driven,edited,austrian,solar,ensure,premiered,successor,wooden,operational,hispanic,concerns,rapid,prisoners,childhood,meets,influential,tunnel,employment,tribe,qualifying,adapted,temporary,celebrated,appearing,increasingly,depression,adults,cinema,entering,laboratory,script,flows,romania,accounts,fictional,pittsburgh,achieve,monastery,franchise,formally,tools,newspapers,revival,sponsored,processes,vienna,springs,missions,classified,13th,annually,branches,lakes,gender,manner,advertising,normally,maintenance,adding,characteristics,integrated,decline,modified,strongly,critic,victims,malaysia,arkansas,nazi,restoration,powered,monument,hundreds,depth,15th,controversial,admiral,criticized,brick,honorary,initiative,output,visiting,birmingham,progressive,existed,carbon,1920s,credits,colour,rising,hence,defeating,superior,filmed,listing,column,surrounded,orleans,principles,territories,struck,participation,indonesia,movements,index,commerce,conduct,constitutional,spiritual,ambassador,vocal,completion,edinburgh,residing,tourism,finland,bears,medals,resident,themes,visible,indigenous,involvement,basin,electrical,ukrainian,concerts,boats,styles,processing,rival,drawing,vessels,experimental,declined,touring,supporters,compilation,coaching,cited,dated,roots,string,explained,transit,traditionally,poems,minimum,representation,14th,releases,effectively,architectural,triple,indicated,greatly,elevation,clinical,printed,10th,proposal,peaked,producers,romanized,rapidly,stream,innings,meetings,counter,householder,honour,lasted,agencies,document,exists,surviving,experiences,honors,landscape,hurricane,harbor,panel,competing,profile,vessel,farmers,lists,revenue,exception,customers,11th,participants,wildlife,utah,bible,gradually,preserved,replacing,symphony,begun,longest,siege,provinces,mechanical,genre,transmission,agents,executed,videos,benefits,funded,rated,instrumental,ninth,similarly,dominated,destruction,passage,technologies,thereafter,outer,facing,affiliated,opportunities,instrument,governments,scholar,evolution,channels,shares,sessions,widespread,occasions,engineers,scientists,signing,battery,competitive,alleged,eliminated,supplies,judges,hampshire,regime,portrayed,penalty,taiwan,denied,submarine,scholarship,substantial,transition,victorian,http,nevertheless,filed,supports,continental,tribes,ratio,doubles,useful,honours,blocks,principle,retail,departure,ranks,patrol,yorkshire,vancouver,inter,extent,afghanistan,strip,railways,component,organ,symbol,categories,encouraged,abroad,civilian,periods,traveled,writes,struggle,immediate,recommended,adaptation,egyptian,graduating,assault,drums,nomination,historically,voting,allies,detailed,achievement,percentage,arabic,assist,frequent,toured,apply,and/or,intersection,maine,touchdown,throne,produces,contribution,emerged,obtain,archbishop,seek,researchers,remainder,populations,clan,finnish,overseas,fifa,licensed,chemistry,festivals,mediterranean,injuries,animated,seeking,publisher,volumes,limits,venue,jerusalem,generated,trials,islam,youngest,ruling,glasgow,germans,songwriter,persian,municipalities,donated,viewed,belgian,cooperation,posted,tech,dual,volunteer,settlers,commanded,claiming,approval,delhi,usage,terminus,partly,electricity,locally,editions,premiere,absence,belief,traditions,statue,indicate,manor,stable,attributed,possession,managing,viewers,chile,overview,seed,regulations,essential,minority,cargo,segment,endemic,forum,deaths,monthly,playoffs,erected,practical,machines,suburb,relation,mrs.,descent,indoor,continuous,characterized,solutions,caribbean,rebuilt,serbian,summary,contested,psychology,pitch,attending,muhammad,tenure,drivers,diameter,assets,venture,punk,airlines,concentration,athletes,volunteers,pages,mines,influences,sculpture,protest,ferry,behalf,drafted,apparent,furthermore,ranging,romanian,democracy,lanka,significance,linear,d.c.,certified,voters,recovered,tours,demolished,boundaries,assisted,identify,grades,elsewhere,mechanism,1940s,reportedly,aimed,conversion,suspended,photography,departments,beijing,locomotives,publicly,dispute,magazines,resort,conventional,platforms,internationally,capita,settlements,dramatic,derby,establishing,involves,statistical,implementation,immigrants,exposed,diverse,layer,vast,ceased,connections,belonged,interstate,uefa,organised,abuse,deployed,cattle,partially,filming,mainstream,reduction,automatic,rarely,subsidiary,decides,merger,comprehensive,displayed,amendment,guinea,exclusively,manhattan,concerning,commons,radical,serbia,baptist,buses,initiated,portrait,harbour,choir,citizen,sole,unsuccessful,manufactured,enforcement,connecting,increases,patterns,sacred,muslims,clothing,hindu,unincorporated,sentenced,advisory,tanks,campaigns,fled,repeated,remote,rebellion,implemented,texts,fitted,tribute,writings,sufficient,ministers,21st,devoted,jurisdiction,coaches,interpretation,pole,businessman,peru,sporting,prices,cuba,relocated,opponent,arrangement,elite,manufacturer,responded,suitable,distinction,calendar,dominant,tourist,earning,prefecture,ties,preparation,anglo,pursue,worship,archaeological,chancellor,bangladesh,scores,traded,lowest,horror,outdoor,biology,commented,specialized,loop,arriving,farming,housed,historians,'the,patent,pupils,christianity,opponents,athens,northwestern,maps,promoting,reveals,flights,exclusive,lions,norfolk,hebrew,extensively,eldest,shops,acquisition,virtual,renowned,margin,ongoing,essentially,iranian,alternate,sailed,reporting,conclusion,originated,temperatures,exposure,secured,landed,rifle,framework,identical,martial,focuses,topics,ballet,fighters,belonging,wealthy,negotiations,evolved,bases,oriented,acres,democrat,heights,restricted,vary,graduation,aftermath,chess,illness,participating,vertical,collective,immigration,demonstrated,leaf,completing,organic,missile,leeds,eligible,grammar,confederate,improvement,congressional,wealth,cincinnati,spaces,indicates,corresponding,reaches,repair,isolated,taxes,congregation,ratings,leagues,diplomatic,submitted,winds,awareness,photographs,maritime,nigeria,accessible,animation,restaurants,philippine,inaugural,dismissed,armenian,illustrated,reservoir,speakers,programmes,resource,genetic,interviews,camps,regulation,computers,preferred,travelled,comparison,distinctive,recreation,requested,southeastern,dependent,brisbane,breeding,playoff,expand,bonus,gauge,departed,qualification,inspiration,shipping,slaves,variations,shield,theories,munich,recognised,emphasis,favour,variable,seeds,undergraduate,territorial,intellectual,qualify,mini,banned,pointed,democrats,assessment,judicial,examination,attempting,objective,partial,characteristic,hardware,pradesh,execution,ottawa,metre,drum,exhibitions,withdrew,attendance,phrase,journalism,logo,measured,error,christians,trio,protestant,theology,respective,atmosphere,buddhist,substitute,curriculum,fundamental,outbreak,rabbi,intermediate,designation,globe,liberation,simultaneously,diseases,experiments,locomotive,difficulties,mainland,nepal,relegated,contributing,database,developments,veteran,carries,ranges,instruction,lodge,protests,obama,newcastle,experiment,physician,describing,challenges,corruption,delaware,adventures,ensemble,succession,renaissance,tenth,altitude,receives,approached,crosses,syria,croatia,warsaw,professionals,improvements,worn,airline,compound,permitted,preservation,reducing,printing,scientist,activist,comprises,sized,societies,enters,ruler,gospel,earthquake,extend,autonomous,croatian,serial,decorated,relevant,ideal,grows,grass,tier,towers,wider,welfare,columns,alumni,descendants,interface,reserves,banking,colonies,manufacturers,magnetic,closure,pitched,vocalist,preserve,enrolled,cancelled,equation,2000s,nickname,bulgaria,heroes,exile,mathematical,demands,input,structural,tube,stem,approaches,argentine,axis,manuscript,inherited,depicted,targets,visits,veterans,regard,removal,efficiency,organisations,concepts,lebanon,manga,petersburg,rally,supplied,amounts,yale,tournaments,broadcasts,signals,pilots,azerbaijan,architects,enzyme,literacy,declaration,placing,batting,incumbent,bulgarian,consistent,poll,defended,landmark,southwestern,raid,resignation,travels,casualties,prestigious,namely,aims,recipient,warfare,readers,collapse,coached,controls,volleyball,coup,lesser,verse,pairs,exhibited,proteins,molecular,abilities,integration,consist,aspect,advocate,administered,governing,hospitals,commenced,coins,lords,variation,resumed,canton,artificial,elevated,palm,difficulty,civic,efficient,northeastern,inducted,radiation,affiliate,boards,stakes,byzantine,consumption,freight,interaction,oblast,numbered,seminary,contracts,extinct,predecessor,bearing,cultures,functional,neighboring,revised,cylinder,grants,narrative,reforms,athlete,tales,reflect,presidency,compositions,specialist,cricketer,founders,sequel,widow,disbanded,associations,backed,thereby,pitcher,commanding,boulevard,singers,crops,militia,reviewed,centres,waves,consequently,fortress,tributary,portions,bombing,excellence,nest,payment,mars,plaza,unity,victories,scotia,farms,nominations,variant,attacking,suspension,installation,graphics,estates,comments,acoustic,destination,venues,surrender,retreat,libraries,quarterback,customs,berkeley,collaborated,gathered,syndrome,dialogue,recruited,shanghai,neighbouring,psychological,saudi,moderate,exhibit,innovation,depot,binding,brunswick,situations,certificate,actively,shakespeare,editorial,presentation,ports,relay,nationalist,methodist,archives,experts,maintains,collegiate,bishops,maintaining,temporarily,embassy,essex,wellington,connects,reformed,bengal,recalled,inches,doctrine,deemed,legendary,reconstruction,statements,palestinian,meter,achievements,riders,interchange,spots,auto,accurate,chorus,dissolved,missionary,thai,operators,e.g.,generations,failing,delayed,cork,nashville,perceived,venezuela,cult,emerging,tomb,abolished,documented,gaining,canyon,episcopal,stored,assists,compiled,kerala,kilometers,mosque,grammy,theorem,unions,segments,glacier,arrives,theatrical,circulation,conferences,chapters,displays,circular,authored,conductor,fewer,dimensional,nationwide,liga,yugoslavia,peer,vietnamese,fellowship,armies,regardless,relating,dynamic,politicians,mixture,serie,somerset,imprisoned,posts,beliefs,beta,layout,independently,electronics,provisions,fastest,logic,headquartered,creates,challenged,beaten,appeals,plains,protocol,graphic,accommodate,iraqi,midfielder,span,commentary,freestyle,reflected,palestine,lighting,burial,virtually,backing,prague,tribal,heir,identification,prototype,criteria,dame,arch,tissue,footage,extending,procedures,predominantly,updated,rhythm,preliminary,cafe,disorder,prevented,suburbs,discontinued,retiring,oral,followers,extends,massacre,journalists,conquest,larvae,pronounced,behaviour,diversity,sustained,addressed,geographic,restrictions,voiced,milwaukee,dialect,quoted,grid,nationally,nearest,roster,twentieth,separation,indies,manages,citing,intervention,guidance,severely,migration,artwork,focusing,rivals,trustees,varied,enabled,committees,centered,skating,slavery,cardinals,forcing,tasks,auckland,youtube,argues,colored,advisor,mumbai,requiring,theological,registration,refugees,nineteenth,survivors,runners,colleagues,priests,contribute,variants,workshop,concentrated,creator,lectures,temples,exploration,requirement,interactive,navigation,companion,perth,allegedly,releasing,citizenship,observation,stationed,ph.d.,sheep,breed,discovers,encourage,kilometres,journals,performers,isle,saskatchewan,hybrid,hotels,lancashire,dubbed,airfield,anchor,suburban,theoretical,sussex,anglican,stockholm,permanently,upcoming,privately,receiver,optical,highways,congo,colours,aggregate,authorized,repeatedly,varies,fluid,innovative,transformed,praise,convoy,demanded,discography,attraction,export,audiences,ordained,enlisted,occasional,westminster,syrian,heavyweight,bosnia,consultant,eventual,improving,aires,wickets,epic,reactions,scandal,i.e.,discrimination,buenos,patron,investors,conjunction,testament,construct,encountered,celebrity,expanding,georgian,brands,retain,underwent,algorithm,foods,provision,orbit,transformation,associates,tactical,compact,varieties,stability,refuge,gathering,moreover,manila,configuration,gameplay,discipline,entity,comprising,composers,skill,monitoring,ruins,museums,sustainable,aerial,altered,codes,voyage,friedrich,conflicts,storyline,travelling,conducting,merit,indicating,referendum,currency,encounter,particles,automobile,workshops,acclaimed,inhabited,doctorate,cuban,phenomenon,dome,enrollment,tobacco,governance,trend,equally,manufacture,hydrogen,grande,compensation,download,pianist,grain,shifted,neutral,evaluation,define,cycling,seized,array,relatives,motors,firms,varying,automatically,restore,nicknamed,findings,governed,investigate,manitoba,administrator,vital,integral,indonesian,confusion,publishers,enable,geographical,inland,naming,civilians,reconnaissance,indianapolis,lecturer,deer,tourists,exterior,rhode,bassist,symbols,scope,ammunition,yuan,poets,punjab,nursing,cent,developers,estimates,presbyterian,nasa,holdings,generate,renewed,computing,cyprus,arabia,duration,compounds,gastropod,permit,valid,touchdowns,facade,interactions,mineral,practiced,allegations,consequence,goalkeeper,baronet,copyright,uprising,carved,targeted,competitors,mentions,sanctuary,fees,pursued,tampa,chronicle,capabilities,specified,specimens,toll,accounting,limestone,staged,upgraded,philosophical,streams,guild,revolt,rainfall,supporter,princeton,terrain,hometown,probability,assembled,paulo,surrey,voltage,developer,destroyer,floors,lineup,curve,prevention,potentially,onwards,trips,imposed,hosting,striking,strict,admission,apartments,solely,utility,proceeded,observations,euro,incidents,vinyl,profession,haven,distant,expelled,rivalry,runway,torpedo,zones,shrine,dimensions,investigations,lithuania,idaho,pursuit,copenhagen,considerably,locality,wireless,decrease,genes,thermal,deposits,hindi,habitats,withdrawn,biblical,monuments,casting,plateau,thesis,managers,flooding,assassination,acknowledged,interim,inscription,guided,pastor,finale,insects,transported,activists,marshal,intensity,airing,cardiff,proposals,lifestyle,prey,herald,capitol,aboriginal,measuring,lasting,interpreted,occurring,desired,drawings,healthcare,panels,elimination,oslo,ghana,blog,sabha,intent,superintendent,governors,bankruptcy,p.m.,equity,disk,layers,slovenia,prussia,quartet,mechanics,graduates,politically,monks,screenplay,nato,absorbed,topped,petition,bold,morocco,exhibits,canterbury,publish,rankings,crater,dominican,enhanced,planes,lutheran,governmental,joins,collecting,brussels,unified,streak,strategies,flagship,surfaces,oval,archive,etymology,imprisonment,instructor,noting,remix,opposing,servant,rotation,width,trans,maker,synthesis,excess,tactics,snail,ltd.,lighthouse,sequences,cornwall,plantation,mythology,performs,foundations,populated,horizontal,speedway,activated,performer,diving,conceived,edmonton,subtropical,environments,prompted,semifinals,caps,bulk,treasury,recreational,telegraph,continent,portraits,relegation,catholics,graph,velocity,rulers,endangered,secular,observer,learns,inquiry,idol,dictionary,certification,estimate,cluster,armenia,observatory,revived,nadu,consumers,hypothesis,manuscripts,contents,arguments,editing,trails,arctic,essays,belfast,acquire,promotional,undertaken,corridor,proceedings,antarctic,millennium,labels,delegates,vegetation,acclaim,directing,substance,outcome,diploma,philosopher,malta,albanian,vicinity,degc,legends,regiments,consent,terrorist,scattered,presidents,gravity,orientation,deployment,duchy,refuses,estonia,crowned,separately,renovation,rises,wilderness,objectives,agreements,empress,slopes,inclusion,equality,decree,ballot,criticised,rochester,recurring,struggled,disabled,henri,poles,prussian,convert,bacteria,poorly,sudan,geological,wyoming,consistently,minimal,withdrawal,interviewed,proximity,repairs,initiatives,pakistani,republicans,propaganda,viii,abstract,commercially,availability,mechanisms,naples,discussions,underlying,lens,proclaimed,advised,spelling,auxiliary,attract,lithuanian,editors,o'brien,accordance,measurement,novelist,ussr,formats,councils,contestants,indie,facebook,parishes,barrier,battalions,sponsor,consulting,terrorism,implement,uganda,crucial,unclear,notion,distinguish,collector,attractions,filipino,ecology,investments,capability,renovated,iceland,albania,accredited,scouts,armor,sculptor,cognitive,errors,gaming,condemned,successive,consolidated,baroque,entries,regulatory,reserved,treasurer,variables,arose,technological,rounded,provider,rhine,agrees,accuracy,genera,decreased,frankfurt,ecuador,edges,particle,rendered,calculated,careers,faction,rifles,americas,gaelic,portsmouth,resides,merchants,fiscal,premises,coin,draws,presenter,acceptance,ceremonies,pollution,consensus,membrane,brigadier,nonetheless,genres,supervision,predicted,magnitude,finite,differ,ancestry,vale,delegation,removing,proceeds,placement,emigrated,siblings,molecules,payments,considers,demonstration,proportion,newer,valve,achieving,confederation,continuously,luxury,notre,introducing,coordinates,charitable,squadrons,disorders,geometry,winnipeg,ulster,loans,longtime,receptor,preceding,belgrade,mandate,wrestler,neighbourhood,factories,buddhism,imported,sectors,protagonist,steep,elaborate,prohibited,artifacts,prizes,pupil,cooperative,sovereign,subspecies,carriers,allmusic,nationals,settings,autobiography,neighborhoods,analog,facilitate,voluntary,jointly,newfoundland,organizing,raids,exercises,nobel,machinery,baltic,crop,granite,dense,websites,mandatory,seeks,surrendered,anthology,comedian,bombs,slot,synopsis,critically,arcade,marking,equations,halls,indo,inaugurated,embarked,speeds,clause,invention,premiership,likewise,presenting,demonstrate,designers,organize,examined,km/h,bavaria,troop,referee,detection,zurich,prairie,rapper,wingspan,eurovision,luxembourg,slovakia,inception,disputed,mammals,entrepreneur,makers,evangelical,yield,clergy,trademark,defunct,allocated,depicting,volcanic,batted,conquered,sculptures,providers,reflects,armoured,locals,walt,herzegovina,contracted,entities,sponsorship,prominence,flowing,ethiopia,marketed,corporations,withdraw,carnegie,induced,investigated,portfolio,flowering,opinions,viewing,classroom,donations,bounded,perception,leicester,fruits,charleston,academics,statute,complaints,smallest,deceased,petroleum,resolved,commanders,algebra,southampton,modes,cultivation,transmitter,spelled,obtaining,sizes,acre,pageant,bats,abbreviated,correspondence,barracks,feast,tackles,raja,derives,geology,disputes,translations,counted,constantinople,seating,macedonia,preventing,accommodation,homeland,explored,invaded,provisional,transform,sphere,unsuccessfully,missionaries,conservatives,highlights,traces,organisms,openly,dancers,fossils,absent,monarchy,combining,lanes,stint,dynamics,chains,missiles,screening,module,tribune,generating,miners,nottingham,seoul,unofficial,owing,linking,rehabilitation,citation,louisville,mollusk,depicts,differential,zimbabwe,kosovo,recommendations,responses,pottery,scorer,aided,exceptions,dialects,telecommunications,defines,elderly,lunar,coupled,flown,25th,espn,formula_1,bordered,fragments,guidelines,gymnasium,valued,complexity,papal,presumably,maternal,challenging,reunited,advancing,comprised,uncertain,favorable,twelfth,correspondent,nobility,livestock,expressway,chilean,tide,researcher,emissions,profits,lengths,accompanying,witnessed,itunes,drainage,slope,reinforced,feminist,sanskrit,develops,physicians,outlets,isbn,coordinator,averaged,termed,occupy,diagnosed,yearly,humanitarian,prospect,spacecraft,stems,enacted,linux,ancestors,karnataka,constitute,immigrant,thriller,ecclesiastical,generals,celebrations,enhance,heating,advocated,evident,advances,bombardment,watershed,shuttle,wicket,twitter,adds,branded,teaches,schemes,pension,advocacy,conservatory,cairo,varsity,freshwater,providence,seemingly,shells,cuisine,specially,peaks,intensive,publishes,trilogy,skilled,nacional,unemployment,destinations,parameters,verses,trafficking,determination,infinite,savings,alignment,linguistic,countryside,dissolution,measurements,advantages,licence,subfamily,highlands,modest,regent,algeria,crest,teachings,knockout,brewery,combine,conventions,descended,chassis,primitive,fiji,explicitly,cumberland,uruguay,laboratories,bypass,elect,informal,preceded,holocaust,tackle,minneapolis,quantity,securities,console,doctoral,religions,commissioners,expertise,unveiled,precise,diplomat,standings,infant,disciplines,sicily,endorsed,systematic,charted,armored,mild,lateral,townships,hurling,prolific,invested,wartime,compatible,galleries,moist,battlefield,decoration,convent,tubes,terrestrial,nominee,requests,delegate,leased,dubai,polar,applying,addresses,munster,sings,commercials,teamed,dances,eleventh,midland,cedar,flee,sandstone,snails,inspection,divide,asset,themed,comparable,paramount,dairy,archaeology,intact,institutes,rectangular,instances,phases,reflecting,substantially,applies,vacant,lacked,copa,coloured,encounters,sponsors,encoded,possess,revenues,ucla,chaired,a.m.,enabling,playwright,stoke,sociology,tibetan,frames,motto,financing,illustrations,gibraltar,chateau,bolivia,transmitted,enclosed,persuaded,urged,folded,suffolk,regulated,bros.,submarines,myth,oriental,malaysian,effectiveness,narrowly,acute,sunk,replied,utilized,tasmania,consortium,quantities,gains,parkway,enlarged,sided,employers,adequate,accordingly,assumption,ballad,mascot,distances,peaking,saxony,projected,affiliation,limitations,metals,guatemala,scots,theaters,kindergarten,verb,employer,differs,discharge,controller,seasonal,marching,guru,campuses,avoided,vatican,maori,excessive,chartered,modifications,caves,monetary,sacramento,mixing,institutional,celebrities,irrigation,shapes,broadcaster,anthem,attributes,demolition,offshore,specification,surveys,yugoslav,contributor,auditorium,lebanese,capturing,airports,classrooms,chennai,paths,tendency,determining,lacking,upgrade,sailors,detected,kingdoms,sovereignty,freely,decorative,momentum,scholarly,georges,gandhi,speculation,transactions,undertook,interact,similarities,cove,teammate,constituted,painters,tends,madagascar,partnerships,afghan,personalities,attained,rebounds,masses,synagogue,reopened,asylum,embedded,imaging,catalogue,defenders,taxonomy,fiber,afterward,appealed,communists,lisbon,rica,judaism,adviser,batsman,ecological,commands,lgbt,cooling,accessed,wards,shiva,employs,thirds,scenic,worcester,tallest,contestant,humanities,economist,textile,constituencies,motorway,tram,percussion,cloth,leisure,1880s,baden,flags,resemble,riots,coined,sitcom,composite,implies,daytime,tanzania,penalties,optional,competitor,excluded,steering,reversed,autonomy,reviewer,breakthrough,professionally,damages,pomeranian,deputies,valleys,ventures,highlighted,electorate,mapping,shortened,executives,tertiary,specimen,launching,bibliography,sank,pursuing,binary,descendant,marched,natives,ideology,turks,adolf,archdiocese,tribunal,exceptional,nigerian,preference,fails,loading,comeback,vacuum,favored,alter,remnants,consecrated,spectators,trends,patriarch,feedback,paved,sentences,councillor,astronomy,advocates,broader,commentator,commissions,identifying,revealing,theatres,incomplete,enables,constituent,reformation,tract,haiti,atmospheric,screened,explosive,czechoslovakia,acids,symbolic,subdivision,liberals,incorporate,challenger,erie,filmmaker,laps,kazakhstan,organizational,evolutionary,chemicals,dedication,riverside,fauna,moths,maharashtra,annexed,gen.,resembles,underwater,garnered,timeline,remake,suited,educator,hectares,automotive,feared,latvia,finalist,narrator,portable,airways,plaque,designing,villagers,licensing,flank,statues,struggles,deutsche,migrated,cellular,jacksonville,wimbledon,defining,highlight,preparatory,planets,cologne,employ,frequencies,detachment,readily,libya,resign,halt,helicopters,reef,landmarks,collaborative,irregular,retaining,helsinki,folklore,weakened,viscount,interred,professors,memorable,mega,repertoire,rowing,dorsal,albeit,progressed,operative,coronation,liner,telugu,domains,philharmonic,detect,bengali,synthetic,tensions,atlas,dramatically,paralympics,xbox,shire,kiev,lengthy,sued,notorious,seas,screenwriter,transfers,aquatic,pioneers,unesco,radius,abundant,tunnels,syndicated,inventor,accreditation,janeiro,exeter,ceremonial,omaha,cadet,predators,resided,prose,slavic,precision,abbot,deity,engaging,cambodia,estonian,compliance,demonstrations,protesters,reactor,commodore,successes,chronicles,mare,extant,listings,minerals,tonnes,parody,cultivated,traders,pioneering,supplement,slovak,preparations,collision,partnered,vocational,atoms,malayalam,welcomed,documentation,curved,functioning,presently,formations,incorporates,nazis,botanical,nucleus,ethical,greeks,metric,automated,whereby,stance,europeans,duet,disability,purchasing,email,telescope,displaced,sodium,comparative,processor,inning,precipitation,aesthetic,import,coordination,feud,alternatively,mobility,tibet,regained,succeeding,hierarchy,apostolic,catalog,reproduction,inscriptions,vicar,clusters,posthumously,rican,loosely,additions,photographic,nowadays,selective,derivative,keyboards,guides,collectively,affecting,combines,operas,networking,decisive,terminated,continuity,finishes,ancestor,consul,heated,simulation,leipzig,incorporating,georgetown,formula_2,circa,forestry,portrayal,councillors,advancement,complained,forewings,confined,transaction,definitions,reduces,televised,1890s,rapids,phenomena,belarus,alps,landscapes,quarterly,specifications,commemorate,continuation,isolation,antenna,downstream,patents,ensuing,tended,saga,lifelong,columnist,labeled,gymnastics,papua,anticipated,demise,encompasses,madras,antarctica,interval,icon,rams,midlands,ingredients,priory,strengthen,rouge,explicit,gaza,aging,securing,anthropology,listeners,adaptations,underway,vista,malay,fortified,lightweight,violations,concerto,financed,jesuit,observers,trustee,descriptions,nordic,resistant,opted,accepts,prohibition,andhra,inflation,negro,wholly,imagery,spur,instructed,gloucester,cycles,middlesex,destroyers,statewide,evacuated,hyderabad,peasants,mice,shipyard,coordinate,pitching,colombian,exploring,numbering,compression,countess,hiatus,exceed,raced,archipelago,traits,soils,o'connor,vowel,android,facto,angola,amino,holders,logistics,circuits,emergence,kuwait,partition,emeritus,outcomes,submission,promotes,barack,negotiated,loaned,stripped,50th,excavations,treatments,fierce,participant,exports,decommissioned,cameo,remarked,residences,fuselage,mound,undergo,quarry,node,midwest,specializing,occupies,etc.,showcase,molecule,offs,modules,salon,exposition,revision,peers,positioned,hunters,competes,algorithms,reside,zagreb,calcium,uranium,silicon,airs,counterpart,outlet,collectors,sufficiently,canberra,inmates,anatomy,ensuring,curves,aviv,firearms,basque,volcano,thrust,sheikh,extensions,installations,aluminum,darker,sacked,emphasized,aligned,asserted,pseudonym,spanning,decorations,eighteenth,orbital,spatial,subdivided,notation,decay,macedonian,amended,declining,cyclist,feat,unusually,commuter,birthplace,latitude,activation,overhead,30th,finalists,whites,encyclopedia,tenor,qatar,survives,complement,concentrations,uncommon,astronomical,bangalore,pius,genome,memoir,recruit,prosecutor,modification,paired,container,basilica,arlington,displacement,germanic,mongolia,proportional,debates,matched,calcutta,rows,tehran,aerospace,prevalent,arise,lowland,24th,spokesman,supervised,advertisements,clash,tunes,revelation,wanderers,quarterfinals,fisheries,steadily,memoirs,pastoral,renewable,confluence,acquiring,strips,slogan,upstream,scouting,analyst,practitioners,turbine,strengthened,heavier,prehistoric,plural,excluding,isles,persecution,turin,rotating,villain,hemisphere,unaware,arabs,corpus,relied,singular,unanimous,schooling,passive,angles,dominance,instituted,aria,outskirts,balanced,beginnings,financially,structured,parachute,viewer,attitudes,subjected,escapes,derbyshire,erosion,addressing,styled,declaring,originating,colts,adjusted,stained,occurrence,fortifications,baghdad,nitrogen,localities,yemen,galway,debris,lodz,victorious,pharmaceutical,substances,unnamed,dwelling,atop,developmental,activism,voter,refugee,forested,relates,overlooking,genocide,kannada,insufficient,oversaw,partisan,dioxide,recipients,factions,mortality,capped,expeditions,receptors,reorganized,prominently,atom,flooded,flute,orchestral,scripts,mathematician,airplay,detached,rebuilding,dwarf,brotherhood,salvation,expressions,arabian,cameroon,poetic,recruiting,bundesliga,inserted,scrapped,disabilities,evacuation,pasha,undefeated,crafts,rituals,aluminium,norm,pools,submerged,occupying,pathway,exams,prosperity,wrestlers,promotions,basal,permits,nationalism,trim,merge,gazette,tributaries,transcription,caste,porto,emerge,modeled,adjoining,counterparts,paraguay,redevelopment,renewal,unreleased,equilibrium,similarity,minorities,soviets,comprise,nodes,tasked,unrelated,expired,johan,precursor,examinations,electrons,socialism,exiled,admiralty,floods,wigan,nonprofit,lacks,brigades,screens,repaired,hanover,fascist,labs,osaka,delays,judged,statutory,colt,col.,offspring,solving,bred,assisting,retains,somalia,grouped,corresponds,tunisia,chaplain,eminent,chord,22nd,spans,viral,innovations,possessions,mikhail,kolkata,icelandic,implications,introduces,racism,workforce,alto,compulsory,admits,censorship,onset,reluctant,inferior,iconic,progression,liability,turnout,satellites,behavioral,coordinated,exploitation,posterior,averaging,fringe,krakow,mountainous,greenwich,para,plantations,reinforcements,offerings,famed,intervals,constraints,individually,nutrition,1870s,taxation,threshold,tomatoes,fungi,contractor,ethiopian,apprentice,diabetes,wool,gujarat,honduras,norse,bucharest,23rd,arguably,accompany,prone,teammates,perennial,vacancy,polytechnic,deficit,okinawa,functionality,reminiscent,tolerance,transferring,myanmar,concludes,neighbours,hydraulic,economically,slower,plots,charities,synod,investor,catholicism,identifies,bronx,interpretations,adverse,judiciary,hereditary,nominal,sensor,symmetry,cubic,triangular,tenants,divisional,outreach,representations,passages,undergoing,cartridge,testified,exceeded,impacts,limiting,railroads,defeats,regain,rendering,humid,retreated,reliability,governorate,antwerp,infamous,implied,packaging,lahore,trades,billed,extinction,ecole,rejoined,recognizes,projection,qualifications,stripes,forts,socially,lexington,accurately,sexuality,westward,wikipedia,pilgrimage,abolition,choral,stuttgart,nests,expressing,strikeouts,assessed,monasteries,reconstructed,humorous,marxist,fertile,consort,urdu,patronage,peruvian,devised,lyric,baba,nassau,communism,extraction,popularly,markings,inability,litigation,accounted,processed,emirates,tempo,cadets,eponymous,contests,broadly,oxide,courtyard,frigate,directory,apex,outline,regency,chiefly,patrols,secretariat,cliffs,residency,privy,armament,australians,dorset,geometric,genetics,scholarships,fundraising,flats,demographic,multimedia,captained,documentaries,updates,canvas,blockade,guerrilla,songwriting,administrators,intake,drought,implementing,fraction,cannes,refusal,inscribed,meditation,announcing,exported,ballots,formula_3,curator,basel,arches,flour,subordinate,confrontation,gravel,simplified,berkshire,patriotic,tuition,employing,servers,castile,posting,combinations,discharged,miniature,mutations,constellation,incarnation,ideals,necessity,granting,ancestral,crowds,pioneered,mormon,methodology,rama,indirect,complexes,bavarian,patrons,uttar,skeleton,bollywood,flemish,viable,bloc,breeds,triggered,sustainability,tailed,referenced,comply,takeover,latvian,homestead,platoon,communal,nationality,excavated,targeting,sundays,posed,physicist,turret,endowment,marginal,dispatched,commentators,renovations,attachment,collaborations,ridges,barriers,obligations,shareholders,prof.,defenses,presided,rite,backgrounds,arbitrary,affordable,gloucestershire,thirteenth,inlet,miniseries,possesses,detained,pressures,subscription,realism,solidarity,proto,postgraduate,noun,burmese,abundance,homage,reasoning,anterior,robust,fencing,shifting,vowels,garde,profitable,loch,anchored,coastline,samoa,terminology,prostitution,magistrate,venezuelan,speculated,regulate,fixture,colonists,digit,induction,manned,expeditionary,computational,centennial,principally,vein,preserving,engineered,numerical,cancellation,conferred,continually,borne,seeded,advertisement,unanimously,treaties,infections,ions,sensors,lowered,amphibious,lava,fourteenth,bahrain,niagara,nicaragua,squares,congregations,26th,periodic,proprietary,1860s,contributors,seller,overs,emission,procession,presumed,illustrator,zinc,gases,tens,applicable,stretches,reproductive,sixteenth,apparatus,accomplishments,canoe,guam,oppose,recruitment,accumulated,limerick,namibia,staging,remixes,ordnance,uncertainty,pedestrian,temperate,treason,deposited,registry,cerambycidae,attracting,lankan,reprinted,shipbuilding,homosexuality,neurons,eliminating,1900s,resume,ministries,beneficial,blackpool,surplus,northampton,licenses,constructing,announcer,standardized,alternatives,taipei,inadequate,failures,yields,medalist,titular,obsolete,torah,burlington,predecessors,lublin,retailers,castles,depiction,issuing,gubernatorial,propulsion,tiles,damascus,discs,alternating,pomerania,peasant,tavern,redesignated,27th,illustration,focal,mans,codex,specialists,productivity,antiquity,controversies,promoter,pits,companions,behaviors,lyrical,prestige,creativity,swansea,dramas,approximate,feudal,tissues,crude,campaigned,unprecedented,chancel,amendments,surroundings,allegiance,exchanges,align,firmly,optimal,commenting,reigning,landings,obscure,1850s,contemporaries,paternal,devi,endurance,communes,incorporation,denominations,exchanged,routing,resorts,amnesty,slender,explores,suppression,heats,pronunciation,centred,coupe,stirling,freelance,treatise,linguistics,laos,informs,discovering,pillars,encourages,halted,robots,definitive,maturity,tuberculosis,venetian,silesian,unchanged,originates,mali,lincolnshire,quotes,seniors,premise,contingent,distribute,danube,gorge,logging,dams,curling,seventeenth,specializes,wetlands,deities,assess,thickness,rigid,culminated,utilities,substrate,insignia,nile,assam,shri,currents,suffrage,canadians,mortar,asteroid,bosnian,discoveries,enzymes,sanctioned,replica,hymn,investigators,tidal,dominate,derivatives,converting,leinster,verbs,honoured,criticisms,dismissal,discrete,masculine,reorganization,unlimited,wurttemberg,sacks,allocation,bahn,jurisdictions,participates,lagoon,famine,communion,culminating,surveyed,shortage,cables,intersects,cassette,foremost,adopting,solicitor,outright,bihar,reissued,farmland,dissertation,turnpike,baton,photographed,christchurch,kyoto,finances,rails,histories,linebacker,kilkenny,accelerated,dispersed,handicap,absorption,rancho,ceramic,captivity,cites,font,weighed,mater,utilize,bravery,extract,validity,slovenian,seminars,discourse,ranged,duel,ironically,warships,sega,temporal,surpassed,prolonged,recruits,northumberland,greenland,contributes,patented,eligibility,unification,discusses,reply,translates,beirut,relies,torque,northward,reviewers,monastic,accession,neural,tramway,heirs,sikh,subscribers,amenities,taliban,audit,rotterdam,wagons,kurdish,favoured,combustion,meanings,persia,browser,diagnostic,niger,formula_4,denomination,dividing,parameter,branding,badminton,leningrad,sparked,hurricanes,beetles,propeller,mozambique,refined,diagram,exhaust,vacated,readings,markers,reconciliation,determines,concurrent,imprint,primera,organism,demonstrating,filmmakers,vanderbilt,affiliates,traction,evaluated,defendants,megachile,investigative,zambia,assassinated,rewarded,probable,staffordshire,foreigners,directorate,nominees,consolidation,commandant,reddish,differing,unrest,drilling,bohemia,resembling,instrumentation,considerations,haute,promptly,variously,dwellings,clans,tablet,enforced,cockpit,semifinal,hussein,prisons,ceylon,emblem,monumental,phrases,correspond,crossover,outlined,characterised,acceleration,caucus,crusade,protested,composing,rajasthan,habsburg,rhythmic,interception,inherent,cooled,ponds,spokesperson,gradual,consultation,kuala,globally,suppressed,builders,avengers,suffix,integer,enforce,fibers,unionist,proclamation,uncovered,infrared,adapt,eisenhower,utilizing,captains,stretched,observing,assumes,prevents,analyses,saxophone,caucasus,notices,villains,dartmouth,mongol,hostilities,stretching,veterinary,lenses,texture,prompting,overthrow,excavation,islanders,masovian,battleship,biographer,replay,degradation,departing,luftwaffe,fleeing,oversight,immigrated,serbs,fishermen,strengthening,respiratory,italians,denotes,radial,escorted,motif,wiltshire,expresses,accessories,reverted,establishments,inequality,protocols,charting,famously,satirical,entirety,trench,friction,atletico,sampling,subset,weekday,upheld,sharply,correlation,incorrect,mughal,travelers,hasan,earnings,offset,evaluate,specialised,recognizing,flexibility,nagar,postseason,algebraic,capitalism,crystals,melodies,polynomial,racecourse,defences,austro,wembley,attracts,anarchist,resurrection,reviewing,decreasing,prefix,ratified,mutation,displaying,separating,restoring,assemblies,ordinance,priesthood,cruisers,appoint,moldova,imports,directive,epidemic,militant,senegal,signaling,restriction,critique,retrospective,nationalists,undertake,sioux,canals,algerian,redesigned,philanthropist,depict,conceptual,turbines,intellectuals,eastward,applicants,contractors,vendors,undergone,namesake,ensured,tones,substituted,hindwings,arrests,tombs,transitional,principality,reelection,taiwanese,cavity,manifesto,broadcasters,spawned,thoroughbred,identities,generators,proposes,hydroelectric,johannesburg,cortex,scandinavian,killings,aggression,boycott,catalyst,physiology,fifteenth,waterfront,chromosome,organist,costly,calculation,cemeteries,flourished,recognise,juniors,merging,disciples,ashore,workplace,enlightenment,diminished,debated,hailed,podium,educate,mandated,distributor,litre,electromagnetic,flotilla,estuary,peterborough,staircase,selections,melodic,confronts,wholesale,integrate,intercepted,catalonia,unite,immense,palatinate,switches,earthquakes,occupational,successors,praising,concluding,faculties,firstly,overhaul,empirical,metacritic,inauguration,evergreen,laden,winged,philosophers,amalgamated,geoff,centimeters,napoleonic,upright,planting,brewing,fined,sensory,migrants,wherein,inactive,headmaster,warwickshire,siberia,terminals,denounced,academia,divinity,bilateral,clive,omitted,peerage,relics,apartheid,syndicate,fearing,fixtures,desirable,dismantled,ethnicity,valves,biodiversity,aquarium,ideological,visibility,creators,analyzed,tenant,balkan,postwar,supplier,smithsonian,risen,morphology,digits,bohemian,wilmington,vishnu,demonstrates,aforementioned,biographical,mapped,khorasan,phosphate,presentations,ecosystem,processors,calculations,mosaic,clashes,penned,recalls,coding,angular,lattice,macau,accountability,extracted,pollen,therapeutic,overlap,violinist,deposed,candidacy,infants,covenant,bacterial,restructuring,dungeons,ordination,conducts,builds,invasive,customary,concurrently,relocation,cello,statutes,borneo,entrepreneurs,sanctions,packet,rockefeller,piedmont,comparisons,waterfall,receptions,glacial,surge,signatures,alterations,advertised,enduring,somali,botanist,100th,canonical,motifs,longitude,circulated,alloy,indirectly,margins,preserves,internally,besieged,shale,peripheral,drained,baseman,reassigned,tobago,soloist,socio,grazing,contexts,roofs,portraying,ottomans,shrewsbury,noteworthy,lamps,supplying,beams,qualifier,portray,greenhouse,stronghold,hitter,rites,cretaceous,urging,derive,nautical,aiming,fortunes,verde,donors,reliance,exceeding,exclusion,exercised,simultaneous,continents,guiding,pillar,gradient,poznan,eruption,clinics,moroccan,indicator,trams,piers,parallels,fragment,teatro,potassium,satire,compressed,businessmen,influx,seine,perspectives,shelters,decreases,mounting,formula_5,confederacy,equestrian,expulsion,mayors,liberia,resisted,affinity,shrub,unexpectedly,stimulus,amtrak,deported,perpendicular,statesman,wharf,storylines,romanesque,weights,surfaced,interceptions,dhaka,crambidae,orchestras,rwanda,conclude,constitutes,subsidiaries,admissions,prospective,shear,bilingual,campaigning,presiding,domination,commemorative,trailing,confiscated,petrol,acquisitions,polymer,onlyinclude,chloride,elevations,resolutions,hurdles,pledged,likelihood,objected,erect,encoding,databases,aristotle,hindus,marshes,bowled,ministerial,grange,acronym,annexation,squads,ambient,pilgrims,botany,sofla,astronomer,planetary,descending,bestowed,ceramics,diplomacy,metabolism,colonization,potomac,africans,engraved,recycling,commitments,resonance,disciplinary,jamaican,narrated,spectral,tipperary,waterford,stationary,arbitration,transparency,threatens,crossroads,slalom,oversee,centenary,incidence,economies,livery,moisture,newsletter,autobiographical,bhutan,propelled,dependence,moderately,adobe,barrels,subdivisions,outlook,labelled,stratford,arising,diaspora,barony,automobiles,ornamental,slated,norms,primetime,generalized,analysts,vectors,libyan,yielded,certificates,rooted,vernacular,belarusian,marketplace,prediction,fairfax,malawi,viruses,wooded,demos,mauritius,prosperous,coincided,liberties,huddersfield,ascent,warnings,hinduism,glucose,pulitzer,unused,filters,illegitimate,acquitted,protestants,canopy,staple,psychedelic,winding,abbas,pathways,cheltenham,lagos,niche,invaders,proponents,barred,conversely,doncaster,recession,embraced,rematch,concession,emigration,upgrades,bowls,tablets,remixed,loops,kensington,shootout,monarchs,organizers,harmful,punjabi,broadband,exempt,neolithic,profiles,portrays,parma,cyrillic,quasi,attested,regimental,revive,torpedoes,heidelberg,rhythms,spherical,denote,hymns,icons,theologian,qaeda,exceptionally,reinstated,comune,playhouse,lobbying,grossing,viceroy,delivers,visually,armistice,utrecht,syllable,vertices,analogous,annex,refurbished,entrants,knighted,disciple,rhetoric,detailing,inactivated,ballads,algae,intensified,favourable,sanitation,receivers,pornography,commemorated,cannons,entrusted,manifold,photographers,pueblo,textiles,steamer,myths,marquess,onward,liturgical,romney,uzbekistan,consistency,denoted,hertfordshire,convex,hearings,sulfur,universidad,podcast,selecting,emperors,arises,justices,1840s,mongolian,exploited,termination,digitally,infectious,sedan,symmetric,penal,illustrate,formulation,attribute,problematic,modular,inverse,berth,searches,rutgers,leicestershire,enthusiasts,lockheed,upwards,transverse,accolades,backward,archaeologists,crusaders,nuremberg,defects,ferries,vogue,containers,openings,transporting,separates,lumpur,purchases,attain,wichita,topology,woodlands,deleted,periodically,syntax,overturned,musicals,corp.,strasbourg,instability,nationale,prevailing,cache,marathi,versailles,unmarried,grains,straits,antagonist,segregation,assistants,d'etat,contention,dictatorship,unpopular,motorcycles,criterion,analytical,salzburg,militants,hanged,worcestershire,emphasize,paralympic,erupted,convinces,offences,oxidation,nouns,populace,atari,spanned,hazardous,educators,playable,births,baha'i,preseason,generates,invites,meteorological,handbook,foothills,enclosure,diffusion,mirza,convergence,geelong,coefficient,connector,formula_6,cylindrical,disasters,pleaded,knoxville,contamination,compose,libertarian,arrondissement,franciscan,intercontinental,susceptible,initiation,malaria,unbeaten,consonants,waived,saloon,popularized,estadio,pseudo,interdisciplinary,transports,transformers,carriages,bombings,revolves,ceded,collaborator,celestial,exemption,colchester,maltese,oceanic,ligue,crete,shareholder,routed,depictions,ridden,advisors,calculate,lending,guangzhou,simplicity,newscast,scheduling,snout,eliot,undertaking,armenians,nottinghamshire,whitish,consulted,deficiency,salle,cinemas,superseded,rigorous,kerman,convened,landowners,modernization,evenings,pitches,conditional,scandinavia,differed,formulated,cyclists,swami,guyana,dunes,electrified,appalachian,abdomen,scenarios,prototypes,sindh,consonant,adaptive,boroughs,wolverhampton,modelling,cylinders,amounted,minimize,ambassadors,lenin,settler,coincide,approximation,grouping,murals,bullying,registers,rumours,engagements,energetic,vertex,annals,bordering,geologic,yellowish,runoff,converts,allegheny,facilitated,saturdays,colliery,monitored,rainforest,interfaces,geographically,impaired,prevalence,joachim,paperback,slowed,shankar,distinguishing,seminal,categorized,authorised,auspices,bandwidth,asserts,rebranded,balkans,supplemented,seldom,weaving,capsule,apostles,populous,monmouth,payload,symphonic,densely,shoreline,managerial,masonry,antioch,averages,textbooks,royalist,coliseum,tandem,brewers,diocesan,posthumous,walled,incorrectly,distributions,ensued,reasonably,graffiti,propagation,automation,harmonic,augmented,middleweight,limbs,elongated,landfall,comparatively,literal,grossed,koppen,wavelength,1830s,cerebral,boasts,congestion,physiological,practitioner,coasts,cartoonist,undisclosed,frontal,launches,burgundy,qualifiers,imposing,stade,flanked,assyrian,raided,multiplayer,montane,chesapeake,pathology,drains,vineyards,intercollegiate,semiconductor,grassland,convey,citations,predominant,rejects,benefited,yahoo,graphs,busiest,encompassing,hamlets,explorers,suppress,minors,graphical,calculus,sediment,intends,diverted,mainline,unopposed,cottages,initiate,alumnus,towed,autism,forums,darlington,modernist,oxfordshire,lectured,capitalist,suppliers,panchayat,actresses,foundry,southbound,commodity,wesleyan,divides,palestinians,luton,caretaker,nobleman,mutiny,organizer,preferences,nomenclature,splits,unwilling,offenders,timor,relying,halftime,semitic,arithmetic,milestone,jesuits,arctiidae,retrieved,consuming,contender,edged,plagued,inclusive,transforming,khmer,federally,insurgents,distributing,amherst,rendition,prosecutors,viaduct,disqualified,kabul,liturgy,prevailed,reelected,instructors,swimmers,aperture,churchyard,interventions,totals,darts,metropolis,fuels,fluent,northbound,correctional,inflicted,barrister,realms,culturally,aristocratic,collaborating,emphasizes,choreographer,inputs,ensembles,humboldt,practised,endowed,strains,infringement,archaeologist,congregational,magna,relativity,efficiently,proliferation,mixtape,abruptly,regeneration,commissioning,yukon,archaic,reluctantly,retailer,northamptonshire,universally,crossings,boilers,nickelodeon,revue,abbreviation,retaliation,scripture,routinely,medicinal,benedictine,kenyan,retention,deteriorated,glaciers,apprenticeship,coupling,researched,topography,entrances,anaheim,pivotal,compensate,arched,modify,reinforce,dusseldorf,journeys,motorsport,conceded,sumatra,spaniards,quantitative,loire,cinematography,discarded,botswana,morale,engined,zionist,philanthropy,sainte,fatalities,cypriot,motorsports,indicators,pricing,institut,bethlehem,implicated,gravitational,differentiation,rotor,thriving,precedent,ambiguous,concessions,forecast,conserved,fremantle,asphalt,landslide,middlesbrough,formula_7,humidity,overseeing,chronological,diaries,multinational,crimean,turnover,improvised,youths,declares,tasmanian,canadiens,fumble,refinery,weekdays,unconstitutional,upward,guardians,brownish,imminent,hamas,endorsement,naturalist,martyrs,caledonia,chords,yeshiva,reptiles,severity,mitsubishi,fairs,installment,substitution,repertory,keyboardist,interpreter,silesia,noticeable,rhineland,transmit,inconsistent,booklet,academies,epithet,pertaining,progressively,aquatics,scrutiny,prefect,toxicity,rugged,consume,o'donnell,evolve,uniquely,cabaret,mediated,landowner,transgender,palazzo,compilations,albuquerque,induce,sinai,remastered,efficacy,underside,analogue,specify,possessing,advocating,compatibility,liberated,greenville,mecklenburg,header,memorials,sewage,rhodesia,1800s,salaries,atoll,coordinating,partisans,repealed,amidst,subjective,optimization,nectar,evolving,exploits,madhya,styling,accumulation,raion,postage,responds,buccaneers,frontman,brunei,choreography,coated,kinetic,sampled,inflammatory,complementary,eclectic,norte,vijay,a.k.a,mainz,casualty,connectivity,laureate,franchises,yiddish,reputed,unpublished,economical,periodicals,vertically,bicycles,brethren,capacities,unitary,archeological,tehsil,domesday,wehrmacht,justification,angered,mysore,fielded,abuses,nutrients,ambitions,taluk,battleships,symbolism,superiority,neglect,attendees,commentaries,collaborators,predictions,yorker,breeders,investing,libretto,informally,coefficients,memorandum,pounder,collingwood,tightly,envisioned,arbor,mistakenly,captures,nesting,conflicting,enhancing,streetcar,manufactures,buckinghamshire,rewards,commemorating,stony,expenditure,tornadoes,semantic,relocate,weimar,iberian,sighted,intending,ensign,beverages,expectation,differentiate,centro,utilizes,saxophonist,catchment,transylvania,ecosystems,shortest,sediments,socialists,ineffective,kapoor,formidable,heroine,guantanamo,prepares,scattering,pamphlet,verified,elector,barons,totaling,shrubs,pyrenees,amalgamation,mutually,longitudinal,comte,negatively,masonic,envoy,sexes,akbar,mythical,tonga,bishopric,assessments,malaya,warns,interiors,reefs,reflections,neutrality,musically,nomadic,waterways,provence,collaborate,scaled,adulthood,emerges,euros,optics,incentives,overland,periodical,liege,awarding,realization,slang,affirmed,schooner,hokkaido,czechoslovak,protectorate,undrafted,disagreed,commencement,electors,spruce,swindon,fueled,equatorial,inventions,suites,slovene,backdrop,adjunct,energies,remnant,inhabit,alliances,simulcast,reactors,mosques,travellers,outfielder,plumage,migratory,benin,experimented,fibre,projecting,drafting,laude,evidenced,northernmost,indicted,directional,replication,croydon,comedies,jailed,organizes,devotees,reservoirs,turrets,originate,economists,songwriters,junta,trenches,mounds,proportions,comedic,apostle,azerbaijani,farmhouse,resembled,disrupted,playback,mixes,diagonal,relevance,govern,programmer,gdansk,maize,soundtracks,tendencies,mastered,impacted,believers,kilometre,intervene,chairperson,aerodrome,sails,subsidies,ensures,aesthetics,congresses,ratios,sardinia,southernmost,functioned,controllers,downward,randomly,distortion,regents,palatine,disruption,spirituality,vidhan,tracts,compiler,ventilation,anchorage,symposium,assert,pistols,excelled,avenues,convoys,moniker,constructions,proponent,phased,spines,organising,schleswig,policing,campeonato,mined,hourly,croix,lucrative,authenticity,haitian,stimulation,burkina,espionage,midfield,manually,staffed,awakening,metabolic,biographies,entrepreneurship,conspicuous,guangdong,preface,subgroup,mythological,adjutant,feminism,vilnius,oversees,honourable,tripoli,stylized,kinase,societe,notoriety,altitudes,configurations,outward,transmissions,announces,auditor,ethanol,clube,nanjing,mecca,haifa,blogs,postmaster,paramilitary,depart,positioning,potent,recognizable,spire,brackets,remembrance,overlapping,turkic,articulated,scientology,operatic,deploy,readiness,biotechnology,restrict,cinematographer,inverted,synonymous,administratively,westphalia,commodities,replaces,downloads,centralized,munitions,preached,sichuan,fashionable,implementations,matrices,hiv/aids,loyalist,luzon,celebrates,hazards,heiress,mercenaries,synonym,creole,ljubljana,technician,auditioned,technicians,viewpoint,wetland,mongols,princely,sharif,coating,dynasties,southward,doubling,formula_8,mayoral,harvesting,conjecture,goaltender,oceania,spokane,welterweight,bracket,gatherings,weighted,newscasts,mussolini,affiliations,disadvantage,vibrant,spheres,sultanate,distributors,disliked,establishes,marches,drastically,yielding,jewellery,yokohama,vascular,airlift,canons,subcommittee,repression,strengths,graded,outspoken,fused,pembroke,filmography,redundant,fatigue,repeal,threads,reissue,pennant,edible,vapor,corrections,stimuli,commemoration,dictator,anand,secession,amassed,orchards,pontifical,experimentation,greeted,bangor,forwards,decomposition,quran,trolley,chesterfield,traverse,sermons,burials,skier,climbs,consultants,petitioned,reproduce,parted,illuminated,kurdistan,reigned,occupants,packaged,geometridae,woven,regulating,protagonists,crafted,affluent,clergyman,consoles,migrant,supremacy,attackers,caliph,defect,convection,rallies,huron,resin,segunda,quota,warship,overseen,criticizing,shrines,glamorgan,lowering,beaux,hampered,invasions,conductors,collects,bluegrass,surrounds,substrates,perpetual,chronology,pulmonary,executions,crimea,compiling,noctuidae,battled,tumors,minsk,novgorod,serviced,yeast,computation,swamps,theodor,baronetcy,salford,uruguayan,shortages,odisha,siberian,novelty,cinematic,invitational,decks,dowager,oppression,bandits,appellate,state-of-the-art,clade,palaces,signalling,galaxies,industrialist,tensor,learnt,incurred,magistrates,binds,orbits,ciudad,willingness,peninsular,basins,biomedical,shafts,marlborough,bournemouth,withstand,fitzroy,dunedin,variance,steamship,integrating,muscular,fines,akron,bulbophyllum,malmo,disclosed,cornerstone,runways,medicines,twenty20,gettysburg,progresses,frigates,bodied,transformations,transforms,helens,modelled,versatile,regulator,pursuits,legitimacy,amplifier,scriptures,voyages,examines,presenters,octagonal,poultry,formula_9,anatolia,computed,migrate,directorial,hybrids,localized,preferring,guggenheim,persisted,grassroots,inflammation,fishery,otago,vigorous,professions,instructional,inexpensive,insurgency,legislators,sequels,surnames,agrarian,stainless,nairobi,minas,forerunner,aristocracy,transitions,sicilian,showcased,doses,hiroshima,summarized,gearbox,emancipation,limitation,nuclei,seismic,abandonment,dominating,appropriations,occupations,electrification,hilly,contracting,exaggerated,entertainer,kazan,oricon,cartridges,characterization,parcel,maharaja,exceeds,aspiring,obituary,flattened,contrasted,narration,replies,oblique,outpost,fronts,arranger,talmud,keynes,doctrines,endured,confesses,fortification,supervisors,kilometer,academie,jammu,bathurst,piracy,prostitutes,navarre,cumulative,cruises,lifeboat,twinned,radicals,interacting,expenditures,wexford,libre,futsal,curated,clockwise,colloquially,procurement,immaculate,lyricist,enhancement,porcelain,alzheimer,highlighting,judah,disagreements,storytelling,sheltered,wroclaw,vaudeville,contrasts,neoclassical,compares,contrasting,deciduous,francaise,descriptive,cyclic,reactive,antiquities,meiji,repeats,creditors,forcibly,newmarket,picturesque,impending,uneven,bison,raceway,solvent,ecumenical,optic,professorship,harvested,waterway,banjo,pharaoh,geologist,scanning,dissent,recycled,unmanned,retreating,gospels,aqueduct,branched,tallinn,groundbreaking,syllables,hangar,designations,procedural,craters,cabins,encryption,anthropologist,montevideo,outgoing,inverness,chattanooga,fascism,calais,chapels,groundwater,downfall,misleading,robotic,tortricidae,pixel,handel,prohibit,crewe,renaming,reprised,kickoff,leftist,spaced,integers,causeway,pines,authorship,organise,ptolemy,accessibility,virtues,lesions,iroquois,qur'an,atheist,synthesized,biennial,confederates,dietary,skaters,stresses,tariff,koreans,intercity,republics,quintet,baroness,naive,amplitude,insistence,tbilisi,residues,grammatical,diversified,egyptians,accompaniment,vibration,repository,mandal,topological,distinctions,coherent,invariant,batters,nuevo,internationals,implements,follower,bahia,widened,independents,cantonese,totaled,guadalajara,wolverines,befriended,muzzle,surveying,hungarians,medici,deportation,rayon,approx,recounts,attends,clerical,hellenic,furnished,alleging,soluble,systemic,gallantry,bolshevik,intervened,hostel,gunpowder,specialising,stimulate,leiden,removes,thematic,floral,bafta,printers,conglomerate,eroded,analytic,successively,lehigh,thessaloniki,kilda,clauses,ascended,nehru,scripted,tokugawa,competence,diplomats,exclude,consecration,freedoms,assaults,revisions,blacksmith,textual,sparse,concacaf,slain,uploaded,enraged,whaling,guise,stadiums,debuting,dormitory,cardiovascular,yunnan,dioceses,consultancy,notions,lordship,archdeacon,collided,medial,airfields,garment,wrestled,adriatic,reversal,refueling,verification,jakob,horseshoe,intricate,veracruz,sarawak,syndication,synthesizer,anthologies,stature,feasibility,guillaume,narratives,publicized,antrim,intermittent,constituents,grimsby,filmmaking,doping,unlawful,nominally,transmitting,documenting,seater,internationale,ejected,steamboat,alsace,boise,ineligible,geared,vassal,mustered,ville,inline,pairing,eurasian,kyrgyzstan,barnsley,reprise,stereotypes,rushes,conform,firefighters,deportivo,revolutionaries,rabbis,concurrency,charters,sustaining,aspirations,algiers,chichester,falkland,morphological,systematically,volcanoes,designate,artworks,reclaimed,jurist,anglia,resurrected,chaotic,feasible,circulating,simulated,environmentally,confinement,adventist,harrisburg,laborers,ostensibly,universiade,pensions,influenza,bratislava,octave,refurbishment,gothenburg,putin,barangay,annapolis,breaststroke,illustrates,distorted,choreographed,promo,emphasizing,stakeholders,descends,exhibiting,intrinsic,invertebrates,evenly,roundabout,salts,formula_10,strata,inhibition,branching,stylistic,rumored,realises,mitochondrial,commuted,adherents,logos,bloomberg,telenovela,guineas,charcoal,engages,winery,reflective,siena,cambridgeshire,ventral,flashback,installing,engraving,grasses,traveller,rotated,proprietor,nationalities,precedence,sourced,trainers,cambodian,reductions,depleted,saharan,classifications,biochemistry,plaintiffs,arboretum,humanist,fictitious,aleppo,climates,bazaar,his/her,homogeneous,multiplication,moines,indexed,linguist,skeletal,foliage,societal,differentiated,informing,mammal,infancy,archival,cafes,malls,graeme,musee,schizophrenia,fargo,pronouns,derivation,descend,ascending,terminating,deviation,recaptured,confessions,weakening,tajikistan,bahadur,pasture,b/hip,donegal,supervising,sikhs,thinkers,euclidean,reinforcement,friars,portage,fuscous,lucknow,synchronized,assertion,choirs,privatization,corrosion,multitude,skyscraper,royalties,ligament,usable,spores,directs,clashed,stockport,fronted,dependency,contiguous,biologist,backstroke,powerhouse,frescoes,phylogenetic,welding,kildare,gabon,conveyed,augsburg,severn,continuum,sahib,lille,injuring,passeriformesfamily,succeeds,translating,unitarian,startup,turbulent,outlying,philanthropic,stanislaw,idols,claremont,conical,haryana,armagh,blended,implicit,conditioned,modulation,rochdale,labourers,coinage,shortstop,potsdam,gears,obesity,bestseller,advisers,bouts,comedians,jozef,lausanne,taxonomic,correlated,columbian,marne,indications,psychologists,libel,edict,beaufort,disadvantages,renal,finalized,racehorse,unconventional,disturbances,falsely,zoology,adorned,redesign,executing,narrower,commended,appliances,stalls,resurgence,saskatoon,miscellaneous,permitting,epoch,formula_11,cumbria,forefront,vedic,eastenders,disposed,supermarkets,rower,inhibitor,magnesium,colourful,yusuf,harrow,formulas,centrally,balancing,ionic,nocturnal,consolidate,ornate,raiding,charismatic,accelerate,nominate,residual,dhabi,commemorates,attribution,uninhabited,mindanao,atrocities,genealogical,romani,applicant,enactment,abstraction,trough,pulpit,minuscule,misconduct,grenades,timely,supplements,messaging,curvature,ceasefire,telangana,susquehanna,braking,redistribution,shreveport,neighbourhoods,gregorian,widowed,khuzestan,empowerment,scholastic,evangelist,peptide,topical,theorist,historia,thence,sudanese,museo,jurisprudence,masurian,frankish,headlined,recounted,netball,petitions,tolerant,hectare,truncated,southend,methane,captives,reigns,massif,subunit,acidic,weightlifting,footballers,sabah,britannia,tunisian,segregated,sawmill,withdrawing,unpaid,weaponry,somme,perceptions,unicode,alcoholism,durban,wrought,waterfalls,jihad,auschwitz,upland,eastbound,adjective,anhalt,evaluating,regimes,guildford,reproduced,pamphlets,hierarchical,maneuvers,hanoi,fabricated,repetition,enriched,arterial,replacements,tides,globalization,adequately,westbound,satisfactory,fleets,phosphorus,lastly,neuroscience,anchors,xinjiang,membranes,improvisation,shipments,orthodoxy,submissions,bolivian,mahmud,ramps,leyte,pastures,outlines,flees,transmitters,fares,sequential,stimulated,novice,alternately,symmetrical,breakaway,layered,baronets,lizards,blackish,edouard,horsepower,penang,principals,mercantile,maldives,overwhelmingly,hawke,rallied,prostate,conscription,juveniles,maccabi,carvings,strikers,sudbury,spurred,improves,lombardy,macquarie,parisian,elastic,distillery,shetland,humane,brentford,wrexham,warehouses,routines,encompassed,introductory,isfahan,instituto,palais,revolutions,sporadic,impoverished,portico,fellowships,speculative,enroll,dormant,adhere,fundamentally,sculpted,meritorious,template,upgrading,reformer,rectory,uncredited,indicative,creeks,galveston,radically,hezbollah,firearm,educating,prohibits,trondheim,locus,refit,headwaters,screenings,lowlands,wasps,coarse,attaining,sedimentary,perished,pitchfork,interned,cerro,stagecoach,aeronautical,liter,transitioned,haydn,inaccurate,legislatures,bromwich,knesset,spectroscopy,butte,asiatic,degraded,concordia,catastrophic,lobes,wellness,pensacola,periphery,hapoel,theta,horizontally,freiburg,liberalism,pleas,durable,warmian,offenses,mesopotamia,shandong,unsuitable,hospitalized,appropriately,phonetic,encompass,conversions,observes,illnesses,breakout,assigns,crowns,inhibitors,nightly,manifestation,fountains,maximize,alphabetical,sloop,expands,newtown,widening,gaddafi,commencing,camouflage,footprint,tyrol,barangays,universite,highlanders,budgets,query,lobbied,westchester,equator,stipulated,pointe,distinguishes,allotted,embankment,advises,storing,loyalists,fourier,rehearsals,starvation,gland,rihanna,tubular,expressive,baccalaureate,intersections,revered,carbonate,eritrea,craftsmen,cosmopolitan,sequencing,corridors,shortlisted,bangladeshi,persians,mimic,parades,repetitive,recommends,flanks,promoters,incompatible,teaming,ammonia,greyhound,solos,improper,legislator,newsweek,recurrent,vitro,cavendish,eireann,crises,prophets,mandir,strategically,guerrillas,formula_12,ghent,contenders,equivalence,drone,sociological,hamid,castes,statehood,aland,clinched,relaunched,tariffs,simulations,williamsburg,rotate,mediation,smallpox,harmonica,lodges,lavish,restrictive,o'sullivan,detainees,polynomials,echoes,intersecting,learners,elects,charlemagne,defiance,epsom,liszt,facilitating,absorbing,revelations,padua,pieter,pious,penultimate,mammalian,montenegrin,supplementary,widows,aromatic,croats,roanoke,trieste,legions,subdistrict,babylonian,grasslands,volga,violently,sparsely,oldies,telecommunication,respondents,quarries,downloadable,commandos,taxpayer,catalytic,malabar,afforded,copying,declines,nawab,junctions,assessing,filtering,classed,disused,compliant,christoph,gottingen,civilizations,hermitage,caledonian,whereupon,ethnically,springsteen,mobilization,terraces,indus,excel,zoological,enrichment,simulate,guitarists,registrar,cappella,invoked,reused,manchu,configured,uppsala,genealogy,mergers,casts,curricular,rebelled,subcontinent,horticultural,parramatta,orchestrated,dockyard,claudius,decca,prohibiting,turkmenistan,brahmin,clandestine,obligatory,elaborated,parasitic,helix,constraint,spearheaded,rotherham,eviction,adapting,albans,rescues,sociologist,guiana,convicts,occurrences,kamen,antennas,asturias,wheeled,sanitary,deterioration,trier,theorists,baseline,announcements,valea,planners,factual,serialized,serials,bilbao,demoted,fission,jamestown,cholera,alleviate,alteration,indefinite,sulfate,paced,climatic,valuation,artisans,proficiency,aegean,regulators,fledgling,sealing,influencing,servicemen,frequented,cancers,tambon,narayan,bankers,clarified,embodied,engraver,reorganisation,dissatisfied,dictated,supplemental,temperance,ratification,puget,nutrient,pretoria,papyrus,uniting,ascribed,cores,coptic,schoolhouse,barrio,1910s,armory,defected,transatlantic,regulates,ported,artefacts,specifies,boasted,scorers,mollusks,emitted,navigable,quakers,projective,dialogues,reunification,exponential,vastly,banners,unsigned,dissipated,halves,coincidentally,leasing,purported,escorting,estimation,foxes,lifespan,inflorescence,assimilation,showdown,staunch,prologue,ligand,superliga,telescopes,northwards,keynote,heaviest,taunton,redeveloped,vocalists,podlaskie,soyuz,rodents,azores,moravian,outset,parentheses,apparel,domestically,authoritative,polymers,monterrey,inhibit,launcher,jordanian,folds,taxis,mandates,singled,liechtenstein,subsistence,marxism,ousted,governorship,servicing,offseason,modernism,prism,devout,translators,islamist,chromosomes,pitted,bedfordshire,fabrication,authoritarian,javanese,leaflets,transient,substantive,predatory,sigismund,assassinate,diagrams,arrays,rediscovered,reclamation,spawning,fjord,peacekeeping,strands,fabrics,highs,regulars,tirana,ultraviolet,athenian,filly,barnet,naacp,nueva,favourites,terminates,showcases,clones,inherently,interpreting,bjorn,finely,lauded,unspecified,chola,pleistocene,insulation,antilles,donetsk,funnel,nutritional,biennale,reactivated,southport,primate,cavaliers,austrians,interspersed,restarted,suriname,amplifiers,wladyslaw,blockbuster,sportsman,minogue,brightness,benches,bridgeport,initiating,israelis,orbiting,newcomers,externally,scaling,transcribed,impairment,luxurious,longevity,impetus,temperament,ceilings,tchaikovsky,spreads,pantheon,bureaucracy,1820s,heraldic,villas,formula_13,galician,meath,avoidance,corresponded,headlining,connacht,seekers,rappers,solids,monograph,scoreless,opole,isotopes,himalayas,parodies,garments,microscopic,republished,havilland,orkney,demonstrators,pathogen,saturated,hellenistic,facilitates,aerodynamic,relocating,indochina,laval,astronomers,bequeathed,administrations,extracts,nagoya,torquay,demography,medicare,ambiguity,renumbered,pursuant,concave,syriac,electrode,dispersal,henan,bialystok,walsall,crystalline,puebla,janata,illumination,tianjin,enslaved,coloration,championed,defamation,grille,johor,rejoin,caspian,fatally,planck,workings,appointing,institutionalized,wessex,modernized,exemplified,regatta,jacobite,parochial,programmers,blending,eruptions,insurrection,regression,indices,sited,dentistry,mobilized,furnishings,levant,primaries,ardent,nagasaki,conqueror,dorchester,opined,heartland,amman,mortally,wellesley,bowlers,outputs,coveted,orthography,immersion,disrepair,disadvantaged,curate,childless,condensed,codice_1,remodeled,resultant,bolsheviks,superfamily,saxons,2010s,contractual,rivalries,malacca,oaxaca,magnate,vertebrae,quezon,olympiad,yucatan,tyres,macro,specialization,commendation,caliphate,gunnery,exiles,excerpts,fraudulent,adjustable,aramaic,interceptor,drumming,standardization,reciprocal,adolescents,federalist,aeronautics,favorably,enforcing,reintroduced,zhejiang,refining,biplane,banknotes,accordion,intersect,illustrating,summits,classmate,militias,biomass,massacres,epidemiology,reworked,wrestlemania,nantes,auditory,taxon,elliptical,chemotherapy,asserting,avoids,proficient,airmen,yellowstone,multicultural,alloys,utilization,seniority,kuyavian,huntsville,orthogonal,bloomington,cultivars,casimir,internment,repulsed,impedance,revolving,fermentation,parana,shutout,partnering,empowered,islamabad,polled,classify,amphibians,greyish,obedience,4x100,projectile,khyber,halfback,relational,d'ivoire,synonyms,endeavour,padma,customized,mastery,defenceman,berber,purge,interestingly,covent,promulgated,restricting,condemnation,hillsborough,walkers,privateer,intra,captaincy,naturalized,huffington,detecting,hinted,migrating,bayou,counterattack,anatomical,foraging,unsafe,swiftly,outdated,paraguayan,attire,masjid,endeavors,jerseys,triassic,quechua,growers,axial,accumulate,wastewater,cognition,fungal,animator,pagoda,kochi,uniformly,antibody,yerevan,hypotheses,combatants,italianate,draining,fragmentation,snowfall,formative,inversion,kitchener,identifier,additive,lucha,selects,ashland,cambrian,racetrack,trapping,congenital,primates,wavelengths,expansions,yeomanry,harcourt,wealthiest,awaited,punta,intervening,aggressively,vichy,piloted,midtown,tailored,heyday,metadata,guadalcanal,inorganic,hadith,pulses,francais,tangent,scandals,erroneously,tractors,pigment,constabulary,jiangsu,landfill,merton,basalt,astor,forbade,debuts,collisions,exchequer,stadion,roofed,flavour,sculptors,conservancy,dissemination,electrically,undeveloped,existent,surpassing,pentecostal,manifested,amend,formula_14,superhuman,barges,tunis,analytics,argyll,liquids,mechanized,domes,mansions,himalayan,indexing,reuters,nonlinear,purification,exiting,timbers,triangles,decommissioning,departmental,causal,fonts,americana,sept.,seasonally,incomes,razavi,sheds,memorabilia,rotational,terre,sutra,protege,yarmouth,grandmaster,annum,looted,imperialism,variability,liquidation,baptised,isotope,showcasing,milling,rationale,hammersmith,austen,streamlined,acknowledging,contentious,qaleh,breadth,turing,referees,feral,toulon,unofficially,identifiable,standout,labeling,dissatisfaction,jurgen,angrily,featherweight,cantons,constrained,dominates,standalone,relinquished,theologians,markedly,italics,downed,nitrate,likened,gules,craftsman,singaporean,pixels,mandela,moray,parity,departement,antigen,academically,burgh,brahma,arranges,wounding,triathlon,nouveau,vanuatu,banded,acknowledges,unearthed,stemming,authentication,byzantines,converge,nepali,commonplace,deteriorating,recalling,palette,mathematicians,greenish,pictorial,ahmedabad,rouen,validation,u.s.a.,'best,malvern,archers,converter,undergoes,fluorescent,logistical,notification,transvaal,illicit,symphonies,stabilization,worsened,fukuoka,decrees,enthusiast,seychelles,blogger,louvre,dignitaries,burundi,wreckage,signage,pinyin,bursts,federer,polarization,urbana,lazio,schism,nietzsche,venerable,administers,seton,kilograms,invariably,kathmandu,farmed,disqualification,earldom,appropriated,fluctuations,kermanshah,deployments,deformation,wheelbase,maratha,psalm,bytes,methyl,engravings,skirmish,fayette,vaccines,ideally,astrology,breweries,botanic,opposes,harmonies,irregularities,contended,gaulle,prowess,constants,aground,filipinos,fresco,ochreous,jaipur,willamette,quercus,eastwards,mortars,champaign,braille,reforming,horned,hunan,spacious,agitation,draught,specialties,flourishing,greensboro,necessitated,swedes,elemental,whorls,hugely,structurally,plurality,synthesizers,embassies,assad,contradictory,inference,discontent,recreated,inspectors,unicef,commuters,embryo,modifying,stints,numerals,communicated,boosted,trumpeter,brightly,adherence,remade,leases,restrained,eucalyptus,dwellers,planar,grooves,gainesville,daimler,anzac,szczecin,cornerback,prized,peking,mauritania,khalifa,motorized,lodging,instrumentalist,fortresses,cervical,formula_15,passerine,sectarian,researches,apprenticed,reliefs,disclose,gliding,repairing,queue,kyushu,literate,canoeing,sacrament,separatist,calabria,parkland,flowed,investigates,statistically,visionary,commits,dragoons,scrolls,premieres,revisited,subdued,censored,patterned,elective,outlawed,orphaned,leyland,richly,fujian,miniatures,heresy,plaques,countered,nonfiction,exponent,moravia,dispersion,marylebone,midwestern,enclave,ithaca,federated,electronically,handheld,microscopy,tolls,arrivals,climbers,continual,cossacks,moselle,deserts,ubiquitous,gables,forecasts,deforestation,vertebrates,flanking,drilled,superstructure,inspected,consultative,bypassed,ballast,subsidy,socioeconomic,relic,grenada,journalistic,administering,accommodated,collapses,appropriation,reclassified,foreword,porte,assimilated,observance,fragmented,arundel,thuringia,gonzaga,shenzhen,shipyards,sectional,ayrshire,sloping,dependencies,promenade,ecuadorian,mangrove,constructs,goalscorer,heroism,iteration,transistor,omnibus,hampstead,cochin,overshadowed,chieftain,scalar,finishers,ghanaian,abnormalities,monoplane,encyclopaedia,characterize,travancore,baronetage,bearers,biking,distributes,paving,christened,inspections,banco,humber,corinth,quadratic,albanians,lineages,majored,roadside,inaccessible,inclination,darmstadt,fianna,epilepsy,propellers,papacy,montagu,bhutto,sugarcane,optimized,pilasters,contend,batsmen,brabant,housemates,sligo,ascot,aquinas,supervisory,accorded,gerais,echoed,nunavut,conservatoire,carniola,quartermaster,gminas,impeachment,aquitaine,reformers,quarterfinal,karlsruhe,accelerator,coeducational,archduke,gelechiidae,seaplane,dissident,frenchman,palau,depots,hardcover,aachen,darreh,denominational,groningen,parcels,reluctance,drafts,elliptic,counters,decreed,airship,devotional,contradiction,formula_16,undergraduates,qualitative,guatemalan,slavs,southland,blackhawks,detrimental,abolish,chechen,manifestations,arthritis,perch,fated,hebei,peshawar,palin,immensely,havre,totalling,rampant,ferns,concourse,triples,elites,olympian,larva,herds,lipid,karabakh,distal,monotypic,vojvodina,batavia,multiplied,spacing,spellings,pedestrians,parchment,glossy,industrialization,dehydrogenase,patriotism,abolitionist,mentoring,elizabethan,figurative,dysfunction,abyss,constantin,middletown,stigma,mondays,gambia,gaius,israelites,renounced,nepalese,overcoming,buren,sulphur,divergence,predation,looting,iberia,futuristic,shelved,anthropological,innsbruck,escalated,clermont,entrepreneurial,benchmark,mechanically,detachments,populist,apocalyptic,exited,embryonic,stanza,readership,chiba,landlords,expansive,boniface,therapies,perpetrators,whitehall,kassel,masts,carriageway,clinch,pathogens,mazandaran,undesirable,teutonic,miocene,nagpur,juris,cantata,compile,diffuse,dynastic,reopening,comptroller,o'neal,flourish,electing,scientifically,departs,welded,modal,cosmology,fukushima,libertadores,chang'an,asean,generalization,localization,afrikaans,cricketers,accompanies,emigrants,esoteric,southwards,shutdown,prequel,fittings,innate,wrongly,equitable,dictionaries,senatorial,bipolar,flashbacks,semitism,walkway,lyrically,legality,sorbonne,vigorously,durga,samoan,karel,interchanges,patna,decider,registering,electrodes,anarchists,excursion,overthrown,gilan,recited,michelangelo,advertiser,kinship,taboo,cessation,formula_17,premiers,traversed,madurai,poorest,torneo,exerted,replicate,spelt,sporadically,horde,landscaping,razed,hindered,esperanto,manchuria,propellant,jalan,baha'is,sikkim,linguists,pandit,racially,ligands,dowry,francophone,escarpment,behest,magdeburg,mainstay,villiers,yangtze,grupo,conspirators,martyrdom,noticeably,lexical,kazakh,unrestricted,utilised,sired,inhabits,proofs,joseon,pliny,minted,buddhists,cultivate,interconnected,reuse,viability,australasian,derelict,resolving,overlooks,menon,stewardship,playwrights,thwarted,filmfare,disarmament,protections,bundles,sidelined,hypothesized,singer/songwriter,forage,netted,chancery,townshend,restructured,quotation,hyperbolic,succumbed,parliaments,shenandoah,apical,kibbutz,storeys,pastors,lettering,ukrainians,hardships,chihuahua,avail,aisles,taluka,antisemitism,assent,ventured,banksia,seamen,hospice,faroe,fearful,woreda,outfield,chlorine,transformer,tatar,panoramic,pendulum,haarlem,styria,cornice,importing,catalyzes,subunits,enamel,bakersfield,realignment,sorties,subordinates,deanery,townland,gunmen,tutelage,evaluations,allahabad,thrace,veneto,mennonite,sharia,subgenus,satisfies,puritan,unequal,gastrointestinal,ordinances,bacterium,horticulture,argonauts,adjectives,arable,duets,visualization,woolwich,revamped,euroleague,thorax,completes,originality,vasco,freighter,sardar,oratory,sects,extremes,signatories,exporting,arisen,exacerbated,departures,saipan,furlongs,d'italia,goring,dakar,conquests,docked,offshoot,okrug,referencing,disperse,netting,summed,rewritten,articulation,humanoid,spindle,competitiveness,preventive,facades,westinghouse,wycombe,synthase,emulate,fostering,abdel,hexagonal,myriad,caters,arjun,dismay,axiom,psychotherapy,colloquial,complemented,martinique,fractures,culmination,erstwhile,atrium,electronica,anarchism,nadal,montpellier,algebras,submitting,adopts,stemmed,overcame,internacional,asymmetric,gallipoli,gliders,flushing,extermination,hartlepool,tesla,interwar,patriarchal,hitherto,ganges,combatant,marred,philology,glastonbury,reversible,isthmus,undermined,southwark,gateshead,andalusia,remedies,hastily,optimum,smartphone,evade,patrolled,beheaded,dopamine,waivers,ugandan,gujarati,densities,predicting,intestinal,tentative,interstellar,kolonia,soloists,penetrated,rebellions,qeshlaq,prospered,colegio,deficits,konigsberg,deficient,accessing,relays,kurds,politburo,codified,incarnations,occupancy,cossack,metaphysical,deprivation,chopra,piccadilly,formula_18,makeshift,protestantism,alaskan,frontiers,faiths,tendon,dunkirk,durability,autobots,bonuses,coinciding,emails,gunboat,stucco,magma,neutrons,vizier,subscriptions,visuals,envisaged,carpets,smoky,schema,parliamentarian,immersed,domesticated,parishioners,flinders,diminutive,mahabharata,ballarat,falmouth,vacancies,gilded,twigs,mastering,clerics,dalmatia,islington,slogans,compressor,iconography,congolese,sanction,blends,bulgarians,moderator,outflow,textures,safeguard,trafalgar,tramways,skopje,colonialism,chimneys,jazeera,organisers,denoting,motivations,ganga,longstanding,deficiencies,gwynedd,palladium,holistic,fascia,preachers,embargo,sidings,busan,ignited,artificially,clearwater,cemented,northerly,salim,equivalents,crustaceans,oberliga,quadrangle,historiography,romanians,vaults,fiercely,incidental,peacetime,tonal,bhopal,oskar,radha,pesticides,timeslot,westerly,cathedrals,roadways,aldershot,connectors,brahmins,paler,aqueous,gustave,chromatic,linkage,lothian,specialises,aggregation,tributes,insurgent,enact,hampden,ghulam,federations,instigated,lyceum,fredrik,chairmanship,floated,consequent,antagonists,intimidation,patriarchate,warbler,heraldry,entrenched,expectancy,habitation,partitions,widest,launchers,nascent,ethos,wurzburg,lycee,chittagong,mahatma,merseyside,asteroids,yokosuka,cooperatives,quorum,redistricting,bureaucratic,yachts,deploying,rustic,phonology,chorale,cellist,stochastic,crucifixion,surmounted,confucian,portfolios,geothermal,crested,calibre,tropics,deferred,nasir,iqbal,persistence,essayist,chengdu,aborigines,fayetteville,bastion,interchangeable,burlesque,kilmarnock,specificity,tankers,colonels,fijian,quotations,enquiry,quito,palmerston,delle,multidisciplinary,polynesian,iodine,antennae,emphasised,manganese,baptists,galilee,jutland,latent,excursions,skepticism,tectonic,precursors,negligible,musique,misuse,vitoria,expressly,veneration,sulawesi,footed,mubarak,chongqing,chemically,midday,ravaged,facets,varma,yeovil,ethnographic,discounted,physicists,attache,disbanding,essen,shogunate,cooperated,waikato,realising,motherwell,pharmacology,sulfide,inward,expatriate,devoid,cultivar,monde,andean,groupings,goran,unaffected,moldovan,postdoctoral,coleophora,delegated,pronoun,conductivity,coleridge,disapproval,reappeared,microbial,campground,olsztyn,fostered,vaccination,rabbinical,champlain,milestones,viewership,caterpillar,effected,eupithecia,financier,inferred,uzbek,bundled,bandar,balochistan,mysticism,biosphere,holotype,symbolizes,lovecraft,photons,abkhazia,swaziland,subgroups,measurable,falkirk,valparaiso,ashok,discriminatory,rarity,tabernacle,flyweight,jalisco,westernmost,antiquarian,extracellular,margrave,colspan=9,midsummer,digestive,reversing,burgeoning,substitutes,medallist,khrushchev,guerre,folio,detonated,partido,plentiful,aggregator,medallion,infiltration,shaded,santander,fared,auctioned,permian,ramakrishna,andorra,mentors,diffraction,bukit,potentials,translucent,feminists,tiers,protracted,coburg,wreath,guelph,adventurer,he/she,vertebrate,pipelines,celsius,outbreaks,australasia,deccan,garibaldi,unionists,buildup,biochemical,reconstruct,boulders,stringent,barbed,wording,furnaces,pests,befriends,organises,popes,rizal,tentacles,cadre,tallahassee,punishments,occidental,formatted,mitigation,rulings,rubens,cascades,inducing,choctaw,volta,synagogues,movable,altarpiece,mitigate,practise,intermittently,encountering,memberships,earns,signify,retractable,amounting,pragmatic,wilfrid,dissenting,divergent,kanji,reconstituted,devonian,constitutions,levied,hendrik,starch,costal,honduran,ditches,polygon,eindhoven,superstars,salient,argus,punitive,purana,alluvial,flaps,inefficient,retracted,advantageous,quang,andersson,danville,binghamton,symbolize,conclave,shaanxi,silica,interpersonal,adept,frans,pavilions,lubbock,equip,sunken,limburg,activates,prosecutions,corinthian,venerated,shootings,retreats,parapet,orissa,riviere,animations,parodied,offline,metaphysics,bluffs,plume,piety,fruition,subsidized,steeplechase,shanxi,eurasia,angled,forecasting,suffragan,ashram,larval,labyrinth,chronicler,summaries,trailed,merges,thunderstorms,filtered,formula_19,advertisers,alpes,informatics,parti,constituting,undisputed,certifications,javascript,molten,sclerosis,rumoured,boulogne,hmong,lewes,breslau,notts,bantu,ducal,messengers,radars,nightclubs,bantamweight,carnatic,kaunas,fraternal,triggering,controversially,londonderry,visas,scarcity,offaly,uprisings,repelled,corinthians,pretext,kuomintang,kielce,empties,matriculated,pneumatic,expos,agile,treatises,midpoint,prehistory,oncology,subsets,hydra,hypertension,axioms,wabash,reiterated,swapped,achieves,premio,ageing,overture,curricula,challengers,subic,selangor,liners,frontline,shutter,validated,normalized,entertainers,molluscs,maharaj,allegation,youngstown,synth,thoroughfare,regionally,pillai,transcontinental,pedagogical,riemann,colonia,easternmost,tentatively,profiled,herefordshire,nativity,meuse,nucleotide,inhibits,huntingdon,throughput,recorders,conceding,domed,homeowners,centric,gabled,canoes,fringes,breeder,subtitled,fluoride,haplogroup,zionism,izmir,phylogeny,kharkiv,romanticism,adhesion,usaaf,delegations,lorestan,whalers,biathlon,vaulted,mathematically,pesos,skirmishes,heisman,kalamazoo,gesellschaft,launceston,interacts,quadruple,kowloon,psychoanalysis,toothed,ideologies,navigational,valence,induces,lesotho,frieze,rigging,undercarriage,explorations,spoof,eucharist,profitability,virtuoso,recitals,subterranean,sizeable,herodotus,subscriber,huxley,pivot,forewing,warring,boleslaw,bharatiya,suffixes,trois,percussionist,downturn,garrisons,philosophies,chants,mersin,mentored,dramatist,guilds,frameworks,thermodynamic,venomous,mehmed,assembling,rabbinic,hegemony,replicas,enlargement,claimant,retitled,utica,dumfries,metis,deter,assortment,tubing,afflicted,weavers,rupture,ornamentation,transept,salvaged,upkeep,callsign,rajput,stevenage,trimmed,intracellular,synchronization,consular,unfavorable,royalists,goldwyn,fasting,hussars,doppler,obscurity,currencies,amiens,acorn,tagore,townsville,gaussian,migrations,porta,anjou,graphite,seaport,monographs,gladiators,metrics,calligraphy,sculptural,swietokrzyskie,tolombeh,eredivisie,shoals,queries,carts,exempted,fiberglass,mirrored,bazar,progeny,formalized,mukherjee,professed,amazon.com,cathode,moreton,removable,mountaineers,nagano,transplantation,augustinian,steeply,epilogue,adapter,decisively,accelerating,mediaeval,substituting,tasman,devonshire,litres,enhancements,himmler,nephews,bypassing,imperfect,argentinian,reims,integrates,sochi,ascii,licences,niches,surgeries,fables,versatility,indra,footpath,afonso,crore,evaporation,encodes,shelling,conformity,simplify,updating,quotient,overt,firmware,umpires,architectures,eocene,conservatism,secretion,embroidery,f.c..,tuvalu,mosaics,shipwreck,prefectural,cohort,grievances,garnering,centerpiece,apoptosis,djibouti,bethesda,formula_20,shonen,richland,justinian,dormitories,meteorite,reliably,obtains,pedagogy,hardness,cupola,manifolds,amplification,steamers,familial,dumbarton,jerzy,genital,maidstone,salinity,grumman,signifies,presbytery,meteorology,procured,aegis,streamed,deletion,nuestra,mountaineering,accords,neuronal,khanate,grenoble,axles,dispatches,tokens,turku,auctions,propositions,planters,proclaiming,recommissioned,stravinsky,obverse,bombarded,waged,saviour,massacred,reformist,purportedly,resettlement,ravenna,embroiled,minden,revitalization,hikers,bridging,torpedoed,depletion,nizam,affectionately,latitudes,lubeck,spore,polymerase,aarhus,nazism,101st,buyout,galerie,diets,overflow,motivational,renown,brevet,deriving,melee,goddesses,demolish,amplified,tamworth,retake,brokerage,beneficiaries,henceforth,reorganised,silhouette,browsers,pollutants,peron,lichfield,encircled,defends,bulge,dubbing,flamenco,coimbatore,refinement,enshrined,grizzlies,capacitor,usefulness,evansville,interscholastic,rhodesian,bulletins,diamondbacks,rockers,platted,medalists,formosa,transporter,slabs,guadeloupe,disparate,concertos,violins,regaining,mandible,untitled,agnostic,issuance,hamiltonian,brampton,srpska,homology,downgraded,florentine,epitaph,kanye,rallying,analysed,grandstand,infinitely,antitrust,plundered,modernity,colspan=3|total,amphitheatre,doric,motorists,yemeni,carnivorous,probabilities,prelate,struts,scrapping,bydgoszcz,pancreatic,signings,predicts,compendium,ombudsman,apertura,appoints,rebbe,stereotypical,valladolid,clustered,touted,plywood,inertial,kettering,curving,d'honneur,housewives,grenadier,vandals,barbarossa,necked,waltham,reputedly,jharkhand,cistercian,pursues,viscosity,organiser,cloister,islet,stardom,moorish,himachal,strives,scripps,staggered,blasts,westwards,millimeters,angolan,hubei,agility,admirals,mordellistena,coincides,platte,vehicular,cordillera,riffs,schoolteacher,canaan,acoustics,tinged,reinforcing,concentrates,daleks,monza,selectively,musik,polynesia,exporter,reviving,macclesfield,bunkers,ballets,manors,caudal,microbiology,primes,unbroken,outcry,flocks,pakhtunkhwa,abelian,toowoomba,luminous,mould,appraisal,leuven,experimentally,interoperability,hideout,perak,specifying,knighthood,vasily,excerpt,computerized,niels,networked,byzantium,reaffirmed,geographer,obscured,fraternities,mixtures,allusion,accra,lengthened,inquest,panhandle,pigments,revolts,bluetooth,conjugate,overtaken,foray,coils,breech,streaks,impressionist,mendelssohn,intermediary,panned,suggestive,nevis,upazila,rotunda,mersey,linnaeus,anecdotes,gorbachev,viennese,exhaustive,moldavia,arcades,irrespective,orator,diminishing,predictive,cohesion,polarized,montage,avian,alienation,conus,jaffna,urbanization,seawater,extremity,editorials,scrolling,dreyfus,traverses,topographic,gunboats,extratropical,normans,correspondents,recognises,millennia,filtration,ammonium,voicing,complied,prefixes,diplomas,figurines,weakly,gated,oscillator,lucerne,embroidered,outpatient,airframe,fractional,disobedience,quarterbacks,formula_21,shinto,chiapas,epistle,leakage,pacifist,avignon,penrith,renders,mantua,screenplays,gustaf,tesco,alphabetically,rations,discharges,headland,tapestry,manipur,boolean,mediator,ebenezer,subchannel,fable,bestselling,ateneo,trademarks,recurrence,dwarfs,britannica,signifying,vikram,mediate,condensation,censuses,verbandsgemeinde,cartesian,sprang,surat,britons,chelmsford,courtenay,statistic,retina,abortions,liabilities,closures,mississauga,skyscrapers,saginaw,compounded,aristocrat,msnbc,stavanger,septa,interpretive,hinder,visibly,seeding,shutouts,irregularly,quebecois,footbridge,hydroxide,implicitly,lieutenants,simplex,persuades,midshipman,heterogeneous,officiated,crackdown,lends,tartu,altars,fractions,dissidents,tapered,modernisation,scripting,blazon,aquaculture,thermodynamics,sistan,hasidic,bellator,pavia,propagated,theorized,bedouin,transnational,mekong,chronicled,declarations,kickstarter,quotas,runtime,duquesne,broadened,clarendon,brownsville,saturation,tatars,electorates,malayan,replicated,observable,amphitheater,endorsements,referral,allentown,mormons,pantomime,eliminates,typeface,allegorical,varna,conduction,evoke,interviewer,subordinated,uyghur,landscaped,conventionally,ascend,edifice,postulated,hanja,whitewater,embarking,musicologist,tagalog,frontage,paratroopers,hydrocarbons,transliterated,nicolae,viewpoints,surrealist,asheville,falklands,hacienda,glide,opting,zimbabwean,discal,mortgages,nicaraguan,yadav,ghosh,abstracted,castilian,compositional,cartilage,intergovernmental,forfeited,importation,rapping,artes,republika,narayana,condominium,frisian,bradman,duality,marche,extremist,phosphorylation,genomes,allusions,valencian,habeas,ironworks,multiplex,harpsichord,emigrate,alternated,breda,waffen,smartphones,familiarity,regionalliga,herbaceous,piping,dilapidated,carboniferous,xviii,critiques,carcinoma,sagar,chippewa,postmodern,neapolitan,excludes,notoriously,distillation,tungsten,richness,installments,monoxide,chand,privatisation,molded,maths,projectiles,luoyang,epirus,lemma,concentric,incline,erroneous,sideline,gazetted,leopards,fibres,renovate,corrugated,unilateral,repatriation,orchestration,saeed,rockingham,loughborough,formula_22,bandleader,appellation,openness,nanotechnology,massively,tonnage,dunfermline,exposes,moored,ridership,motte,eurobasket,majoring,feats,silla,laterally,playlist,downwards,methodologies,eastbourne,daimyo,cellulose,leyton,norwalk,oblong,hibernian,opaque,insular,allegory,camogie,inactivation,favoring,masterpieces,rinpoche,serotonin,portrayals,waverley,airliner,longford,minimalist,outsourcing,excise,meyrick,qasim,organisational,synaptic,farmington,gorges,scunthorpe,zoned,tohoku,librarians,davao,decor,theatrically,brentwood,pomona,acquires,planter,capacitors,synchronous,skateboarding,coatings,turbocharged,ephraim,capitulation,scoreboard,hebrides,ensues,cereals,ailing,counterpoint,duplication,antisemitic,clique,aichi,oppressive,transcendental,incursions,rename,renumbering,powys,vestry,bitterly,neurology,supplanted,affine,susceptibility,orbiter,activating,overlaps,ecoregion,raman,canoer,darfur,microorganisms,precipitated,protruding,torun,anthropologists,rennes,kangaroos,parliamentarians,edits,littoral,archived,begum,rensselaer,microphones,ypres,empower,etruscan,wisden,montfort,calibration,isomorphic,rioting,kingship,verbally,smyrna,cohesive,canyons,fredericksburg,rahul,relativistic,micropolitan,maroons,industrialized,henchmen,uplift,earthworks,mahdi,disparity,cultured,transliteration,spiny,fragmentary,extinguished,atypical,inventors,biosynthesis,heralded,curacao,anomalies,aeroplane,surya,mangalore,maastricht,ashkenazi,fusiliers,hangzhou,emitting,monmouthshire,schwarzenegger,ramayana,peptides,thiruvananthapuram,alkali,coimbra,budding,reasoned,epithelial,harbors,rudimentary,classically,parque,ealing,crusades,rotations,riparian,pygmy,inertia,revolted,microprocessor,calendars,solvents,kriegsmarine,accademia,cheshmeh,yoruba,ardabil,mitra,genomic,notables,propagate,narrates,univision,outposts,polio,birkenhead,urinary,crocodiles,pectoral,barrymore,deadliest,rupees,chaim,protons,comical,astrophysics,unifying,formula_23,vassals,cortical,audubon,pedals,tenders,resorted,geophysical,lenders,recognising,tackling,lanarkshire,doctrinal,annan,combating,guangxi,estimating,selectors,tribunals,chambered,inhabiting,exemptions,curtailed,abbasid,kandahar,boron,bissau,150th,codenamed,wearer,whorl,adhered,subversive,famer,smelting,inserting,mogadishu,zoologist,mosul,stumps,almanac,olympiacos,stamens,participatory,cults,honeycomb,geologists,dividend,recursive,skiers,reprint,pandemic,liber,percentages,adversely,stoppage,chieftains,tubingen,southerly,overcrowding,unorganized,hangars,fulfil,hails,cantilever,woodbridge,pinus,wiesbaden,fertilization,fluorescence,enhances,plenary,troublesome,episodic,thrissur,kickboxing,allele,staffing,garda,televisions,philatelic,spacetime,bullpen,oxides,leninist,enrolling,inventive,truro,compatriot,ruskin,normative,assay,gotha,murad,illawarra,gendarmerie,strasse,mazraeh,rebounded,fanfare,liaoning,rembrandt,iranians,emirate,governs,latency,waterfowl,chairmen,katowice,aristocrats,eclipsed,sentient,sonatas,interplay,sacking,decepticons,dynamical,arbitrarily,resonant,petar,velocities,alludes,wastes,prefectures,belleville,sensibility,salvadoran,consolidating,medicaid,trainees,vivekananda,molar,porous,upload,youngster,infused,doctorates,wuhan,annihilation,enthusiastically,gamespot,kanpur,accumulating,monorail,operetta,tiling,sapporo,finns,calvinist,hydrocarbon,sparrows,orienteering,cornelis,minster,vuelta,plebiscite,embraces,panchayats,focussed,remediation,brahman,olfactory,reestablished,uniqueness,northumbria,rwandan,predominately,abode,ghats,balances,californian,uptake,bruges,inert,westerns,reprints,cairn,yarra,resurfaced,audible,rossini,regensburg,italiana,fleshy,irrigated,alerts,yahya,varanasi,marginalized,expatriates,cantonment,normandie,sahitya,directives,rounder,hulls,fictionalized,constables,inserts,hipped,potosi,navies,biologists,canteen,husbandry,augment,fortnight,assamese,kampala,o'keefe,paleolithic,bluish,promontory,consecutively,striving,niall,reuniting,dipole,friendlies,disapproved,thrived,netflix,liberian,dielectric,medway,strategist,sankt,pickups,hitters,encode,rerouted,claimants,anglesey,partitioned,cavan,flutes,reared,repainted,armaments,bowed,thoracic,balliol,piero,chaplains,dehestan,sender,junkers,sindhi,sickle,dividends,metallurgy,honorific,berths,namco,springboard,resettled,gansu,copyrighted,criticizes,utopian,bendigo,ovarian,binomial,spaceflight,oratorio,proprietors,supergroup,duplicated,foreground,strongholds,revolved,optimize,layouts,westland,hurler,anthropomorphic,excelsior,merchandising,reeds,vetoed,cryptography,hollyoaks,monash,flooring,ionian,resilience,johnstown,resolves,lawmakers,alegre,wildcards,intolerance,subculture,selector,slums,formulate,bayonet,istvan,restitution,interchangeably,awakens,rostock,serpentine,oscillation,reichstag,phenotype,recessed,piotr,annotated,preparedness,consultations,clausura,preferential,euthanasia,genoese,outcrops,freemasonry,geometrical,genesee,islets,prometheus,panamanian,thunderbolt,terraced,stara,shipwrecks,futebol,faroese,sharqi,aldermen,zeitung,unify,formula_24,humanism,syntactic,earthen,blyth,taxed,rescinded,suleiman,cymru,dwindled,vitality,superieure,resupply,adolphe,ardennes,rajiv,profiling,olympique,gestation,interfaith,milosevic,tagline,funerary,druze,silvery,plough,shrubland,relaunch,disband,nunatak,minimizing,excessively,waned,attaching,luminosity,bugle,encampment,electrostatic,minesweeper,dubrovnik,rufous,greenock,hochschule,assyrians,extracting,malnutrition,priya,attainment,anhui,connotations,predicate,seabirds,deduced,pseudonyms,gopal,plovdiv,refineries,imitated,kwazulu,terracotta,tenets,discourses,brandeis,whigs,dominions,pulmonate,landslides,tutors,determinant,richelieu,farmstead,tubercles,technicolor,hegel,redundancy,greenpeace,shortening,mules,distilled,xxiii,fundamentalist,acrylic,outbuildings,lighted,corals,signaled,transistors,cavite,austerity,76ers,exposures,dionysius,outlining,commutative,permissible,knowledgeable,howrah,assemblage,inhibited,crewmen,mbit/s,pyramidal,aberdeenshire,bering,rotates,atheism,howitzer,saone,lancet,fermented,contradicted,materiel,ofsted,numeric,uniformity,josephus,nazarene,kuwaiti,noblemen,pediment,emergent,campaigner,akademi,murcia,perugia,gallen,allsvenskan,finned,cavities,matriculation,rosters,twickenham,signatory,propel,readable,contends,artisan,flamboyant,reggio,italo,fumbles,widescreen,rectangle,centimetres,collaborates,envoys,rijeka,phonological,thinly,refractive,civilisation,reductase,cognate,dalhousie,monticello,lighthouses,jitsu,luneburg,socialite,fermi,collectible,optioned,marquee,jokingly,architecturally,kabir,concubine,nationalisation,watercolor,wicklow,acharya,pooja,leibniz,rajendra,nationalized,stalemate,bloggers,glutamate,uplands,shivaji,carolingian,bucuresti,dasht,reappears,muscat,functionally,formulations,hinged,hainan,catechism,autosomal,incremental,asahi,coeur,diversification,multilateral,fewest,recombination,finisher,harrogate,hangul,feasts,photovoltaic,paget,liquidity,alluded,incubation,applauded,choruses,malagasy,hispanics,bequest,underparts,cassava,kazimierz,gastric,eradication,mowtowr,tyrosine,archbishopric,e9e9e9,unproductive,uxbridge,hydrolysis,harbours,officio,deterministic,devonport,kanagawa,breaches,freetown,rhinoceros,chandigarh,janos,sanatorium,liberator,inequalities,agonist,hydrophobic,constructors,nagorno,snowboarding,welcomes,subscribed,iloilo,resuming,catalysts,stallions,jawaharlal,harriers,definitively,roughriders,hertford,inhibiting,elgar,randomized,incumbents,episcopate,rainforests,yangon,improperly,kemal,interpreters,diverged,uttarakhand,umayyad,phnom,panathinaikos,shabbat,diode,jiangxi,forbidding,nozzle,artistry,licensee,processions,staffs,decimated,expressionism,shingle,palsy,ontology,mahayana,maribor,sunil,hostels,edwardian,jetty,freehold,overthrew,eukaryotic,schuylkill,rawalpindi,sheath,recessive,ferenc,mandibles,berlusconi,confessor,convergent,ababa,slugging,rentals,sephardic,equivalently,collagen,markov,dynamically,hailing,depressions,sprawling,fairgrounds,indistinguishable,plutarch,pressurized,banff,coldest,braunschweig,mackintosh,sociedad,wittgenstein,tromso,airbase,lecturers,subtitle,attaches,purified,contemplated,dreamworks,telephony,prophetic,rockland,aylesbury,biscay,coherence,aleksandar,judoka,pageants,theses,homelessness,luthor,sitcoms,hinterland,fifths,derwent,privateers,enigmatic,nationalistic,instructs,superimposed,conformation,tricycle,dusan,attributable,unbeknownst,laptops,etching,archbishops,ayatollah,cranial,gharbi,interprets,lackawanna,abingdon,saltwater,tories,lender,minaj,ancillary,ranching,pembrokeshire,topographical,plagiarism,murong,marque,chameleon,assertions,infiltrated,guildhall,reverence,schenectady,formula_25,kollam,notary,mexicana,initiates,abdication,basra,theorems,ionization,dismantling,eared,censors,budgetary,numeral,verlag,excommunicated,distinguishable,quarried,cagliari,hindustan,symbolizing,watertown,descartes,relayed,enclosures,militarily,sault,devolved,dalian,djokovic,filaments,staunton,tumour,curia,villainous,decentralized,galapagos,moncton,quartets,onscreen,necropolis,brasileiro,multipurpose,alamos,comarca,jorgen,concise,mercia,saitama,billiards,entomologist,montserrat,lindbergh,commuting,lethbridge,phoenician,deviations,anaerobic,denouncing,redoubt,fachhochschule,principalities,negros,announcers,seconded,parrots,konami,revivals,approving,devotee,riyadh,overtook,morecambe,lichen,expressionist,waterline,silverstone,geffen,sternites,aspiration,behavioural,grenville,tripura,mediums,genders,pyotr,charlottesville,sacraments,programmable,ps100,shackleton,garonne,sumerian,surpass,authorizing,interlocking,lagoons,voiceless,advert,steeple,boycotted,alouettes,yosef,oxidative,sassanid,benefiting,sayyid,nauru,predetermined,idealism,maxillary,polymerization,semesters,munchen,conor,outfitted,clapham,progenitor,gheorghe,observational,recognitions,numerically,colonized,hazrat,indore,contaminants,fatality,eradicate,assyria,convocation,cameos,skillful,skoda,corfu,confucius,overtly,ramadan,wollongong,placements,d.c..,permutation,contemporaneous,voltages,elegans,universitat,samar,plunder,dwindling,neuter,antonin,sinhala,campania,solidified,stanzas,fibrous,marburg,modernize,sorcery,deutscher,florets,thakur,disruptive,infielder,disintegration,internazionale,vicariate,effigy,tripartite,corrective,klamath,environs,leavenworth,sandhurst,workmen,compagnie,hoseynabad,strabo,palisades,ordovician,sigurd,grandsons,defection,viacom,sinhalese,innovator,uncontrolled,slavonic,indexes,refrigeration,aircrew,superbike,resumption,neustadt,confrontations,arras,hindenburg,ripon,embedding,isomorphism,dwarves,matchup,unison,lofty,argos,louth,constitutionally,transitive,newington,facelift,degeneration,perceptual,aviators,enclosing,igneous,symbolically,academician,constitutionality,iso/iec,sacrificial,maturation,apprentices,enzymology,naturalistic,hajji,arthropods,abbess,vistula,scuttled,gradients,pentathlon,etudes,freedmen,melaleuca,thrice,conductive,sackville,franciscans,stricter,golds,kites,worshiped,monsignor,trios,orally,tiered,primacy,bodywork,castleford,epidemics,alveolar,chapelle,chemists,hillsboro,soulful,warlords,ngati,huguenot,diurnal,remarking,luger,motorways,gauss,jahan,cutoff,proximal,bandai,catchphrase,jonubi,ossetia,codename,codice_2,throated,itinerant,chechnya,riverfront,leela,evoked,entailed,zamboanga,rejoining,circuitry,haymarket,khartoum,feuds,braced,miyazaki,mirren,lubusz,caricature,buttresses,attrition,characterizes,widnes,evanston,materialism,contradictions,marist,midrash,gainsborough,ulithi,turkmen,vidya,escuela,patrician,inspirations,reagent,premierships,humanistic,euphrates,transitioning,belfry,zedong,adaption,kaliningrad,lobos,epics,waiver,coniferous,polydor,inductee,refitted,moraine,unsatisfactory,worsening,polygamy,rajya,nested,subgenre,broadside,stampeders,lingua,incheon,pretender,peloton,persuading,excitation,multan,predates,tonne,brackish,autoimmune,insulated,podcasts,iraqis,bodybuilding,condominiums,midlothian,delft,debtor,asymmetrical,lycaenidae,forcefully,pathogenic,tamaulipas,andaman,intravenous,advancements,senegalese,chronologically,realigned,inquirer,eusebius,dekalb,additives,shortlist,goldwater,hindustani,auditing,caterpillars,pesticide,nakhon,ingestion,lansdowne,traditionalist,northland,thunderbirds,josip,nominating,locale,ventricular,animators,verandah,epistles,surveyors,anthems,dredd,upheaval,passaic,anatolian,svalbard,associative,floodplain,taranaki,estuaries,irreducible,beginners,hammerstein,allocate,coursework,secreted,counteract,handwritten,foundational,passover,discoverer,decoding,wares,bourgeoisie,playgrounds,nazionale,abbreviations,seanad,golan,mishra,godavari,rebranding,attendances,backstory,interrupts,lettered,hasbro,ultralight,hormozgan,armee,moderne,subdue,disuse,improvisational,enrolment,persists,moderated,carinthia,hatchback,inhibitory,capitalized,anatoly,abstracts,albemarle,bergamo,insolvency,sentai,cellars,walloon,joked,kashmiri,dirac,materialized,renomination,homologous,gusts,eighteens,centrifugal,storied,baluchestan,formula_26,poincare,vettel,infuriated,gauges,streetcars,vedanta,stately,liquidated,goguryeo,swifts,accountancy,levee,acadian,hydropower,eustace,comintern,allotment,designating,torsion,molding,irritation,aerobic,halen,concerted,plantings,garrisoned,gramophone,cytoplasm,onslaught,requisitioned,relieving,genitive,centrist,jeong,espanola,dissolving,chatterjee,sparking,connaught,varese,arjuna,carpathian,empowering,meteorologist,decathlon,opioid,hohenzollern,fenced,ibiza,avionics,footscray,scrum,discounts,filament,directories,a.f.c,stiffness,quaternary,adventurers,transmits,harmonious,taizong,radiating,germantown,ejection,projectors,gaseous,nahuatl,vidyalaya,nightlife,redefined,refuted,destitute,arista,potters,disseminated,distanced,jamboree,kaohsiung,tilted,lakeshore,grained,inflicting,kreis,novelists,descendents,mezzanine,recast,fatah,deregulation,ac/dc,australis,kohgiluyeh,boreal,goths,authoring,intoxicated,nonpartisan,theodosius,pyongyang,shree,boyhood,sanfl,plenipotentiary,photosynthesis,presidium,sinaloa,honshu,texan,avenida,transmembrane,malays,acropolis,catalunya,vases,inconsistencies,methodists,quell,suisse,banat,simcoe,cercle,zealanders,discredited,equine,sages,parthian,fascists,interpolation,classifying,spinoff,yehuda,cruised,gypsum,foaled,wallachia,saraswati,imperialist,seabed,footnotes,nakajima,locales,schoolmaster,drosophila,bridgehead,immanuel,courtier,bookseller,niccolo,stylistically,portmanteau,superleague,konkani,millimetres,arboreal,thanjavur,emulation,sounders,decompression,commoners,infusion,methodological,osage,rococo,anchoring,bayreuth,formula_27,abstracting,symbolized,bayonne,electrolyte,rowed,corvettes,traversing,editorship,sampler,presidio,curzon,adirondack,swahili,rearing,bladed,lemur,pashtun,behaviours,bottling,zaire,recognisable,systematics,leeward,formulae,subdistricts,smithfield,vijaya,buoyancy,boosting,cantonal,rishi,airflow,kamakura,adana,emblems,aquifer,clustering,husayn,woolly,wineries,montessori,turntable,exponentially,caverns,espoused,pianists,vorpommern,vicenza,latterly,o'rourke,williamstown,generale,kosice,duisburg,poirot,marshy,mismanagement,mandalay,dagenham,universes,chiral,radiated,stewards,vegan,crankshaft,kyrgyz,amphibian,cymbals,infrequently,offenbach,environmentalist,repatriated,permutations,midshipmen,loudoun,refereed,bamberg,ornamented,nitric,selim,translational,dorsum,annunciation,gippsland,reflector,informational,regia,reactionary,ahmet,weathering,erlewine,legalized,berne,occupant,divas,manifests,analyzes,disproportionate,mitochondria,totalitarian,paulista,interscope,anarcho,correlate,brookfield,elongate,brunel,ordinal,precincts,volatility,equaliser,hittite,somaliland,ticketing,monochrome,ubuntu,chhattisgarh,titleholder,ranches,referendums,blooms,accommodates,merthyr,religiously,ryukyu,tumultuous,checkpoints,anode,mi'kmaq,cannonball,punctuation,remodelled,assassinations,criminology,alternates,yonge,pixar,namibian,piraeus,trondelag,hautes,lifeboats,shoal,atelier,vehemently,sadat,postcode,jainism,lycoming,undisturbed,lutherans,genomics,popmatters,tabriz,isthmian,notched,autistic,horsham,mites,conseil,bloomsbury,seung,cybertron,idris,overhauled,disbandment,idealized,goldfields,worshippers,lobbyist,ailments,paganism,herbarium,athenians,messerschmitt,faraday,entangled,'olya,untreated,criticising,howitzers,parvati,lobed,debussy,atonement,tadeusz,permeability,mueang,sepals,degli,optionally,fuelled,follies,asterisk,pristina,lewiston,congested,overpass,affixed,pleads,telecasts,stanislaus,cryptographic,friesland,hamstring,selkirk,antisubmarine,inundated,overlay,aggregates,fleur,trolleybus,sagan,ibsen,inductees,beltway,tiled,ladders,cadbury,laplace,ascetic,micronesia,conveying,bellingham,cleft,batches,usaid,conjugation,macedon,assisi,reappointed,brine,jinnah,prairies,screenwriting,oxidized,despatches,linearly,fertilizers,brazilians,absorbs,wagga,modernised,scorsese,ashraf,charlestown,esque,habitable,nizhny,lettres,tuscaloosa,esplanade,coalitions,carbohydrates,legate,vermilion,standardised,galleria,psychoanalytic,rearrangement,substation,competency,nationalised,reshuffle,reconstructions,mehdi,bougainville,receivership,contraception,enlistment,conducive,aberystwyth,solicitors,dismisses,fibrosis,montclair,homeowner,surrealism,s.h.i.e.l.d,peregrine,compilers,1790s,parentage,palmas,rzeszow,worldview,eased,svenska,housemate,bundestag,originator,enlisting,outwards,reciprocity,formula_28,carbohydrate,democratically,firefighting,romagna,acknowledgement,khomeini,carbide,quests,vedas,characteristically,guwahati,brixton,unintended,brothels,parietal,namur,sherbrooke,moldavian,baruch,milieu,undulating,laurier,entre,dijon,ethylene,abilene,heracles,paralleling,ceres,dundalk,falun,auspicious,chisinau,polarity,foreclosure,templates,ojibwe,punic,eriksson,biden,bachchan,glaciation,spitfires,norsk,nonviolent,heidegger,algonquin,capacitance,cassettes,balconies,alleles,airdate,conveys,replays,classifies,infrequent,amine,cuttings,rarer,woking,olomouc,amritsar,rockabilly,illyrian,maoist,poignant,tempore,stalinist,segmented,bandmate,mollusc,muhammed,totalled,byrds,tendered,endogenous,kottayam,aisne,oxidase,overhears,illustrators,verve,commercialization,purplish,directv,moulded,lyttelton,baptismal,captors,saracens,georgios,shorten,polity,grids,fitzwilliam,sculls,impurities,confederations,akhtar,intangible,oscillations,parabolic,harlequin,maulana,ovate,tanzanian,singularity,confiscation,qazvin,speyer,phonemes,overgrown,vicarage,gurion,undocumented,niigata,thrones,preamble,stave,interment,liiga,ataturk,aphrodite,groupe,indentured,habsburgs,caption,utilitarian,ozark,slovenes,reproductions,plasticity,serbo,dulwich,castel,barbuda,salons,feuding,lenape,wikileaks,swamy,breuning,shedding,afield,superficially,operationally,lamented,okanagan,hamadan,accolade,furthering,adolphus,fyodor,abridged,cartoonists,pinkish,suharto,cytochrome,methylation,debit,colspan=9|,refine,taoist,signalled,herding,leaved,bayan,fatherland,rampart,sequenced,negation,storyteller,occupiers,barnabas,pelicans,nadir,conscripted,railcars,prerequisite,furthered,columba,carolinas,markup,gwalior,franche,chaco,eglinton,ramparts,rangoon,metabolites,pollination,croat,televisa,holyoke,testimonial,setlist,safavid,sendai,georgians,shakespearean,galleys,regenerative,krzysztof,overtones,estado,barbary,cherbourg,obispo,sayings,composites,sainsbury,deliberation,cosmological,mahalleh,embellished,ascap,biala,pancras,calumet,grands,canvases,antigens,marianas,defenseman,approximated,seedlings,soren,stele,nuncio,immunology,testimonies,glossary,recollections,suitability,tampere,venous,cohomology,methanol,echoing,ivanovich,warmly,sterilization,imran,multiplying,whitechapel,undersea,xuanzong,tacitus,bayesian,roundhouse,correlations,rioters,molds,fiorentina,bandmates,mezzo,thani,guerilla,200th,premiums,tamils,deepwater,chimpanzees,tribesmen,selwyn,globo,turnovers,punctuated,erode,nouvelle,banbury,exponents,abolishing,helical,maimonides,endothelial,goteborg,infield,encroachment,cottonwood,mazowiecki,parable,saarbrucken,reliever,epistemology,artistes,enrich,rationing,formula_29,palmyra,subfamilies,kauai,zoran,fieldwork,arousal,creditor,friuli,celts,comoros,equated,escalation,negev,tallied,inductive,anion,netanyahu,mesoamerican,lepidoptera,aspirated,remit,westmorland,italic,crosse,vaclav,fuego,owain,balmain,venetians,ethnicities,deflected,ticino,apulia,austere,flycatcher,reprising,repressive,hauptbahnhof,subtype,ophthalmology,summarizes,eniwetok,colonisation,subspace,nymphalidae,earmarked,tempe,burnet,crests,abbots,norwegians,enlarge,ashoka,frankfort,livorno,malware,renters,singly,iliad,moresby,rookies,gustavus,affirming,alleges,legume,chekhov,studded,abdicated,suzhou,isidore,townsite,repayment,quintus,yankovic,amorphous,constructor,narrowing,industrialists,tanganyika,capitalization,connective,mughals,rarities,aerodynamics,worthing,antalya,diagnostics,shaftesbury,thracian,obstetrics,benghazi,multiplier,orbitals,livonia,roscommon,intensify,ravel,oaths,overseer,locomotion,necessities,chickasaw,strathclyde,treviso,erfurt,aortic,contemplation,accrington,markazi,predeceased,hippocampus,whitecaps,assemblyman,incursion,ethnography,extraliga,reproducing,directorship,benzene,byway,stupa,taxable,scottsdale,onondaga,favourably,countermeasures,lithuanians,thatched,deflection,tarsus,consuls,annuity,paralleled,contextual,anglian,klang,hoisted,multilingual,enacting,samaj,taoiseach,carthaginian,apologised,hydrology,entrant,seamless,inflorescences,mugabe,westerners,seminaries,wintering,penzance,mitre,sergeants,unoccupied,delimitation,discriminate,upriver,abortive,nihon,bessarabia,calcareous,buffaloes,patil,daegu,streamline,berks,chaparral,laity,conceptions,typified,kiribati,threaded,mattel,eccentricity,signified,patagonia,slavonia,certifying,adnan,astley,sedition,minimally,enumerated,nikos,goalless,walid,narendra,causa,missoula,coolant,dalek,outcrop,hybridization,schoolchildren,peasantry,afghans,confucianism,shahr,gallic,tajik,kierkegaard,sauvignon,commissar,patriarchs,tuskegee,prussians,laois,ricans,talmudic,officiating,aesthetically,baloch,antiochus,separatists,suzerainty,arafat,shading,u.s.c,chancellors,inc..,toolkit,nepenthes,erebidae,solicited,pratap,kabbalah,alchemist,caltech,darjeeling,biopic,spillway,kaiserslautern,nijmegen,bolstered,neath,pahlavi,eugenics,bureaus,retook,northfield,instantaneous,deerfield,humankind,selectivity,putative,boarders,cornhuskers,marathas,raikkonen,aliabad,mangroves,garages,gulch,karzai,poitiers,chernobyl,thane,alexios,belgrano,scion,solubility,urbanized,executable,guizhou,nucleic,tripled,equalled,harare,houseguests,potency,ghazi,repeater,overarching,regrouped,broward,ragtime,d'art,nandi,regalia,campsites,mamluk,plating,wirral,presumption,zenit,archivist,emmerdale,decepticon,carabidae,kagoshima,franconia,guarani,formalism,diagonally,submarginal,denys,walkways,punts,metrolink,hydrographic,droplets,upperside,martyred,hummingbird,antebellum,curiously,mufti,friary,chabad,czechs,shaykh,reactivity,berklee,turbonilla,tongan,sultans,woodville,unlicensed,enmity,dominicans,operculum,quarrying,watercolour,catalyzed,gatwick,'what,mesozoic,auditors,shizuoka,footballing,haldane,telemundo,appended,deducted,disseminate,o'shea,pskov,abrasive,entente,gauteng,calicut,lemurs,elasticity,suffused,scopula,staining,upholding,excesses,shostakovich,loanwords,naidu,championnat,chromatography,boasting,goaltenders,engulfed,salah,kilogram,morristown,shingles,shi'a,labourer,renditions,frantisek,jekyll,zonal,nanda,sheriffs,eigenvalues,divisione,endorsing,ushered,auvergne,cadres,repentance,freemasons,utilising,laureates,diocletian,semiconductors,o'grady,vladivostok,sarkozy,trackage,masculinity,hydroxyl,mervyn,muskets,speculations,gridiron,opportunistic,mascots,aleutian,fillies,sewerage,excommunication,borrowers,capillary,trending,sydenham,synthpop,rajah,cagayan,deportes,kedah,faure,extremism,michoacan,levski,culminates,occitan,bioinformatics,unknowingly,inciting,emulated,footpaths,piacenza,dreadnought,viceroyalty,oceanographic,scouted,combinatorial,ornithologist,cannibalism,mujahideen,independiente,cilicia,hindwing,minimized,odeon,gyorgy,rubles,purchaser,collieries,kickers,interurban,coiled,lynchburg,respondent,plzen,detractors,etchings,centering,intensification,tomography,ranjit,warblers,retelling,reinstatement,cauchy,modulus,redirected,evaluates,beginner,kalateh,perforated,manoeuvre,scrimmage,internships,megawatts,mottled,haakon,tunbridge,kalyan,summarised,sukarno,quetta,canonized,henryk,agglomeration,coahuila,diluted,chiropractic,yogyakarta,talladega,sheik,cation,halting,reprisals,sulfuric,musharraf,sympathizers,publicised,arles,lectionary,fracturing,startups,sangha,latrobe,rideau,ligaments,blockading,cremona,lichens,fabaceae,modulated,evocative,embodies,battersea,indistinct,altai,subsystem,acidity,somatic,formula_30,tariq,rationality,sortie,ashlar,pokal,cytoplasmic,valour,bangla,displacing,hijacking,spectrometry,westmeath,weill,charing,goias,revolvers,individualized,tenured,nawaz,piquet,chanted,discard,bernd,phalanx,reworking,unilaterally,subclass,yitzhak,piloting,circumvent,disregarded,semicircular,viscous,tibetans,endeavours,retaliated,cretan,vienne,workhouse,sufficiency,aurangzeb,legalization,lipids,expanse,eintracht,sanjak,megas,125th,bahraini,yakima,eukaryotes,thwart,affirmation,peloponnese,retailing,carbonyl,chairwoman,macedonians,dentate,rockaway,correctness,wealthier,metamorphic,aragonese,fermanagh,pituitary,schrodinger,evokes,spoiler,chariots,akita,genitalia,combe,confectionery,desegregation,experiential,commodores,persepolis,viejo,restorations,virtualization,hispania,printmaking,stipend,yisrael,theravada,expended,radium,tweeted,polygonal,lippe,charente,leveraged,cutaneous,fallacy,fragrant,bypasses,elaborately,rigidity,majid,majorca,kongo,plasmodium,skits,audiovisual,eerste,staircases,prompts,coulthard,northwestward,riverdale,beatrix,copyrights,prudential,communicates,mated,obscenity,asynchronous,analyse,hansa,searchlight,farnborough,patras,asquith,qarah,contours,fumbled,pasteur,redistributed,almeria,sanctuaries,jewry,israelite,clinicians,koblenz,bookshop,affective,goulburn,panelist,sikorsky,cobham,mimics,ringed,portraiture,probabilistic,girolamo,intelligible,andalusian,jalal,athenaeum,eritrean,auxiliaries,pittsburg,devolution,sangam,isolating,anglers,cronulla,annihilated,kidderminster,synthesize,popularised,theophilus,bandstand,innumerable,chagrin,retroactively,weser,multiples,birdlife,goryeo,pawnee,grosser,grappling,tactile,ahmadinejad,turboprop,erdogan,matchday,proletarian,adhering,complements,austronesian,adverts,luminaries,archeology,impressionism,conifer,sodomy,interracial,platoons,lessen,postings,pejorative,registrations,cookery,persecutions,microbes,audits,idiosyncratic,subsp,suspensions,restricts,colouring,ratify,instrumentals,nucleotides,sulla,posits,bibliotheque,diameters,oceanography,instigation,subsumed,submachine,acceptor,legation,borrows,sedge,discriminated,loaves,insurers,highgate,detectable,abandons,kilns,sportscaster,harwich,iterations,preakness,arduous,tensile,prabhu,shortwave,philologist,shareholding,vegetative,complexities,councilors,distinctively,revitalize,automaton,amassing,montreux,khanh,surabaya,nurnberg,pernambuco,cuisines,charterhouse,firsts,tercera,inhabitant,homophobia,naturalism,einar,powerplant,coruna,entertainments,whedon,rajputs,raton,democracies,arunachal,oeuvre,wallonia,jeddah,trolleybuses,evangelism,vosges,kiowa,minimise,encirclement,undertakes,emigrant,beacons,deepened,grammars,publius,preeminent,seyyed,repechage,crafting,headingley,osteopathic,lithography,hotly,bligh,inshore,betrothed,olympians,formula_31,dissociation,trivandrum,arran,petrovic,stettin,disembarked,simplification,bronzes,philo,acrobatic,jonsson,conjectured,supercharged,kanto,detects,cheeses,correlates,harmonics,lifecycle,sudamericana,reservists,decayed,elitserien,parametric,113th,dusky,hogarth,modulo,symbiotic,monopolies,discontinuation,converges,southerners,tucuman,eclipses,enclaves,emits,famicom,caricatures,artistically,levelled,mussels,erecting,mouthparts,cunard,octaves,crucible,guardia,unusable,lagrangian,droughts,ephemeral,pashto,canis,tapering,sasebo,silurian,metallurgical,outscored,evolves,reissues,sedentary,homotopy,greyhawk,reagents,inheriting,onshore,tilting,rebuffed,reusable,naturalists,basingstoke,insofar,offensives,dravidian,curators,planks,rajan,isoforms,flagstaff,preside,globular,egalitarian,linkages,biographers,goalscorers,molybdenum,centralised,nordland,jurists,ellesmere,rosberg,hideyoshi,restructure,biases,borrower,scathing,redress,tunnelling,workflow,magnates,mahendra,dissenters,plethora,transcriptions,handicrafts,keyword,xi'an,petrograd,unser,prokofiev,90deg,madan,bataan,maronite,kearny,carmarthen,termini,consulates,disallowed,rockville,bowery,fanzine,docklands,bests,prohibitions,yeltsin,selassie,naturalization,realisation,dispensary,tribeca,abdulaziz,pocahontas,stagnation,pamplona,cuneiform,propagating,subsurface,christgau,epithelium,schwerin,lynching,routledge,hanseatic,upanishad,glebe,yugoslavian,complicity,endowments,girona,mynetworktv,entomology,plinth,ba'ath,supercup,torus,akkadian,salted,englewood,commandery,belgaum,prefixed,colorless,dartford,enthroned,caesarea,nominative,sandown,safeguards,hulled,formula_32,leamington,dieppe,spearhead,generalizations,demarcation,llanelli,masque,brickwork,recounting,sufism,strikingly,petrochemical,onslow,monologues,emigrating,anderlecht,sturt,hossein,sakhalin,subduction,novices,deptford,zanjan,airstrikes,coalfield,reintroduction,timbaland,hornby,messianic,stinging,universalist,situational,radiocarbon,strongman,rowling,saloons,traffickers,overran,fribourg,cambrai,gravesend,discretionary,finitely,archetype,assessor,pilipinas,exhumed,invocation,interacted,digitized,timisoara,smelter,teton,sexism,precepts,srinagar,pilsudski,carmelite,hanau,scoreline,hernando,trekking,blogging,fanbase,wielded,vesicles,nationalization,banja,rafts,motoring,luang,takeda,girder,stimulates,histone,sunda,nanoparticles,attains,jumpers,catalogued,alluding,pontus,ancients,examiners,shinkansen,ribbentrop,reimbursement,pharmacological,ramat,stringed,imposes,cheaply,transplanted,taiping,mizoram,looms,wallabies,sideman,kootenay,encased,sportsnet,revolutionized,tangier,benthic,runic,pakistanis,heatseekers,shyam,mishnah,presbyterians,stadt,sutras,straddles,zoroastrian,infer,fueling,gymnasts,ofcom,gunfight,journeyman,tracklist,oshawa,ps500,pa'in,mackinac,xiongnu,mississippian,breckinridge,freemason,bight,autoroute,liberalization,distantly,thrillers,solomons,presumptive,romanization,anecdotal,bohemians,unpaved,milder,concurred,spinners,alphabets,strenuous,rivieres,kerrang,mistreatment,dismounted,intensively,carlist,dancehall,shunting,pluralism,trafficked,brokered,bonaventure,bromide,neckar,designates,malian,reverses,sotheby,sorghum,serine,environmentalists,languedoc,consulship,metering,bankstown,handlers,militiamen,conforming,regularity,pondicherry,armin,capsized,consejo,capitalists,drogheda,granular,purged,acadians,endocrine,intramural,elicit,terns,orientations,miklos,omitting,apocryphal,slapstick,brecon,pliocene,affords,typography,emigre,tsarist,tomasz,beset,nishi,necessitating,encyclical,roleplaying,journeyed,inflow,sprints,progressives,novosibirsk,cameroonian,ephesus,speckled,kinshasa,freiherr,burnaby,dalmatian,torrential,rigor,renegades,bhakti,nurburgring,cosimo,convincingly,reverting,visayas,lewisham,charlottetown,charadriiformesfamily,transferable,jodhpur,converters,deepening,camshaft,underdeveloped,protease,polonia,uterine,quantify,tobruk,dealerships,narasimha,fortran,inactivity,1780s,victors,categorised,naxos,workstation,skink,sardinian,chalice,precede,dammed,sondheim,phineas,tutored,sourcing,uncompromising,placer,tyneside,courtiers,proclaims,pharmacies,hyogo,booksellers,sengoku,kursk,spectrometer,countywide,wielkopolski,bobsleigh,shetty,llywelyn,consistory,heretics,guinean,cliches,individualism,monolithic,imams,usability,bursa,deliberations,railings,torchwood,inconsistency,balearic,stabilizer,demonstrator,facet,radioactivity,outboard,educates,d'oyly,heretical,handover,jurisdictional,shockwave,hispaniola,conceptually,routers,unaffiliated,trentino,formula_33,cypriots,intervenes,neuchatel,formulating,maggiore,delisted,alcohols,thessaly,potable,estimator,suborder,fluency,mimicry,clergymen,infrastructures,rivals.com,baroda,subplot,majlis,plano,clinching,connotation,carinae,savile,intercultural,transcriptional,sandstones,ailerons,annotations,impresario,heinkel,scriptural,intermodal,astrological,ribbed,northeastward,posited,boers,utilise,kalmar,phylum,breakwater,skype,textured,guideline,azeri,rimini,massed,subsidence,anomalous,wolfsburg,polyphonic,accrediting,vodacom,kirov,captaining,kelantan,logie,fervent,eamon,taper,bundeswehr,disproportionately,divination,slobodan,pundits,hispano,kinetics,reunites,makati,ceasing,statistician,amending,chiltern,eparchy,riverine,melanoma,narragansett,pagans,raged,toppled,breaching,zadar,holby,dacian,ochre,velodrome,disparities,amphoe,sedans,webpage,williamsport,lachlan,groton,baring,swastika,heliport,unwillingness,razorbacks,exhibitors,foodstuffs,impacting,tithe,appendages,dermot,subtypes,nurseries,balinese,simulating,stary,remakes,mundi,chautauqua,geologically,stockade,hakka,dilute,kalimantan,pahang,overlapped,fredericton,baha'u'llah,jahangir,damping,benefactors,shomali,triumphal,cieszyn,paradigms,shielded,reggaeton,maharishi,zambian,shearing,golestan,mirroring,partitioning,flyover,songbook,incandescent,merrimack,huguenots,sangeet,vulnerabilities,trademarked,drydock,tantric,honoris,queenstown,labelling,iterative,enlists,statesmen,anglicans,herge,qinghai,burgundian,islami,delineated,zhuge,aggregated,banknote,qatari,suitably,tapestries,asymptotic,charleroi,majorities,pyramidellidae,leanings,climactic,tahir,ramsar,suppressor,revisionist,trawler,ernakulam,penicillium,categorization,slits,entitlement,collegium,earths,benefice,pinochet,puritans,loudspeaker,stockhausen,eurocup,roskilde,alois,jaroslav,rhondda,boutiques,vigor,neurotransmitter,ansar,malden,ferdinando,sported,relented,intercession,camberwell,wettest,thunderbolts,positional,oriel,cloverleaf,penalized,shoshone,rajkumar,completeness,sharjah,chromosomal,belgians,woolen,ultrasonic,sequentially,boleyn,mordella,microsystems,initiator,elachista,mineralogy,rhododendron,integrals,compostela,hamza,sawmills,stadio,berlioz,maidens,stonework,yachting,tappeh,myocardial,laborer,workstations,costumed,nicaea,lanark,roundtable,mashhad,nablus,algonquian,stuyvesant,sarkar,heroines,diwan,laments,intonation,intrigues,almaty,feuded,grandes,algarve,rehabilitate,macrophages,cruciate,dismayed,heuristic,eliezer,kozhikode,covalent,finalised,dimorphism,yaroslavl,overtaking,leverkusen,middlebury,feeders,brookings,speculates,insoluble,lodgings,jozsef,cysteine,shenyang,habilitation,spurious,brainchild,mtdna,comique,albedo,recife,partick,broadening,shahi,orientated,himalaya,swabia,palme,mennonites,spokeswoman,conscripts,sepulchre,chartres,eurozone,scaffold,invertebrate,parishad,bagan,heian,watercolors,basse,supercomputer,commences,tarragona,plainfield,arthurian,functor,identically,murex,chronicling,pressings,burrowing,histoire,guayaquil,goalkeeping,differentiable,warburg,machining,aeneas,kanawha,holocene,ramesses,reprisal,qingdao,avatars,turkestan,cantatas,besieging,repudiated,teamsters,equipping,hydride,ahmadiyya,euston,bottleneck,computations,terengganu,kalinga,stela,rediscovery,'this,azhar,stylised,karelia,polyethylene,kansai,motorised,lounges,normalization,calculators,1700s,goalkeepers,unfolded,commissary,cubism,vignettes,multiverse,heaters,briton,sparingly,childcare,thorium,plock,riksdag,eunuchs,catalysis,limassol,perce,uncensored,whitlam,ulmus,unites,mesopotamian,refraction,biodiesel,forza,fulda,unseated,mountbatten,shahrak,selenium,osijek,mimicking,antimicrobial,axons,simulcasting,donizetti,swabian,sportsmen,hafiz,neared,heraclius,locates,evaded,subcarpathian,bhubaneswar,negeri,jagannath,thaksin,aydin,oromo,lateran,goldsmiths,multiculturalism,cilia,mihai,evangelists,lorient,qajar,polygons,vinod,mechanised,anglophone,prefabricated,mosses,supervillain,airliners,biofuels,iodide,innovators,valais,wilberforce,logarithm,intelligentsia,dissipation,sanctioning,duchies,aymara,porches,simulators,mostar,telepathic,coaxial,caithness,burghs,fourths,stratification,joaquim,scribes,meteorites,monarchist,germination,vries,desiring,replenishment,istria,winemaking,tammany,troupes,hetman,lanceolate,pelagic,triptych,primeira,scant,outbound,hyphae,denser,bentham,basie,normale,executes,ladislaus,kontinental,herat,cruiserweight,activision,customization,manoeuvres,inglewood,northwood,waveform,investiture,inpatient,alignments,kiryat,rabat,archimedes,ustad,monsanto,archetypal,kirkby,sikhism,correspondingly,catskill,overlaid,petrels,widowers,unicameral,federalists,metalcore,gamerankings,mussel,formula_34,lymphocytes,cystic,southgate,vestiges,immortals,kalam,strove,amazons,pocono,sociologists,sopwith,adheres,laurens,caregivers,inspecting,transylvanian,rebroadcast,rhenish,miserables,pyrams,blois,newtonian,carapace,redshirt,gotland,nazir,unilever,distortions,linebackers,federalism,mombasa,lumen,bernoulli,favouring,aligarh,denounce,steamboats,dnieper,stratigraphic,synths,bernese,umass,icebreaker,guanajuato,heisenberg,boldly,diodes,ladakh,dogmatic,scriptwriter,maritimes,battlestar,symposia,adaptable,toluca,bhavan,nanking,ieyasu,picardy,soybean,adalbert,brompton,deutsches,brezhnev,glandular,laotian,hispanicized,ibadan,personification,dalit,yamuna,regio,dispensed,yamagata,zweibrucken,revising,fandom,stances,participle,flavours,khitan,vertebral,crores,mayaguez,dispensation,guntur,undefined,harpercollins,unionism,meena,leveling,philippa,refractory,telstra,judea,attenuation,pylons,elaboration,elegy,edging,gracillariidae,residencies,absentia,reflexive,deportations,dichotomy,stoves,sanremo,shimon,menachem,corneal,conifers,mordellidae,facsimile,diagnoses,cowper,citta,viticulture,divisive,riverview,foals,mystics,polyhedron,plazas,airspeed,redgrave,motherland,impede,multiplicity,barrichello,airships,pharmacists,harvester,clays,payloads,differentiating,popularize,caesars,tunneling,stagnant,circadian,indemnity,sensibilities,musicology,prefects,serfs,metra,lillehammer,carmarthenshire,kiosks,welland,barbican,alkyl,tillandsia,gatherers,asociacion,showings,bharati,brandywine,subversion,scalable,pfizer,dawla,barium,dardanelles,nsdap,konig,ayutthaya,hodgkin,sedimentation,completions,purchasers,sponsorships,maximizing,banked,taoism,minot,enrolls,fructose,aspired,capuchin,outages,artois,carrollton,totality,osceola,pawtucket,fontainebleau,converged,queretaro,competencies,botha,allotments,sheaf,shastri,obliquely,banding,catharines,outwardly,monchengladbach,driest,contemplative,cassini,ranga,pundit,kenilworth,tiananmen,disulfide,formula_35,townlands,codice_3,looping,caravans,rachmaninoff,segmentation,fluorine,anglicised,gnostic,dessau,discern,reconfigured,altrincham,rebounding,battlecruiser,ramblers,1770s,convective,triomphe,miyagi,mourners,instagram,aloft,breastfeeding,courtyards,folkestone,changsha,kumamoto,saarland,grayish,provisionally,appomattox,uncial,classicism,mahindra,elapsed,supremes,monophyletic,cautioned,formula_36,noblewoman,kernels,sucre,swaps,bengaluru,grenfell,epicenter,rockhampton,worshipful,licentiate,metaphorical,malankara,amputated,wattle,palawan,tankobon,nobunaga,polyhedra,transduction,jilin,syrians,affinities,fluently,emanating,anglicized,sportscar,botanists,altona,dravida,chorley,allocations,kunming,luanda,premiering,outlived,mesoamerica,lingual,dissipating,impairments,attenborough,balustrade,emulator,bakhsh,cladding,increments,ascents,workington,qal'eh,winless,categorical,petrel,emphasise,dormer,toros,hijackers,telescopic,solidly,jankovic,cession,gurus,madoff,newry,subsystems,northside,talib,englishmen,farnese,holographic,electives,argonne,scrivener,predated,brugge,nauvoo,catalyses,soared,siddeley,graphically,powerlifting,funicular,sungai,coercive,fusing,uncertainties,locos,acetic,diverge,wedgwood,dressings,tiebreaker,didactic,vyacheslav,acreage,interplanetary,battlecruisers,sunbury,alkaloids,hairpin,automata,wielkie,interdiction,plugins,monkees,nudibranch,esporte,approximations,disabling,powering,characterisation,ecologically,martinsville,termen,perpetuated,lufthansa,ascendancy,motherboard,bolshoi,athanasius,prunus,dilution,invests,nonzero,mendocino,charan,banque,shaheed,counterculture,unita,voivode,hospitalization,vapour,supermarine,resistor,steppes,osnabruck,intermediates,benzodiazepines,sunnyside,privatized,geopolitical,ponta,beersheba,kievan,embody,theoretic,sangh,cartographer,blige,rotors,thruway,battlefields,discernible,demobilized,broodmare,colouration,sagas,policymakers,serialization,augmentation,hoare,frankfurter,transnistria,kinases,detachable,generational,converging,antiaircraft,khaki,bimonthly,coadjutor,arkhangelsk,kannur,buffers,livonian,northwich,enveloped,cysts,yokozuna,herne,beeching,enron,virginian,woollen,excepting,competitively,outtakes,recombinant,hillcrest,clearances,pathe,cumbersome,brasov,u.s.a,likud,christiania,cruciform,hierarchies,wandsworth,lupin,resins,voiceover,sitar,electrochemical,mediacorp,typhus,grenadiers,hepatic,pompeii,weightlifter,bosniak,oxidoreductase,undersecretary,rescuers,ranji,seleucid,analysing,exegesis,tenancy,toure,kristiansand,110th,carillon,minesweepers,poitou,acceded,palladian,redevelop,naismith,rifled,proletariat,shojo,hackensack,harvests,endpoint,kuban,rosenborg,stonehenge,authorisation,jacobean,revocation,compatriots,colliding,undetermined,okayama,acknowledgment,angelou,fresnel,chahar,ethereal,mg/kg,emmet,mobilised,unfavourable,cultura,characterizing,parsonage,skeptics,expressways,rabaul,medea,guardsmen,visakhapatnam,caddo,homophobic,elmwood,encircling,coexistence,contending,seljuk,mycologist,infertility,moliere,insolvent,covenants,underpass,holme,landesliga,workplaces,delinquency,methamphetamine,contrived,tableau,tithes,overlying,usurped,contingents,spares,oligocene,molde,beatification,mordechai,balloting,pampanga,navigators,flowered,debutant,codec,orogeny,newsletters,solon,ambivalent,ubisoft,archdeaconry,harpers,kirkus,jabal,castings,kazhagam,sylhet,yuwen,barnstaple,amidships,causative,isuzu,watchtower,granules,canaveral,remuneration,insurer,payout,horizonte,integrative,attributing,kiwis,skanderbeg,asymmetry,gannett,urbanism,disassembled,unaltered,precluded,melodifestivalen,ascends,plugin,gurkha,bisons,stakeholder,industrialisation,abbotsford,sextet,bustling,uptempo,slavia,choreographers,midwives,haram,javed,gazetteer,subsection,natively,weighting,lysine,meera,redbridge,muchmusic,abruzzo,adjoins,unsustainable,foresters,kbit/s,cosmopterigidae,secularism,poetics,causality,phonograph,estudiantes,ceausescu,universitario,adjoint,applicability,gastropods,nagaland,kentish,mechelen,atalanta,woodpeckers,lombards,gatineau,romansh,avraham,acetylcholine,perturbation,galois,wenceslaus,fuzhou,meandering,dendritic,sacristy,accented,katha,therapeutics,perceives,unskilled,greenhouses,analogues,chaldean,timbre,sloped,volodymyr,sadiq,maghreb,monogram,rearguard,caucuses,mures,metabolite,uyezd,determinism,theosophical,corbet,gaels,disruptions,bicameral,ribosomal,wolseley,clarksville,watersheds,tarsi,radon,milanese,discontinuous,aristotelian,whistleblower,representational,hashim,modestly,localised,atrial,hazara,ravana,troyes,appointees,rubus,morningside,amity,aberdare,ganglia,wests,zbigniew,aerobatic,depopulated,corsican,introspective,twinning,hardtop,shallower,cataract,mesolithic,emblematic,graced,lubrication,republicanism,voronezh,bastions,meissen,irkutsk,oboes,hokkien,sprites,tenet,individualist,capitulated,oakville,dysentery,orientalist,hillsides,keywords,elicited,incised,lagging,apoel,lengthening,attractiveness,marauders,sportswriter,decentralization,boltzmann,contradicts,draftsman,precipitate,solihull,norske,consorts,hauptmann,riflemen,adventists,syndromes,demolishing,customize,continuo,peripherals,seamlessly,linguistically,bhushan,orphanages,paraul,lessened,devanagari,quarto,responders,patronymic,riemannian,altoona,canonization,honouring,geodetic,exemplifies,republica,enzymatic,porters,fairmount,pampa,sufferers,kamchatka,conjugated,coachella,uthman,repositories,copious,headteacher,awami,phoneme,homomorphism,franconian,moorland,davos,quantified,kamloops,quarks,mayoralty,weald,peacekeepers,valerian,particulate,insiders,perthshire,caches,guimaraes,piped,grenadines,kosciuszko,trombonist,artemisia,covariance,intertidal,soybeans,beatified,ellipse,fruiting,deafness,dnipropetrovsk,accrued,zealous,mandala,causation,junius,kilowatt,bakeries,montpelier,airdrie,rectified,bungalows,toleration,debian,pylon,trotskyist,posteriorly,two-and-a-half,herbivorous,islamists,poetical,donne,wodehouse,frome,allium,assimilate,phonemic,minaret,unprofitable,darpa,untenable,leaflet,bitcoin,zahir,thresholds,argentino,jacopo,bespoke,stratified,wellbeing,shiite,basaltic,timberwolves,secrete,taunts,marathons,isomers,carre,consecrators,penobscot,pitcairn,sakha,crosstown,inclusions,impassable,fenders,indre,uscgc,jordi,retinue,logarithmic,pilgrimages,railcar,cashel,blackrock,macroscopic,aligning,tabla,trestle,certify,ronson,palps,dissolves,thickened,silicate,taman,walsingham,hausa,lowestoft,rondo,oleksandr,cuyahoga,retardation,countering,cricketing,holborn,identifiers,hells,geophysics,infighting,sculpting,balaji,webbed,irradiation,runestone,trusses,oriya,sojourn,forfeiture,colonize,exclaimed,eucharistic,lackluster,glazing,northridge,gutenberg,stipulates,macroeconomic,priori,outermost,annular,udinese,insulating,headliner,godel,polytope,megalithic,salix,sharapova,derided,muskegon,braintree,plateaus,confers,autocratic,isomer,interstitial,stamping,omits,kirtland,hatchery,evidences,intifada,111th,podgorica,capua,motivating,nuneaton,jakub,korsakov,amitabh,mundial,monrovia,gluten,predictor,marshalling,d'orleans,levers,touchscreen,brantford,fricative,banishment,descendent,antagonism,ludovico,loudspeakers,formula_37,livelihoods,manassas,steamships,dewsbury,uppermost,humayun,lures,pinnacles,dependents,lecce,clumps,observatories,paleozoic,dedicating,samiti,draughtsman,gauls,incite,infringing,nepean,pythagorean,convents,triumvirate,seigneur,gaiman,vagrant,fossa,byproduct,serrated,renfrewshire,sheltering,achaemenid,dukedom,catchers,sampdoria,platelet,bielefeld,fluctuating,phenomenology,strikeout,ethnology,prospectors,woodworking,tatra,wildfires,meditations,agrippa,fortescue,qureshi,wojciech,methyltransferase,accusative,saatchi,amerindian,volcanism,zeeland,toyama,vladimirovich,allege,polygram,redox,budgeted,advisories,nematode,chipset,starscream,tonbridge,hardening,shales,accompanist,paraded,phonographic,whitefish,sportive,audiobook,kalisz,hibernation,latif,duels,ps200,coxeter,nayak,safeguarding,cantabria,minesweeping,zeiss,dunams,catholicos,sawtooth,ontological,nicobar,bridgend,unclassified,intrinsically,hanoverian,rabbitohs,kenseth,alcalde,northumbrian,raritan,septuagint,presse,sevres,origen,dandenong,peachtree,intersected,impeded,usages,hippodrome,novara,trajectories,customarily,yardage,inflected,yanow,kalan,taverns,liguria,librettist,intermarriage,1760s,courant,gambier,infanta,ptolemaic,ukulele,haganah,sceptical,manchukuo,plexus,implantation,hilal,intersex,efficiencies,arbroath,hagerstown,adelphi,diario,marais,matti,lifes,coining,modalities,divya,bletchley,conserving,ivorian,mithridates,generative,strikeforce,laymen,toponymy,pogrom,satya,meticulously,agios,dufferin,yaakov,fortnightly,cargoes,deterrence,prefrontal,przemysl,mitterrand,commemorations,chatsworth,gurdwara,abuja,chakraborty,badajoz,geometries,artiste,diatonic,ganglion,presides,marymount,nanak,cytokines,feudalism,storks,rowers,widens,politico,evangelicals,assailants,pittsfield,allowable,bijapur,telenovelas,dichomeris,glenelg,herbivores,keita,inked,radom,fundraisers,constantius,boheme,portability,komnenos,crystallography,derrida,moderates,tavistock,fateh,spacex,disjoint,bristles,commercialized,interwoven,empirically,regius,bulacan,newsday,showa,radicalism,yarrow,pleura,sayed,structuring,cotes,reminiscences,acetyl,edicts,escalators,aomori,encapsulated,legacies,bunbury,placings,fearsome,postscript,powerfully,keighley,hildesheim,amicus,crevices,deserters,benelux,aurangabad,freeware,ioannis,carpathians,chirac,seceded,prepaid,landlocked,naturalised,yanukovych,soundscan,blotch,phenotypic,determinants,twente,dictatorial,giessen,composes,recherche,pathophysiology,inventories,ayurveda,elevating,gravestone,degeneres,vilayet,popularizing,spartanburg,bloemfontein,previewed,renunciation,genotype,ogilvy,tracery,blacklisted,emissaries,diploid,disclosures,tupolev,shinjuku,antecedents,pennine,braganza,bhattacharya,countable,spectroscopic,ingolstadt,theseus,corroborated,compounding,thrombosis,extremadura,medallions,hasanabad,lambton,perpetuity,glycol,besancon,palaiologos,pandey,caicos,antecedent,stratum,laserdisc,novitiate,crowdfunding,palatal,sorceress,dassault,toughness,celle,cezanne,vientiane,tioga,hander,crossbar,gisborne,cursor,inspectorate,serif,praia,sphingidae,nameplate,psalter,ivanovic,sitka,equalised,mutineers,sergius,outgrowth,creationism,haredi,rhizomes,predominate,undertakings,vulgate,hydrothermal,abbeville,geodesic,kampung,physiotherapy,unauthorised,asteraceae,conservationist,minoan,supersport,mohammadabad,cranbrook,mentorship,legitimately,marshland,datuk,louvain,potawatomi,carnivores,levies,lyell,hymnal,regionals,tinto,shikoku,conformal,wanganui,beira,lleida,standstill,deloitte,formula_40,corbusier,chancellery,mixtapes,airtime,muhlenberg,formula_39,bracts,thrashers,prodigious,gironde,chickamauga,uyghurs,substitutions,pescara,batangas,gregarious,gijon,paleo,mathura,pumas,proportionally,hawkesbury,yucca,kristiania,funimation,fluted,eloquence,mohun,aftermarket,chroniclers,futurist,nonconformist,branko,mannerisms,lesnar,opengl,altos,retainers,ashfield,shelbourne,sulaiman,divisie,gwent,locarno,lieder,minkowski,bivalve,redeployed,cartography,seaway,bookings,decays,ostend,antiquaries,pathogenesis,formula_38,chrysalis,esperance,valli,motogp,homelands,bridged,bloor,ghazal,vulgaris,baekje,prospector,calculates,debtors,hesperiidae,titian,returner,landgrave,frontenac,kelowna,pregame,castelo,caius,canoeist,watercolours,winterthur,superintendents,dissonance,dubstep,adorn,matic,salih,hillel,swordsman,flavoured,emitter,assays,monongahela,deeded,brazzaville,sufferings,babylonia,fecal,umbria,astrologer,gentrification,frescos,phasing,zielona,ecozone,candido,manoj,quadrilateral,gyula,falsetto,prewar,puntland,infinitive,contraceptive,bakhtiari,ohrid,socialization,tailplane,evoking,havelock,macapagal,plundering,104th,keynesian,templars,phrasing,morphologically,czestochowa,humorously,catawba,burgas,chiswick,ellipsoid,kodansha,inwards,gautama,katanga,orthopaedic,heilongjiang,sieges,outsourced,subterminal,vijayawada,hares,oration,leitrim,ravines,manawatu,cryogenic,tracklisting,about.com,ambedkar,degenerated,hastened,venturing,lobbyists,shekhar,typefaces,northcote,rugen,'good,ornithology,asexual,hemispheres,unsupported,glyphs,spoleto,epigenetic,musicianship,donington,diogo,kangxi,bisected,polymorphism,megawatt,salta,embossed,cheetahs,cruzeiro,unhcr,aristide,rayleigh,maturing,indonesians,noire,llano,ffffff,camus,purges,annales,convair,apostasy,algol,phage,apaches,marketers,aldehyde,pompidou,kharkov,forgeries,praetorian,divested,retrospectively,gornji,scutellum,bitumen,pausanias,magnification,imitations,nyasaland,geographers,floodlights,athlone,hippolyte,expositions,clarinetist,razak,neutrinos,rotax,sheykh,plush,interconnect,andalus,cladogram,rudyard,resonator,granby,blackfriars,placido,windscreen,sahel,minamoto,haida,cations,emden,blackheath,thematically,blacklist,pawel,disseminating,academical,undamaged,raytheon,harsher,powhatan,ramachandran,saddles,paderborn,capping,zahra,prospecting,glycine,chromatin,profane,banska,helmand,okinawan,dislocation,oscillators,insectivorous,foyle,gilgit,autonomic,tuareg,sluice,pollinated,multiplexed,granary,narcissus,ranchi,staines,nitra,goalscoring,midwifery,pensioners,algorithmic,meetinghouse,biblioteca,besar,narva,angkor,predate,lohan,cyclical,detainee,occipital,eventing,faisalabad,dartmoor,kublai,courtly,resigns,radii,megachilidae,cartels,shortfall,xhosa,unregistered,benchmarks,dystopian,bulkhead,ponsonby,jovanovic,accumulates,papuan,bhutanese,intuitively,gotaland,headliners,recursion,dejan,novellas,diphthongs,imbued,withstood,analgesic,amplify,powertrain,programing,maidan,alstom,affirms,eradicated,summerslam,videogame,molla,severing,foundered,gallium,atmospheres,desalination,shmuel,howmeh,catolica,bossier,reconstructing,isolates,lyase,tweets,unconnected,tidewater,divisible,cohorts,orebro,presov,furnishing,folklorist,simplifying,centrale,notations,factorization,monarchies,deepen,macomb,facilitation,hennepin,declassified,redrawn,microprocessors,preliminaries,enlarging,timeframe,deutschen,shipbuilders,patiala,ferrous,aquariums,genealogies,vieux,unrecognized,bridgwater,tetrahedral,thule,resignations,gondwana,registries,agder,dataset,felled,parva,analyzer,worsen,coleraine,columella,blockaded,polytechnique,reassembled,reentry,narvik,greys,nigra,knockouts,bofors,gniezno,slotted,hamasaki,ferrers,conferring,thirdly,domestication,photojournalist,universality,preclude,ponting,halved,thereupon,photosynthetic,ostrava,mismatch,pangasinan,intermediaries,abolitionists,transited,headings,ustase,radiological,interconnection,dabrowa,invariants,honorius,preferentially,chantilly,marysville,dialectical,antioquia,abstained,gogol,dirichlet,muricidae,symmetries,reproduces,brazos,fatwa,bacillus,ketone,paribas,chowk,multiplicative,dermatitis,mamluks,devotes,adenosine,newbery,meditative,minefields,inflection,oxfam,conwy,bystrica,imprints,pandavas,infinitesimal,conurbation,amphetamine,reestablish,furth,edessa,injustices,frankston,serjeant,4x200,khazar,sihanouk,longchamp,stags,pogroms,coups,upperparts,endpoints,infringed,nuanced,summing,humorist,pacification,ciaran,jamaat,anteriorly,roddick,springboks,faceted,hypoxia,rigorously,cleves,fatimid,ayurvedic,tabled,ratna,senhora,maricopa,seibu,gauguin,holomorphic,campgrounds,amboy,coordinators,ponderosa,casemates,ouachita,nanaimo,mindoro,zealander,rimsky,cluny,tomaszow,meghalaya,caetano,tilak,roussillon,landtag,gravitation,dystrophy,cephalopods,trombones,glens,killarney,denominated,anthropogenic,pssas,roubaix,carcasses,montmorency,neotropical,communicative,rabindranath,ordinated,separable,overriding,surged,sagebrush,conciliation,codice_4,durrani,phosphatase,qadir,votive,revitalized,taiyuan,tyrannosaurus,graze,slovaks,nematodes,environmentalism,blockhouse,illiteracy,schengen,ecotourism,alternation,conic,wields,hounslow,blackfoot,kwame,ambulatory,volhynia,hordaland,croton,piedras,rohit,drava,conceptualized,birla,illustrative,gurgaon,barisal,tutsi,dezong,nasional,polje,chanson,clarinets,krasnoyarsk,aleksandrovich,cosmonaut,d'este,palliative,midseason,silencing,wardens,durer,girders,salamanders,torrington,supersonics,lauda,farid,circumnavigation,embankments,funnels,bajnoksag,lorries,cappadocia,jains,warringah,retirees,burgesses,equalization,cusco,ganesan,algal,amazonian,lineups,allocating,conquerors,usurper,mnemonic,predating,brahmaputra,ahmadabad,maidenhead,numismatic,subregion,encamped,reciprocating,freebsd,irgun,tortoises,governorates,zionists,airfoil,collated,ajmer,fiennes,etymological,polemic,chadian,clerestory,nordiques,fluctuated,calvados,oxidizing,trailhead,massena,quarrels,dordogne,tirunelveli,pyruvate,pulsed,athabasca,sylar,appointee,serer,japonica,andronikos,conferencing,nicolaus,chemin,ascertained,incited,woodbine,helices,hospitalised,emplacements,to/from,orchestre,tyrannical,pannonia,methodism,pop/rock,shibuya,berbers,despot,seaward,westpac,separator,perpignan,alamein,judeo,publicize,quantization,ethniki,gracilis,menlo,offside,oscillating,unregulated,succumbing,finnmark,metrical,suleyman,raith,sovereigns,bundesstrasse,kartli,fiduciary,darshan,foramen,curler,concubines,calvinism,larouche,bukhara,sophomores,mohanlal,lutheranism,monomer,eamonn,'black,uncontested,immersive,tutorials,beachhead,bindings,permeable,postulates,comite,transformative,indiscriminate,hofstra,associacao,amarna,dermatology,lapland,aosta,babur,unambiguous,formatting,schoolboys,gwangju,superconducting,replayed,adherent,aureus,compressors,forcible,spitsbergen,boulevards,budgeting,nossa,annandale,perumal,interregnum,sassoon,kwajalein,greenbrier,caldas,triangulation,flavius,increment,shakhtar,nullified,pinfall,nomen,microfinance,depreciation,cubist,steeper,splendour,gruppe,everyman,chasers,campaigners,bridle,modality,percussive,darkly,capes,velar,picton,triennial,factional,padang,toponym,betterment,norepinephrine,112th,estuarine,diemen,warehousing,morphism,ideologically,pairings,immunization,crassus,exporters,sefer,flocked,bulbous,deseret,booms,calcite,bohol,elven,groot,pulau,citigroup,wyeth,modernizing,layering,pastiche,complies,printmaker,condenser,theropod,cassino,oxyrhynchus,akademie,trainings,lowercase,coxae,parte,chetniks,pentagonal,keselowski,monocoque,morsi,reticulum,meiosis,clapboard,recoveries,tinge,an/fps,revista,sidon,livre,epidermis,conglomerates,kampong,congruent,harlequins,tergum,simplifies,epidemiological,underwriting,tcp/ip,exclusivity,multidimensional,mysql,columbine,ecologist,hayat,sicilies,levees,handset,aesop,usenet,pacquiao,archiving,alexandrian,compensatory,broadsheet,annotation,bahamian,d'affaires,interludes,phraya,shamans,marmara,customizable,immortalized,ambushes,chlorophyll,diesels,emulsion,rheumatoid,voluminous,screenwriters,tailoring,sedis,runcorn,democratization,bushehr,anacostia,constanta,antiquary,sixtus,radiate,advaita,antimony,acumen,barristers,reichsbahn,ronstadt,symbolist,pasig,cursive,secessionist,afrikaner,munnetra,inversely,adsorption,syllabic,moltke,idioms,midline,olimpico,diphosphate,cautions,radziwill,mobilisation,copelatus,trawlers,unicron,bhaskar,financiers,minimalism,derailment,marxists,oireachtas,abdicate,eigenvalue,zafar,vytautas,ganguly,chelyabinsk,telluride,subordination,ferried,dived,vendee,pictish,dimitrov,expiry,carnation,cayley,magnitudes,lismore,gretna,sandwiched,unmasked,sandomierz,swarthmore,tetra,nanyang,pevsner,dehradun,mormonism,rashi,complying,seaplanes,ningbo,cooperates,strathcona,mornington,mestizo,yulia,edgbaston,palisade,ethno,polytopes,espirito,tymoshenko,pronunciations,paradoxical,taichung,chipmunks,erhard,maximise,accretion,kanda,`abdu'l,narrowest,umpiring,mycenaean,divisor,geneticist,ceredigion,barque,hobbyists,equates,auxerre,spinose,cheil,sweetwater,guano,carboxylic,archiv,tannery,cormorant,agonists,fundacion,anbar,tunku,hindrance,meerut,concordat,secunderabad,kachin,achievable,murfreesboro,comprehensively,forges,broadest,synchronised,speciation,scapa,aliyev,conmebol,tirelessly,subjugated,pillaged,udaipur,defensively,lakhs,stateless,haasan,headlamps,patterning,podiums,polyphony,mcmurdo,mujer,vocally,storeyed,mucosa,multivariate,scopus,minimizes,formalised,certiorari,bourges,populate,overhanging,gaiety,unreserved,borromeo,woolworths,isotopic,bashar,purify,vertebra,medan,juxtaposition,earthwork,elongation,chaudhary,schematic,piast,steeped,nanotubes,fouls,achaea,legionnaires,abdur,qmjhl,embraer,hardback,centerville,ilocos,slovan,whitehorse,mauritian,moulding,mapuche,donned,provisioning,gazprom,jonesboro,audley,lightest,calyx,coldwater,trigonometric,petroglyphs,psychoanalyst,congregate,zambezi,fissure,supervises,bexley,etobicoke,wairarapa,tectonics,emphasises,formula_41,debugging,linfield,spatially,ionizing,ungulates,orinoco,clades,erlangen,news/talk,vols.,ceara,yakovlev,finsbury,entanglement,fieldhouse,graphene,intensifying,grigory,keyong,zacatecas,ninian,allgemeine,keswick,societa,snorri,femininity,najib,monoclonal,guyanese,postulate,huntly,abbeys,machinist,yunus,emphasising,ishaq,urmia,bremerton,pretenders,lumiere,thoroughfares,chikara,dramatized,metathorax,taiko,transcendence,wycliffe,retrieves,umpired,steuben,racehorses,taylors,kuznetsov,montezuma,precambrian,canopies,gaozong,propodeum,disestablished,retroactive,shoreham,rhizome,doubleheader,clinician,diwali,quartzite,shabaab,agassiz,despatched,stormwater,luxemburg,callao,universidade,courland,skane,glyph,dormers,witwatersrand,curacy,qualcomm,nansen,entablature,lauper,hausdorff,lusaka,ruthenian,360deg,cityscape,douai,vaishnava,spars,vaulting,rationalist,gygax,sequestration,typology,pollinates,accelerators,leben,colonials,cenotaph,imparted,carthaginians,equaled,rostrum,gobind,bodhisattva,oberst,bicycling,arabi,sangre,biophysics,hainaut,vernal,lunenburg,apportioned,finches,lajos,nenad,repackaged,zayed,nikephoros,r.e.m,swaminarayan,gestalt,unplaced,crags,grohl,sialkot,unsaturated,gwinnett,linemen,forays,palakkad,writs,instrumentalists,aircrews,badged,terrapins,180deg,oneness,commissariat,changi,pupation,circumscribed,contador,isotropic,administrated,fiefs,nimes,intrusions,minoru,geschichte,nadph,tainan,changchun,carbondale,frisia,swapo,evesham,hawai'i,encyclopedic,transporters,dysplasia,formula_42,onsite,jindal,guetta,judgements,narbonne,permissions,paleogene,rationalism,vilna,isometric,subtracted,chattahoochee,lamina,missa,greville,pervez,lattices,persistently,crystallization,timbered,hawaiians,fouling,interrelated,masood,ripening,stasi,gamal,visigothic,warlike,cybernetics,tanjung,forfar,cybernetic,karelian,brooklands,belfort,greifswald,campeche,inexplicably,refereeing,understory,uninterested,prius,collegiately,sefid,sarsfield,categorize,biannual,elsevier,eisteddfod,declension,autonoma,procuring,misrepresentation,novelization,bibliographic,shamanism,vestments,potash,eastleigh,ionized,turan,lavishly,scilly,balanchine,importers,parlance,'that,kanyakumari,synods,mieszko,crossovers,serfdom,conformational,legislated,exclave,heathland,sadar,differentiates,propositional,konstantinos,photoshop,manche,vellore,appalachia,orestes,taiga,exchanger,grozny,invalidated,baffin,spezia,staunchly,eisenach,robustness,virtuosity,ciphers,inlets,bolagh,understandings,bosniaks,parser,typhoons,sinan,luzerne,webcomic,subtraction,jhelum,businessweek,ceske,refrained,firebox,mitigated,helmholtz,dilip,eslamabad,metalwork,lucan,apportionment,provident,gdynia,schooners,casement,danse,hajjiabad,benazir,buttress,anthracite,newsreel,wollaston,dispatching,cadastral,riverboat,provincetown,nantwich,missal,irreverent,juxtaposed,darya,ennobled,electropop,stereoscopic,maneuverability,laban,luhansk,udine,collectibles,haulage,holyrood,materially,supercharger,gorizia,shkoder,townhouses,pilate,layoffs,folkloric,dialectic,exuberant,matures,malla,ceuta,citizenry,crewed,couplet,stopover,transposition,tradesmen,antioxidant,amines,utterance,grahame,landless,isere,diction,appellant,satirist,urbino,intertoto,subiaco,antonescu,nehemiah,ubiquitin,emcee,stourbridge,fencers,103rd,wranglers,monteverdi,watertight,expounded,xiamen,manmohan,pirie,threefold,antidepressant,sheboygan,grieg,cancerous,diverging,bernini,polychrome,fundamentalism,bihari,critiqued,cholas,villers,tendulkar,dafydd,vastra,fringed,evangelization,episcopalian,maliki,sana'a,ashburton,trianon,allegany,heptathlon,insufficiently,panelists,pharrell,hexham,amharic,fertilized,plumes,cistern,stratigraphy,akershus,catalans,karoo,rupee,minuteman,quantification,wigmore,leutnant,metanotum,weeknights,iridescent,extrasolar,brechin,deuterium,kuching,lyricism,astrakhan,brookhaven,euphorbia,hradec,bhagat,vardar,aylmer,positron,amygdala,speculators,unaccompanied,debrecen,slurry,windhoek,disaffected,rapporteur,mellitus,blockers,fronds,yatra,sportsperson,precession,physiologist,weeknight,pidgin,pharma,condemns,standardize,zetian,tibor,glycoprotein,emporia,cormorants,amalie,accesses,leonhard,denbighshire,roald,116th,will.i.am,symbiosis,privatised,meanders,chemnitz,jabalpur,shing,secede,ludvig,krajina,homegrown,snippets,sasanian,euripides,peder,cimarron,streaked,graubunden,kilimanjaro,mbeki,middleware,flensburg,bukovina,lindwall,marsalis,profited,abkhaz,polis,camouflaged,amyloid,morgantown,ovoid,bodleian,morte,quashed,gamelan,juventud,natchitoches,storyboard,freeview,enumeration,cielo,preludes,bulawayo,1600s,olympiads,multicast,faunal,asura,reinforces,puranas,ziegfeld,handicraft,seamount,kheil,noche,hallmarks,dermal,colorectal,encircle,hessen,umbilicus,sunnis,leste,unwin,disclosing,superfund,montmartre,refuelling,subprime,kolhapur,etiology,bismuth,laissez,vibrational,mazar,alcoa,rumsfeld,recurve,ticonderoga,lionsgate,onlookers,homesteads,filesystem,barometric,kingswood,biofuel,belleza,moshav,occidentalis,asymptomatic,northeasterly,leveson,huygens,numan,kingsway,primogeniture,toyotomi,yazoo,limpets,greenbelt,booed,concurrence,dihedral,ventrites,raipur,sibiu,plotters,kitab,109th,trackbed,skilful,berthed,effendi,fairing,sephardi,mikhailovich,lockyer,wadham,invertible,paperbacks,alphabetic,deuteronomy,constitutive,leathery,greyhounds,estoril,beechcraft,poblacion,cossidae,excreted,flamingos,singha,olmec,neurotransmitters,ascoli,nkrumah,forerunners,dualism,disenchanted,benefitted,centrum,undesignated,noida,o'donoghue,collages,egrets,egmont,wuppertal,cleave,montgomerie,pseudomonas,srinivasa,lymphatic,stadia,resold,minima,evacuees,consumerism,ronde,biochemist,automorphism,hollows,smuts,improvisations,vespasian,bream,pimlico,eglin,colne,melancholic,berhad,ousting,saale,notaulices,ouest,hunslet,tiberias,abdomina,ramsgate,stanislas,donbass,pontefract,sucrose,halts,drammen,chelm,l'arc,taming,trolleys,konin,incertae,licensees,scythian,giorgos,dative,tanglewood,farmlands,o'keeffe,caesium,romsdal,amstrad,corte,oglethorpe,huntingdonshire,magnetization,adapts,zamosc,shooto,cuttack,centrepiece,storehouse,winehouse,morbidity,woodcuts,ryazan,buddleja,buoyant,bodmin,estero,austral,verifiable,periyar,christendom,curtail,shura,kaifeng,cotswold,invariance,seafaring,gorica,androgen,usman,seabird,forecourt,pekka,juridical,audacious,yasser,cacti,qianlong,polemical,d'amore,espanyol,distrito,cartographers,pacifism,serpents,backa,nucleophilic,overturning,duplicates,marksman,oriente,vuitton,oberleutnant,gielgud,gesta,swinburne,transfiguration,1750s,retaken,celje,fredrikstad,asuka,cropping,mansard,donates,blacksmiths,vijayanagara,anuradhapura,germinate,betis,foreshore,jalandhar,bayonets,devaluation,frazione,ablaze,abidjan,approvals,homeostasis,corollary,auden,superfast,redcliffe,luxembourgish,datum,geraldton,printings,ludhiana,honoree,synchrotron,invercargill,hurriedly,108th,three-and-a-half,colonist,bexar,limousin,bessemer,ossetian,nunataks,buddhas,rebuked,thais,tilburg,verdicts,interleukin,unproven,dordrecht,solent,acclamation,muammar,dahomey,operettas,4x400,arrears,negotiators,whitehaven,apparitions,armoury,psychoactive,worshipers,sculptured,elphinstone,airshow,kjell,o'callaghan,shrank,professorships,predominance,subhash,coulomb,sekolah,retrofitted,samos,overthrowing,vibrato,resistors,palearctic,datasets,doordarshan,subcutaneous,compiles,immorality,patchwork,trinidadian,glycogen,pronged,zohar,visigoths,freres,akram,justo,agora,intakes,craiova,playwriting,bukhari,militarism,iwate,petitioners,harun,wisla,inefficiency,vendome,ledges,schopenhauer,kashi,entombed,assesses,tenn.,noumea,baguio,carex,o'donovan,filings,hillsdale,conjectures,blotches,annuals,lindisfarne,negated,vivek,angouleme,trincomalee,cofactor,verkhovna,backfield,twofold,automaker,rudra,freighters,darul,gharana,busway,formula_43,plattsburgh,portuguesa,showrunner,roadmap,valenciennes,erdos,biafra,spiritualism,transactional,modifies,carne,107th,cocos,gcses,tiverton,radiotherapy,meadowlands,gunma,srebrenica,foxtel,authenticated,enslavement,classicist,klaipeda,minstrels,searchable,infantrymen,incitement,shiga,nadp+,urals,guilders,banquets,exteriors,counterattacks,visualized,diacritics,patrimony,svensson,transepts,prizren,telegraphy,najaf,emblazoned,coupes,effluent,ragam,omani,greensburg,taino,flintshire,cd/dvd,lobbies,narrating,cacao,seafarers,bicolor,collaboratively,suraj,floodlit,sacral,puppetry,tlingit,malwa,login,motionless,thien,overseers,vihar,golem,specializations,bathhouse,priming,overdubs,winningest,archetypes,uniao,acland,creamery,slovakian,lithographs,maryborough,confidently,excavating,stillborn,ramallah,audiencia,alava,ternary,hermits,rostam,bauxite,gawain,lothair,captions,gulfstream,timelines,receded,mediating,petain,bastia,rudbar,bidders,disclaimer,shrews,tailings,trilobites,yuriy,jamil,demotion,gynecology,rajinikanth,madrigals,ghazni,flycatchers,vitebsk,bizet,computationally,kashgar,refinements,frankford,heralds,europe/africa,levante,disordered,sandringham,queues,ransacked,trebizond,verdes,comedie,primitives,figurine,organists,culminate,gosport,coagulation,ferrying,hoyas,polyurethane,prohibitive,midfielders,ligase,progesterone,defectors,sweetened,backcountry,diodorus,waterside,nieuport,khwaja,jurong,decried,gorkha,ismaili,300th,octahedral,kindergartens,paseo,codification,notifications,disregarding,risque,reconquista,shortland,atolls,texarkana,perceval,d'etudes,kanal,herbicides,tikva,nuova,gatherer,dissented,soweto,dexterity,enver,bacharach,placekicker,carnivals,automate,maynooth,symplectic,chetnik,militaire,upanishads,distributive,strafing,championing,moiety,miliband,blackadder,enforceable,maung,dimer,stadtbahn,diverges,obstructions,coleophoridae,disposals,shamrocks,aural,banca,bahru,coxed,grierson,vanadium,watermill,radiative,ecoregions,berets,hariri,bicarbonate,evacuations,mallee,nairn,rushden,loggia,slupsk,satisfactorily,milliseconds,cariboo,reine,cyclo,pigmentation,postmodernism,aqueducts,vasari,bourgogne,dilemmas,liquefied,fluminense,alloa,ibaraki,tenements,kumasi,humerus,raghu,labours,putsch,soundcloud,bodybuilder,rakyat,domitian,pesaro,translocation,sembilan,homeric,enforcers,tombstones,lectureship,rotorua,salamis,nikolaos,inferences,superfortress,lithgow,surmised,undercard,tarnow,barisan,stingrays,federacion,coldstream,haverford,ornithological,heerenveen,eleazar,jyoti,murali,bamako,riverbed,subsidised,theban,conspicuously,vistas,conservatorium,madrasa,kingfishers,arnulf,credential,syndicalist,sheathed,discontinuity,prisms,tsushima,coastlines,escapees,vitis,optimizing,megapixel,overground,embattled,halide,sprinters,buoys,mpumalanga,peculiarities,106th,roamed,menezes,macao,prelates,papyri,freemen,dissertations,irishmen,pooled,sverre,reconquest,conveyance,subjectivity,asturian,circassian,formula_45,comdr,thickets,unstressed,monro,passively,harmonium,moveable,dinar,carlsson,elysees,chairing,b'nai,confusingly,kaoru,convolution,godolphin,facilitator,saxophones,eelam,jebel,copulation,anions,livres,licensure,pontypridd,arakan,controllable,alessandria,propelling,stellenbosch,tiber,wolka,liberators,yarns,d'azur,tsinghua,semnan,amhara,ablation,melies,tonality,historique,beeston,kahne,intricately,sonoran,robespierre,gyrus,boycotts,defaulted,infill,maranhao,emigres,framingham,paraiba,wilhelmshaven,tritium,skyway,labial,supplementation,possessor,underserved,motets,maldivian,marrakech,quays,wikimedia,turbojet,demobilization,petrarch,encroaching,sloops,masted,karbala,corvallis,agribusiness,seaford,stenosis,hieronymus,irani,superdraft,baronies,cortisol,notability,veena,pontic,cyclin,archeologists,newham,culled,concurring,aeolian,manorial,shouldered,fords,philanthropists,105th,siddharth,gotthard,halim,rajshahi,jurchen,detritus,practicable,earthenware,discarding,travelogue,neuromuscular,elkhart,raeder,zygmunt,metastasis,internees,102nd,vigour,upmarket,summarizing,subjunctive,offsets,elizabethtown,udupi,pardubice,repeaters,instituting,archaea,substandard,technische,linga,anatomist,flourishes,velika,tenochtitlan,evangelistic,fitchburg,springbok,cascading,hydrostatic,avars,occasioned,filipina,perceiving,shimbun,africanus,consternation,tsing,optically,beitar,45deg,abutments,roseville,monomers,huelva,lotteries,hypothalamus,internationalist,electromechanical,hummingbirds,fibreglass,salaried,dramatists,uncovers,invokes,earners,excretion,gelding,ancien,aeronautica,haverhill,stour,ittihad,abramoff,yakov,ayodhya,accelerates,industrially,aeroplanes,deleterious,dwelt,belvoir,harpalus,atpase,maluku,alasdair,proportionality,taran,epistemological,interferometer,polypeptide,adjudged,villager,metastatic,marshalls,madhavan,archduchess,weizmann,kalgoorlie,balan,predefined,sessile,sagaing,brevity,insecticide,psychosocial,africana,steelworks,aether,aquifers,belem,mineiro,almagro,radiators,cenozoic,solute,turbocharger,invicta,guested,buccaneer,idolatry,unmatched,paducah,sinestro,dispossessed,conforms,responsiveness,cyanobacteria,flautist,procurator,complementing,semifinalist,rechargeable,permafrost,cytokine,refuges,boomed,gelderland,franchised,jinan,burnie,doubtless,randomness,colspan=12,angra,ginebra,famers,nuestro,declarative,roughness,lauenburg,motile,rekha,issuer,piney,interceptors,napoca,gipsy,formulaic,formula_44,viswanathan,ebrahim,thessalonica,galeria,muskogee,unsold,html5,taito,mobutu,icann,carnarvon,fairtrade,morphisms,upsilon,nozzles,fabius,meander,murugan,strontium,episcopacy,sandinista,parasol,attenuated,bhima,primeval,panay,ordinator,negara,osteoporosis,glossop,ebook,paradoxically,grevillea,modoc,equating,phonetically,legumes,covariant,dorje,quatre,bruxelles,pyroclastic,shipbuilder,zhaozong,obscuring,sveriges,tremolo,extensible,barrack,multnomah,hakon,chaharmahal,parsing,volumetric,astrophysical,glottal,combinatorics,freestanding,encoder,paralysed,cavalrymen,taboos,heilbronn,orientalis,lockport,marvels,ozawa,dispositions,waders,incurring,saltire,modulate,papilio,phenol,intermedia,rappahannock,plasmid,fortify,phenotypes,transiting,correspondences,leaguer,larnaca,incompatibility,mcenroe,deeming,endeavoured,aboriginals,helmed,salar,arginine,werke,ferrand,expropriated,delimited,couplets,phoenicians,petioles,ouster,anschluss,protectionist,plessis,urchins,orquesta,castleton,juniata,bittorrent,fulani,donji,mykola,rosemont,chandos,scepticism,signer,chalukya,wicketkeeper,coquitlam,programmatic,o'brian,carteret,urology,steelhead,paleocene,konkan,bettered,venkatesh,surfacing,longitudinally,centurions,popularization,yazid,douro,widths,premios,leonards,gristmill,fallujah,arezzo,leftists,ecliptic,glycerol,inaction,disenfranchised,acrimonious,depositing,parashah,cockatoo,marechal,bolzano,chios,cablevision,impartiality,pouches,thickly,equities,bentinck,emotive,boson,ashdown,conquistadors,parsi,conservationists,reductive,newlands,centerline,ornithologists,waveguide,nicene,philological,hemel,setanta,masala,aphids,convening,casco,matrilineal,chalcedon,orthographic,hythe,replete,damming,bolivarian,admixture,embarks,borderlands,conformed,nagarjuna,blenny,chaitanya,suwon,shigeru,tatarstan,lingayen,rejoins,grodno,merovingian,hardwicke,puducherry,prototyping,laxmi,upheavals,headquarter,pollinators,bromine,transom,plantagenet,arbuthnot,chidambaram,woburn,osamu,panelling,coauthored,zhongshu,hyaline,omissions,aspergillus,offensively,electrolytic,woodcut,sodom,intensities,clydebank,piotrkow,supplementing,quipped,focke,harbinger,positivism,parklands,wolfenbuttel,cauca,tryptophan,taunus,curragh,tsonga,remand,obscura,ashikaga,eltham,forelimbs,analogs,trnava,observances,kailash,antithesis,ayumi,abyssinia,dorsally,tralee,pursuers,misadventures,padova,perot,mahadev,tarim,granth,licenced,compania,patuxent,baronial,korda,cochabamba,codices,karna,memorialized,semaphore,playlists,mandibular,halal,sivaji,scherzinger,stralsund,foundries,ribosome,mindfulness,nikolayevich,paraphyletic,newsreader,catalyze,ioannina,thalamus,gbit/s,paymaster,sarab,500th,replenished,gamepro,cracow,formula_46,gascony,reburied,lessing,easement,transposed,meurthe,satires,proviso,balthasar,unbound,cuckoos,durbar,louisbourg,cowes,wholesalers,manet,narita,xiaoping,mohamad,illusory,cathal,reuptake,alkaloid,tahrir,mmorpg,underlies,anglicanism,repton,aharon,exogenous,buchenwald,indigent,odostomia,milled,santorum,toungoo,nevsky,steyr,urbanisation,darkseid,subsonic,canaanite,akiva,eglise,dentition,mediators,cirencester,peloponnesian,malmesbury,durres,oerlikon,tabulated,saens,canaria,ischemic,esterhazy,ringling,centralization,walthamstow,nalanda,lignite,takht,leninism,expiring,circe,phytoplankton,promulgation,integrable,breeches,aalto,menominee,borgo,scythians,skrull,galleon,reinvestment,raglan,reachable,liberec,airframes,electrolysis,geospatial,rubiaceae,interdependence,symmetrically,simulcasts,keenly,mauna,adipose,zaidi,fairport,vestibular,actuators,monochromatic,literatures,congestive,sacramental,atholl,skytrain,tycho,tunings,jamia,catharina,modifier,methuen,tapings,infiltrating,colima,grafting,tauranga,halides,pontificate,phonetics,koper,hafez,grooved,kintetsu,extrajudicial,linkoping,cyberpunk,repetitions,laurentian,parnu,bretton,darko,sverdlovsk,foreshadowed,akhenaten,rehnquist,gosford,coverts,pragmatism,broadleaf,ethiopians,instated,mediates,sodra,opulent,descriptor,enugu,shimla,leesburg,officership,giffard,refectory,lusitania,cybermen,fiume,corus,tydfil,lawrenceville,ocala,leviticus,burghers,ataxia,richthofen,amicably,acoustical,watling,inquired,tiempo,multiracial,parallelism,trenchard,tokyopop,germanium,usisl,philharmonia,shapur,jacobites,latinized,sophocles,remittances,o'farrell,adder,dimitrios,peshwa,dimitar,orlov,outstretched,musume,satish,dimensionless,serialised,baptisms,pagasa,antiviral,1740s,quine,arapaho,bombardments,stratosphere,ophthalmic,injunctions,carbonated,nonviolence,asante,creoles,sybra,boilermakers,abington,bipartite,permissive,cardinality,anheuser,carcinogenic,hohenlohe,surinam,szeged,infanticide,generically,floorball,'white,automakers,cerebellar,homozygous,remoteness,effortlessly,allude,'great,headmasters,minting,manchurian,kinabalu,wemyss,seditious,widgets,marbled,almshouses,bards,subgenres,tetsuya,faulting,kickboxer,gaulish,hoseyn,malton,fluvial,questionnaires,mondale,downplayed,traditionalists,vercelli,sumatran,landfills,gamesradar,exerts,franciszek,unlawfully,huesca,diderot,libertarians,professorial,laane,piecemeal,conidae,taiji,curatorial,perturbations,abstractions,szlachta,watercraft,mullah,zoroastrianism,segmental,khabarovsk,rectors,affordability,scuola,diffused,stena,cyclonic,workpiece,romford,'little,jhansi,stalag,zhongshan,skipton,maracaibo,bernadotte,thanet,groening,waterville,encloses,sahrawi,nuffield,moorings,chantry,annenberg,islay,marchers,tenses,wahid,siegen,furstenberg,basques,resuscitation,seminarians,tympanum,gentiles,vegetarianism,tufted,venkata,fantastical,pterophoridae,machined,superposition,glabrous,kaveri,chicane,executors,phyllonorycter,bidirectional,jasta,undertones,touristic,majapahit,navratilova,unpopularity,barbadian,tinian,webcast,hurdler,rigidly,jarrah,staphylococcus,igniting,irrawaddy,stabilised,airstrike,ragas,wakayama,energetically,ekstraklasa,minibus,largemouth,cultivators,leveraging,waitangi,carnaval,weaves,turntables,heydrich,sextus,excavate,govind,ignaz,pedagogue,uriah,borrowings,gemstones,infractions,mycobacterium,batavian,massing,praetor,subalpine,massoud,passers,geostationary,jalil,trainsets,barbus,impair,budejovice,denbigh,pertain,historicity,fortaleza,nederlandse,lamenting,masterchef,doubs,gemara,conductance,ploiesti,cetaceans,courthouses,bhagavad,mihailovic,occlusion,bremerhaven,bulwark,morava,kaine,drapery,maputo,conquistador,kaduna,famagusta,first-past-the-post,erudite,galton,undated,tangential,filho,dismembered,dashes,criterium,darwen,metabolized,blurring,everard,randwick,mohave,impurity,acuity,ansbach,chievo,surcharge,plantain,algoma,porosity,zirconium,selva,sevenoaks,venizelos,gwynne,golgi,imparting,separatism,courtesan,idiopathic,gravestones,hydroelectricity,babar,orford,purposeful,acutely,shard,ridgewood,viterbo,manohar,expropriation,placenames,brevis,cosine,unranked,richfield,newnham,recoverable,flightless,dispersing,clearfield,abu'l,stranraer,kempe,streamlining,goswami,epidermal,pieta,conciliatory,distilleries,electrophoresis,bonne,tiago,curiosities,candidature,picnicking,perihelion,lintel,povoa,gullies,configure,excision,facies,signers,1730s,insufficiency,semiotics,streatham,deactivation,entomological,skippers,albacete,parodying,escherichia,honorees,singaporeans,counterterrorism,tiruchirappalli,omnivorous,metropole,globalisation,athol,unbounded,codice_5,landforms,classifier,farmhouses,reaffirming,reparation,yomiuri,technologists,mitte,medica,viewable,steampunk,konya,kshatriya,repelling,edgewater,lamiinae,devas,potteries,llandaff,engendered,submits,virulence,uplifted,educationist,metropolitans,frontrunner,dunstable,forecastle,frets,methodius,exmouth,linnean,bouchet,repulsion,computable,equalling,liceo,tephritidae,agave,hydrological,azarenka,fairground,l'homme,enforces,xinhua,cinematographers,cooperstown,sa'id,paiute,christianization,tempos,chippenham,insulator,kotor,stereotyped,dello,cours,hisham,d'souza,eliminations,supercars,passau,rebrand,natures,coote,persephone,rededicated,cleaved,plenum,blistering,indiscriminately,cleese,safed,recursively,compacted,revues,hydration,shillong,echelons,garhwal,pedimented,grower,zwolle,wildflower,annexing,methionine,petah,valens,famitsu,petiole,specialities,nestorian,shahin,tokaido,shearwater,barberini,kinsmen,experimenter,alumnae,cloisters,alumina,pritzker,hardiness,soundgarden,julich,ps300,watercourse,cementing,wordplay,olivet,demesne,chasseurs,amide,zapotec,gaozu,porphyry,absorbers,indium,analogies,devotions,engravers,limestones,catapulted,surry,brickworks,gotra,rodham,landline,paleontologists,shankara,islip,raucous,trollope,arpad,embarkation,morphemes,recites,picardie,nakhchivan,tolerances,formula_47,khorramabad,nichiren,adrianople,kirkuk,assemblages,collider,bikaner,bushfires,roofline,coverings,reredos,bibliotheca,mantras,accentuated,commedia,rashtriya,fluctuation,serhiy,referential,fittipaldi,vesicle,geeta,iraklis,immediacy,chulalongkorn,hunsruck,bingen,dreadnoughts,stonemason,meenakshi,lebesgue,undergrowth,baltistan,paradoxes,parlement,articled,tiflis,dixieland,meriden,tejano,underdogs,barnstable,exemplify,venter,tropes,wielka,kankakee,iskandar,zilina,pharyngeal,spotify,materialised,picts,atlantique,theodoric,prepositions,paramilitaries,pinellas,attlee,actuated,piedmontese,grayling,thucydides,multifaceted,unedited,autonomously,universelle,utricularia,mooted,preto,incubated,underlie,brasenose,nootka,bushland,sensu,benzodiazepine,esteghlal,seagoing,amenhotep,azusa,sappers,culpeper,smokeless,thoroughbreds,dargah,gorda,alumna,mankato,zdroj,deleting,culvert,formula_49,punting,wushu,hindering,immunoglobulin,standardisation,birger,oilfield,quadrangular,ulama,recruiters,netanya,1630s,communaute,istituto,maciej,pathan,meher,vikas,characterizations,playmaker,interagency,intercepts,assembles,horthy,introspection,narada,matra,testes,radnicki,estonians,csiro,instar,mitford,adrenergic,crewmembers,haaretz,wasatch,lisburn,rangefinder,ordre,condensate,reforestation,corregidor,spvgg,modulator,mannerist,faulted,aspires,maktoum,squarepants,aethelred,piezoelectric,mulatto,dacre,progressions,jagiellonian,norge,samaria,sukhoi,effingham,coxless,hermetic,humanists,centrality,litters,stirlingshire,beaconsfield,sundanese,geometrically,caretakers,habitually,bandra,pashtuns,bradenton,arequipa,laminar,brickyard,hitchin,sustains,shipboard,ploughing,trechus,wheelers,bracketed,ilyushin,subotica,d'hondt,reappearance,bridgestone,intermarried,fulfilment,aphasia,birkbeck,transformational,strathmore,hornbill,millstone,lacan,voids,solothurn,gymnasiums,laconia,viaducts,peduncle,teachta,edgware,shinty,supernovae,wilfried,exclaim,parthia,mithun,flashpoint,moksha,cumbia,metternich,avalanches,militancy,motorist,rivadavia,chancellorsville,federals,gendered,bounding,footy,gauri,caliphs,lingam,watchmaker,unrecorded,riverina,unmodified,seafloor,droit,pfalz,chrysostom,gigabit,overlordship,besiege,espn2,oswestry,anachronistic,ballymena,reactivation,duchovny,ghani,abacetus,duller,legio,watercourses,nord-pas-de-calais,leiber,optometry,swarms,installer,sancti,adverbs,iheartmedia,meiningen,zeljko,kakheti,notional,circuses,patrilineal,acrobatics,infrastructural,sheva,oregonian,adjudication,aamir,wloclawek,overfishing,obstructive,subtracting,aurobindo,archeologist,newgate,'cause,secularization,tehsils,abscess,fingal,janacek,elkhorn,trims,kraftwerk,mandating,irregulars,faintly,congregationalist,sveti,kasai,mishaps,kennebec,provincially,durkheim,scotties,aicte,rapperswil,imphal,surrenders,morphs,nineveh,hoxha,cotabato,thuringian,metalworking,retold,shogakukan,anthers,proteasome,tippeligaen,disengagement,mockumentary,palatial,erupts,flume,corrientes,masthead,jaroslaw,rereleased,bharti,labors,distilling,tusks,varzim,refounded,enniskillen,melkite,semifinalists,vadodara,bermudian,capstone,grasse,origination,populus,alesi,arrondissements,semigroup,verein,opossum,messrs.,portadown,bulbul,tirupati,mulhouse,tetrahedron,roethlisberger,nonverbal,connexion,warangal,deprecated,gneiss,octet,vukovar,hesketh,chambre,despatch,claes,kargil,hideo,gravelly,tyndale,aquileia,tuners,defensible,tutte,theotokos,constructivist,ouvrage,dukla,polisario,monasticism,proscribed,commutation,testers,nipissing,codon,mesto,olivine,concomitant,exoskeleton,purports,coromandel,eyalet,dissension,hippocrates,purebred,yaounde,composting,oecophoridae,procopius,o'day,angiogenesis,sheerness,intelligencer,articular,felixstowe,aegon,endocrinology,trabzon,licinius,pagodas,zooplankton,hooghly,satie,drifters,sarthe,mercian,neuilly,tumours,canal+,scheldt,inclinations,counteroffensive,roadrunners,tuzla,shoreditch,surigao,predicates,carnot,algeciras,militaries,generalize,bulkheads,gawler,pollutant,celta,rundgren,microrna,gewog,olimpija,placental,lubelski,roxburgh,discerned,verano,kikuchi,musicale,l'enfant,ferocity,dimorphic,antigonus,erzurum,prebendary,recitative,discworld,cyrenaica,stigmella,totnes,sutta,pachuca,ulsan,downton,landshut,castellan,pleural,siedlce,siecle,catamaran,cottbus,utilises,trophic,freeholders,holyhead,u.s.s,chansons,responder,waziristan,suzuka,birding,shogi,asker,acetone,beautification,cytotoxic,dixit,hunterdon,cobblestone,formula_48,kossuth,devizes,sokoto,interlaced,shuttered,kilowatts,assiniboine,isaak,salto,alderney,sugarloaf,franchising,aggressiveness,toponyms,plaintext,antimatter,henin,equidistant,salivary,bilingualism,mountings,obligate,extirpated,irenaeus,misused,pastoralists,aftab,immigrating,warping,tyrolean,seaforth,teesside,soundwave,oligarchy,stelae,pairwise,iupac,tezuka,posht,orchestrations,landmass,ironstone,gallia,hjalmar,carmelites,strafford,elmhurst,palladio,fragility,teleplay,gruffudd,karoly,yerba,potok,espoo,inductance,macaque,nonprofits,pareto,rock'n'roll,spiritualist,shadowed,skateboarder,utterances,generality,congruence,prostrate,deterred,yellowknife,albarn,maldon,battlements,mohsen,insecticides,khulna,avellino,menstruation,glutathione,springdale,parlophone,confraternity,korps,countrywide,bosphorus,preexisting,damodar,astride,alexandrovich,sprinting,crystallized,botev,leaching,interstates,veers,angevin,undaunted,yevgeni,nishapur,northerners,alkmaar,bethnal,grocers,sepia,tornus,exemplar,trobe,charcot,gyeonggi,larne,tournai,lorain,voided,genji,enactments,maxilla,adiabatic,eifel,nazim,transducer,thelonious,pyrite,deportiva,dialectal,bengt,rosettes,labem,sergeyevich,synoptic,conservator,statuette,biweekly,adhesives,bifurcation,rajapaksa,mammootty,republique,yusef,waseda,marshfield,yekaterinburg,minnelli,fundy,fenian,matchups,dungannon,supremacist,panelled,drenthe,iyengar,fibula,narmada,homeport,oceanside,precept,antibacterial,altarpieces,swath,ospreys,lillooet,legnica,lossless,formula_50,galvatron,iorga,stormont,rsfsr,loggers,kutno,phenomenological,medallists,cuatro,soissons,homeopathy,bituminous,injures,syndicates,typesetting,displacements,dethroned,makassar,lucchese,abergavenny,targu,alborz,akb48,boldface,gastronomy,sacra,amenity,accumulator,myrtaceae,cornices,mourinho,denunciation,oxbow,diddley,aargau,arbitrage,bedchamber,gruffydd,zamindar,klagenfurt,caernarfon,slowdown,stansted,abrasion,tamaki,suetonius,dukakis,individualistic,ventrally,hotham,perestroika,ketones,fertilisation,sobriquet,couplings,renderings,misidentified,rundfunk,sarcastically,braniff,concours,dismissals,elegantly,modifiers,crediting,combos,crucially,seafront,lieut,ischemia,manchus,derivations,proteases,aristophanes,adenauer,porting,hezekiah,sante,trulli,hornblower,foreshadowing,ypsilanti,dharwad,khani,hohenstaufen,distillers,cosmodrome,intracranial,turki,salesian,gorzow,jihlava,yushchenko,leichhardt,venables,cassia,eurogamer,airtel,curative,bestsellers,timeform,sortied,grandview,massillon,ceding,pilbara,chillicothe,heredity,elblag,rogaland,ronne,millennial,batley,overuse,bharata,fille,campbelltown,abeyance,counterclockwise,250cc,neurodegenerative,consigned,electromagnetism,sunnah,saheb,exons,coxswain,gleaned,bassoons,worksop,prismatic,immigrate,pickets,takeo,bobsledder,stosur,fujimori,merchantmen,stiftung,forli,endorses,taskforce,thermally,atman,gurps,floodplains,enthalpy,extrinsic,setubal,kennesaw,grandis,scalability,durations,showrooms,prithvi,outro,overruns,andalucia,amanita,abitur,hipper,mozambican,sustainment,arsene,chesham,palaeolithic,reportage,criminality,knowsley,haploid,atacama,shueisha,ridgefield,astern,getafe,lineal,timorese,restyled,hollies,agincourt,unter,justly,tannins,mataram,industrialised,tarnovo,mumtaz,mustapha,stretton,synthetase,condita,allround,putra,stjepan,troughs,aechmea,specialisation,wearable,kadokawa,uralic,aeros,messiaen,existentialism,jeweller,effigies,gametes,fjordane,cochlear,interdependent,demonstrative,unstructured,emplacement,famines,spindles,amplitudes,actuator,tantalum,psilocybe,apnea,monogatari,expulsions,seleucus,tsuen,hospitaller,kronstadt,eclipsing,olympiakos,clann,canadensis,inverter,helio,egyptologist,squamous,resonate,munir,histology,torbay,khans,jcpenney,veterinarians,aintree,microscopes,colonised,reflectors,phosphorylated,pristimantis,tulare,corvinus,multiplexing,midweek,demosthenes,transjordan,ecija,tengku,vlachs,anamorphic,counterweight,radnor,trinitarian,armidale,maugham,njsiaa,futurism,stairways,avicenna,montebello,bridgetown,wenatchee,lyonnais,amass,surinamese,streptococcus,m*a*s*h,hydrogenation,frazioni,proscenium,kalat,pennsylvanian,huracan,tallying,kralove,nucleolar,phrygian,seaports,hyacinthe,ignace,donning,instalment,regnal,fonds,prawn,carell,folktales,goaltending,bracknell,vmware,patriarchy,mitsui,kragujevac,pythagoras,soult,thapa,disproved,suwalki,secures,somoza,l'ecole,divizia,chroma,herders,technologist,deduces,maasai,rampur,paraphrase,raimi,imaged,magsaysay,ivano,turmeric,formula_51,subcommittees,axillary,ionosphere,organically,indented,refurbishing,pequot,violinists,bearn,colle,contralto,silverton,mechanization,etruscans,wittelsbach,pasir,redshirted,marrakesh,scarp,plein,wafers,qareh,teotihuacan,frobenius,sinensis,rehoboth,bundaberg,newbridge,hydrodynamic,traore,abubakar,adjusts,storytellers,dynamos,verbandsliga,concertmaster,exxonmobil,appreciable,sieradz,marchioness,chaplaincy,rechristened,cunxu,overpopulation,apolitical,sequencer,beaked,nemanja,binaries,intendant,absorber,filamentous,indebtedness,nusra,nashik,reprises,psychedelia,abwehr,ligurian,isoform,resistive,pillaging,mahathir,reformatory,lusatia,allerton,ajaccio,tepals,maturin,njcaa,abyssinian,objector,fissures,sinuous,ecclesiastic,dalits,caching,deckers,phosphates,wurlitzer,navigated,trofeo,berea,purefoods,solway,unlockable,grammys,kostroma,vocalizations,basilan,rebuke,abbasi,douala,helsingborg,ambon,bakar,runestones,cenel,tomislav,pigmented,northgate,excised,seconda,kirke,determinations,dedicates,vilas,pueblos,reversion,unexploded,overprinted,ekiti,deauville,masato,anaesthesia,endoplasmic,transponders,aguascalientes,hindley,celluloid,affording,bayeux,piaget,rickshaws,eishockey,camarines,zamalek,undersides,hardwoods,hermitian,mutinied,monotone,blackmails,affixes,jpmorgan,habermas,mitrovica,paleontological,polystyrene,thana,manas,conformist,turbofan,decomposes,logano,castration,metamorphoses,patroness,herbicide,mikolaj,rapprochement,macroeconomics,barranquilla,matsudaira,lintels,femina,hijab,spotsylvania,morpheme,bitola,baluchistan,kurukshetra,otway,extrusion,waukesha,menswear,helder,trung,bingley,protester,boars,overhang,differentials,exarchate,hejaz,kumara,unjustified,timings,sharpness,nuovo,taisho,sundar,etc..,jehan,unquestionably,muscovy,daltrey,canute,paneled,amedeo,metroplex,elaborates,telus,tetrapods,dragonflies,epithets,saffir,parthenon,lucrezia,refitting,pentateuch,hanshin,montparnasse,lumberjacks,sanhedrin,erectile,odors,greenstone,resurgent,leszek,amory,substituents,prototypical,viewfinder,monck,universiteit,joffre,revives,chatillon,seedling,scherzo,manukau,ashdod,gympie,homolog,stalwarts,ruinous,weibo,tochigi,wallenberg,gayatri,munda,satyagraha,storefronts,heterogeneity,tollway,sportswriters,binocular,gendarmes,ladysmith,tikal,ortsgemeinde,ja'far,osmotic,linlithgow,bramley,telecoms,pugin,repose,rupaul,sieur,meniscus,garmisch,reintroduce,400th,shoten,poniatowski,drome,kazakhstani,changeover,astronautics,husserl,herzl,hypertext,katakana,polybius,antananarivo,seong,breguet,reliquary,utada,aggregating,liangshan,sivan,tonawanda,audiobooks,shankill,coulee,phenolic,brockton,bookmakers,handsets,boaters,wylde,commonality,mappings,silhouettes,pennines,maurya,pratchett,singularities,eschewed,pretensions,vitreous,ibero,totalitarianism,poulenc,lingered,directx,seasoning,deputation,interdict,illyria,feedstock,counterbalance,muzik,buganda,parachuted,violist,homogeneity,comix,fjords,corsairs,punted,verandahs,equilateral,laoghaire,magyars,117th,alesund,televoting,mayotte,eateries,refurbish,nswrl,yukio,caragiale,zetas,dispel,codecs,inoperable,outperformed,rejuvenation,elstree,modernise,contributory,pictou,tewkesbury,chechens,ashina,psionic,refutation,medico,overdubbed,nebulae,sandefjord,personages,eccellenza,businessperson,placename,abenaki,perryville,threshing,reshaped,arecibo,burslem,colspan=3|turnout,rebadged,lumia,erinsborough,interactivity,bitmap,indefatigable,theosophy,excitatory,gleizes,edsel,bermondsey,korce,saarinen,wazir,diyarbakir,cofounder,liberalisation,onsen,nighthawks,siting,retirements,semyon,d'histoire,114th,redditch,venetia,praha,'round,valdosta,hieroglyphic,postmedial,edirne,miscellany,savona,cockpits,minimization,coupler,jacksonian,appeasement,argentines,saurashtra,arkwright,hesiod,folios,fitzalan,publica,rivaled,civitas,beermen,constructivism,ribeira,zeitschrift,solanum,todos,deformities,chilliwack,verdean,meagre,bishoprics,gujrat,yangzhou,reentered,inboard,mythologies,virtus,unsurprisingly,rusticated,museu,symbolise,proportionate,thesaban,symbian,aeneid,mitotic,veliki,compressive,cisterns,abies,winemaker,massenet,bertolt,ahmednagar,triplemania,armorial,administracion,tenures,smokehouse,hashtag,fuerza,regattas,gennady,kanazawa,mahmudabad,crustal,asaph,valentinian,ilaiyaraaja,honeyeater,trapezoidal,cooperatively,unambiguously,mastodon,inhospitable,harnesses,riverton,renewables,djurgardens,haitians,airings,humanoids,boatswain,shijiazhuang,faints,veera,punjabis,steepest,narain,karlovy,serre,sulcus,collectives,1500m,arion,subarctic,liberally,apollonius,ostia,droplet,headstones,norra,robusta,maquis,veronese,imola,primers,luminance,escadrille,mizuki,irreconcilable,stalybridge,temur,paraffin,stuccoed,parthians,counsels,fundamentalists,vivendi,polymath,sugababes,mikko,yonne,fermions,vestfold,pastoralist,kigali,unseeded,glarus,cusps,amasya,northwesterly,minorca,astragalus,verney,trevelyan,antipathy,wollstonecraft,bivalves,boulez,royle,divisao,quranic,bareilly,coronal,deviates,lulea,erectus,petronas,chandan,proxies,aeroflot,postsynaptic,memoriam,moyne,gounod,kuznetsova,pallava,ordinating,reigate,'first,lewisburg,exploitative,danby,academica,bailiwick,brahe,injective,stipulations,aeschylus,computes,gulden,hydroxylase,liveries,somalis,underpinnings,muscovite,kongsberg,domus,overlain,shareware,variegated,jalalabad,agence,ciphertext,insectivores,dengeki,menuhin,cladistic,baerum,betrothal,tokushima,wavelet,expansionist,pottsville,siyuan,prerequisites,carpi,nemzeti,nazar,trialled,eliminator,irrorated,homeward,redwoods,undeterred,strayed,lutyens,multicellular,aurelian,notated,lordships,alsatian,idents,foggia,garros,chalukyas,lillestrom,podlaski,pessimism,hsien,demilitarized,whitewashed,willesden,kirkcaldy,sanctorum,lamia,relaying,escondido,paediatric,contemplates,demarcated,bluestone,betula,penarol,capitalise,kreuznach,kenora,115th,hold'em,reichswehr,vaucluse,m.i.a,windings,boys/girls,cajon,hisar,predictably,flemington,ysgol,mimicked,clivina,grahamstown,ionia,glyndebourne,patrese,aquaria,sleaford,dayal,sportscenter,malappuram,m.b.a.,manoa,carbines,solvable,designator,ramanujan,linearity,academicians,sayid,lancastrian,factorial,strindberg,vashem,delos,comyn,condensing,superdome,merited,kabaddi,intransitive,bideford,neuroimaging,duopoly,scorecards,ziggler,heriot,boyars,virology,marblehead,microtubules,westphalian,anticipates,hingham,searchers,harpist,rapides,morricone,convalescent,mises,nitride,metrorail,matterhorn,bicol,drivetrain,marketer,snippet,winemakers,muban,scavengers,halberstadt,herkimer,peten,laborious,stora,montgomeryshire,booklist,shamir,herault,eurostar,anhydrous,spacewalk,ecclesia,calliostoma,highschool,d'oro,suffusion,imparts,overlords,tagus,rectifier,counterinsurgency,ministered,eilean,milecastle,contre,micromollusk,okhotsk,bartoli,matroid,hasidim,thirunal,terme,tarlac,lashkar,presque,thameslink,flyby,troopship,renouncing,fatih,messrs,vexillum,bagration,magnetite,bornholm,androgynous,vehement,tourette,philosophic,gianfranco,tuileries,codice_6,radially,flexion,hants,reprocessing,setae,burne,palaeographically,infantryman,shorebirds,tamarind,moderna,threading,militaristic,crohn,norrkoping,125cc,stadtholder,troms,klezmer,alphanumeric,brome,emmanuelle,tiwari,alchemical,formula_52,onassis,bleriot,bipedal,colourless,hermeneutics,hosni,precipitating,turnstiles,hallucinogenic,panhellenic,wyandotte,elucidated,chita,ehime,generalised,hydrophilic,biota,niobium,rnzaf,gandhara,longueuil,logics,sheeting,bielsko,cuvier,kagyu,trefoil,docent,pancrase,stalinism,postures,encephalopathy,monckton,imbalances,epochs,leaguers,anzio,diminishes,pataki,nitrite,amuro,nabil,maybach,l'aquila,babbler,bacolod,thutmose,evora,gaudi,breakage,recur,preservative,60deg,mendip,functionaries,columnar,maccabiah,chert,verden,bromsgrove,clijsters,dengue,pastorate,phuoc,principia,viareggio,kharagpur,scharnhorst,anyang,bosons,l'art,criticises,ennio,semarang,brownian,mirabilis,asperger,calibers,typographical,cartooning,minos,disembark,supranational,undescribed,etymologically,alappuzha,vilhelm,lanao,pakenham,bhagavata,rakoczi,clearings,astrologers,manitowoc,bunuel,acetylene,scheduler,defamatory,trabzonspor,leaded,scioto,pentathlete,abrahamic,minigames,aldehydes,peerages,legionary,1640s,masterworks,loudness,bryansk,likeable,genocidal,vegetated,towpath,declination,pyrrhus,divinely,vocations,rosebery,associazione,loaders,biswas,oeste,tilings,xianzong,bhojpuri,annuities,relatedness,idolator,psers,constriction,chuvash,choristers,hanafi,fielders,grammarian,orpheum,asylums,millbrook,gyatso,geldof,stabilise,tableaux,diarist,kalahari,panini,cowdenbeath,melanin,4x100m,resonances,pinar,atherosclerosis,sheringham,castlereagh,aoyama,larks,pantograph,protrude,natak,gustafsson,moribund,cerevisiae,cleanly,polymeric,holkar,cosmonauts,underpinning,lithosphere,firuzabad,languished,mingled,citrate,spadina,lavas,daejeon,fibrillation,porgy,pineville,ps1000,cobbled,emamzadeh,mukhtar,dampers,indelible,salonika,nanoscale,treblinka,eilat,purporting,fluctuate,mesic,hagiography,cutscenes,fondation,barrens,comically,accrue,ibrox,makerere,defections,'there,hollandia,skene,grosseto,reddit,objectors,inoculation,rowdies,playfair,calligrapher,namor,sibenik,abbottabad,propellants,hydraulically,chloroplasts,tablelands,tecnico,schist,klasse,shirvan,bashkortostan,bullfighting,north/south,polski,hanns,woodblock,kilmore,ejecta,ignacy,nanchang,danubian,commendations,snohomish,samaritans,argumentation,vasconcelos,hedgehogs,vajrayana,barents,kulkarni,kumbakonam,identifications,hillingdon,weirs,nayanar,beauvoir,messe,divisors,atlantiques,broods,affluence,tegucigalpa,unsuited,autodesk,akash,princeps,culprits,kingstown,unassuming,goole,visayan,asceticism,blagojevich,irises,paphos,unsound,maurier,pontchartrain,desertification,sinfonietta,latins,especial,limpet,valerenga,glial,brainstem,mitral,parables,sauropod,judean,iskcon,sarcoma,venlo,justifications,zhuhai,blavatsky,alleviated,usafe,steppenwolf,inversions,janko,chagall,secretory,basildon,saguenay,pergamon,hemispherical,harmonized,reloading,franjo,domaine,extravagance,relativism,metamorphosed,labuan,baloncesto,gmail,byproducts,calvinists,counterattacked,vitus,bubonic,120th,strachey,ritually,brookwood,selectable,savinja,incontinence,meltwater,jinja,1720s,brahmi,morgenthau,sheaves,sleeved,stratovolcano,wielki,utilisation,avoca,fluxus,panzergrenadier,philately,deflation,podlaska,prerogatives,kuroda,theophile,zhongzong,gascoyne,magus,takao,arundell,fylde,merdeka,prithviraj,venkateswara,liepaja,daigo,dreamland,reflux,sunnyvale,coalfields,seacrest,soldering,flexor,structuralism,alnwick,outweighed,unaired,mangeshkar,batons,glaad,banshees,irradiated,organelles,biathlete,cabling,chairlift,lollapalooza,newsnight,capacitive,succumbs,flatly,miramichi,burwood,comedienne,charteris,biotic,workspace,aficionados,sokolka,chatelet,o'shaughnessy,prosthesis,neoliberal,refloated,oppland,hatchlings,econometrics,loess,thieu,androids,appalachians,jenin,pterostichinae,downsized,foils,chipsets,stencil,danza,narrate,maginot,yemenite,bisects,crustacean,prescriptive,melodious,alleviation,empowers,hansson,autodromo,obasanjo,osmosis,daugava,rheumatism,moraes,leucine,etymologies,chepstow,delaunay,bramall,bajaj,flavoring,approximates,marsupials,incisive,microcomputer,tactically,waals,wilno,fisichella,ursus,hindmarsh,mazarin,lomza,xenophobia,lawlessness,annecy,wingers,gornja,gnaeus,superieur,tlaxcala,clasps,symbolises,slats,rightist,effector,blighted,permanence,divan,progenitors,kunsthalle,anointing,excelling,coenzyme,indoctrination,dnipro,landholdings,adriaan,liturgies,cartan,ethmia,attributions,sanctus,trichy,chronicon,tancred,affinis,kampuchea,gantry,pontypool,membered,distrusted,fissile,dairies,hyposmocoma,craigie,adarsh,martinsburg,taxiway,30deg,geraint,vellum,bencher,khatami,formula_53,zemun,teruel,endeavored,palmares,pavements,u.s..,internationalization,satirized,carers,attainable,wraparound,muang,parkersburg,extinctions,birkenfeld,wildstorm,payers,cohabitation,unitas,culloden,capitalizing,clwyd,daoist,campinas,emmylou,orchidaceae,halakha,orientales,fealty,domnall,chiefdom,nigerians,ladislav,dniester,avowed,ergonomics,newsmagazine,kitsch,cantilevered,benchmarking,remarriage,alekhine,coldfield,taupo,almirante,substations,apprenticeships,seljuq,levelling,eponym,symbolising,salyut,opioids,underscore,ethnologue,mohegan,marikina,libro,bassano,parse,semantically,disjointed,dugdale,padraig,tulsi,modulating,xfinity,headlands,mstislav,earthworms,bourchier,lgbtq,embellishments,pennants,rowntree,betel,motet,mulla,catenary,washoe,mordaunt,dorking,colmar,girardeau,glentoran,grammatically,samad,recreations,technion,staccato,mikoyan,spoilers,lyndhurst,victimization,chertsey,belafonte,tondo,tonsberg,narrators,subcultures,malformations,edina,augmenting,attests,euphemia,cabriolet,disguising,1650s,navarrese,demoralized,cardiomyopathy,welwyn,wallachian,smoothness,planktonic,voles,issuers,sardasht,survivability,cuauhtemoc,thetis,extruded,signet,raghavan,lombok,eliyahu,crankcase,dissonant,stolberg,trencin,desktops,bursary,collectivization,charlottenburg,triathlete,curvilinear,involuntarily,mired,wausau,invades,sundaram,deletions,bootstrap,abellio,axiomatic,noguchi,setups,malawian,visalia,materialist,kartuzy,wenzong,plotline,yeshivas,parganas,tunica,citric,conspecific,idlib,superlative,reoccupied,blagoevgrad,masterton,immunological,hatta,courbet,vortices,swallowtail,delves,haridwar,diptera,boneh,bahawalpur,angering,mardin,equipments,deployable,guanine,normality,rimmed,artisanal,boxset,chandrasekhar,jools,chenar,tanakh,carcassonne,belatedly,millville,anorthosis,reintegration,velde,surfactant,kanaan,busoni,glyphipterix,personas,fullness,rheims,tisza,stabilizers,bharathi,joost,spinola,mouldings,perching,esztergom,afzal,apostate,lustre,s.league,motorboat,monotheistic,armature,barat,asistencia,bloomsburg,hippocampal,fictionalised,defaults,broch,hexadecimal,lusignan,ryanair,boccaccio,breisgau,southbank,bskyb,adjoined,neurobiology,aforesaid,sadhu,langue,headship,wozniacki,hangings,regulus,prioritized,dynamism,allier,hannity,shimin,antoninus,gymnopilus,caledon,preponderance,melayu,electrodynamics,syncopated,ibises,krosno,mechanistic,morpeth,harbored,albini,monotheism,'real,hyperactivity,haveli,writer/director,minato,nimoy,caerphilly,chitral,amirabad,fanshawe,l'oreal,lorde,mukti,authoritarianism,valuing,spyware,hanbury,restarting,stato,embed,suiza,empiricism,stabilisation,stari,castlemaine,orbis,manufactory,mauritanian,shoji,taoyuan,prokaryotes,oromia,ambiguities,embodying,slims,frente,innovate,ojibwa,powdery,gaeltacht,argentinos,quatermass,detergents,fijians,adaptor,tokai,chileans,bulgars,oxidoreductases,bezirksliga,conceicao,myosin,nellore,500cc,supercomputers,approximating,glyndwr,polypropylene,haugesund,cockerell,tudman,ashbourne,hindemith,bloodlines,rigveda,etruria,romanos,steyn,oradea,deceleration,manhunter,laryngeal,fraudulently,janez,wendover,haplotype,janaki,naoki,belizean,mellencamp,cartographic,sadhana,tricolour,pseudoscience,satara,bytow,s.p.a.,jagdgeschwader,arcot,omagh,sverdrup,masterplan,surtees,apocrypha,ahvaz,d'amato,socratic,leumit,unnumbered,nandini,witold,marsupial,coalesced,interpolated,gimnasia,karadzic,keratin,mamoru,aldeburgh,speculator,escapement,irfan,kashyap,satyajit,haddington,solver,rothko,ashkelon,kickapoo,yeomen,superbly,bloodiest,greenlandic,lithic,autofocus,yardbirds,poona,keble,javan,sufis,expandable,tumblr,ursuline,swimwear,winwood,counsellors,aberrations,marginalised,befriending,workouts,predestination,varietal,siddhartha,dunkeld,judaic,esquimalt,shabab,ajith,telefonica,stargard,hoysala,radhakrishnan,sinusoidal,strada,hiragana,cebuano,monoid,independencia,floodwaters,mildura,mudflats,ottokar,translit,radix,wigner,philosophically,tephritid,synthesizing,castletown,installs,stirner,resettle,bushfire,choirmaster,kabbalistic,shirazi,lightship,rebus,colonizers,centrifuge,leonean,kristofferson,thymus,clackamas,ratnam,rothesay,municipally,centralia,thurrock,gulfport,bilinear,desirability,merite,psoriasis,macaw,erigeron,consignment,mudstone,distorting,karlheinz,ramen,tailwheel,vitor,reinsurance,edifices,superannuation,dormancy,contagion,cobden,rendezvoused,prokaryotic,deliberative,patricians,feigned,degrades,starlings,sopot,viticultural,beaverton,overflowed,convener,garlands,michiel,ternopil,naturelle,biplanes,bagot,gamespy,ventspils,disembodied,flattening,profesional,londoners,arusha,scapular,forestall,pyridine,ulema,eurodance,aruna,callus,periodontal,coetzee,immobilized,o'meara,maharani,katipunan,reactants,zainab,microgravity,saintes,britpop,carrefour,constrain,adversarial,firebirds,brahmo,kashima,simca,surety,surpluses,superconductivity,gipuzkoa,cumans,tocantins,obtainable,humberside,roosting,'king,formula_54,minelayer,bessel,sulayman,cycled,biomarkers,annealing,shusha,barda,cassation,djing,polemics,tuple,directorates,indomitable,obsolescence,wilhelmine,pembina,bojan,tambo,dioecious,pensioner,magnificat,1660s,estrellas,southeasterly,immunodeficiency,railhead,surreptitiously,codeine,encores,religiosity,tempera,camberley,efendi,boardings,malleable,hagia,input/output,lucasfilm,ujjain,polymorphisms,creationist,berners,mickiewicz,irvington,linkedin,endures,kinect,munition,apologetics,fairlie,predicated,reprinting,ethnographer,variances,levantine,mariinsky,jadid,jarrow,asia/oceania,trinamool,waveforms,bisexuality,preselection,pupae,buckethead,hieroglyph,lyricists,marionette,dunbartonshire,restorer,monarchical,pazar,kickoffs,cabildo,savannas,gliese,dench,spoonbills,novelette,diliman,hypersensitivity,authorising,montefiore,mladen,qu'appelle,theistic,maruti,laterite,conestoga,saare,californica,proboscis,carrickfergus,imprecise,hadassah,baghdadi,jolgeh,deshmukh,amusements,heliopolis,berle,adaptability,partenkirchen,separations,baikonur,cardamom,southeastward,southfield,muzaffar,adequacy,metropolitana,rajkot,kiyoshi,metrobus,evictions,reconciles,librarianship,upsurge,knightley,badakhshan,proliferated,spirituals,burghley,electroacoustic,professing,featurette,reformists,skylab,descriptors,oddity,greyfriars,injects,salmond,lanzhou,dauntless,subgenera,underpowered,transpose,mahinda,gatos,aerobatics,seaworld,blocs,waratahs,joris,giggs,perfusion,koszalin,mieczyslaw,ayyubid,ecologists,modernists,sant'angelo,quicktime,him/her,staves,sanyo,melaka,acrocercops,qigong,iterated,generalizes,recuperation,vihara,circassians,psychical,chavo,memoires,infiltrates,notaries,pelecaniformesfamily,strident,chivalric,pierrepont,alleviating,broadsides,centipede,b.tech,reinterpreted,sudetenland,hussite,covenanters,radhika,ironclads,gainsbourg,testis,penarth,plantar,azadegan,beano,espn.com,leominster,autobiographies,nbcuniversal,eliade,khamenei,montferrat,undistinguished,ethnological,wenlock,fricatives,polymorphic,biome,joule,sheaths,astrophysicist,salve,neoclassicism,lovat,downwind,belisarius,forma,usurpation,freie,depopulation,backbench,ascenso,'high,aagpbl,gdanski,zalman,mouvement,encapsulation,bolshevism,statny,voyageurs,hywel,vizcaya,mazra'eh,narthex,azerbaijanis,cerebrospinal,mauretania,fantail,clearinghouse,bolingbroke,pequeno,ansett,remixing,microtubule,wrens,jawahar,palembang,gambian,hillsong,fingerboard,repurposed,sundry,incipient,veolia,theologically,ulaanbaatar,atsushi,foundling,resistivity,myeloma,factbook,mazowiecka,diacritic,urumqi,clontarf,provokes,intelsat,professes,materialise,portobello,benedictines,panionios,introverted,reacquired,bridport,mammary,kripke,oratorios,vlore,stoning,woredas,unreported,antti,togolese,fanzines,heuristics,conservatories,carburetors,clitheroe,cofounded,formula_57,erupting,quinnipiac,bootle,ghostface,sittings,aspinall,sealift,transferase,boldklub,siskiyou,predominated,francophonie,ferruginous,castrum,neogene,sakya,madama,precipitous,'love,posix,bithynia,uttara,avestan,thrushes,seiji,memorably,septimius,libri,cibernetico,hyperinflation,dissuaded,cuddalore,peculiarity,vaslui,grojec,albumin,thurles,casks,fasteners,fluidity,buble,casals,terek,gnosticism,cognates,ulnar,radwanska,babylonians,majuro,oxidizer,excavators,rhythmically,liffey,gorakhpur,eurydice,underscored,arborea,lumumba,tuber,catholique,grama,galilei,scrope,centreville,jacobin,bequests,ardeche,polygamous,montauban,terai,weatherboard,readability,attainder,acraea,transversely,rivets,winterbottom,reassures,bacteriology,vriesea,chera,andesite,dedications,homogenous,reconquered,bandon,forrestal,ukiyo,gurdjieff,tethys,sparc,muscogee,grebes,belchatow,mansa,blantyre,palliser,sokolow,fibroblasts,exmoor,misaki,soundscapes,housatonic,middelburg,convenor,leyla,antipope,histidine,okeechobee,alkenes,sombre,alkene,rubik,macaques,calabar,trophee,pinchot,'free,frusciante,chemins,falaise,vasteras,gripped,schwarzenberg,cumann,kanchipuram,acoustically,silverbacks,fangio,inset,plympton,kuril,vaccinations,recep,theropods,axils,stavropol,encroached,apoptotic,papandreou,wailers,moonstone,assizes,micrometers,hornchurch,truncation,annapurna,egyptologists,rheumatic,promiscuity,satiric,fleche,caloptilia,anisotropy,quaternions,gruppo,viscounts,awardees,aftershocks,sigint,concordance,oblasts,gaumont,stent,commissars,kesteven,hydroxy,vijayanagar,belorussian,fabricius,watermark,tearfully,mamet,leukaemia,sorkh,milepost,tattooing,vosta,abbasids,uncompleted,hedong,woodwinds,extinguishing,malus,multiplexes,francoist,pathet,responsa,bassists,'most,postsecondary,ossory,grampian,saakashvili,alito,strasberg,impressionistic,volador,gelatinous,vignette,underwing,campanian,abbasabad,albertville,hopefuls,nieuwe,taxiways,reconvened,recumbent,pathologists,unionized,faversham,asymptotically,romulo,culling,donja,constricted,annesley,duomo,enschede,lovech,sharpshooter,lansky,dhamma,papillae,alanine,mowat,delius,wrest,mcluhan,podkarpackie,imitators,bilaspur,stunting,pommel,casemate,handicaps,nagas,testaments,hemings,necessitate,rearward,locative,cilla,klitschko,lindau,merion,consequential,antic,soong,copula,berthing,chevrons,rostral,sympathizer,budokan,ranulf,beria,stilt,replying,conflated,alcibiades,painstaking,yamanashi,calif.,arvid,ctesiphon,xizong,rajas,caxton,downbeat,resurfacing,rudders,miscegenation,deathmatch,foregoing,arthropod,attestation,karts,reapportionment,harnessing,eastlake,schola,dosing,postcolonial,imtiaz,formula_55,insulators,gunung,accumulations,pampas,llewelyn,bahnhof,cytosol,grosjean,teaneck,briarcliff,arsenio,canara,elaborating,passchendaele,searchlights,holywell,mohandas,preventable,gehry,mestizos,ustinov,cliched,'national,heidfeld,tertullian,jihadist,tourer,miletus,semicircle,outclassed,bouillon,cardinalate,clarifies,dakshina,bilayer,pandyan,unrwa,chandragupta,formula_56,portola,sukumaran,lactation,islamia,heikki,couplers,misappropriation,catshark,montt,ploughs,carib,stator,leaderboard,kenrick,dendrites,scape,tillamook,molesworth,mussorgsky,melanesia,restated,troon,glycoside,truckee,headwater,mashup,sectoral,gangwon,docudrama,skirting,psychopathology,dramatised,ostroleka,infestations,thabo,depolarization,wideroe,eisenbahn,thomond,kumaon,upendra,foreland,acronyms,yaqui,retaking,raphaelite,specie,dupage,villars,lucasarts,chloroplast,werribee,balsa,ascribe,havant,flava,khawaja,tyumen,subtract,interrogators,reshaping,buzzcocks,eesti,campanile,potemkin,apertures,snowboarder,registrars,handbooks,boyar,contaminant,depositors,proximate,jeunesse,zagora,pronouncements,mists,nihilism,deified,margraviate,pietersen,moderators,amalfi,adjectival,copepods,magnetosphere,pallets,clemenceau,castra,perforation,granitic,troilus,grzegorz,luthier,dockyards,antofagasta,ffestiniog,subroutine,afterword,waterwheel,druce,nitin,undifferentiated,emacs,readmitted,barneveld,tapers,hittites,infomercials,infirm,braathens,heligoland,carpark,geomagnetic,musculoskeletal,nigerien,machinima,harmonize,repealing,indecency,muskoka,verite,steubenville,suffixed,cytoskeleton,surpasses,harmonia,imereti,ventricles,heterozygous,envisions,otsego,ecoles,warrnambool,burgenland,seria,rawat,capistrano,welby,kirin,enrollments,caricom,dragonlance,schaffhausen,expanses,photojournalism,brienne,etude,referent,jamtland,schemas,xianbei,cleburne,bicester,maritima,shorelines,diagonals,bjelke,nonpublic,aliasing,m.f.a,ovals,maitreya,skirmishing,grothendieck,sukhothai,angiotensin,bridlington,durgapur,contras,gakuen,skagit,rabbinate,tsunamis,haphazard,tyldesley,microcontroller,discourages,hialeah,compressing,septimus,larvik,condoleezza,psilocybin,protectionism,songbirds,clandestinely,selectmen,wargame,cinemascope,khazars,agronomy,melzer,latifah,cherokees,recesses,assemblymen,basescu,banaras,bioavailability,subchannels,adenine,o'kelly,prabhakar,leonese,dimethyl,testimonials,geoffroy,oxidant,universiti,gheorghiu,bohdan,reversals,zamorin,herbivore,jarre,sebastiao,infanterie,dolmen,teddington,radomsko,spaceships,cuzco,recapitulation,mahoning,bainimarama,myelin,aykroyd,decals,tokelau,nalgonda,rajasthani,121st,quelled,tambov,illyrians,homilies,illuminations,hypertrophy,grodzisk,inundation,incapacity,equilibria,combats,elihu,steinitz,berengar,gowda,canwest,khosrau,maculata,houten,kandinsky,onside,leatherhead,heritable,belvidere,federative,chukchi,serling,eruptive,patan,entitlements,suffragette,evolutions,migrates,demobilisation,athleticism,trope,sarpsborg,kensal,translink,squamish,concertgebouw,energon,timestamp,competences,zalgiris,serviceman,codice_7,spoofing,assange,mahadevan,skien,suceava,augustan,revisionism,unconvincing,hollande,drina,gottlob,lippi,broglie,darkening,tilapia,eagerness,nacht,kolmogorov,photometric,leeuwarden,jrotc,haemorrhage,almanack,cavalli,repudiation,galactose,zwickau,cetinje,houbraken,heavyweights,gabonese,ordinals,noticias,museveni,steric,charaxes,amjad,resection,joinville,leczyca,anastasius,purbeck,subtribe,dalles,leadoff,monoamine,jettisoned,kaori,anthologized,alfreton,indic,bayezid,tottori,colonizing,assassinating,unchanging,eusebian,d'estaing,tsingtao,toshio,transferases,peronist,metrology,equus,mirpur,libertarianism,kovil,indole,'green,abstention,quantitatively,icebreakers,tribals,mainstays,dryandra,eyewear,nilgiri,chrysanthemum,inositol,frenetic,merchantman,hesar,physiotherapist,transceiver,dancefloor,rankine,neisse,marginalization,lengthen,unaided,rework,pageantry,savio,striated,funen,witton,illuminates,frass,hydrolases,akali,bistrita,copywriter,firings,handballer,tachinidae,dmytro,coalesce,neretva,menem,moraines,coatbridge,crossrail,spoofed,drosera,ripen,protour,kikuyu,boleslav,edwardes,troubadours,haplogroups,wrasse,educationalist,sroda,khaneh,dagbladet,apennines,neuroscientist,deplored,terje,maccabees,daventry,spaceport,lessening,ducats,singer/guitarist,chambersburg,yeong,configurable,ceremonially,unrelenting,caffe,graaf,denizens,kingsport,ingush,panhard,synthesised,tumulus,homeschooled,bozorg,idiomatic,thanhouser,queensway,radek,hippolytus,inking,banovina,peacocks,piaui,handsworth,pantomimes,abalone,thera,kurzweil,bandura,augustinians,bocelli,ferrol,jiroft,quadrature,contravention,saussure,rectification,agrippina,angelis,matanzas,nidaros,palestrina,latium,coriolis,clostridium,ordain,uttering,lanchester,proteolytic,ayacucho,merseburg,holbein,sambalpur,algebraically,inchon,ostfold,savoia,calatrava,lahiri,judgeship,ammonite,masaryk,meyerbeer,hemorrhagic,superspeedway,ningxia,panicles,encircles,khmelnytsky,profusion,esher,babol,inflationary,anhydride,gaspe,mossy,periodicity,nacion,meteorologists,mahjong,interventional,sarin,moult,enderby,modell,palgrave,warners,montcalm,siddha,functionalism,rilke,politicized,broadmoor,kunste,orden,brasileira,araneta,eroticism,colquhoun,mamba,blacktown,tubercle,seagrass,manoel,camphor,neoregelia,llandudno,annexe,enplanements,kamien,plovers,statisticians,iturbide,madrasah,nontrivial,publican,landholders,manama,uninhabitable,revivalist,trunkline,friendliness,gurudwara,rocketry,unido,tripos,besant,braque,evolutionarily,abkhazian,staffel,ratzinger,brockville,bohemond,intercut,djurgarden,utilitarianism,deploys,sastri,absolutism,subhas,asghar,fictions,sepinwall,proportionately,titleholders,thereon,foursquare,machinegun,knightsbridge,siauliai,aqaba,gearboxes,castaways,weakens,phallic,strzelce,buoyed,ruthenia,pharynx,intractable,neptunes,koine,leakey,netherlandish,preempted,vinay,terracing,instigating,alluvium,prosthetics,vorarlberg,politiques,joinery,reduplication,nebuchadnezzar,lenticular,banka,seaborne,pattinson,helpline,aleph,beckenham,californians,namgyal,franziska,aphid,branagh,transcribe,appropriateness,surakarta,takings,propagates,juraj,b0d3fb,brera,arrayed,tailback,falsehood,hazleton,prosody,egyptology,pinnate,tableware,ratan,camperdown,ethnologist,tabari,classifiers,biogas,126th,kabila,arbitron,apuestas,membranous,kincardine,oceana,glories,natick,populism,synonymy,ghalib,mobiles,motherboards,stationers,germinal,patronised,formula_58,gaborone,torts,jeezy,interleague,novaya,batticaloa,offshoots,wilbraham,filename,nswrfl,'well,trilobite,pythons,optimally,scientologists,rhesus,pilsen,backdrops,batang,unionville,hermanos,shrikes,fareham,outlawing,discontinuing,boisterous,shamokin,scanty,southwestward,exchangers,unexpired,mewar,h.m.s,saldanha,pawan,condorcet,turbidity,donau,indulgences,coincident,cliques,weeklies,bardhaman,violators,kenai,caspase,xperia,kunal,fistula,epistemic,cammell,nephi,disestablishment,rotator,germaniawerft,pyaar,chequered,jigme,perlis,anisotropic,popstars,kapil,appendices,berat,defecting,shacks,wrangel,panchayath,gorna,suckling,aerosols,sponheim,talal,borehole,encodings,enlai,subduing,agong,nadar,kitsap,syrmia,majumdar,pichilemu,charleville,embryology,booting,literati,abutting,basalts,jussi,repubblica,hertogenbosch,digitization,relents,hillfort,wiesenthal,kirche,bhagwan,bactrian,oases,phyla,neutralizing,helsing,ebooks,spearheading,margarine,'golden,phosphor,picea,stimulants,outliers,timescale,gynaecology,integrator,skyrocketed,bridgnorth,senecio,ramachandra,suffragist,arrowheads,aswan,inadvertent,microelectronics,118th,sofer,kubica,melanesian,tuanku,balkh,vyborg,crystallographic,initiators,metamorphism,ginzburg,looters,unimproved,finistere,newburyport,norges,immunities,franchisees,asterism,kortrijk,camorra,komsomol,fleurs,draughts,patagonian,voracious,artin,collaborationist,revolucion,revitalizing,xaver,purifying,antipsychotic,disjunct,pompeius,dreamwave,juvenal,beinn,adiyaman,antitank,allama,boletus,melanogaster,dumitru,caproni,aligns,athabaskan,stobart,phallus,veikkausliiga,hornsey,buffering,bourbons,dobruja,marga,borax,electrics,gangnam,motorcyclist,whidbey,draconian,lodger,galilean,sanctification,imitates,boldness,underboss,wheatland,cantabrian,terceira,maumee,redefining,uppercase,ostroda,characterise,universalism,equalized,syndicalism,haringey,masovia,deleuze,funkadelic,conceals,thuan,minsky,pluralistic,ludendorff,beekeeping,bonfires,endoscopic,abuts,prebend,jonkoping,amami,tribunes,yup'ik,awadh,gasification,pforzheim,reforma,antiwar,vaishnavism,maryville,inextricably,margrethe,empresa,neutrophils,sanctified,ponca,elachistidae,curiae,quartier,mannar,hyperplasia,wimax,busing,neologism,florins,underrepresented,digitised,nieuw,cooch,howards,frege,hughie,plied,swale,kapellmeister,vajpayee,quadrupled,aeronautique,dushanbe,custos,saltillo,kisan,tigray,manaus,epigrams,shamanic,peppered,frosts,promotion/relegation,concedes,zwingli,charentes,whangarei,hyung,spring/summer,sobre,eretz,initialization,sawai,ephemera,grandfathered,arnaldo,customised,permeated,parapets,growths,visegrad,estudios,altamont,provincia,apologises,stoppard,carburettor,rifts,kinematic,zhengzhou,eschatology,prakrit,folate,yvelines,scapula,stupas,rishon,reconfiguration,flutist,1680s,apostolate,proudhon,lakshman,articulating,stortford,faithfull,bitterns,upwelling,qur'anic,lidar,interferometry,waterlogged,koirala,ditton,wavefunction,fazal,babbage,antioxidants,lemberg,deadlocked,tolled,ramapo,mathematica,leiria,topologies,khali,photonic,balti,1080p,corrects,recommenced,polyglot,friezes,tiebreak,copacabana,cholmondeley,armband,abolishment,sheamus,buttes,glycolysis,cataloged,warrenton,sassari,kishan,foodservice,cryptanalysis,holmenkollen,cosplay,machi,yousuf,mangal,allying,fertiliser,otomi,charlevoix,metallurg,parisians,bottlenose,oakleigh,debug,cidade,accede,ligation,madhava,pillboxes,gatefold,aveyron,sorin,thirsk,immemorial,menelik,mehra,domingos,underpinned,fleshed,harshness,diphthong,crestwood,miskolc,dupri,pyrausta,muskingum,tuoba,prodi,incidences,waynesboro,marquesas,heydar,artesian,calinescu,nucleation,funders,covalently,compaction,derbies,seaters,sodor,tabular,amadou,peckinpah,o'halloran,zechariah,libyans,kartik,daihatsu,chandran,erzhu,heresies,superheated,yarder,dorde,tanjore,abusers,xuanwu,juniperus,moesia,trusteeship,birdwatching,beatz,moorcock,harbhajan,sanga,choreographic,photonics,boylston,amalgamate,prawns,electrifying,sarath,inaccurately,exclaims,powerpoint,chaining,cpusa,adulterous,saccharomyces,glogow,vfl/afl,syncretic,simla,persisting,functors,allosteric,euphorbiaceae,juryo,mlada,moana,gabala,thornycroft,kumanovo,ostrovsky,sitio,tutankhamun,sauropods,kardzhali,reinterpretation,sulpice,rosyth,originators,halesowen,delineation,asesoria,abatement,gardai,elytra,taillights,overlays,monsoons,sandpipers,ingmar,henrico,inaccuracy,irwell,arenabowl,elche,pressburg,signalman,interviewees,sinkhole,pendle,ecommerce,cellos,nebria,organometallic,surrealistic,propagandist,interlaken,canandaigua,aerials,coutinho,pascagoula,tonopah,letterkenny,gropius,carbons,hammocks,childe,polities,hosiery,donitz,suppresses,diaghilev,stroudsburg,bagram,pistoia,regenerating,unitarians,takeaway,offstage,vidin,glorification,bakunin,yavapai,lutzow,sabercats,witney,abrogated,gorlitz,validating,dodecahedron,stubbornly,telenor,glaxosmithkline,solapur,undesired,jellicoe,dramatization,four-and-a-half,seawall,waterpark,artaxerxes,vocalization,typographic,byung,sachsenhausen,shepparton,kissimmee,konnan,belsen,dhawan,khurd,mutagenesis,vejle,perrot,estradiol,formula_60,saros,chiloe,misiones,lamprey,terrains,speke,miasto,eigenvectors,haydock,reservist,corticosteroids,savitri,shinawatra,developmentally,yehudi,berates,janissaries,recapturing,rancheria,subplots,gresley,nikkatsu,oryol,cosmas,boavista,formula_59,playfully,subsections,commentated,kathakali,dorid,vilaine,seepage,hylidae,keiji,kazakhs,triphosphate,1620s,supersede,monarchists,falla,miyako,notching,bhumibol,polarizing,secularized,shingled,bronislaw,lockerbie,soleyman,bundesbahn,latakia,redoubts,boult,inwardly,invents,ondrej,minangkabau,newquay,permanente,alhaji,madhav,malini,ellice,bookmaker,mankiewicz,etihad,o'dea,interrogative,mikawa,wallsend,canisius,bluesy,vitruvius,noord,ratifying,mixtec,gujranwala,subprefecture,keelung,goiania,nyssa,shi'ite,semitone,ch'uan,computerised,pertuan,catapults,nepomuk,shruti,millstones,buskerud,acolytes,tredegar,sarum,armia,dell'arte,devises,custodians,upturned,gallaudet,disembarking,thrashed,sagrada,myeon,undeclared,qumran,gaiden,tepco,janesville,showground,condense,chalon,unstaffed,pasay,undemocratic,hauts,viridis,uninjured,escutcheon,gymkhana,petaling,hammam,dislocations,tallaght,rerum,shias,indios,guaranty,simplicial,benares,benediction,tajiri,prolifically,huawei,onerous,grantee,ferencvaros,otranto,carbonates,conceit,digipak,qadri,masterclasses,swamiji,cradock,plunket,helmsman,119th,salutes,tippecanoe,murshidabad,intelligibility,mittal,diversifying,bidar,asansol,crowdsourcing,rovere,karakoram,grindcore,skylights,tulagi,furrows,ligne,stuka,sumer,subgraph,amata,regionalist,bulkeley,teletext,glorify,readied,lexicographer,sabadell,predictability,quilmes,phenylalanine,bandaranaike,pyrmont,marksmen,quisling,viscountess,sociopolitical,afoul,pediments,swazi,martyrology,nullify,panagiotis,superconductors,veldenz,jujuy,l'isle,hematopoietic,shafi,subsea,hattiesburg,jyvaskyla,kebir,myeloid,landmine,derecho,amerindians,birkenau,scriabin,milhaud,mucosal,nikaya,freikorps,theoretician,proconsul,o'hanlon,clerked,bactria,houma,macular,topologically,shrubby,aryeh,ghazali,afferent,magalhaes,moduli,ashtabula,vidarbha,securitate,ludwigsburg,adoor,varun,shuja,khatun,chengde,bushels,lascelles,professionnelle,elfman,rangpur,unpowered,citytv,chojnice,quaternion,stokowski,aschaffenburg,commutes,subramaniam,methylene,satrap,gharb,namesakes,rathore,helier,gestational,heraklion,colliers,giannis,pastureland,evocation,krefeld,mahadeva,churchmen,egret,yilmaz,galeazzo,pudukkottai,artigas,generalitat,mudslides,frescoed,enfeoffed,aphorisms,melilla,montaigne,gauliga,parkdale,mauboy,linings,prema,sapir,xylophone,kushan,rockne,sequoyah,vasyl,rectilinear,vidyasagar,microcosm,san'a,carcinogen,thicknesses,aleut,farcical,moderating,detested,hegemonic,instalments,vauban,verwaltungsgemeinschaft,picayune,razorback,magellanic,moluccas,pankhurst,exportation,waldegrave,sufferer,bayswater,1up.com,rearmament,orangutans,varazdin,b.o.b,elucidate,harlingen,erudition,brankovic,lapis,slipway,urraca,shinde,unwell,elwes,euboea,colwyn,srivijaya,grandstands,hortons,generalleutnant,fluxes,peterhead,gandhian,reals,alauddin,maximized,fairhaven,endow,ciechanow,perforations,darters,panellist,manmade,litigants,exhibitor,tirol,caracalla,conformance,hotelier,stabaek,hearths,borac,frisians,ident,veliko,emulators,schoharie,uzbeks,samarra,prestwick,wadia,universita,tanah,bucculatrix,predominates,genotypes,denounces,roadsides,ganassi,keokuk,philatelist,tomic,ingots,conduits,samplers,abdus,johar,allegories,timaru,wolfpacks,secunda,smeaton,sportivo,inverting,contraindications,whisperer,moradabad,calamities,bakufu,soundscape,smallholders,nadeem,crossroad,xenophobic,zakir,nationalliga,glazes,retroflex,schwyz,moroder,rubra,quraysh,theodoros,endemol,infidels,km/hr,repositioned,portraitist,lluis,answerable,arges,mindedness,coarser,eyewall,teleported,scolds,uppland,vibraphone,ricoh,isenburg,bricklayer,cuttlefish,abstentions,communicable,cephalopod,stockyards,balto,kinston,armbar,bandini,elphaba,maxims,bedouins,sachsen,friedkin,tractate,pamir,ivanovo,mohini,kovalainen,nambiar,melvyn,orthonormal,matsuyama,cuernavaca,veloso,overstated,streamer,dravid,informers,analyte,sympathized,streetscape,gosta,thomasville,grigore,futuna,depleting,whelks,kiedis,armadale,earner,wynyard,dothan,animating,tridentine,sabri,immovable,rivoli,ariege,parley,clinker,circulates,junagadh,fraunhofer,congregants,180th,buducnost,formula_62,olmert,dedekind,karnak,bayernliga,mazes,sandpiper,ecclestone,yuvan,smallmouth,decolonization,lemmy,adjudicated,retiro,legia,benue,posit,acidification,wahab,taconic,floatplane,perchlorate,atria,wisbech,divestment,dallara,phrygia,palustris,cybersecurity,rebates,facie,mineralogical,substituent,proteges,fowey,mayenne,smoothbore,cherwell,schwarzschild,junin,murrumbidgee,smalltalk,d'orsay,emirati,calaveras,titusville,theremin,vikramaditya,wampanoag,burra,plaines,onegin,emboldened,whampoa,langa,soderbergh,arnaz,sowerby,arendal,godunov,pathanamthitta,damselfly,bestowing,eurosport,iconoclasm,outfitters,acquiesced,badawi,hypotension,ebbsfleet,annulus,sohrab,thenceforth,chagatai,necessitates,aulus,oddities,toynbee,uniontown,innervation,populaire,indivisible,rossellini,minuet,cyrene,gyeongju,chania,cichlids,harrods,1690s,plunges,abdullahi,gurkhas,homebuilt,sortable,bangui,rediff,incrementally,demetrios,medaille,sportif,svend,guttenberg,tubules,carthusian,pleiades,torii,hoppus,phenyl,hanno,conyngham,teschen,cronenberg,wordless,melatonin,distinctiveness,autos,freising,xuanzang,dunwich,satanism,sweyn,predrag,contractually,pavlovic,malaysians,micrometres,expertly,pannonian,abstaining,capensis,southwesterly,catchphrases,commercialize,frankivsk,normanton,hibernate,verso,deportees,dubliners,codice_8,condors,zagros,glosses,leadville,conscript,morrisons,usury,ossian,oulton,vaccinium,civet,ayman,codrington,hadron,nanometers,geochemistry,extractor,grigori,tyrrhenian,neocollyris,drooping,falsification,werft,courtauld,brigantine,orhan,chapultepec,supercopa,federalized,praga,havering,encampments,infallibility,sardis,pawar,undirected,reconstructionist,ardrossan,varuna,pastimes,archdiocesan,fledging,shenhua,molise,secondarily,stagnated,replicates,ciencias,duryodhana,marauding,ruislip,ilyich,intermixed,ravenswood,shimazu,mycorrhizal,icosahedral,consents,dunblane,follicular,pekin,suffield,muromachi,kinsale,gauche,businesspeople,thereto,watauga,exaltation,chelmno,gorse,proliferate,drainages,burdwan,kangra,transducers,inductor,duvalier,maguindanao,moslem,uncaf,givenchy,plantarum,liturgics,telegraphs,lukashenko,chenango,andante,novae,ironwood,faubourg,torme,chinensis,ambala,pietermaritzburg,virginians,landform,bottlenecks,o'driscoll,darbhanga,baptistery,ameer,needlework,naperville,auditoriums,mullingar,starrer,animatronic,topsoil,madura,cannock,vernet,santurce,catocala,ozeki,pontevedra,multichannel,sundsvall,strategists,medio,135th,halil,afridi,trelawny,caloric,ghraib,allendale,hameed,ludwigshafen,spurned,pavlo,palmar,strafed,catamarca,aveiro,harmonization,surah,predictors,solvay,mande,omnipresent,parenthesis,echolocation,equaling,experimenters,acyclic,lithographic,sepoys,katarzyna,sridevi,impoundment,khosrow,caesarean,nacogdoches,rockdale,lawmaker,caucasians,bahman,miyan,rubric,exuberance,bombastic,ductile,snowdonia,inlays,pinyon,anemones,hurries,hospitallers,tayyip,pulleys,treme,photovoltaics,testbed,polonium,ryszard,osgoode,profiting,ironwork,unsurpassed,nepticulidae,makai,lumbini,preclassic,clarksburg,egremont,videography,rehabilitating,ponty,sardonic,geotechnical,khurasan,solzhenitsyn,henna,phoenicia,rhyolite,chateaux,retorted,tomar,deflections,repressions,harborough,renan,brumbies,vandross,storia,vodou,clerkenwell,decking,universo,salon.com,imprisoning,sudwest,ghaziabad,subscribing,pisgah,sukhumi,econometric,clearest,pindar,yildirim,iulia,atlases,cements,remaster,dugouts,collapsible,resurrecting,batik,unreliability,thiers,conjunctions,colophon,marcher,placeholder,flagella,wolds,kibaki,viviparous,twelver,screenshots,aroostook,khadr,iconographic,itasca,jaume,basti,propounded,varro,be'er,jeevan,exacted,shrublands,creditable,brocade,boras,bittern,oneonta,attentional,herzliya,comprehensible,lakeville,discards,caxias,frankland,camerata,satoru,matlab,commutator,interprovincial,yorkville,benefices,nizami,edwardsville,amigaos,cannabinoid,indianola,amateurliga,pernicious,ubiquity,anarchic,novelties,precondition,zardari,symington,sargodha,headphone,thermopylae,mashonaland,zindagi,thalberg,loewe,surfactants,dobro,crocodilians,samhita,diatoms,haileybury,berwickshire,supercritical,sofie,snorna,slatina,intramolecular,agung,osteoarthritis,obstetric,teochew,vakhtang,connemara,deformations,diadem,ferruccio,mainichi,qualitatively,refrigerant,rerecorded,methylated,karmapa,krasinski,restatement,rouvas,cubitt,seacoast,schwarzkopf,homonymous,shipowner,thiamine,approachable,xiahou,160th,ecumenism,polistes,internazionali,fouad,berar,biogeography,texting,inadequately,'when,4kids,hymenoptera,emplaced,cognomen,bellefonte,supplant,michaelmas,uriel,tafsir,morazan,schweinfurt,chorister,ps400,nscaa,petipa,resolutely,ouagadougou,mascarene,supercell,konstanz,bagrat,harmonix,bergson,shrimps,resonators,veneta,camas,mynydd,rumford,generalmajor,khayyam,web.com,pappus,halfdan,tanana,suomen,yutaka,bibliographical,traian,silat,noailles,contrapuntal,agaricus,'special,minibuses,1670s,obadiah,deepa,rorschach,malolos,lymington,valuations,imperials,caballeros,ambroise,judicature,elegiac,sedaka,shewa,checksum,gosforth,legionaries,corneille,microregion,friedrichshafen,antonis,surnamed,mycelium,cantus,educations,topmost,outfitting,ivica,nankai,gouda,anthemic,iosif,supercontinent,antifungal,belarusians,mudaliar,mohawks,caversham,glaciated,basemen,stevan,clonmel,loughton,deventer,positivist,manipuri,tensors,panipat,changeup,impermeable,dubbo,elfsborg,maritimo,regimens,bikram,bromeliad,substratum,norodom,gaultier,queanbeyan,pompeo,redacted,eurocopter,mothballed,centaurs,borno,copra,bemidji,'home,sopron,neuquen,passo,cineplex,alexandrov,wysokie,mammoths,yossi,sarcophagi,congreve,petkovic,extraneous,waterbirds,slurs,indias,phaeton,discontented,prefaced,abhay,prescot,interoperable,nordisk,bicyclists,validly,sejong,litovsk,zanesville,kapitanleutnant,kerch,changeable,mcclatchy,celebi,attesting,maccoll,sepahan,wayans,veined,gaudens,markt,dansk,soane,quantized,petersham,forebears,nayarit,frenzied,queuing,bygone,viggo,ludwik,tanka,hanssen,brythonic,cornhill,primorsky,stockpiles,conceptualization,lampeter,hinsdale,mesoderm,bielsk,rosenheim,ultron,joffrey,stanwyck,khagan,tiraspol,pavelic,ascendant,empoli,metatarsal,descentralizado,masada,ligier,huseyin,ramadi,waratah,tampines,ruthenium,statoil,mladost,liger,grecian,multiparty,digraph,maglev,reconsideration,radiography,cartilaginous,taizu,wintered,anabaptist,peterhouse,shoghi,assessors,numerator,paulet,painstakingly,halakhic,rocroi,motorcycling,gimel,kryptonian,emmeline,cheeked,drawdown,lelouch,dacians,brahmana,reminiscence,disinfection,optimizations,golders,extensor,tsugaru,tolling,liman,gulzar,unconvinced,crataegus,oppositional,dvina,pyrolysis,mandan,alexius,prion,stressors,loomed,moated,dhivehi,recyclable,relict,nestlings,sarandon,kosovar,solvers,czeslaw,kenta,maneuverable,middens,berkhamsted,comilla,folkways,loxton,beziers,batumi,petrochemicals,optimised,sirjan,rabindra,musicality,rationalisation,drillers,subspaces,'live,bbwaa,outfielders,tsung,danske,vandalised,norristown,striae,kanata,gastroenterology,steadfastly,equalising,bootlegging,mannerheim,notodontidae,lagoa,commentating,peninsulas,chishti,seismology,modigliani,preceptor,canonically,awardee,boyaca,hsinchu,stiffened,nacelle,bogor,dryness,unobstructed,yaqub,scindia,peeters,irritant,ammonites,ferromagnetic,speechwriter,oxygenated,walesa,millais,canarian,faience,calvinistic,discriminant,rasht,inker,annexes,howth,allocates,conditionally,roused,regionalism,regionalbahn,functionary,nitrates,bicentenary,recreates,saboteurs,koshi,plasmids,thinned,124th,plainview,kardashian,neuville,victorians,radiates,127th,vieques,schoolmates,petru,tokusatsu,keying,sunaina,flamethrower,'bout,demersal,hosokawa,corelli,omniscient,o'doherty,niksic,reflectivity,transdev,cavour,metronome,temporally,gabba,nsaids,geert,mayport,hematite,boeotia,vaudreuil,torshavn,sailplane,mineralogist,eskisehir,practises,gallifrey,takumi,unease,slipstream,hedmark,paulinus,ailsa,wielkopolska,filmworks,adamantly,vinaya,facelifted,franchisee,augustana,toppling,velvety,crispa,stonington,histological,genealogist,tactician,tebow,betjeman,nyingma,overwinter,oberoi,rampal,overwinters,petaluma,lactarius,stanmore,balikpapan,vasant,inclines,laminate,munshi,sociedade,rabbah,septal,boyband,ingrained,faltering,inhumans,nhtsa,affix,l'ordre,kazuki,rossendale,mysims,latvians,slaveholders,basilicata,neuburg,assize,manzanillo,scrobipalpa,formula_61,belgique,pterosaurs,privateering,vaasa,veria,northport,pressurised,hobbyist,austerlitz,sahih,bhadra,siliguri,bistrica,bursaries,wynton,corot,lepidus,lully,libor,libera,olusegun,choline,mannerism,lymphocyte,chagos,duxbury,parasitism,ecowas,morotai,cancion,coniston,aggrieved,sputnikmusic,parle,ammonian,civilisations,malformation,cattaraugus,skyhawks,d'arc,demerara,bronfman,midwinter,piscataway,jogaila,threonine,matins,kohlberg,hubli,pentatonic,camillus,nigam,potro,unchained,chauvel,orangeville,cistercians,redeployment,xanthi,manju,carabinieri,pakeha,nikolaevich,kantakouzenos,sesquicentennial,gunships,symbolised,teramo,ballo,crusading,l'oeil,bharatpur,lazier,gabrovo,hysteresis,rothbard,chaumont,roundel,ma'mun,sudhir,queried,newts,shimane,presynaptic,playfield,taxonomists,sensitivities,freleng,burkinabe,orfeo,autovia,proselytizing,bhangra,pasok,jujutsu,heung,pivoting,hominid,commending,formula_64,epworth,christianized,oresund,hantuchova,rajputana,hilversum,masoretic,dayak,bakri,assen,magog,macromolecules,waheed,qaida,spassky,rumped,protrudes,preminger,misogyny,glencairn,salafi,lacunae,grilles,racemes,areva,alighieri,inari,epitomized,photoshoot,one-of-a-kind,tring,muralist,tincture,backwaters,weaned,yeasts,analytically,smaland,caltrans,vysocina,jamuna,mauthausen,175th,nouvelles,censoring,reggina,christology,gilad,amplifying,mehmood,johnsons,redirects,eastgate,sacrum,meteoric,riverbanks,guidebooks,ascribes,scoparia,iconoclastic,telegraphic,chine,merah,mistico,lectern,sheung,aethelstan,capablanca,anant,uspto,albatrosses,mymensingh,antiretroviral,clonal,coorg,vaillant,liquidator,gigas,yokai,eradicating,motorcyclists,waitakere,tandon,nears,montenegrins,250th,tatsuya,yassin,atheistic,syncretism,nahum,berisha,transcended,owensboro,lakshmana,abteilung,unadorned,nyack,overflows,harrisonburg,complainant,uematsu,frictional,worsens,sangguniang,abutment,bulwer,sarma,apollinaire,shippers,lycia,alentejo,porpoises,optus,trawling,augustow,blackwall,workbench,westmount,leaped,sikandar,conveniences,stornoway,culverts,zoroastrians,hristo,ansgar,assistive,reassert,fanned,compasses,delgada,maisons,arima,plonsk,verlaine,starstruck,rakhine,befell,spirally,wyclef,expend,colloquium,formula_63,albertus,bellarmine,handedness,holon,introns,movimiento,profitably,lohengrin,discoverers,awash,erste,pharisees,dwarka,oghuz,hashing,heterodox,uloom,vladikavkaz,linesman,rehired,nucleophile,germanicus,gulshan,songz,bayerische,paralympian,crumlin,enjoined,khanum,prahran,penitent,amersfoort,saranac,semisimple,vagrants,compositing,tualatin,oxalate,lavra,ironi,ilkeston,umpqua,calum,stretford,zakat,guelders,hydrazine,birkin,spurring,modularity,aspartate,sodermanland,hopital,bellary,legazpi,clasico,cadfael,hypersonic,volleys,pharmacokinetics,carotene,orientale,pausini,bataille,lunga,retailed,m.phil,mazowieckie,vijayan,rawal,sublimation,promissory,estimators,ploughed,conflagration,penda,segregationist,otley,amputee,coauthor,sopra,pellew,wreckers,tollywood,circumscription,permittivity,strabane,landward,articulates,beaverbrook,rutherglen,coterminous,whistleblowers,colloidal,surbiton,atlante,oswiecim,bhasa,lampooned,chanter,saarc,landkreis,tribulation,tolerates,daiichi,hatun,cowries,dyschirius,abercromby,attock,aldwych,inflows,absolutist,l'histoire,committeeman,vanbrugh,headstock,westbourne,appenzell,hoxton,oculus,westfalen,roundabouts,nickelback,trovatore,quenching,summarises,conservators,transmutation,talleyrand,barzani,unwillingly,axonal,'blue,opining,enveloping,fidesz,rafah,colborne,flickr,lozenge,dulcimer,ndebele,swaraj,oxidize,gonville,resonated,gilani,superiore,endeared,janakpur,shepperton,solidifying,memoranda,sochaux,kurnool,rewari,emirs,kooning,bruford,unavailability,kayseri,judicious,negating,pterosaur,cytosolic,chernihiv,variational,sabretooth,seawolves,devalued,nanded,adverb,volunteerism,sealers,nemours,smederevo,kashubian,bartin,animax,vicomte,polotsk,polder,archiepiscopal,acceptability,quidditch,tussock,seminaire,immolation,belge,coves,wellingborough,khaganate,mckellen,nayaka,brega,kabhi,pontoons,bascule,newsreels,injectors,cobol,weblog,diplo,biggar,wheatbelt,erythrocytes,pedra,showgrounds,bogdanovich,eclecticism,toluene,elegies,formalize,andromedae,airworthiness,springville,mainframes,overexpression,magadha,bijelo,emlyn,glutamine,accenture,uhuru,metairie,arabidopsis,patanjali,peruvians,berezovsky,accion,astrolabe,jayanti,earnestly,sausalito,recurved,1500s,ramla,incineration,galleons,laplacian,shiki,smethwick,isomerase,dordevic,janow,jeffersonville,internationalism,penciled,styrene,ashur,nucleoside,peristome,horsemanship,sedges,bachata,medes,kristallnacht,schneerson,reflectance,invalided,strutt,draupadi,destino,partridges,tejas,quadrennial,aurel,halych,ethnomusicology,autonomist,radyo,rifting,shi'ar,crvena,telefilm,zawahiri,plana,sultanates,theodorus,subcontractors,pavle,seneschal,teleports,chernivtsi,buccal,brattleboro,stankovic,safar,dunhuang,electrocution,chastised,ergonomic,midsomer,130th,zomba,nongovernmental,escapist,localize,xuzhou,kyrie,carinthian,karlovac,nisan,kramnik,pilipino,digitisation,khasi,andronicus,highwayman,maior,misspelling,sebastopol,socon,rhaetian,archimandrite,partway,positivity,otaku,dingoes,tarski,geopolitics,disciplinarian,zulfikar,kenzo,globose,electrophilic,modele,storekeeper,pohang,wheldon,washers,interconnecting,digraphs,intrastate,campy,helvetic,frontispiece,ferrocarril,anambra,petraeus,midrib,endometrial,dwarfism,mauryan,endocytosis,brigs,percussionists,furtherance,synergistic,apocynaceae,krona,berthier,circumvented,casal,siltstone,precast,ethnikos,realists,geodesy,zarzuela,greenback,tripathi,persevered,interments,neutralization,olbermann,departements,supercomputing,demobilised,cassavetes,dunder,ministering,veszprem,barbarism,'world,pieve,apologist,frentzen,sulfides,firewalls,pronotum,staatsoper,hachette,makhachkala,oberland,phonon,yoshihiro,instars,purnima,winslet,mutsu,ergative,sajid,nizamuddin,paraphrased,ardeidae,kodagu,monooxygenase,skirmishers,sportiva,o'byrne,mykolaiv,ophir,prieta,gyllenhaal,kantian,leche,copan,herero,ps250,gelsenkirchen,shalit,sammarinese,chetwynd,wftda,travertine,warta,sigmaringen,concerti,namespace,ostergotland,biomarker,universals,collegio,embarcadero,wimborne,fiddlers,likening,ransomed,stifled,unabated,kalakaua,khanty,gongs,goodrem,countermeasure,publicizing,geomorphology,swedenborg,undefended,catastrophes,diverts,storyboards,amesbury,contactless,placentia,festivity,authorise,terrane,thallium,stradivarius,antonine,consortia,estimations,consecrate,supergiant,belichick,pendants,butyl,groza,univac,afire,kavala,studi,teletoon,paucity,gonbad,koninklijke,128th,stoichiometric,multimodal,facundo,anatomic,melamine,creuse,altan,brigands,mcguinty,blomfield,tsvangirai,protrusion,lurgan,warminster,tenzin,russellville,discursive,definable,scotrail,lignin,reincorporated,o'dell,outperform,redland,multicolored,evaporates,dimitrie,limbic,patapsco,interlingua,surrogacy,cutty,potrero,masud,cahiers,jintao,ardashir,centaurus,plagiarized,minehead,musings,statuettes,logarithms,seaview,prohibitively,downforce,rivington,tomorrowland,microbiologist,ferric,morag,capsid,kucinich,clairvaux,demotic,seamanship,cicada,painterly,cromarty,carbonic,tupou,oconee,tehuantepec,typecast,anstruther,internalized,underwriters,tetrahedra,flagrant,quakes,pathologies,ulrik,nahal,tarquini,dongguan,parnassus,ryoko,senussi,seleucia,airasia,einer,sashes,d'amico,matriculating,arabesque,honved,biophysical,hardinge,kherson,mommsen,diels,icbms,reshape,brasiliensis,palmach,netaji,oblate,functionalities,grigor,blacksburg,recoilless,melanchthon,reales,astrodome,handcrafted,memes,theorizes,isma'il,aarti,pirin,maatschappij,stabilizes,honiara,ashbury,copts,rootes,defensed,queiroz,mantegna,galesburg,coraciiformesfamily,cabrillo,tokio,antipsychotics,kanon,173rd,apollonia,finial,lydian,hadamard,rangi,dowlatabad,monolingual,platformer,subclasses,chiranjeevi,mirabeau,newsgroup,idmanyurdu,kambojas,walkover,zamoyski,generalist,khedive,flanges,knowle,bande,157th,alleyn,reaffirm,pininfarina,zuckerberg,hakodate,131st,aditi,bellinzona,vaulter,planking,boscombe,colombians,lysis,toppers,metered,nahyan,queensryche,minho,nagercoil,firebrand,foundress,bycatch,mendota,freeform,antena,capitalisation,martinus,overijssel,purists,interventionist,zgierz,burgundians,hippolyta,trompe,umatilla,moroccans,dictionnaire,hydrography,changers,chota,rimouski,aniline,bylaw,grandnephew,neamt,lemnos,connoisseurs,tractive,rearrangements,fetishism,finnic,apalachicola,landowning,calligraphic,circumpolar,mansfeld,legible,orientalism,tannhauser,blamey,maximization,noinclude,blackbirds,angara,ostersund,pancreatitis,glabra,acleris,juried,jungian,triumphantly,singlet,plasmas,synesthesia,yellowhead,unleashes,choiseul,quanzhong,brookville,kaskaskia,igcse,skatepark,jatin,jewellers,scaritinae,techcrunch,tellurium,lachaise,azuma,codeshare,dimensionality,unidirectional,scolaire,macdill,camshafts,unassisted,verband,kahlo,eliya,prelature,chiefdoms,saddleback,sockers,iommi,coloratura,llangollen,biosciences,harshest,maithili,k'iche,plical,multifunctional,andreu,tuskers,confounding,sambre,quarterdeck,ascetics,berdych,transversal,tuolumne,sagami,petrobras,brecker,menxia,instilling,stipulating,korra,oscillate,deadpan,v/line,pyrotechnic,stoneware,prelims,intracoastal,retraining,ilija,berwyn,encrypt,achievers,zulfiqar,glycoproteins,khatib,farmsteads,occultist,saman,fionn,derulo,khilji,obrenovic,argosy,toowong,dementieva,sociocultural,iconostasis,craigslist,festschrift,taifa,intercalated,tanjong,penticton,sharad,marxian,extrapolation,guises,wettin,prabang,exclaiming,kosta,famas,conakry,wanderings,'aliabad,macleay,exoplanet,bancorp,besiegers,surmounting,checkerboard,rajab,vliet,tarek,operable,wargaming,haldimand,fukuyama,uesugi,aggregations,erbil,brachiopods,tokyu,anglais,unfavorably,ujpest,escorial,armagnac,nagara,funafuti,ridgeline,cocking,o'gorman,compactness,retardant,krajowa,barua,coking,bestows,thampi,chicagoland,variably,o'loughlin,minnows,schwa,shaukat,polycarbonate,chlorinated,godalming,gramercy,delved,banqueting,enlil,sarada,prasanna,domhnall,decadal,regressive,lipoprotein,collectable,surendra,zaporizhia,cycliste,suchet,offsetting,formula_65,pudong,d'arte,blyton,quonset,osmania,tientsin,manorama,proteomics,bille,jalpaiguri,pertwee,barnegat,inventiveness,gollancz,euthanized,henricus,shortfalls,wuxia,chlorides,cerrado,polyvinyl,folktale,straddled,bioengineering,eschewing,greendale,recharged,olave,ceylonese,autocephalous,peacebuilding,wrights,guyed,rosamund,abitibi,bannockburn,gerontology,scutari,souness,seagram,codice_9,'open,xhtml,taguig,purposed,darbar,orthopedics,unpopulated,kisumu,tarrytown,feodor,polyhedral,monadnock,gottorp,priam,redesigning,gasworks,elfin,urquiza,homologation,filipovic,bohun,manningham,gornik,soundness,shorea,lanus,gelder,darke,sandgate,criticality,paranaense,153rd,vieja,lithograph,trapezoid,tiebreakers,convalescence,yan'an,actuaries,balad,altimeter,thermoelectric,trailblazer,previn,tenryu,ancaster,endoscopy,nicolet,discloses,fracking,plaine,salado,americanism,placards,absurdist,propylene,breccia,jirga,documenta,ismailis,161st,brentano,dallas/fort,embellishment,calipers,subscribes,mahavidyalaya,wednesbury,barnstormers,miwok,schembechler,minigame,unterberger,dopaminergic,inacio,nizamabad,overridden,monotype,cavernous,stichting,sassafras,sotho,argentinean,myrrh,rapidity,flatts,gowrie,dejected,kasaragod,cyprinidae,interlinked,arcseconds,degeneracy,infamously,incubate,substructure,trigeminal,sectarianism,marshlands,hooliganism,hurlers,isolationist,urania,burrard,switchover,lecco,wilts,interrogator,strived,ballooning,volterra,raciborz,relegating,gilding,cybele,dolomites,parachutist,lochaber,orators,raeburn,backend,benaud,rallycross,facings,banga,nuclides,defencemen,futurity,emitters,yadkin,eudonia,zambales,manasseh,sirte,meshes,peculiarly,mcminnville,roundly,boban,decrypt,icelanders,sanam,chelan,jovian,grudgingly,penalised,subscript,gambrinus,poaceae,infringements,maleficent,runciman,148th,supersymmetry,granites,liskeard,eliciting,involution,hallstatt,kitzbuhel,shankly,sandhills,inefficiencies,yishuv,psychotropic,nightjars,wavell,sangamon,vaikundar,choshu,retrospectives,pitesti,gigantea,hashemi,bosna,gakuin,siochana,arrangers,baronetcies,narayani,temecula,creston,koscierzyna,autochthonous,wyandot,anniston,igreja,mobilise,buzau,dunster,musselburgh,wenzhou,khattak,detoxification,decarboxylase,manlius,campbells,coleoptera,copyist,sympathisers,suisun,eminescu,defensor,transshipment,thurgau,somerton,fluctuates,ambika,weierstrass,lukow,giambattista,volcanics,romanticized,innovated,matabeleland,scotiabank,garwolin,purine,d'auvergne,borderland,maozhen,pricewaterhousecoopers,testator,pallium,scout.com,mv/pi,nazca,curacies,upjohn,sarasvati,monegasque,ketrzyn,malory,spikelets,biomechanics,haciendas,rapped,dwarfed,stews,nijinsky,subjection,matsu,perceptible,schwarzburg,midsection,entertains,circuitous,epiphytic,wonsan,alpini,bluefield,sloths,transportable,braunfels,dictum,szczecinek,jukka,wielun,wejherowo,hucknall,grameen,duodenum,ribose,deshpande,shahar,nexstar,injurious,dereham,lithographer,dhoni,structuralist,progreso,deschutes,christus,pulteney,quoins,yitzchak,gyeongsang,breviary,makkah,chiyoda,jutting,vineland,angiosperms,necrotic,novelisation,redistribute,tirumala,140th,featureless,mafic,rivaling,toyline,2/1st,martius,saalfeld,monthan,texian,kathak,melodramas,mithila,regierungsbezirk,509th,fermenting,schoolmate,virtuosic,briain,kokoda,heliocentric,handpicked,kilwinning,sonically,dinars,kasim,parkways,bogdanov,luxembourgian,halland,avesta,bardic,daugavpils,excavator,qwest,frustrate,physiographic,majoris,'ndrangheta,unrestrained,firmness,montalban,abundances,preservationists,adare,executioners,guardsman,bonnaroo,neglects,nazrul,pro12,hoorn,abercorn,refuting,kabud,cationic,parapsychology,troposphere,venezuelans,malignancy,khoja,unhindered,accordionist,medak,visby,ejercito,laparoscopic,dinas,umayyads,valmiki,o'dowd,saplings,stranding,incisions,illusionist,avocets,buccleuch,amazonia,fourfold,turboprops,roosts,priscus,turnstile,areal,certifies,pocklington,spoofs,viseu,commonalities,dabrowka,annam,homesteaders,daredevils,mondrian,negotiates,fiestas,perennials,maximizes,lubavitch,ravindra,scrapers,finials,kintyre,violas,snoqualmie,wilders,openbsd,mlawa,peritoneal,devarajan,congke,leszno,mercurial,fakir,joannes,bognor,overloading,unbuilt,gurung,scuttle,temperaments,bautzen,jardim,tradesman,visitations,barbet,sagamore,graaff,forecasters,wilsons,assis,l'air,shariah,sochaczew,russa,dirge,biliary,neuve,heartbreakers,strathearn,jacobian,overgrazing,edrich,anticline,parathyroid,petula,lepanto,decius,channelled,parvathi,puppeteers,communicators,francorchamps,kahane,longus,panjang,intron,traite,xxvii,matsuri,amrit,katyn,disheartened,cacak,omonia,alexandrine,partaking,wrangling,adjuvant,haskovo,tendrils,greensand,lammermoor,otherworld,volusia,stabling,one-and-a-half,bresson,zapatista,eotvos,ps150,webisodes,stepchildren,microarray,braganca,quanta,dolne,superoxide,bellona,delineate,ratha,lindenwood,bruhl,cingulate,tallies,bickerton,helgi,bevin,takoma,tsukuba,statuses,changeling,alister,bytom,dibrugarh,magnesia,duplicating,outlier,abated,goncalo,strelitz,shikai,mardan,musculature,ascomycota,springhill,tumuli,gabaa,odenwald,reformatted,autocracy,theresienstadt,suplex,chattopadhyay,mencken,congratulatory,weatherfield,systema,solemnity,projekt,quanzhou,kreuzberg,postbellum,nobuo,mediaworks,finisterre,matchplay,bangladeshis,kothen,oocyte,hovered,aromas,afshar,browed,teases,chorlton,arshad,cesaro,backbencher,iquique,vulcans,padmini,unabridged,cyclase,despotic,kirilenko,achaean,queensberry,debre,octahedron,iphigenia,curbing,karimnagar,sagarmatha,smelters,surrealists,sanada,shrestha,turridae,leasehold,jiedushi,eurythmics,appropriating,correze,thimphu,amery,musicomh,cyborgs,sandwell,pushcart,retorts,ameliorate,deteriorates,stojanovic,spline,entrenchments,bourse,chancellorship,pasolini,lendl,personage,reformulated,pubescens,loiret,metalurh,reinvention,nonhuman,eilema,tarsal,complutense,magne,broadview,metrodome,outtake,stouffville,seinen,bataillon,phosphoric,ostensible,opatow,aristides,beefheart,glorifying,banten,romsey,seamounts,fushimi,prophylaxis,sibylla,ranjith,goslar,balustrades,georgiev,caird,lafitte,peano,canso,bankura,halfpenny,segregate,caisson,bizerte,jamshedpur,euromaidan,philosophie,ridged,cheerfully,reclassification,aemilius,visionaries,samoans,wokingham,chemung,wolof,unbranched,cinerea,bhosle,ourense,immortalised,cornerstones,sourcebook,khufu,archimedean,universitatea,intermolecular,fiscally,suffices,metacomet,adjudicator,stablemate,specks,glace,inowroclaw,patristic,muharram,agitating,ashot,neurologic,didcot,gamla,ilves,putouts,siraj,laski,coaling,diarmuid,ratnagiri,rotulorum,liquefaction,morbihan,harel,aftershock,gruiformesfamily,bonnier,falconiformesfamily,adorns,wikis,maastrichtian,stauffenberg,bishopsgate,fakhr,sevenfold,ponders,quantifying,castiel,opacity,depredations,lenten,gravitated,o'mahony,modulates,inuktitut,paston,kayfabe,vagus,legalised,balked,arianism,tendering,sivas,birthdate,awlaki,khvajeh,shahab,samtgemeinde,bridgeton,amalgamations,biogenesis,recharging,tsukasa,mythbusters,chamfered,enthronement,freelancers,maharana,constantia,sutil,messines,monkton,okanogan,reinvigorated,apoplexy,tanahashi,neues,valiants,harappan,russes,carding,volkoff,funchal,statehouse,imitative,intrepidity,mellotron,samaras,turkana,besting,longitudes,exarch,diarrhoea,transcending,zvonareva,darna,ramblin,disconnection,137th,refocused,diarmait,agricole,ba'athist,turenne,contrabass,communis,daviess,fatimids,frosinone,fittingly,polyphyletic,qanat,theocratic,preclinical,abacha,toorak,marketplaces,conidia,seiya,contraindicated,retford,bundesautobahn,rebuilds,climatology,seaworthy,starfighter,qamar,categoria,malai,hellinsia,newstead,airworthy,catenin,avonmouth,arrhythmias,ayyavazhi,downgrade,ashburnham,ejector,kinematics,petworth,rspca,filmation,accipitridae,chhatrapati,g/mol,bacau,agama,ringtone,yudhoyono,orchestrator,arbitrators,138th,powerplants,cumbernauld,alderley,misamis,hawai`i,cuando,meistriliiga,jermyn,alans,pedigrees,ottavio,approbation,omnium,purulia,prioress,rheinland,lymphoid,lutsk,oscilloscope,ballina,iliac,motorbikes,modernising,uffizi,phylloxera,kalevala,bengalis,amravati,syntheses,interviewers,inflectional,outflank,maryhill,unhurt,profiler,nacelles,heseltine,personalised,guarda,herpetologist,airpark,pigot,margaretha,dinos,peleliu,breakbeat,kastamonu,shaivism,delamere,kingsville,epigram,khlong,phospholipids,journeying,lietuvos,congregated,deviance,celebes,subsoil,stroma,kvitova,lubricating,layoff,alagoas,olafur,doron,interuniversity,raycom,agonopterix,uzice,nanna,springvale,raimundo,wrested,pupal,talat,skinheads,vestige,unpainted,handan,odawara,ammar,attendee,lapped,myotis,gusty,ciconiiformesfamily,traversal,subfield,vitaphone,prensa,hasidism,inwood,carstairs,kropotkin,turgenev,dobra,remittance,purim,tannin,adige,tabulation,lethality,pacha,micronesian,dhruva,defensemen,tibeto,siculus,radioisotope,sodertalje,phitsanulok,euphonium,oxytocin,overhangs,skinks,fabrica,reinterred,emulates,bioscience,paragliding,raekwon,perigee,plausibility,frolunda,erroll,aznar,vyasa,albinus,trevally,confederacion,terse,sixtieth,1530s,kendriya,skateboarders,frontieres,muawiyah,easements,shehu,conservatively,keystones,kasem,brutalist,peekskill,cowry,orcas,syllabary,paltz,elisabetta,denticles,hampering,dolni,eidos,aarau,lermontov,yankton,shahbaz,barrages,kongsvinger,reestablishment,acetyltransferase,zulia,mrnas,slingsby,eucalypt,efficacious,weybridge,gradation,cinematheque,malthus,bampton,coexisted,cisse,hamdi,cupertino,saumarez,chionodes,libertine,formers,sakharov,pseudonymous,vol.1,mcduck,gopalakrishnan,amberley,jorhat,grandmasters,rudiments,dwindle,param,bukidnon,menander,americanus,multipliers,pulawy,homoerotic,pillbox,cd+dvd,epigraph,aleksandrow,extrapolated,horseshoes,contemporain,angiography,hasselt,shawinigan,memorization,legitimized,cyclades,outsold,rodolphe,kelis,powerball,dijkstra,analyzers,incompressible,sambar,orangeburg,osten,reauthorization,adamawa,sphagnum,hypermarket,millipedes,zoroaster,madea,ossuary,murrayfield,pronominal,gautham,resellers,ethers,quarrelled,dolna,stragglers,asami,tangut,passos,educacion,sharaf,texel,berio,bethpage,bezalel,marfa,noronha,36ers,genteel,avram,shilton,compensates,sweetener,reinstalled,disables,noether,1590s,balakrishnan,kotaro,northallerton,cataclysm,gholam,cancellara,schiphol,commends,longinus,albinism,gemayel,hamamatsu,volos,islamism,sidereal,pecuniary,diggings,townsquare,neosho,lushan,chittoor,akhil,disputation,desiccation,cambodians,thwarting,deliberated,ellipsis,bahini,susumu,separators,kohneh,plebeians,kultur,ogaden,pissarro,trypeta,latur,liaodong,vetting,datong,sohail,alchemists,lengthwise,unevenly,masterly,microcontrollers,occupier,deviating,farringdon,baccalaureat,theocracy,chebyshev,archivists,jayaram,ineffectiveness,scandinavians,jacobins,encomienda,nambu,g/cm3,catesby,paavo,heeded,rhodium,idealised,10deg,infective,mecyclothorax,halevy,sheared,minbari,audax,lusatian,rebuffs,hitfix,fastener,subjugate,tarun,binet,compuserve,synthesiser,keisuke,amalric,ligatures,tadashi,ignazio,abramovich,groundnut,otomo,maeve,mortlake,ostrogoths,antillean,todor,recto,millimetre,espousing,inaugurate,paracetamol,galvanic,harpalinae,jedrzejow,reassessment,langlands,civita,mikan,stikine,bijar,imamate,istana,kaiserliche,erastus,federale,cytosine,expansionism,hommes,norrland,smriti,snapdragon,gulab,taleb,lossy,khattab,urbanised,sesto,rekord,diffuser,desam,morganatic,silting,pacts,extender,beauharnais,purley,bouches,halfpipe,discontinuities,houthi,farmville,animism,horni,saadi,interpretative,blockades,symeon,biogeographic,transcaucasian,jetties,landrieu,astrocytes,conjunto,stumpings,weevils,geysers,redux,arching,romanus,tazeh,marcellinus,casein,opava,misrata,anare,sattar,declarer,dreux,oporto,venta,vallis,icosahedron,cortona,lachine,mohammedan,sandnes,zynga,clarin,diomedes,tsuyoshi,pribram,gulbarga,chartist,superettan,boscawen,altus,subang,gating,epistolary,vizianagaram,ogdensburg,panna,thyssen,tarkovsky,dzogchen,biograph,seremban,unscientific,nightjar,legco,deism,n.w.a,sudha,siskel,sassou,flintlock,jovial,montbeliard,pallida,formula_66,tranquillity,nisei,adornment,'people,yamhill,hockeyallsvenskan,adopters,appian,lowicz,haplotypes,succinctly,starogard,presidencies,kheyrabad,sobibor,kinesiology,cowichan,militum,cromwellian,leiningen,ps1.5,concourses,dalarna,goldfield,brzeg,faeces,aquarii,matchless,harvesters,181st,numismatics,korfball,sectioned,transpires,facultative,brandishing,kieron,forages,menai,glutinous,debarge,heathfield,1580s,malang,photoelectric,froome,semiotic,alwar,grammophon,chiaroscuro,mentalist,maramures,flacco,liquors,aleutians,marvell,sutlej,patnaik,qassam,flintoff,bayfield,haeckel,sueno,avicii,exoplanets,hoshi,annibale,vojislav,honeycombs,celebrant,rendsburg,veblen,quails,141st,carronades,savar,narrations,jeeva,ontologies,hedonistic,marinette,godot,munna,bessarabian,outrigger,thame,gravels,hoshino,falsifying,stereochemistry,nacionalista,medially,radula,ejecting,conservatorio,odile,ceiba,jaina,essonne,isometry,allophones,recidivism,iveco,ganda,grammarians,jagan,signposted,uncompressed,facilitators,constancy,ditko,propulsive,impaling,interbank,botolph,amlaib,intergroup,sorbus,cheka,debye,praca,adorning,presbyteries,dormition,strategos,qarase,pentecostals,beehives,hashemite,goldust,euronext,egress,arpanet,soames,jurchens,slovenska,copse,kazim,appraisals,marischal,mineola,sharada,caricaturist,sturluson,galba,faizabad,overwintering,grete,uyezds,didsbury,libreville,ablett,microstructure,anadolu,belenenses,elocution,cloaks,timeslots,halden,rashidun,displaces,sympatric,germanus,tuples,ceska,equalize,disassembly,krautrock,babangida,memel,deild,gopala,hematology,underclass,sangli,wawrinka,assur,toshack,refrains,nicotinic,bhagalpur,badami,racetracks,pocatello,walgreens,nazarbayev,occultation,spinnaker,geneon,josias,hydrolyzed,dzong,corregimiento,waistcoat,thermoplastic,soldered,anticancer,lactobacillus,shafi'i,carabus,adjournment,schlumberger,triceratops,despotate,mendicant,krishnamurti,bahasa,earthworm,lavoisier,noetherian,kalki,fervently,bhawan,saanich,coquille,gannet,motagua,kennels,mineralization,fitzherbert,svein,bifurcated,hairdressing,felis,abounded,dimers,fervour,hebdo,bluffton,aetna,corydon,clevedon,carneiro,subjectively,deutz,gastropoda,overshot,concatenation,varman,carolla,maharshi,mujib,inelastic,riverhead,initialized,safavids,rohini,caguas,bulges,fotbollforbund,hefei,spithead,westville,maronites,lytham,americo,gediminas,stephanus,chalcolithic,hijra,gnu/linux,predilection,rulership,sterility,haidar,scarlatti,saprissa,sviatoslav,pointedly,sunroof,guarantor,thevar,airstrips,pultusk,sture,129th,divinities,daizong,dolichoderus,cobourg,maoists,swordsmanship,uprated,bohme,tashi,largs,chandi,bluebeard,householders,richardsonian,drepanidae,antigonish,elbasan,occultism,marca,hypergeometric,oirat,stiglitz,ignites,dzungar,miquelon,pritam,d'automne,ulidiid,niamey,vallecano,fondo,billiton,incumbencies,raceme,chambery,cadell,barenaked,kagame,summerside,haussmann,hatshepsut,apothecaries,criollo,feint,nasals,timurid,feltham,plotinus,oxygenation,marginata,officinalis,salat,participations,ising,downe,izumo,unguided,pretence,coursed,haruna,viscountcy,mainstage,justicia,powiat,takara,capitoline,implacable,farben,stopford,cosmopterix,tuberous,kronecker,galatians,kweli,dogmas,exhorted,trebinje,skanda,newlyn,ablative,basidia,bhiwani,encroachments,stranglers,regrouping,tubal,shoestring,wawel,anionic,mesenchymal,creationists,pyrophosphate,moshi,despotism,powerbook,fatehpur,rupiah,segre,ternate,jessore,b.i.g,shevardnadze,abounds,gliwice,densest,memoria,suborbital,vietcong,ratepayers,karunanidhi,toolbar,descents,rhymney,exhortation,zahedan,carcinomas,hyperbaric,botvinnik,billets,neuropsychological,tigranes,hoards,chater,biennially,thistles,scotus,wataru,flotillas,hungama,monopolistic,payouts,vetch,generalissimo,caries,naumburg,piran,blizzards,escalates,reactant,shinya,theorize,rizzoli,transitway,ecclesiae,streptomyces,cantal,nisibis,superconductor,unworkable,thallus,roehampton,scheckter,viceroys,makuuchi,ilkley,superseding,takuya,klodzko,borbon,raspberries,operand,w.a.k.o,sarabande,factionalism,egalitarianism,temasek,torbat,unscripted,jorma,westerner,perfective,vrije,underlain,goldfrapp,blaenau,jomon,barthes,drivetime,bassa,bannock,umaga,fengxiang,zulus,sreenivasan,farces,codice_10,freeholder,poddebice,imperialists,deregulated,wingtip,o'hagan,pillared,overtone,hofstadter,149th,kitano,saybrook,standardizing,aldgate,staveley,o'flaherty,hundredths,steerable,soltan,empted,cruyff,intramuros,taluks,cotonou,marae,karur,figueres,barwon,lucullus,niobe,zemlya,lathes,homeported,chaux,amyotrophic,opines,exemplars,bhamo,homomorphisms,gauleiter,ladin,mafiosi,airdrieonians,b/soul,decal,transcaucasia,solti,defecation,deaconess,numidia,sampradaya,normalised,wingless,schwaben,alnus,cinerama,yakutsk,ketchikan,orvieto,unearned,monferrato,rotem,aacsb,loong,decoders,skerries,cardiothoracic,repositioning,pimpernel,yohannan,tenebrionoidea,nargis,nouvel,costliest,interdenominational,noize,redirecting,zither,morcha,radiometric,frequenting,irtysh,gbagbo,chakri,litvinenko,infotainment,ravensbruck,harith,corbels,maegashira,jousting,natan,novus,falcao,minis,railed,decile,rauma,ramaswamy,cavitation,paranaque,berchtesgaden,reanimated,schomberg,polysaccharides,exclusionary,cleon,anurag,ravaging,dhanush,mitchells,granule,contemptuous,keisei,rolleston,atlantean,yorkist,daraa,wapping,micrometer,keeneland,comparably,baranja,oranje,schlafli,yogic,dinajpur,unimpressive,masashi,recreativo,alemannic,petersfield,naoko,vasudeva,autosport,rajat,marella,busko,wethersfield,ssris,soulcalibur,kobani,wildland,rookery,hoffenheim,kauri,aliphatic,balaclava,ferrite,publicise,victorias,theism,quimper,chapbook,functionalist,roadbed,ulyanovsk,cupen,purpurea,calthorpe,teofilo,mousavi,cochlea,linotype,detmold,ellerslie,gakkai,telkom,southsea,subcontractor,inguinal,philatelists,zeebrugge,piave,trochidae,dempo,spoilt,saharanpur,mihrab,parasympathetic,barbarous,chartering,antiqua,katsina,bugis,categorizes,altstadt,kandyan,pambansa,overpasses,miters,assimilating,finlandia,uneconomic,am/fm,harpsichordist,dresdner,luminescence,authentically,overpowers,magmatic,cliftonville,oilfields,skirted,berthe,cuman,oakham,frelimo,glockenspiel,confection,saxophonists,piaseczno,multilevel,antipater,levying,maltreatment,velho,opoczno,harburg,pedophilia,unfunded,palettes,plasterwork,breve,dharmendra,auchinleck,nonesuch,blackmun,libretti,rabbani,145th,hasselbeck,kinnock,malate,vanden,cloverdale,ashgabat,nares,radians,steelworkers,sabor,possums,catterick,hemispheric,ostra,outpaced,dungeness,almshouse,penryn,texians,1000m,franchitti,incumbency,texcoco,newar,tramcars,toroidal,meitetsu,spellbound,agronomist,vinifera,riata,bunko,pinas,ba'al,github,vasilyevich,obsolescent,geodesics,ancestries,tujue,capitalised,unassigned,throng,unpaired,psychometric,skegness,exothermic,buffered,kristiansund,tongued,berenger,basho,alitalia,prolongation,archaeologically,fractionation,cyprinid,echinoderms,agriculturally,justiciar,sonam,ilium,baits,danceable,grazer,ardahan,grassed,preemption,glassworks,hasina,ugric,umbra,wahhabi,vannes,tinnitus,capitaine,tikrit,lisieux,scree,hormuz,despenser,jagiellon,maisonneuve,gandaki,santarem,basilicas,lancing,landskrona,weilburg,fireside,elysian,isleworth,krishnamurthy,filton,cynon,tecmo,subcostal,scalars,triglycerides,hyperplane,farmingdale,unione,meydan,pilings,mercosur,reactivate,akiba,fecundity,jatra,natsume,zarqawi,preta,masao,presbyter,oakenfold,rhodri,ferran,ruizong,cloyne,nelvana,epiphanius,borde,scutes,strictures,troughton,whitestone,sholom,toyah,shingon,kutuzov,abelard,passant,lipno,cafeterias,residuals,anabaptists,paratransit,criollos,pleven,radiata,destabilizing,hadiths,bazaars,mannose,taiyo,crookes,welbeck,baoding,archelaus,nguesso,alberni,wingtips,herts,viasat,lankans,evreux,wigram,fassbinder,ryuichi,storting,reducible,olesnica,znojmo,hyannis,theophanes,flatiron,mustering,rajahmundry,kadir,wayang,prome,lethargy,zubin,illegality,conall,dramedy,beerbohm,hipparchus,ziarat,ryuji,shugo,glenorchy,microarchitecture,morne,lewinsky,cauvery,battenberg,hyksos,wayanad,hamilcar,buhari,brazo,bratianu,solms,aksaray,elamite,chilcotin,bloodstock,sagara,dolny,reunified,umlaut,proteaceae,camborne,calabrian,dhanbad,vaxjo,cookware,potez,rediffusion,semitones,lamentations,allgau,guernica,suntory,pleated,stationing,urgell,gannets,bertelsmann,entryway,raphitomidae,acetaldehyde,nephrology,categorizing,beiyang,permeate,tourney,geosciences,khana,masayuki,crucis,universitaria,slaskie,khaimah,finno,advani,astonishingly,tubulin,vampiric,jeolla,sociale,cleethorpes,badri,muridae,suzong,debater,decimation,kenyans,mutualism,pontifex,middlemen,insee,halevi,lamentation,psychopathy,brassey,wenders,kavya,parabellum,prolactin,inescapable,apses,malignancies,rinzai,stigmatized,menahem,comox,ateliers,welshpool,setif,centimetre,truthfulness,downfield,drusus,woden,glycosylation,emanated,agulhas,dalkeith,jazira,nucky,unifil,jobim,operon,oryzomys,heroically,seances,supernumerary,backhouse,hashanah,tatler,imago,invert,hayato,clockmaker,kingsmill,swiecie,analogously,golconda,poste,tacitly,decentralised,ge'ez,diplomatically,fossiliferous,linseed,mahavira,pedestals,archpriest,byelection,domiciled,jeffersonian,bombus,winegrowing,waukegan,uncultivated,haverfordwest,saumur,communally,disbursed,cleeve,zeljeznicar,speciosa,vacationers,sigur,vaishali,zlatko,iftikhar,cropland,transkei,incompleteness,bohra,subantarctic,slieve,physiologic,similis,klerk,replanted,'right,chafee,reproducible,bayburt,regicide,muzaffarpur,plurals,hanyu,orthologs,diouf,assailed,kamui,tarik,dodecanese,gorne,on/off,179th,shimoga,granaries,carlists,valar,tripolitania,sherds,simmern,dissociated,isambard,polytechnical,yuvraj,brabazon,antisense,pubmed,glans,minutely,masaaki,raghavendra,savoury,podcasting,tachi,bienville,gongsun,ridgely,deform,yuichi,binders,canna,carcetti,llobregat,implored,berri,njegos,intermingled,offload,athenry,motherhouse,corpora,kakinada,dannebrog,imperio,prefaces,musicologists,aerospatiale,shirai,nagapattinam,servius,cristoforo,pomfret,reviled,entebbe,stane,east/west,thermometers,matriarchal,siglo,bodil,legionnaire,ze'ev,theorizing,sangeetha,horticulturist,uncountable,lookalike,anoxic,ionospheric,genealogists,chicopee,imprinting,popish,crematoria,diamondback,cyathea,hanzhong,cameramen,halogaland,naklo,waclaw,storehouses,flexed,comuni,frits,glauca,nilgiris,compresses,nainital,continuations,albay,hypoxic,samajwadi,dunkerque,nanticoke,sarwar,interchanged,jubal,corba,jalgaon,derleth,deathstroke,magny,vinnytsia,hyphenated,rimfire,sawan,boehner,disrepute,normalize,aromanian,dualistic,approximant,chama,karimabad,barnacles,sanok,stipends,dyfed,rijksmuseum,reverberation,suncorp,fungicides,reverie,spectrograph,stereophonic,niazi,ordos,alcan,karaite,lautrec,tableland,lamellar,rieti,langmuir,russula,webern,tweaks,hawick,southerner,morphy,naturalisation,enantiomer,michinoku,barbettes,relieves,carburettors,redruth,oblates,vocabularies,mogilev,bagmati,galium,reasserted,extolled,symon,eurosceptic,inflections,tirtha,recompense,oruro,roping,gouverneur,pared,yayoi,watermills,retooled,leukocytes,jubilant,mazhar,nicolau,manheim,touraine,bedser,hambledon,kohat,powerhouses,tlemcen,reuven,sympathetically,afrikaners,interes,handcrafts,etcher,baddeley,wodonga,amaury,155th,vulgarity,pompadour,automorphisms,1540s,oppositions,prekmurje,deryni,fortifying,arcuate,mahila,bocage,uther,nozze,slashes,atlantica,hadid,rhizomatous,azeris,'with,osmena,lewisville,innervated,bandmaster,outcropping,parallelogram,dominicana,twang,ingushetia,extensional,ladino,sastry,zinoviev,relatable,nobilis,cbeebies,hitless,eulima,sporangia,synge,longlisted,criminalized,penitential,weyden,tubule,volyn,priestesses,glenbrook,kibbutzim,windshaft,canadair,falange,zsolt,bonheur,meine,archangels,safeguarded,jamaicans,malarial,teasers,badging,merseyrail,operands,pulsars,gauchos,biotin,bambara,necaxa,egmond,tillage,coppi,anxiolytic,preah,mausoleums,plautus,feroz,debunked,187th,belediyespor,mujibur,wantage,carboxyl,chettiar,murnau,vagueness,racemic,backstretch,courtland,municipio,palpatine,dezful,hyperbola,sreekumar,chalons,altay,arapahoe,tudors,sapieha,quilon,burdensome,kanya,xxviii,recension,generis,siphuncle,repressor,bitrate,mandals,midhurst,dioxin,democratique,upholds,rodez,cinematographic,epoque,jinping,rabelais,zhytomyr,glenview,rebooted,khalidi,reticulata,122nd,monnaie,passersby,ghazals,europaea,lippmann,earthbound,tadic,andorran,artvin,angelicum,banksy,epicentre,resemblances,shuttled,rathaus,bernt,stonemasons,balochi,siang,tynemouth,cygni,biosynthetic,precipitates,sharecroppers,d'annunzio,softbank,shiji,apeldoorn,polycyclic,wenceslas,wuchang,samnites,tamarack,silmarillion,madinah,palaeontology,kirchberg,sculpin,rohtak,aquabats,oviparous,thynne,caney,blimps,minimalistic,whatcom,palatalization,bardstown,direct3d,paramagnetic,kamboja,khash,globemaster,lengua,matej,chernigov,swanage,arsenals,cascadia,cundinamarca,tusculum,leavers,organics,warplanes,'three,exertions,arminius,gandharva,inquires,comercio,kuopio,chabahar,plotlines,mersenne,anquetil,paralytic,buckminster,ambit,acrolophus,quantifiers,clacton,ciliary,ansaldo,fergana,egoism,thracians,chicoutimi,northbrook,analgesia,brotherhoods,hunza,adriaen,fluoridation,snowfalls,soundboard,fangoria,cannibalistic,orthogonius,chukotka,dindigul,manzoni,chainz,macromedia,beltline,muruga,schistura,provable,litex,initio,pneumoniae,infosys,cerium,boonton,cannonballs,d'une,solvency,mandurah,houthis,dolmens,apologists,radioisotopes,blaxploitation,poroshenko,stawell,coosa,maximilien,tempelhof,espouse,declaratory,hambro,xalapa,outmoded,mihiel,benefitting,desirous,archeparchy,repopulated,telescoping,captor,mackaye,disparaged,ramanathan,crowne,tumbled,technetium,silted,chedi,nievre,hyeon,cartoonish,interlock,infocom,rediff.com,dioramas,timekeeping,concertina,kutaisi,cesky,lubomirski,unapologetic,epigraphic,stalactites,sneha,biofilm,falconry,miraflores,catena,'outstanding,prospekt,apotheosis,o'odham,pacemakers,arabica,gandhinagar,reminisces,iroquoian,ornette,tilling,neoliberalism,chameleons,pandava,prefontaine,haiyan,gneisenau,utama,bando,reconstitution,azaria,canola,paratroops,ayckbourn,manistee,stourton,manifestos,lympne,denouement,tractatus,rakim,bellflower,nanometer,sassanids,turlough,presbyterianism,varmland,20deg,phool,nyerere,almohad,manipal,vlaanderen,quickness,removals,makow,circumflex,eatery,morane,fondazione,alkylation,unenforceable,galliano,silkworm,junior/senior,abducts,phlox,konskie,lofoten,buuren,glyphosate,faired,naturae,cobbles,taher,skrulls,dostoevsky,walkout,wagnerian,orbited,methodically,denzil,sarat,extraterritorial,kohima,d'armor,brinsley,rostropovich,fengtian,comitatus,aravind,moche,wrangell,giscard,vantaa,viljandi,hakoah,seabees,muscatine,ballade,camanachd,sothern,mullioned,durad,margraves,maven,arete,chandni,garifuna,142nd,reading/literature,thickest,intensifies,trygve,khaldun,perinatal,asana,powerline,acetylation,nureyev,omiya,montesquieu,riverwalk,marly,correlating,intermountain,bulgar,hammerheads,underscores,wiretapping,quatrain,ruisseau,newsagent,tuticorin,polygyny,hemsworth,partisanship,banna,istrian,evaporator".split(","),
54802female_names:"mary,patricia,linda,barbara,elizabeth,jennifer,maria,susan,margaret,dorothy,lisa,nancy,karen,betty,helen,sandra,donna,carol,ruth,sharon,michelle,laura,sarah,kimberly,deborah,jessica,shirley,cynthia,angela,melissa,brenda,amy,anna,rebecca,virginia,kathleen,pamela,martha,debra,amanda,stephanie,carolyn,christine,marie,janet,catherine,frances,ann,joyce,diane,alice,julie,heather,teresa,doris,gloria,evelyn,jean,cheryl,mildred,katherine,joan,ashley,judith,rose,janice,kelly,nicole,judy,christina,kathy,theresa,beverly,denise,tammy,irene,jane,lori,rachel,marilyn,andrea,kathryn,louise,sara,anne,jacqueline,wanda,bonnie,julia,ruby,lois,tina,phyllis,norma,paula,diana,annie,lillian,emily,robin,peggy,crystal,gladys,rita,dawn,connie,florence,tracy,edna,tiffany,carmen,rosa,cindy,grace,wendy,victoria,edith,kim,sherry,sylvia,josephine,thelma,shannon,sheila,ethel,ellen,elaine,marjorie,carrie,charlotte,monica,esther,pauline,emma,juanita,anita,rhonda,hazel,amber,eva,debbie,april,leslie,clara,lucille,jamie,joanne,eleanor,valerie,danielle,megan,alicia,suzanne,michele,gail,bertha,darlene,veronica,jill,erin,geraldine,lauren,cathy,joann,lorraine,lynn,sally,regina,erica,beatrice,dolores,bernice,audrey,yvonne,annette,marion,dana,stacy,ana,renee,ida,vivian,roberta,holly,brittany,melanie,loretta,yolanda,jeanette,laurie,katie,kristen,vanessa,alma,sue,elsie,beth,jeanne,vicki,carla,tara,rosemary,eileen,terri,gertrude,lucy,tonya,ella,stacey,wilma,gina,kristin,jessie,natalie,agnes,vera,charlene,bessie,delores,melinda,pearl,arlene,maureen,colleen,allison,tamara,joy,georgia,constance,lillie,claudia,jackie,marcia,tanya,nellie,minnie,marlene,heidi,glenda,lydia,viola,courtney,marian,stella,caroline,dora,vickie,mattie,maxine,irma,mabel,marsha,myrtle,lena,christy,deanna,patsy,hilda,gwendolyn,jennie,nora,margie,nina,cassandra,leah,penny,kay,priscilla,naomi,carole,olga,billie,dianne,tracey,leona,jenny,felicia,sonia,miriam,velma,becky,bobbie,violet,kristina,toni,misty,mae,shelly,daisy,ramona,sherri,erika,katrina,claire,lindsey,lindsay,geneva,guadalupe,belinda,margarita,sheryl,cora,faye,ada,sabrina,isabel,marguerite,hattie,harriet,molly,cecilia,kristi,brandi,blanche,sandy,rosie,joanna,iris,eunice,angie,inez,lynda,madeline,amelia,alberta,genevieve,monique,jodi,janie,kayla,sonya,jan,kristine,candace,fannie,maryann,opal,alison,yvette,melody,luz,susie,olivia,flora,shelley,kristy,mamie,lula,lola,verna,beulah,antoinette,candice,juana,jeannette,pam,kelli,whitney,bridget,karla,celia,latoya,patty,shelia,gayle,della,vicky,lynne,sheri,marianne,kara,jacquelyn,erma,blanca,myra,leticia,pat,krista,roxanne,angelica,robyn,adrienne,rosalie,alexandra,brooke,bethany,sadie,bernadette,traci,jody,kendra,nichole,rachael,mable,ernestine,muriel,marcella,elena,krystal,angelina,nadine,kari,estelle,dianna,paulette,lora,mona,doreen,rosemarie,desiree,antonia,janis,betsy,christie,freda,meredith,lynette,teri,cristina,eula,leigh,meghan,sophia,eloise,rochelle,gretchen,cecelia,raquel,henrietta,alyssa,jana,gwen,jenna,tricia,laverne,olive,tasha,silvia,elvira,delia,kate,patti,lorena,kellie,sonja,lila,lana,darla,mindy,essie,mandy,lorene,elsa,josefina,jeannie,miranda,dixie,lucia,marta,faith,lela,johanna,shari,camille,tami,shawna,elisa,ebony,melba,ora,nettie,tabitha,ollie,winifred,kristie,alisha,aimee,rena,myrna,marla,tammie,latasha,bonita,patrice,ronda,sherrie,addie,francine,deloris,stacie,adriana,cheri,abigail,celeste,jewel,cara,adele,rebekah,lucinda,dorthy,effie,trina,reba,sallie,aurora,lenora,etta,lottie,kerri,trisha,nikki,estella,francisca,josie,tracie,marissa,karin,brittney,janelle,lourdes,laurel,helene,fern,elva,corinne,kelsey,ina,bettie,elisabeth,aida,caitlin,ingrid,iva,eugenia,christa,goldie,maude,jenifer,therese,dena,lorna,janette,latonya,candy,consuelo,tamika,rosetta,debora,cherie,polly,dina,jewell,fay,jillian,dorothea,nell,trudy,esperanza,patrica,kimberley,shanna,helena,cleo,stefanie,rosario,ola,janine,mollie,lupe,alisa,lou,maribel,susanne,bette,susana,elise,cecile,isabelle,lesley,jocelyn,paige,joni,rachelle,leola,daphne,alta,ester,petra,graciela,imogene,jolene,keisha,lacey,glenna,gabriela,keri,ursula,lizzie,kirsten,shana,adeline,mayra,jayne,jaclyn,gracie,sondra,carmela,marisa,rosalind,charity,tonia,beatriz,marisol,clarice,jeanine,sheena,angeline,frieda,lily,shauna,millie,claudette,cathleen,angelia,gabrielle,autumn,katharine,jodie,staci,lea,christi,justine,elma,luella,margret,dominique,socorro,martina,margo,mavis,callie,bobbi,maritza,lucile,leanne,jeannine,deana,aileen,lorie,ladonna,willa,manuela,gale,selma,dolly,sybil,abby,ivy,dee,winnie,marcy,luisa,jeri,magdalena,ofelia,meagan,audra,matilda,leila,cornelia,bianca,simone,bettye,randi,virgie,latisha,barbra,georgina,eliza,leann,bridgette,rhoda,haley,adela,nola,bernadine,flossie,ila,greta,ruthie,nelda,minerva,lilly,terrie,letha,hilary,estela,valarie,brianna,rosalyn,earline,catalina,ava,mia,clarissa,lidia,corrine,alexandria,concepcion,tia,sharron,rae,dona,ericka,jami,elnora,chandra,lenore,neva,marylou,melisa,tabatha,serena,avis,allie,sofia,jeanie,odessa,nannie,harriett,loraine,penelope,milagros,emilia,benita,allyson,ashlee,tania,esmeralda,eve,pearlie,zelma,malinda,noreen,tameka,saundra,hillary,amie,althea,rosalinda,lilia,alana,clare,alejandra,elinor,lorrie,jerri,darcy,earnestine,carmella,noemi,marcie,liza,annabelle,louisa,earlene,mallory,carlene,nita,selena,tanisha,katy,julianne,lakisha,edwina,maricela,margery,kenya,dollie,roxie,roslyn,kathrine,nanette,charmaine,lavonne,ilene,tammi,suzette,corine,kaye,chrystal,lina,deanne,lilian,juliana,aline,luann,kasey,maryanne,evangeline,colette,melva,lawanda,yesenia,nadia,madge,kathie,ophelia,valeria,nona,mitzi,mari,georgette,claudine,fran,alissa,roseann,lakeisha,susanna,reva,deidre,chasity,sheree,elvia,alyce,deirdre,gena,briana,araceli,katelyn,rosanne,wendi,tessa,berta,marva,imelda,marietta,marci,leonor,arline,sasha,madelyn,janna,juliette,deena,aurelia,josefa,augusta,liliana,lessie,amalia,savannah,anastasia,vilma,natalia,rosella,lynnette,corina,alfreda,leanna,amparo,coleen,tamra,aisha,wilda,karyn,maura,mai,evangelina,rosanna,hallie,erna,enid,mariana,lacy,juliet,jacklyn,freida,madeleine,mara,cathryn,lelia,casandra,bridgett,angelita,jannie,dionne,annmarie,katina,beryl,millicent,katheryn,diann,carissa,maryellen,liz,lauri,helga,gilda,rhea,marquita,hollie,tisha,tamera,angelique,francesca,kaitlin,lolita,florine,rowena,reyna,twila,fanny,janell,ines,concetta,bertie,alba,brigitte,alyson,vonda,pansy,elba,noelle,letitia,deann,brandie,louella,leta,felecia,sharlene,lesa,beverley,isabella,herminia,terra,celina,tori,octavia,jade,denice,germaine,michell,cortney,nelly,doretha,deidra,monika,lashonda,judi,chelsey,antionette,margot,adelaide,leeann,elisha,dessie,libby,kathi,gayla,latanya,mina,mellisa,kimberlee,jasmin,renae,zelda,elda,justina,gussie,emilie,camilla,abbie,rocio,kaitlyn,edythe,ashleigh,selina,lakesha,geri,allene,pamala,michaela,dayna,caryn,rosalia,jacquline,rebeca,marybeth,krystle,iola,dottie,belle,griselda,ernestina,elida,adrianne,demetria,delma,jaqueline,arleen,virgina,retha,fatima,tillie,eleanore,cari,treva,wilhelmina,rosalee,maurine,latrice,jena,taryn,elia,debby,maudie,jeanna,delilah,catrina,shonda,hortencia,theodora,teresita,robbin,danette,delphine,brianne,nilda,danna,cindi,bess,iona,winona,vida,rosita,marianna,racheal,guillermina,eloisa,celestine,caren,malissa,lona,chantel,shellie,marisela,leora,agatha,soledad,migdalia,ivette,christen,athena,janel,veda,pattie,tessie,tera,marilynn,lucretia,karrie,dinah,daniela,alecia,adelina,vernice,shiela,portia,merry,lashawn,dara,tawana,verda,alene,zella,sandi,rafaela,maya,kira,candida,alvina,suzan,shayla,lettie,samatha,oralia,matilde,larissa,vesta,renita,delois,shanda,phillis,lorri,erlinda,cathrine,barb,isabell,ione,gisela,roxanna,mayme,kisha,ellie,mellissa,dorris,dalia,bella,annetta,zoila,reta,reina,lauretta,kylie,christal,pilar,charla,elissa,tiffani,tana,paulina,leota,breanna,jayme,carmel,vernell,tomasa,mandi,dominga,santa,melodie,lura,alexa,tamela,mirna,kerrie,venus,felicita,cristy,carmelita,berniece,annemarie,tiara,roseanne,missy,cori,roxana,pricilla,kristal,jung,elyse,haydee,aletha,bettina,marge,gillian,filomena,zenaida,harriette,caridad,vada,aretha,pearline,marjory,marcela,flor,evette,elouise,alina,damaris,catharine,belva,nakia,marlena,luanne,lorine,karon,dorene,danita,brenna,tatiana,louann,julianna,andria,philomena,lucila,leonora,dovie,romona,mimi,jacquelin,gaye,tonja,misti,chastity,stacia,roxann,micaela,velda,marlys,johnna,aura,ivonne,hayley,nicki,majorie,herlinda,yadira,perla,gregoria,antonette,shelli,mozelle,mariah,joelle,cordelia,josette,chiquita,trista,laquita,georgiana,candi,shanon,hildegard,stephany,magda,karol,gabriella,tiana,roma,richelle,oleta,jacque,idella,alaina,suzanna,jovita,tosha,nereida,marlyn,kyla,delfina,tena,stephenie,sabina,nathalie,marcelle,gertie,darleen,thea,sharonda,shantel,belen,venessa,rosalina,genoveva,clementine,rosalba,renate,renata,georgianna,floy,dorcas,ariana,tyra,theda,mariam,juli,jesica,vikki,verla,roselyn,melvina,jannette,ginny,debrah,corrie,violeta,myrtis,latricia,collette,charleen,anissa,viviana,twyla,nedra,latonia,hellen,fabiola,annamarie,adell,sharyn,chantal,niki,maud,lizette,lindy,kesha,jeana,danelle,charline,chanel,valorie,dortha,cristal,sunny,leone,leilani,gerri,debi,andra,keshia,eulalia,easter,dulce,natividad,linnie,kami,georgie,catina,brook,alda,winnifred,sharla,ruthann,meaghan,magdalene,lissette,adelaida,venita,trena,shirlene,shameka,elizebeth,dian,shanta,latosha,carlotta,windy,rosina,mariann,leisa,jonnie,dawna,cathie,astrid,laureen,janeen,holli,fawn,vickey,teressa,shante,rubye,marcelina,chanda,terese,scarlett,marnie,lulu,lisette,jeniffer,elenor,dorinda,donita,carman,bernita,altagracia,aleta,adrianna,zoraida,lyndsey,janina,starla,phylis,phuong,kyra,charisse,blanch,sanjuanita,rona,nanci,marilee,maranda,brigette,sanjuana,marita,kassandra,joycelyn,felipa,chelsie,bonny,mireya,lorenza,kyong,ileana,candelaria,sherie,lucie,leatrice,lakeshia,gerda,edie,bambi,marylin,lavon,hortense,garnet,evie,tressa,shayna,lavina,kyung,jeanetta,sherrill,shara,phyliss,mittie,anabel,alesia,thuy,tawanda,joanie,tiffanie,lashanda,karissa,enriqueta,daria,daniella,corinna,alanna,abbey,roxane,roseanna,magnolia,lida,joellen,coral,carleen,tresa,peggie,novella,nila,maybelle,jenelle,carina,nova,melina,marquerite,margarette,josephina,evonne,cinthia,albina,toya,tawnya,sherita,myriam,lizabeth,lise,keely,jenni,giselle,cheryle,ardith,ardis,alesha,adriane,shaina,linnea,karolyn,felisha,dori,darci,artie,armida,zola,xiomara,vergie,shamika,nena,nannette,maxie,lovie,jeane,jaimie,inge,farrah,elaina,caitlyn,felicitas,cherly,caryl,yolonda,yasmin,teena,prudence,pennie,nydia,mackenzie,orpha,marvel,lizbeth,laurette,jerrie,hermelinda,carolee,tierra,mirian,meta,melony,kori,jennette,jamila,yoshiko,susannah,salina,rhiannon,joleen,cristine,ashton,aracely,tomeka,shalonda,marti,lacie,kala,jada,ilse,hailey,brittani,zona,syble,sherryl,nidia,marlo,kandice,kandi,alycia,ronna,norene,mercy,ingeborg,giovanna,gemma,christel,audry,zora,vita,trish,stephaine,shirlee,shanika,melonie,mazie,jazmin,inga,hettie,geralyn,fonda,estrella,adella,sarita,rina,milissa,maribeth,golda,evon,ethelyn,enedina,cherise,chana,velva,tawanna,sade,mirta,karie,jacinta,elna,davina,cierra,ashlie,albertha,tanesha,nelle,mindi,lorinda,larue,florene,demetra,dedra,ciara,chantelle,ashly,suzy,rosalva,noelia,lyda,leatha,krystyna,kristan,karri,darline,darcie,cinda,cherrie,awilda,almeda,rolanda,lanette,jerilyn,gisele,evalyn,cyndi,cleta,carin,zina,zena,velia,tanika,charissa,talia,margarete,lavonda,kaylee,kathlene,jonna,irena,ilona,idalia,candis,candance,brandee,anitra,alida,sigrid,nicolette,maryjo,linette,hedwig,christiana,alexia,tressie,modesta,lupita,lita,gladis,evelia,davida,cherri,cecily,ashely,annabel,agustina,wanita,shirly,rosaura,hulda,yetta,verona,thomasina,sibyl,shannan,mechelle,leandra,lani,kylee,kandy,jolynn,ferne,eboni,corene,alysia,zula,nada,moira,lyndsay,lorretta,jammie,hortensia,gaynell,adria,vina,vicenta,tangela,stephine,norine,nella,liana,leslee,kimberely,iliana,glory,felica,emogene,elfriede,eden,eartha,carma,ocie,lennie,kiara,jacalyn,carlota,arielle,otilia,kirstin,kacey,johnetta,joetta,jeraldine,jaunita,elana,dorthea,cami,amada,adelia,vernita,tamar,siobhan,renea,rashida,ouida,nilsa,meryl,kristyn,julieta,danica,breanne,aurea,anglea,sherron,odette,malia,lorelei,leesa,kenna,kathlyn,fiona,charlette,suzie,shantell,sabra,racquel,myong,mira,martine,lucienne,lavada,juliann,elvera,delphia,christiane,charolette,carri,asha,angella,paola,ninfa,leda,stefani,shanell,palma,machelle,lissa,kecia,kathryne,karlene,julissa,jettie,jenniffer,corrina,carolann,alena,rosaria,myrtice,marylee,liane,kenyatta,judie,janey,elmira,eldora,denna,cristi,cathi,zaida,vonnie,viva,vernie,rosaline,mariela,luciana,lesli,karan,felice,deneen,adina,wynona,tarsha,sheron,shanita,shani,shandra,randa,pinkie,nelida,marilou,lyla,laurene,laci,janene,dorotha,daniele,dani,carolynn,carlyn,berenice,ayesha,anneliese,alethea,thersa,tamiko,rufina,oliva,mozell,marylyn,kristian,kathyrn,kasandra,kandace,janae,domenica,debbra,dannielle,chun,arcelia,zenobia,sharen,sharee,lavinia,kacie,jackeline,huong,felisa,emelia,eleanora,cythia,cristin,claribel,anastacia,zulma,zandra,yoko,tenisha,susann,sherilyn,shay,shawanda,romana,mathilda,linsey,keiko,joana,isela,gretta,georgetta,eugenie,desirae,delora,corazon,antonina,anika,willene,tracee,tamatha,nichelle,mickie,maegan,luana,lanita,kelsie,edelmira,bree,afton,teodora,tamie,shena,linh,keli,kaci,danyelle,arlette,albertine,adelle,tiffiny,simona,nicolasa,nichol,nakisha,maira,loreen,kizzy,fallon,christene,bobbye,ying,vincenza,tanja,rubie,roni,queenie,margarett,kimberli,irmgard,idell,hilma,evelina,esta,emilee,dennise,dania,carie,risa,rikki,particia,masako,luvenia,loree,loni,lien,gigi,florencia,denita,billye,tomika,sharita,rana,nikole,neoma,margarite,madalyn,lucina,laila,kali,jenette,gabriele,evelyne,elenora,clementina,alejandrina,zulema,violette,vannessa,thresa,retta,patience,noella,nickie,jonell,chaya,camelia,bethel,anya,suzann,mila,lilla,laverna,keesha,kattie,georgene,eveline,estell,elizbeth,vivienne,vallie,trudie,stephane,magaly,madie,kenyetta,karren,janetta,hermine,drucilla,debbi,celestina,candie,britni,beckie,amina,zita,yolande,vivien,vernetta,trudi,pearle,patrina,ossie,nicolle,loyce,letty,katharina,joselyn,jonelle,jenell,iesha,heide,florinda,florentina,elodia,dorine,brunilda,brigid,ashli,ardella,twana,tarah,shavon,serina,rayna,ramonita,margurite,lucrecia,kourtney,kati,jesenia,crista,ayana,alica,alia,vinnie,suellen,romelia,rachell,olympia,michiko,kathaleen,jolie,jessi,janessa,hana,elease,carletta,britany,shona,salome,rosamond,regena,raina,ngoc,nelia,louvenia,lesia,latrina,laticia,larhonda,jina,jacki,emmy,deeann,coretta,arnetta,thalia,shanice,neta,mikki,micki,lonna,leana,lashunda,kiley,joye,jacqulyn,ignacia,hyun,hiroko,henriette,elayne,delinda,dahlia,coreen,consuela,conchita,babette,ayanna,anette,albertina,shawnee,shaneka,quiana,pamelia,merri,merlene,margit,kiesha,kiera,kaylene,jodee,jenise,erlene,emmie,dalila,daisey,casie,belia,babara,versie,vanesa,shelba,shawnda,nikia,naoma,marna,margeret,madaline,lawana,kindra,jutta,jazmine,janett,hannelore,glendora,gertrud,garnett,freeda,frederica,florance,flavia,carline,beverlee,anjanette,valda,tamala,shonna,sarina,oneida,merilyn,marleen,lurline,lenna,katherin,jeni,gracia,glady,farah,enola,dominque,devona,delana,cecila,caprice,alysha,alethia,vena,theresia,tawny,shakira,samara,sachiko,rachele,pamella,marni,mariel,maren,malisa,ligia,lera,latoria,larae,kimber,kathern,karey,jennefer,janeth,halina,fredia,delisa,debroah,ciera,angelika,andree,altha,vivan,terresa,tanna,sudie,signe,salena,ronni,rebbecca,myrtie,malika,maida,leonarda,kayleigh,ethyl,ellyn,dayle,cammie,brittni,birgit,avelina,asuncion,arianna,akiko,venice,tyesha,tonie,tiesha,takisha,steffanie,sindy,meghann,manda,macie,kellye,kellee,joslyn,inger,indira,glinda,glennis,fernanda,faustina,eneida,elicia,digna,dell,arletta,willia,tammara,tabetha,sherrell,sari,rebbeca,pauletta,natosha,nakita,mammie,kenisha,kazuko,kassie,earlean,daphine,corliss,clotilde,carolyne,bernetta,augustina,audrea,annis,annabell,tennille,tamica,selene,rosana,regenia,qiana,markita,macy,leeanne,laurine,jessenia,janita,georgine,genie,emiko,elvie,deandra,dagmar,corie,collen,cherish,romaine,porsha,pearlene,micheline,merna,margorie,margaretta,lore,jenine,hermina,fredericka,elke,drusilla,dorathy,dione,celena,brigida,allegra,tamekia,synthia,sook,slyvia,rosann,reatha,raye,marquetta,margart,ling,layla,kymberly,kiana,kayleen,katlyn,karmen,joella,emelda,eleni,detra,clemmie,cheryll,chantell,cathey,arnita,arla,angle,angelic,alyse,zofia,thomasine,tennie,sherly,sherley,sharyl,remedios,petrina,nickole,myung,myrle,mozella,louanne,lisha,latia,krysta,julienne,jeanene,jacqualine,isaura,gwenda,earleen,cleopatra,carlie,audie,antonietta,alise,verdell,tomoko,thao,talisha,shemika,savanna,santina,rosia,raeann,odilia,nana,minna,magan,lynelle,karma,joeann,ivana,inell,ilana,gudrun,dreama,crissy,chante,carmelina,arvilla,annamae,alvera,aleida,yanira,vanda,tianna,stefania,shira,nicol,nancie,monserrate,melynda,melany,lovella,laure,kacy,jacquelynn,hyon,gertha,eliana,christena,christeen,charise,caterina,carley,candyce,arlena,ammie,willette,vanita,tuyet,syreeta,penney,nyla,maryam,marya,magen,ludie,loma,livia,lanell,kimberlie,julee,donetta,diedra,denisha,deane,dawne,clarine,cherryl,bronwyn,alla,valery,tonda,sueann,soraya,shoshana,shela,sharleen,shanelle,nerissa,meridith,mellie,maye,maple,magaret,lili,leonila,leonie,leeanna,lavonia,lavera,kristel,kathey,kathe,jann,ilda,hildred,hildegarde,genia,fumiko,evelin,ermelinda,elly,dung,doloris,dionna,danae,berneice,annice,alix,verena,verdie,shawnna,shawana,shaunna,rozella,randee,ranae,milagro,lynell,luise,loida,lisbeth,karleen,junita,jona,isis,hyacinth,hedy,gwenn,ethelene,erline,donya,domonique,delicia,dannette,cicely,branda,blythe,bethann,ashlyn,annalee,alline,yuko,vella,trang,towanda,tesha,sherlyn,narcisa,miguelina,meri,maybell,marlana,marguerita,madlyn,lory,loriann,leonore,leighann,laurice,latesha,laronda,katrice,kasie,kaley,jadwiga,glennie,gearldine,francina,epifania,dyan,dorie,diedre,denese,demetrice,delena,cristie,cleora,catarina,carisa,barbera,almeta,trula,tereasa,solange,sheilah,shavonne,sanora,rochell,mathilde,margareta,maia,lynsey,lawanna,launa,kena,keena,katia,glynda,gaylene,elvina,elanor,danuta,danika,cristen,cordie,coletta,clarita,carmon,brynn,azucena,aundrea,angele,verlie,verlene,tamesha,silvana,sebrina,samira,reda,raylene,penni,norah,noma,mireille,melissia,maryalice,laraine,kimbery,karyl,karine,jolanda,johana,jesusa,jaleesa,jacquelyne,iluminada,hilaria,hanh,gennie,francie,floretta,exie,edda,drema,delpha,barbar,assunta,ardell,annalisa,alisia,yukiko,yolando,wonda,waltraud,veta,temeka,tameika,shirleen,shenita,piedad,ozella,mirtha,marilu,kimiko,juliane,jenice,janay,jacquiline,hilde,elois,echo,devorah,chau,brinda,betsey,arminda,aracelis,apryl,annett,alishia,veola,usha,toshiko,theola,tashia,talitha,shery,renetta,reiko,rasheeda,obdulia,mika,melaine,meggan,marlen,marget,marceline,mana,magdalen,librada,lezlie,latashia,lasandra,kelle,isidra,inocencia,gwyn,francoise,erminia,erinn,dimple,devora,criselda,armanda,arie,ariane,angelena,aliza,adriene,adaline,xochitl,twanna,tomiko,tamisha,taisha,susy,rutha,rhona,noriko,natashia,merrie,marinda,mariko,margert,loris,lizzette,leisha,kaila,joannie,jerrica,jene,jannet,janee,jacinda,herta,elenore,doretta,delaine,daniell,claudie,britta,apolonia,amberly,alease,yuri,waneta,tomi,sharri,sandie,roselle,reynalda,raguel,phylicia,patria,olimpia,odelia,mitzie,minda,mignon,mica,mendy,marivel,maile,lynetta,lavette,lauryn,latrisha,lakiesha,kiersten,kary,josphine,jolyn,jetta,janise,jacquie,ivelisse,glynis,gianna,gaynelle,danyell,danille,dacia,coralee,cher,ceola,arianne,aleshia,yung,williemae,trinh,thora,sherika,shemeka,shaunda,roseline,ricki,melda,mallie,lavonna,latina,laquanda,lala,lachelle,klara,kandis,johna,jeanmarie,jaye,grayce,gertude,emerita,ebonie,clorinda,ching,chery,carola,breann,blossom,bernardine,becki,arletha,argelia,alita,yulanda,yessenia,tobi,tasia,sylvie,shirl,shirely,shella,shantelle,sacha,rebecka,providencia,paulene,misha,miki,marline,marica,lorita,latoyia,lasonya,kerstin,kenda,keitha,kathrin,jaymie,gricelda,ginette,eryn,elina,elfrieda,danyel,cheree,chanelle,barrie,aurore,annamaria,alleen,ailene,aide,yasmine,vashti,treasa,tiffaney,sheryll,sharie,shanae,raisa,neda,mitsuko,mirella,milda,maryanna,maragret,mabelle,luetta,lorina,letisha,latarsha,lanelle,lajuana,krissy,karly,karena,jessika,jerica,jeanelle,jalisa,jacelyn,izola,euna,etha,domitila,dominica,daina,creola,carli,camie,brittny,ashanti,anisha,aleen,adah,yasuko,valrie,tona,tinisha,terisa,taneka,simonne,shalanda,serita,ressie,refugia,olene,margherita,mandie,maire,lyndia,luci,lorriane,loreta,leonia,lavona,lashawnda,lakia,kyoko,krystina,krysten,kenia,kelsi,jeanice,isobel,georgiann,genny,felicidad,eilene,deloise,deedee,conception,clora,cherilyn,calandra,armandina,anisa,tiera,theressa,stephania,sima,shyla,shonta,shera,shaquita,shala,rossana,nohemi,nery,moriah,melita,melida,melani,marylynn,marisha,mariette,malorie,madelene,ludivina,loria,lorette,loralee,lianne,lavenia,laurinda,lashon,kimi,keila,katelynn,jone,joane,jayna,janella,hertha,francene,elinore,despina,delsie,deedra,clemencia,carolin,bulah,brittanie,blondell,bibi,beaulah,beata,annita,agripina,virgen,valene,twanda,tommye,tarra,tari,tammera,shakia,sadye,ruthanne,rochel,rivka,pura,nenita,natisha,ming,merrilee,melodee,marvis,lucilla,leena,laveta,larita,lanie,keren,ileen,georgeann,genna,frida,eufemia,emely,edyth,deonna,deadra,darlena,chanell,cathern,cassondra,cassaundra,bernarda,berna,arlinda,anamaria,vertie,valeri,torri,stasia,sherise,sherill,sanda,ruthe,rosy,robbi,ranee,quyen,pearly,palmira,onita,nisha,niesha,nida,merlyn,mayola,marylouise,marth,margene,madelaine,londa,leontine,leoma,leia,lauralee,lanora,lakita,kiyoko,keturah,katelin,kareen,jonie,johnette,jenee,jeanett,izetta,hiedi,heike,hassie,giuseppina,georgann,fidela,fernande,elwanda,ellamae,eliz,dusti,dotty,cyndy,coralie,celesta,alverta,xenia,wava,vanetta,torrie,tashina,tandy,tambra,tama,stepanie,shila,shaunta,sharan,shaniqua,shae,setsuko,serafina,sandee,rosamaria,priscila,olinda,nadene,muoi,michelina,mercedez,maryrose,marcene,magali,mafalda,lannie,kayce,karoline,kamilah,kamala,justa,joline,jennine,jacquetta,iraida,georgeanna,franchesca,emeline,elane,ehtel,earlie,dulcie,dalene,classie,chere,charis,caroyln,carmina,carita,bethanie,ayako,arica,alysa,alessandra,akilah,adrien,zetta,youlanda,yelena,yahaira,xuan,wendolyn,tijuana,terina,teresia,suzi,sherell,shavonda,shaunte,sharda,shakita,sena,ryann,rubi,riva,reginia,rachal,parthenia,pamula,monnie,monet,michaele,melia,malka,maisha,lisandra,lekisha,lean,lakendra,krystin,kortney,kizzie,kittie,kera,kendal,kemberly,kanisha,julene,jule,johanne,jamee,halley,gidget,fredricka,fleta,fatimah,eusebia,elza,eleonore,dorthey,doria,donella,dinorah,delorse,claretha,christinia,charlyn,bong,belkis,azzie,andera,aiko,adena,yajaira,vania,ulrike,toshia,tifany,stefany,shizue,shenika,shawanna,sharolyn,sharilyn,shaquana,shantay,rozanne,roselee,remona,reanna,raelene,phung,petronila,natacha,nancey,myrl,miyoko,miesha,merideth,marvella,marquitta,marhta,marchelle,lizeth,libbie,lahoma,ladawn,kina,katheleen,katharyn,karisa,kaleigh,junie,julieann,johnsie,janean,jaimee,jackqueline,hisako,herma,helaine,gwyneth,gita,eustolia,emelina,elin,edris,donnette,donnetta,dierdre,denae,darcel,clarisa,cinderella,chia,charlesetta,charita,celsa,cassy,cassi,carlee,bruna,brittaney,brande,billi,antonetta,angla,angelyn,analisa,alane,wenona,wendie,veronique,vannesa,tobie,tempie,sumiko,sulema,somer,sheba,sharice,shanel,shalon,rosio,roselia,renay,rema,reena,ozie,oretha,oralee,ngan,nakesha,milly,marybelle,margrett,maragaret,manie,lurlene,lillia,lieselotte,lavelle,lashaunda,lakeesha,kaycee,kalyn,joya,joette,jenae,janiece,illa,grisel,glayds,genevie,gala,fredda,eleonor,debera,deandrea,corrinne,cordia,contessa,colene,cleotilde,chantay,cecille,beatris,azalee,arlean,ardath,anjelica,anja,alfredia,aleisha,zada,yuonne,xiao,willodean,vennie,vanna,tyisha,tova,torie,tonisha,tilda,tien,sirena,sherril,shanti,shan,senaida,samella,robbyn,renda,reita,phebe,paulita,nobuko,nguyet,neomi,mikaela,melania,maximina,marg,maisie,lynna,lilli,lashaun,lakenya,lael,kirstie,kathline,kasha,karlyn,karima,jovan,josefine,jennell,jacqui,jackelyn,hien,grazyna,florrie,floria,eleonora,dwana,dorla,delmy,deja,dede,dann,crysta,clelia,claris,chieko,cherlyn,cherelle,charmain,chara,cammy,arnette,ardelle,annika,amiee,amee,allena,yvone,yuki,yoshie,yevette,yael,willetta,voncile,venetta,tula,tonette,timika,temika,telma,teisha,taren,stacee,shawnta,saturnina,ricarda,pasty,onie,nubia,marielle,mariella,marianela,mardell,luanna,loise,lisabeth,lindsy,lilliana,lilliam,lelah,leigha,leanora,kristeen,khalilah,keeley,kandra,junko,joaquina,jerlene,jani,jamika,hsiu,hermila,genevive,evia,eugena,emmaline,elfreda,elene,donette,delcie,deeanna,darcey,clarinda,cira,chae,celinda,catheryn,casimira,carmelia,camellia,breana,bobette,bernardina,bebe,basilia,arlyne,amal,alayna,zonia,zenia,yuriko,yaeko,wynell,willena,vernia,tora,terrilyn,terica,tenesha,tawna,tajuana,taina,stephnie,sona,sina,shondra,shizuko,sherlene,sherice,sharika,rossie,rosena,rima,rheba,renna,natalya,nancee,melodi,meda,matha,marketta,maricruz,marcelene,malvina,luba,louetta,leida,lecia,lauran,lashawna,laine,khadijah,katerine,kasi,kallie,julietta,jesusita,jestine,jessia,jeffie,janyce,isadora,georgianne,fidelia,evita,eura,eulah,estefana,elsy,eladia,dodie,denisse,deloras,delila,daysi,crystle,concha,claretta,charlsie,charlena,carylon,bettyann,asley,ashlea,amira,agueda,agnus,yuette,vinita,victorina,tynisha,treena,toccara,tish,thomasena,tegan,soila,shenna,sharmaine,shantae,shandi,saran,sarai,sana,rosette,rolande,regine,otelia,olevia,nicholle,necole,naida,myrta,myesha,mitsue,minta,mertie,margy,mahalia,madalene,loura,lorean,lesha,leonida,lenita,lavone,lashell,lashandra,lamonica,kimbra,katherina,karry,kanesha,jong,jeneva,jaquelyn,gilma,ghislaine,gertrudis,fransisca,fermina,ettie,etsuko,ellan,elidia,edra,dorethea,doreatha,denyse,deetta,daine,cyrstal,corrin,cayla,carlita,camila,burma,bula,buena,barabara,avril,alaine,zana,wilhemina,wanetta,verline,vasiliki,tonita,tisa,teofila,tayna,taunya,tandra,takako,sunni,suanne,sixta,sharell,seema,rosenda,robena,raymonde,pamila,ozell,neida,mistie,micha,merissa,maurita,maryln,maryetta,marcell,malena,makeda,lovetta,lourie,lorrine,lorilee,laurena,lashay,larraine,laree,lacresha,kristle,keva,keira,karole,joie,jinny,jeannetta,jama,heidy,gilberte,gema,faviola,evelynn,enda,elli,ellena,divina,dagny,collene,codi,cindie,chassidy,chasidy,catrice,catherina,cassey,caroll,carlena,candra,calista,bryanna,britteny,beula,bari,audrie,audria,ardelia,annelle,angila,alona,allyn".split(","),surnames:"smith,johnson,williams,jones,brown,davis,miller,wilson,moore,taylor,anderson,jackson,white,harris,martin,thompson,garcia,martinez,robinson,clark,rodriguez,lewis,lee,walker,hall,allen,young,hernandez,king,wright,lopez,hill,green,adams,baker,gonzalez,nelson,carter,mitchell,perez,roberts,turner,phillips,campbell,parker,evans,edwards,collins,stewart,sanchez,morris,rogers,reed,cook,morgan,bell,murphy,bailey,rivera,cooper,richardson,cox,howard,ward,torres,peterson,gray,ramirez,watson,brooks,sanders,price,bennett,wood,barnes,ross,henderson,coleman,jenkins,perry,powell,long,patterson,hughes,flores,washington,butler,simmons,foster,gonzales,bryant,alexander,griffin,diaz,hayes,myers,ford,hamilton,graham,sullivan,wallace,woods,cole,west,owens,reynolds,fisher,ellis,harrison,gibson,mcdonald,cruz,marshall,ortiz,gomez,murray,freeman,wells,webb,simpson,stevens,tucker,porter,hicks,crawford,boyd,mason,morales,kennedy,warren,dixon,ramos,reyes,burns,gordon,shaw,holmes,rice,robertson,hunt,black,daniels,palmer,mills,nichols,grant,knight,ferguson,stone,hawkins,dunn,perkins,hudson,spencer,gardner,stephens,payne,pierce,berry,matthews,arnold,wagner,willis,watkins,olson,carroll,duncan,snyder,hart,cunningham,lane,andrews,ruiz,harper,fox,riley,armstrong,carpenter,weaver,greene,elliott,chavez,sims,peters,kelley,franklin,lawson,fields,gutierrez,schmidt,carr,vasquez,castillo,wheeler,chapman,montgomery,richards,williamson,johnston,banks,meyer,bishop,mccoy,howell,alvarez,morrison,hansen,fernandez,garza,harvey,burton,nguyen,jacobs,reid,fuller,lynch,garrett,romero,welch,larson,frazier,burke,hanson,mendoza,moreno,bowman,medina,fowler,brewer,hoffman,carlson,silva,pearson,holland,fleming,jensen,vargas,byrd,davidson,hopkins,herrera,wade,soto,walters,neal,caldwell,lowe,jennings,barnett,graves,jimenez,horton,shelton,barrett,obrien,castro,sutton,mckinney,lucas,miles,rodriquez,chambers,holt,lambert,fletcher,watts,bates,hale,rhodes,pena,beck,newman,haynes,mcdaniel,mendez,bush,vaughn,parks,dawson,santiago,norris,hardy,steele,curry,powers,schultz,barker,guzman,page,munoz,ball,keller,chandler,weber,walsh,lyons,ramsey,wolfe,schneider,mullins,benson,sharp,bowen,barber,cummings,hines,baldwin,griffith,valdez,hubbard,salazar,reeves,warner,stevenson,burgess,santos,tate,cross,garner,mann,mack,moss,thornton,mcgee,farmer,delgado,aguilar,vega,glover,manning,cohen,harmon,rodgers,robbins,newton,blair,higgins,ingram,reese,cannon,strickland,townsend,potter,goodwin,walton,rowe,hampton,ortega,patton,swanson,goodman,maldonado,yates,becker,erickson,hodges,rios,conner,adkins,webster,malone,hammond,flowers,cobb,moody,quinn,pope,osborne,mccarthy,guerrero,estrada,sandoval,gibbs,gross,fitzgerald,stokes,doyle,saunders,wise,colon,gill,alvarado,greer,padilla,waters,nunez,ballard,schwartz,mcbride,houston,christensen,klein,pratt,briggs,parsons,mclaughlin,zimmerman,buchanan,moran,copeland,pittman,brady,mccormick,holloway,brock,poole,logan,bass,marsh,drake,wong,jefferson,morton,abbott,sparks,norton,huff,massey,figueroa,carson,bowers,roberson,barton,tran,lamb,harrington,boone,cortez,clarke,mathis,singleton,wilkins,cain,underwood,hogan,mckenzie,collier,luna,phelps,mcguire,bridges,wilkerson,nash,summers,atkins,wilcox,pitts,conley,marquez,burnett,cochran,chase,davenport,hood,gates,ayala,sawyer,vazquez,dickerson,hodge,acosta,flynn,espinoza,nicholson,monroe,wolf,morrow,whitaker,oconnor,skinner,ware,molina,kirby,huffman,gilmore,dominguez,oneal,lang,combs,kramer,hancock,gallagher,gaines,shaffer,wiggins,mathews,mcclain,fischer,wall,melton,hensley,bond,dyer,grimes,contreras,wyatt,baxter,snow,mosley,shepherd,larsen,hoover,beasley,petersen,whitehead,meyers,garrison,shields,horn,savage,olsen,schroeder,hartman,woodard,mueller,kemp,deleon,booth,patel,calhoun,wiley,eaton,cline,navarro,harrell,humphrey,parrish,duran,hutchinson,hess,dorsey,bullock,robles,beard,dalton,avila,rich,blackwell,johns,blankenship,trevino,salinas,campos,pruitt,callahan,montoya,hardin,guerra,mcdowell,stafford,gallegos,henson,wilkinson,booker,merritt,atkinson,orr,decker,hobbs,tanner,knox,pacheco,stephenson,glass,rojas,serrano,marks,hickman,sweeney,strong,mcclure,conway,roth,maynard,farrell,lowery,hurst,nixon,weiss,trujillo,ellison,sloan,juarez,winters,mclean,boyer,villarreal,mccall,gentry,carrillo,ayers,lara,sexton,pace,hull,leblanc,browning,velasquez,leach,chang,sellers,herring,noble,foley,bartlett,mercado,landry,durham,walls,barr,mckee,bauer,rivers,bradshaw,pugh,velez,rush,estes,dodson,morse,sheppard,weeks,camacho,bean,barron,livingston,middleton,spears,branch,blevins,chen,kerr,mcconnell,hatfield,harding,solis,frost,giles,blackburn,pennington,woodward,finley,mcintosh,koch,mccullough,blanchard,rivas,brennan,mejia,kane,benton,buckley,valentine,maddox,russo,mcknight,buck,moon,mcmillan,crosby,berg,dotson,mays,roach,chan,richmond,meadows,faulkner,oneill,knapp,kline,ochoa,jacobson,gay,hendricks,horne,shepard,hebert,cardenas,mcintyre,waller,holman,donaldson,cantu,morin,gillespie,fuentes,tillman,bentley,peck,key,salas,rollins,gamble,dickson,santana,cabrera,cervantes,howe,hinton,hurley,spence,zamora,yang,mcneil,suarez,petty,gould,mcfarland,sampson,carver,bray,macdonald,stout,hester,melendez,dillon,farley,hopper,galloway,potts,joyner,stein,aguirre,osborn,mercer,bender,franco,rowland,sykes,pickett,sears,mayo,dunlap,hayden,wilder,mckay,coffey,mccarty,ewing,cooley,vaughan,bonner,cotton,holder,stark,ferrell,cantrell,fulton,lott,calderon,pollard,hooper,burch,mullen,fry,riddle,levy,duke,odonnell,britt,daugherty,berger,dillard,alston,frye,riggs,chaney,odom,duffy,fitzpatrick,valenzuela,mayer,alford,mcpherson,acevedo,barrera,cote,reilly,compton,mooney,mcgowan,craft,clemons,wynn,nielsen,baird,stanton,snider,rosales,bright,witt,hays,holden,rutledge,kinney,clements,castaneda,slater,hahn,burks,delaney,pate,lancaster,sharpe,whitfield,talley,macias,burris,ratliff,mccray,madden,kaufman,beach,goff,cash,bolton,mcfadden,levine,byers,kirkland,kidd,workman,carney,mcleod,holcomb,finch,sosa,haney,franks,sargent,nieves,downs,rasmussen,bird,hewitt,foreman,valencia,oneil,delacruz,vinson,dejesus,hyde,forbes,gilliam,guthrie,wooten,huber,barlow,boyle,mcmahon,buckner,rocha,puckett,langley,knowles,cooke,velazquez,whitley,vang,shea,rouse,hartley,mayfield,elder,rankin,hanna,cowan,lucero,arroyo,slaughter,haas,oconnell,minor,boucher,archer,boggs,dougherty,andersen,newell,crowe,wang,friedman,bland,swain,holley,pearce,childs,yarbrough,galvan,proctor,meeks,lozano,mora,rangel,bacon,villanueva,schaefer,rosado,helms,boyce,goss,stinson,ibarra,hutchins,covington,crowley,hatcher,mackey,bunch,womack,polk,dodd,childress,childers,villa,springer,mahoney,dailey,belcher,lockhart,griggs,costa,brandt,walden,moser,tatum,mccann,akers,lutz,pryor,orozco,mcallister,lugo,davies,shoemaker,rutherford,newsome,magee,chamberlain,blanton,simms,godfrey,flanagan,crum,cordova,escobar,downing,sinclair,donahue,krueger,mcginnis,gore,farris,webber,corbett,andrade,starr,lyon,yoder,hastings,mcgrath,spivey,krause,harden,crabtree,kirkpatrick,arrington,ritter,mcghee,bolden,maloney,gagnon,dunbar,ponce,pike,mayes,beatty,mobley,kimball,butts,montes,eldridge,braun,hamm,gibbons,moyer,manley,herron,plummer,elmore,cramer,rucker,pierson,fontenot,rubio,goldstein,elkins,wills,novak,hickey,worley,gorman,katz,dickinson,broussard,woodruff,crow,britton,nance,lehman,bingham,zuniga,whaley,shafer,coffman,steward,delarosa,neely,mata,davila,mccabe,kessler,hinkle,welsh,pagan,goldberg,goins,crouch,cuevas,quinones,mcdermott,hendrickson,samuels,denton,bergeron,ivey,locke,haines,snell,hoskins,byrne,arias,corbin,beltran,chappell,downey,dooley,tuttle,couch,payton,mcelroy,crockett,groves,cartwright,dickey,mcgill,dubois,muniz,tolbert,dempsey,cisneros,sewell,latham,vigil,tapia,rainey,norwood,stroud,meade,tipton,kuhn,hilliard,bonilla,teague,gunn,greenwood,correa,reece,pineda,phipps,frey,kaiser,ames,gunter,schmitt,milligan,espinosa,bowden,vickers,lowry,pritchard,costello,piper,mcclellan,lovell,sheehan,hatch,dobson,singh,jeffries,hollingsworth,sorensen,meza,fink,donnelly,burrell,tomlinson,colbert,billings,ritchie,helton,sutherland,peoples,mcqueen,thomason,givens,crocker,vogel,robison,dunham,coker,swartz,keys,ladner,richter,hargrove,edmonds,brantley,albright,murdock,boswell,muller,quintero,padgett,kenney,daly,connolly,inman,quintana,lund,barnard,villegas,simons,huggins,tidwell,sanderson,bullard,mcclendon,duarte,draper,marrero,dwyer,abrams,stover,goode,fraser,crews,bernal,godwin,conklin,mcneal,baca,esparza,crowder,bower,brewster,mcneill,rodrigues,leal,coates,raines,mccain,mccord,miner,holbrook,swift,dukes,carlisle,aldridge,ackerman,starks,ricks,holliday,ferris,hairston,sheffield,lange,fountain,doss,betts,kaplan,carmichael,bloom,ruffin,penn,kern,bowles,sizemore,larkin,dupree,seals,metcalf,hutchison,henley,farr,mccauley,hankins,gustafson,curran,waddell,ramey,cates,pollock,cummins,messer,heller,funk,cornett,palacios,galindo,cano,hathaway,pham,enriquez,salgado,pelletier,painter,wiseman,blount,feliciano,houser,doherty,mead,mcgraw,swan,capps,blanco,blackmon,thomson,mcmanus,burkett,gleason,dickens,cormier,voss,rushing,rosenberg,hurd,dumas,benitez,arellano,marin,caudill,bragg,jaramillo,huerta,gipson,colvin,biggs,vela,platt,cassidy,tompkins,mccollum,dolan,daley,crump,sneed,kilgore,grove,grimm,davison,brunson,prater,marcum,devine,dodge,stratton,rosas,choi,tripp,ledbetter,hightower,feldman,epps,yeager,posey,scruggs,cope,stubbs,richey,overton,trotter,sprague,cordero,butcher,stiles,burgos,woodson,horner,bassett,purcell,haskins,akins,ziegler,spaulding,hadley,grubbs,sumner,murillo,zavala,shook,lockwood,driscoll,dahl,thorpe,redmond,putnam,mcwilliams,mcrae,romano,joiner,sadler,hedrick,hager,hagen,fitch,coulter,thacker,mansfield,langston,guidry,ferreira,corley,conn,rossi,lackey,baez,saenz,mcnamara,mcmullen,mckenna,mcdonough,link,engel,browne,roper,peacock,eubanks,drummond,stringer,pritchett,parham,mims,landers,grayson,schafer,egan,timmons,ohara,keen,hamlin,finn,cortes,mcnair,nadeau,moseley,michaud,rosen,oakes,kurtz,jeffers,calloway,beal,bautista,winn,suggs,stern,stapleton,lyles,laird,montano,dawkins,hagan,goldman,bryson,barajas,lovett,segura,metz,lockett,langford,hinson,eastman,hooks,smallwood,shapiro,crowell,whalen,triplett,chatman,aldrich,cahill,youngblood,ybarra,stallings,sheets,reeder,connelly,bateman,abernathy,winkler,wilkes,masters,hackett,granger,gillis,schmitz,sapp,napier,souza,lanier,gomes,weir,otero,ledford,burroughs,babcock,ventura,siegel,dugan,bledsoe,atwood,wray,varner,spangler,anaya,staley,kraft,fournier,belanger,wolff,thorne,bynum,burnette,boykin,swenson,purvis,pina,khan,duvall,darby,xiong,kauffman,healy,engle,benoit,valle,steiner,spicer,shaver,randle,lundy,chin,calvert,staton,neff,kearney,darden,oakley,medeiros,mccracken,crenshaw,perdue,dill,whittaker,tobin,washburn,hogue,goodrich,easley,bravo,dennison,shipley,kerns,jorgensen,crain,villalobos,maurer,longoria,keene,coon,witherspoon,staples,pettit,kincaid,eason,madrid,echols,lusk,stahl,currie,thayer,shultz,mcnally,seay,maher,gagne,barrow,nava,moreland,honeycutt,hearn,diggs,caron,whitten,westbrook,stovall,ragland,munson,meier,looney,kimble,jolly,hobson,goddard,culver,burr,presley,negron,connell,tovar,huddleston,ashby,salter,root,pendleton,oleary,nickerson,myrick,judd,jacobsen,bain,adair,starnes,matos,busby,herndon,hanley,bellamy,doty,bartley,yazzie,rowell,parson,gifford,cullen,christiansen,benavides,barnhart,talbot,mock,crandall,connors,bonds,whitt,gage,bergman,arredondo,addison,lujan,dowdy,jernigan,huynh,bouchard,dutton,rhoades,ouellette,kiser,herrington,hare,blackman,babb,allred,rudd,paulson,ogden,koenig,geiger,begay,parra,lassiter,hawk,esposito,waldron,ransom,prather,chacon,vick,sands,roark,parr,mayberry,greenberg,coley,bruner,whitman,skaggs,shipman,leary,hutton,romo,medrano,ladd,kruse,askew,schulz,alfaro,tabor,mohr,gallo,bermudez,pereira,bliss,reaves,flint,comer,woodall,naquin,guevara,delong,carrier,pickens,tilley,schaffer,knutson,fenton,doran,vogt,vann,prescott,mclain,landis,corcoran,zapata,hyatt,hemphill,faulk,dove,boudreaux,aragon,whitlock,trejo,tackett,shearer,saldana,hanks,mckinnon,koehler,bourgeois,keyes,goodson,foote,lunsford,goldsmith,flood,winslow,sams,reagan,mccloud,hough,esquivel,naylor,loomis,coronado,ludwig,braswell,bearden,huang,fagan,ezell,edmondson,cronin,nunn,lemon,guillory,grier,dubose,traylor,ryder,dobbins,coyle,aponte,whitmore,smalls,rowan,malloy,cardona,braxton,borden,humphries,carrasco,ruff,metzger,huntley,hinojosa,finney,madsen,ernst,dozier,burkhart,bowser,peralta,daigle,whittington,sorenson,saucedo,roche,redding,fugate,avalos,waite,lind,huston,hawthorne,hamby,boyles,boles,regan,faust,crook,beam,barger,hinds,gallardo,willoughby,willingham,eckert,busch,zepeda,worthington,tinsley,hoff,hawley,carmona,varela,rector,newcomb,kinsey,dube,whatley,ragsdale,bernstein,becerra,yost,mattson,felder,cheek,handy,grossman,gauthier,escobedo,braden,beckman,mott,hillman,flaherty,dykes,stockton,stearns,lofton,coats,cavazos,beavers,barrios,tang,mosher,cardwell,coles,burnham,weller,lemons,beebe,aguilera,parnell,harman,couture,alley,schumacher,redd,dobbs,blum,blalock,merchant,ennis,denson,cottrell,brannon,bagley,aviles,watt,sousa,rosenthal,rooney,dietz,blank,paquette,mcclelland,duff,velasco,lentz,grubb,burrows,barbour,ulrich,shockley,rader,beyer,mixon,layton,altman,weathers,stoner,squires,shipp,priest,lipscomb,cutler,caballero,zimmer,willett,thurston,storey,medley,epperson,shah,mcmillian,baggett,torrez,hirsch,dent,poirier,peachey,farrar,creech,barth,trimble,dupre,albrecht,sample,lawler,crisp,conroy,wetzel,nesbitt,murry,jameson,wilhelm,patten,minton,matson,kimbrough,guinn,croft,toth,pulliam,nugent,newby,littlejohn,dias,canales,bernier,baron,singletary,renteria,pruett,mchugh,mabry,landrum,brower,stoddard,cagle,stjohn,scales,kohler,kellogg,hopson,gant,tharp,gann,zeigler,pringle,hammons,fairchild,deaton,chavis,carnes,rowley,matlock,kearns,irizarry,carrington,starkey,lopes,jarrell,craven,baum,littlefield,linn,humphreys,etheridge,cuellar,chastain,bundy,speer,skelton,quiroz,pyle,portillo,ponder,moulton,machado,killian,hutson,hitchcock,dowling,cloud,burdick,spann,pedersen,levin,leggett,hayward,dietrich,beaulieu,barksdale,wakefield,snowden,briscoe,bowie,berman,ogle,mcgregor,laughlin,helm,burden,wheatley,schreiber,pressley,parris,alaniz,agee,swann,snodgrass,schuster,radford,monk,mattingly,harp,girard,cheney,yancey,wagoner,ridley,lombardo,hudgins,gaskins,duckworth,coburn,willey,prado,newberry,magana,hammonds,elam,whipple,slade,serna,ojeda,liles,dorman,diehl,upton,reardon,michaels,goetz,eller,bauman,baer,layne,hummel,brenner,amaya,adamson,ornelas,dowell,cloutier,castellanos,wellman,saylor,orourke,moya,montalvo,kilpatrick,durbin,shell,oldham,kang,garvin,foss,branham,bartholomew,templeton,maguire,holton,rider,monahan,mccormack,beaty,anders,streeter,nieto,nielson,moffett,lankford,keating,heck,gatlin,delatorre,callaway,adcock,worrell,unger,robinette,nowak,jeter,brunner,steen,parrott,overstreet,nobles,montanez,clevenger,brinkley,trahan,quarles,pickering,pederson,jansen,grantham,gilchrist,crespo,aiken,schell,schaeffer,lorenz,leyva,harms,dyson,wallis,pease,leavitt,cheng,cavanaugh,batts,warden,seaman,rockwell,quezada,paxton,linder,houck,fontaine,durant,caruso,adler,pimentel,mize,lytle,cleary,cason,acker,switzer,isaacs,higginbotham,waterman,vandyke,stamper,sisk,shuler,riddick,mcmahan,levesque,hatton,bronson,bollinger,arnett,okeefe,gerber,gannon,farnsworth,baughman,silverman,satterfield,mccrary,kowalski,grigsby,greco,cabral,trout,rinehart,mahon,linton,gooden,curley,baugh,wyman,weiner,schwab,schuler,morrissey,mahan,bunn,thrasher,spear,waggoner,qualls,purdy,mcwhorter,mauldin,gilman,perryman,newsom,menard,martino,graf,billingsley,artis,simpkins,salisbury,quintanilla,gilliland,fraley,foust,crouse,scarborough,grissom,fultz,marlow,markham,madrigal,lawton,barfield,whiting,varney,schwarz,gooch,arce,wheat,truong,poulin,hurtado,selby,gaither,fortner,culpepper,coughlin,brinson,boudreau,bales,stepp,holm,schilling,morrell,kahn,heaton,gamez,causey,turpin,shanks,schrader,meek,isom,hardison,carranza,yanez,scroggins,schofield,runyon,ratcliff,murrell,moeller,irby,currier,butterfield,ralston,pullen,pinson,estep,carbone,hawks,ellington,casillas,spurlock,sikes,motley,mccartney,kruger,isbell,houle,burk,tomlin,quigley,neumann,lovelace,fennell,cheatham,bustamante,skidmore,hidalgo,forman,culp,bowens,betancourt,aquino,robb,milner,martel,gresham,wiles,ricketts,dowd,collazo,bostic,blakely,sherrod,kenyon,gandy,ebert,deloach,allard,sauer,robins,olivares,gillette,chestnut,bourque,paine,hite,hauser,devore,crawley,chapa,talbert,poindexter,meador,mcduffie,mattox,kraus,harkins,choate,wren,sledge,sanborn,kinder,geary,cornwell,barclay,abney,seward,rhoads,howland,fortier,benner,vines,tubbs,troutman,rapp,mccurdy,deluca,westmoreland,havens,guajardo,clary,seal,meehan,herzog,guillen,ashcraft,waugh,renner,milam,elrod,churchill,breaux,bolin,asher,windham,tirado,pemberton,nolen,noland,knott,emmons,cornish,christenson,brownlee,barbee,waldrop,pitt,olvera,lombardi,gruber,gaffney,eggleston,banda,archuleta,slone,prewitt,pfeiffer,nettles,mena,mcadams,henning,gardiner,cromwell,chisholm,burleson,vest,oglesby,mccarter,lumpkin,wofford,vanhorn,thorn,teel,swafford,stclair,stanfield,ocampo,herrmann,hannon,arsenault,roush,mcalister,hiatt,gunderson,forsythe,duggan,delvalle,cintron,wilks,weinstein,uribe,rizzo,noyes,mclendon,gurley,bethea,winstead,maples,guyton,giordano,alderman,valdes,polanco,pappas,lively,grogan,griffiths,bobo,arevalo,whitson,sowell,rendon,fernandes,farrow,benavidez,ayres,alicea,stump,smalley,seitz,schulte,gilley,gallant,canfield,wolford,omalley,mcnutt,mcnulty,mcgovern,hardman,harbin,cowart,chavarria,brink,beckett,bagwell,armstead,anglin,abreu,reynoso,krebs,jett,hoffmann,greenfield,forte,burney,broome,sisson,trammell,partridge,mace,lomax,lemieux,gossett,frantz,fogle,cooney,broughton,pence,paulsen,muncy,mcarthur,hollins,beauchamp,withers,osorio,mulligan,hoyle,dockery,cockrell,begley,amador,roby,rains,lindquist,gentile,everhart,bohannon,wylie,sommers,purnell,fortin,dunning,breeden,vail,phelan,phan,marx,cosby,colburn,boling,biddle,ledesma,gaddis,denney,chow,bueno,berrios,wicker,tolliver,thibodeaux,nagle,lavoie,fisk,crist,barbosa,reedy,locklear,kolb,himes,behrens,beckwith,weems,wahl,shorter,shackelford,rees,muse,cerda,valadez,thibodeau,saavedra,ridgeway,reiter,mchenry,majors,lachance,keaton,ferrara,clemens,blocker,applegate,needham,mojica,kuykendall,hamel,escamilla,doughty,burchett,ainsworth,vidal,upchurch,thigpen,strauss,spruill,sowers,riggins,ricker,mccombs,harlow,buffington,sotelo,olivas,negrete,morey,macon,logsdon,lapointe,bigelow,bello,westfall,stubblefield,lindley,hein,hawes,farrington,breen,birch,wilde,steed,sepulveda,reinhardt,proffitt,minter,messina,mcnabb,maier,keeler,gamboa,donohue,basham,shinn,crooks,cota,borders,bills,bachman,tisdale,tavares,schmid,pickard,gulley,fonseca,delossantos,condon,batista,wicks,wadsworth,martell,littleton,ison,haag,folsom,brumfield,broyles,brito,mireles,mcdonnell,leclair,hamblin,gough,fanning,binder,winfield,whitworth,soriano,palumbo,newkirk,mangum,hutcherson,comstock,carlin,beall,bair,wendt,watters,walling,putman,otoole,morley,mares,lemus,keener,hundley,dial,damico,billups,strother,mcfarlane,lamm,eaves,crutcher,caraballo,canty,atwell,taft,siler,rust,rawls,rawlings,prieto,mcneely,mcafee,hulsey,hackney,galvez,escalante,delagarza,crider,bandy,wilbanks,stowe,steinberg,renfro,masterson,massie,lanham,haskell,hamrick,dehart,burdette,branson,bourne,babin,aleman,worthy,tibbs,smoot,slack,paradis,mull,luce,houghton,gantt,furman,danner,christianson,burge,ashford,arndt,almeida,stallworth,shade,searcy,sager,noonan,mclemore,mcintire,maxey,lavigne,jobe,ferrer,falk,coffin,byrnes,aranda,apodaca,stamps,rounds,peek,olmstead,lewandowski,kaminski,dunaway,bruns,brackett,amato,reich,mcclung,lacroix,koontz,herrick,hardesty,flanders,cousins,cato,cade,vickery,shank,nagel,dupuis,croteau,cotter,stuckey,stine,porterfield,pauley,moffitt,knudsen,hardwick,goforth,dupont,blunt,barrows,barnhill,shull,rash,loftis,lemay,kitchens,horvath,grenier,fuchs,fairbanks,culbertson,calkins,burnside,beattie,ashworth,albertson,wertz,vaught,vallejo,turk,tuck,tijerina,sage,peterman,marroquin,marr,lantz,hoang,demarco,cone,berube,barnette,wharton,stinnett,slocum,scanlon,sander,pinto,mancuso,lima,headley,epstein,counts,clarkson,carnahan,boren,arteaga,adame,zook,whittle,whitehurst,wenzel,saxton,reddick,puente,handley,haggerty,earley,devlin,chaffin,cady,acuna,solano,sigler,pollack,pendergrass,ostrander,janes,francois,crutchfield,chamberlin,brubaker,baptiste,willson,reis,neeley,mullin,mercier,lira,layman,keeling,higdon,espinal,chapin,warfield,toledo,pulido,peebles,nagy,montague,mello,lear,jaeger,hogg,graff,furr,soliz,poore,mendenhall,mclaurin,maestas,gable,barraza,tillery,snead,pond,neill,mcculloch,mccorkle,lightfoot,hutchings,holloman,harness,dorn,bock,zielinski,turley,treadwell,stpierre,starling,somers,oswald,merrick,easterling,bivens,truitt,poston,parry,ontiveros,olivarez,moreau,medlin,lenz,knowlton,fairley,cobbs,chisolm,bannister,woodworth,toler,ocasio,noriega,neuman,moye,milburn,mcclanahan,lilley,hanes,flannery,dellinger,danielson,conti,blodgett,beers,weatherford,strain,karr,hitt,denham,custer,coble,clough,casteel,bolduc,batchelor,ammons,whitlow,tierney,staten,sibley,seifert,schubert,salcedo,mattison,laney,haggard,grooms,dees,cromer,cooks,colson,caswell,zarate,swisher,shin,ragan,pridgen,mcvey,matheny,lafleur,franz,ferraro,dugger,whiteside,rigsby,mcmurray,lehmann,jacoby,hildebrand,hendrick,headrick,goad,fincher,drury,borges,archibald,albers,woodcock,trapp,soares,seaton,monson,luckett,lindberg,kopp,keeton,healey,garvey,gaddy,fain,burchfield,wentworth,strand,stack,spooner,saucier,ricci,plunkett,pannell,ness,leger,freitas,fong,elizondo,duval,beaudoin,urbina,rickard,partin,mcgrew,mcclintock,ledoux,forsyth,faison,devries,bertrand,wasson,tilton,scarbrough,leung,irvine,garber,denning,corral,colley,castleberry,bowlin,bogan,beale,baines,trice,rayburn,parkinson,nunes,mcmillen,leahy,kimmel,higgs,fulmer,carden,bedford,taggart,spearman,prichard,morrill,koonce,heinz,hedges,guenther,grice,findley,dover,creighton,boothe,bayer,arreola,vitale,valles,raney,osgood,hanlon,burley,bounds,worden,weatherly,vetter,tanaka,stiltner,nevarez,mosby,montero,melancon,harter,hamer,goble,gladden,gist,ginn,akin,zaragoza,tarver,sammons,royster,oreilly,muir,morehead,luster,kingsley,kelso,grisham,glynn,baumann,alves,yount,tamayo,paterson,oates,menendez,longo,hargis,gillen,desantis,conover,breedlove,sumpter,scherer,rupp,reichert,heredia,creel,cohn,clemmons,casas,bickford,belton,bach,williford,whitcomb,tennant,sutter,stull,mccallum,langlois,keel,keegan,dangelo,dancy,damron,clapp,clanton,bankston,oliveira,mintz,mcinnis,martens,mabe,laster,jolley,hildreth,hefner,glaser,duckett,demers,brockman,blais,alcorn,agnew,toliver,tice,seeley,najera,musser,mcfall,laplante,galvin,fajardo,doan,coyne,copley,clawson,cheung,barone,wynne,woodley,tremblay,stoll,sparrow,sparkman,schweitzer,sasser,samples,roney,legg,heim,farias,colwell,christman,bratcher,winchester,upshaw,southerland,sorrell,sells,mccloskey,martindale,luttrell,loveless,lovejoy,linares,latimer,embry,coombs,bratton,bostick,venable,tuggle,toro,staggs,sandlin,jefferies,heckman,griffis,crayton,clem,browder,thorton,sturgill,sprouse,royer,rousseau,ridenour,pogue,perales,peeples,metzler,mesa,mccutcheon,mcbee,hornsby,heffner,corrigan,armijo,plante,peyton,paredes,macklin,hussey,hodgson,granados,frias,becnel,batten,almanza,turney,teal,sturgeon,meeker,mcdaniels,limon,keeney,hutto,holguin,gorham,fishman,fierro,blanchette,rodrigue,reddy,osburn,oden,lerma,kirkwood,keefer,haugen,hammett,chalmers,brinkman,baumgartner,zhang,valerio,tellez,steffen,shumate,sauls,ripley,kemper,guffey,evers,craddock,carvalho,blaylock,banuelos,balderas,wheaton,turnbull,shuman,pointer,mosier,mccue,ligon,kozlowski,johansen,ingle,herr,briones,snipes,rickman,pipkin,pantoja,orosco,moniz,lawless,kunkel,hibbard,galarza,enos,bussey,schott,salcido,perreault,mcdougal,mccool,haight,garris,easton,conyers,atherton,wimberly,utley,spellman,smithson,slagle,ritchey,rand,petit,osullivan,oaks,nutt,mcvay,mccreary,mayhew,knoll,jewett,harwood,cardoza,ashe,arriaga,zeller,wirth,whitmire,stauffer,rountree,redden,mccaffrey,martz,larose,langdon,humes,gaskin,faber,devito,cass,almond,wingfield,wingate,villareal,tyner,smothers,severson,reno,pennell,maupin,leighton,janssen,hassell,hallman,halcomb,folse,fitzsimmons,fahey,cranford,bolen,battles,battaglia,wooldridge,trask,rosser,regalado,mcewen,keefe,fuqua,echevarria,caro,boynton,andrus,viera,vanmeter,taber,spradlin,seibert,provost,prentice,oliphant,laporte,hwang,hatchett,hass,greiner,freedman,covert,chilton,byars,wiese,venegas,swank,shrader,roberge,mullis,mortensen,mccune,marlowe,kirchner,keck,isaacson,hostetler,halverson,gunther,griswold,fenner,durden,blackwood,ahrens,sawyers,savoy,nabors,mcswain,mackay,lavender,lash,labbe,jessup,fullerton,cruse,crittenden,correia,centeno,caudle,canady,callender,alarcon,ahern,winfrey,tribble,salley,roden,musgrove,minnick,fortenberry,carrion,bunting,batiste,whited,underhill,stillwell,rauch,pippin,perrin,messenger,mancini,lister,kinard,hartmann,fleck,wilt,treadway,thornhill,spalding,rafferty,pitre,patino,ordonez,linkous,kelleher,homan,galbraith,feeney,curtin,coward,camarillo,buss,bunnell,bolt,beeler,autry,alcala,witte,wentz,stidham,shively,nunley,meacham,martins,lemke,lefebvre,hynes,horowitz,hoppe,holcombe,dunne,derr,cochrane,brittain,bedard,beauregard,torrence,strunk,soria,simonson,shumaker,scoggins,oconner,moriarty,kuntz,ives,hutcheson,horan,hales,garmon,fitts,bohn,atchison,wisniewski,vanwinkle,sturm,sallee,prosser,moen,lundberg,kunz,kohl,keane,jorgenson,jaynes,funderburk,freed,durr,creamer,cosgrove,batson,vanhoose,thomsen,teeter,smyth,redmon,orellana,maness,heflin,goulet,frick,forney,bunker,asbury,aguiar,talbott,southard,mowery,mears,lemmon,krieger,hickson,elston,duong,delgadillo,dayton,dasilva,conaway,catron,bruton,bradbury,bordelon,bivins,bittner,bergstrom,beals,abell,whelan,tejada,pulley,pino,norfleet,nealy,maes,loper,gatewood,frierson,freund,finnegan,cupp,covey,catalano,boehm,bader,yoon,walston,tenney,sipes,rawlins,medlock,mccaskill,mccallister,marcotte,maclean,hughey,henke,harwell,gladney,gilson,chism,caskey,brandenburg,baylor,villasenor,veal,thatcher,stegall,petrie,nowlin,navarrete,lombard,loftin,lemaster,kroll,kovach,kimbrell,kidwell,hershberger,fulcher,cantwell,bustos,boland,bobbitt,binkley,wester,weis,verdin,tong,tiller,sisco,sharkey,seymore,rosenbaum,rohr,quinonez,pinkston,malley,logue,lessard,lerner,lebron,krauss,klinger,halstead,haller,getz,burrow,alger,shores,pfeifer,perron,nelms,munn,mcmaster,mckenney,manns,knudson,hutchens,huskey,goebel,flagg,cushman,click,castellano,carder,bumgarner,wampler,spinks,robson,neel,mcreynolds,mathias,maas,loera,jenson,florez,coons,buckingham,brogan,berryman,wilmoth,wilhite,thrash,shephard,seidel,schulze,roldan,pettis,obryan,maki,mackie,hatley,frazer,fiore,chesser,bottoms,bisson,benefield,allman,wilke,trudeau,timm,shifflett,mundy,milliken,mayers,leake,kohn,huntington,horsley,hermann,guerin,fryer,frizzell,foret,flemming,fife,criswell,carbajal,bozeman,boisvert,angulo,wallen,tapp,silvers,ramsay,oshea,orta,moll,mckeever,mcgehee,linville,kiefer,ketchum,howerton,groce,gass,fusco,corbitt,betz,bartels,amaral,aiello,weddle,sperry,seiler,runyan,raley,overby,osteen,olds,mckeown,matney,lauer,lattimore,hindman,hartwell,fredrickson,fredericks,espino,clegg,carswell,cambell,burkholder,woodbury,welker,totten,thornburg,theriault,stitt,stamm,stackhouse,scholl,saxon,rife,razo,quinlan,pinkerton,olivo,nesmith,nall,mattos,lafferty,justus,giron,geer,fielder,drayton,dortch,conners,conger,boatwright,billiot,barden,armenta,tibbetts,steadman,slattery,rinaldi,raynor,pinckney,pettigrew,milne,matteson,halsey,gonsalves,fellows,durand,desimone,cowley,cowles,brill,barham,barela,barba,ashmore,withrow,valenti,tejeda,spriggs,sayre,salerno,peltier,peel,merriman,matheson,lowman,lindstrom,hyland,giroux,earls,dugas,dabney,collado,briseno,baxley,whyte,wenger,vanover,vanburen,thiel,schindler,schiller,rigby,pomeroy,passmore,marble,manzo,mahaffey,lindgren,laflamme,greathouse,fite,calabrese,bayne,yamamoto,wick,townes,thames,reinhart,peeler,naranjo,montez,mcdade,mast,markley,marchand,leeper,kellum,hudgens,hennessey,hadden,gainey,coppola,borrego,bolling,beane,ault,slaton,pape,null,mulkey,lightner,langer,hillard,ethridge,enright,derosa,baskin,weinberg,turman,somerville,pardo,noll,lashley,ingraham,hiller,hendon,glaze,cothran,cooksey,conte,carrico,abner,wooley,swope,summerlin,sturgis,sturdivant,stott,spurgeon,spillman,speight,roussel,popp,nutter,mckeon,mazza,magnuson,lanning,kozak,jankowski,heyward,forster,corwin,callaghan,bays,wortham,usher,theriot,sayers,sabo,poling,loya,lieberman,laroche,labelle,howes,harr,garay,fogarty,everson,durkin,dominquez,chaves,chambliss,witcher,vieira,vandiver,terrill,stoker,schreiner,moorman,liddell,lawhorn,krug,irons,hylton,hollenbeck,herrin,hembree,goolsby,goodin,gilmer,foltz,dinkins,daughtry,caban,brim,briley,bilodeau,wyant,vergara,tallent,swearingen,stroup,scribner,quillen,pitman,mccants,maxfield,martinson,holtz,flournoy,brookins,brody,baumgardner,straub,sills,roybal,roundtree,oswalt,mcgriff,mcdougall,mccleary,maggard,gragg,gooding,godinez,doolittle,donato,cowell,cassell,bracken,appel,zambrano,reuter,perea,nakamura,monaghan,mickens,mcclinton,mcclary,marler,kish,judkins,gilbreath,freese,flanigan,felts,erdmann,dodds,chew,brownell,boatright,barreto,slayton,sandberg,saldivar,pettway,odum,narvaez,moultrie,montemayor,merrell,lees,keyser,hoke,hardaway,hannan,gilbertson,fogg,dumont,deberry,coggins,buxton,bucher,broadnax,beeson,araujo,appleton,amundson,aguayo,ackley,yocum,worsham,shivers,sanches,sacco,robey,rhoden,pender,ochs,mccurry,madera,luong,knotts,jackman,heinrich,hargrave,gault,comeaux,chitwood,caraway,boettcher,bernhardt,barrientos,zink,wickham,whiteman,thorp,stillman,settles,schoonover,roque,riddell,pilcher,phifer,novotny,macleod,hardee,haase,grider,doucette,clausen,bevins,beamon,badillo,tolley,tindall,soule,snook,seale,pinkney,pellegrino,nowell,nemeth,mondragon,mclane,lundgren,ingalls,hudspeth,hixson,gearhart,furlong,downes,dibble,deyoung,cornejo,camara,brookshire,boyette,wolcott,surratt,sellars,segal,salyer,reeve,rausch,labonte,haro,gower,freeland,fawcett,eads,driggers,donley,collett,bromley,boatman,ballinger,baldridge,volz,trombley,stonge,shanahan,rivard,rhyne,pedroza,matias,jamieson,hedgepeth,hartnett,estevez,eskridge,denman,chiu,chinn,catlett,carmack,buie,bechtel,beardsley,bard,ballou,ulmer,skeen,robledo,rincon,reitz,piazza,munger,moten,mcmichael,loftus,ledet,kersey,groff,fowlkes,crumpton,clouse,bettis,villagomez,timmerman,strom,santoro,roddy,penrod,musselman,macpherson,leboeuf,harless,haddad,guido,golding,fulkerson,fannin,dulaney,dowdell,cottle,ceja,cate,bosley,benge,albritton,voigt,trowbridge,soileau,seely,rohde,pearsall,paulk,orth,nason,mota,mcmullin,marquardt,madigan,hoag,gillum,gabbard,fenwick,danforth,cushing,cress,creed,cazares,bettencourt,barringer,baber,stansberry,schramm,rutter,rivero,oquendo,necaise,mouton,montenegro,miley,mcgough,marra,macmillan,lamontagne,jasso,horst,hetrick,heilman,gaytan,gall,fortney,dingle,desjardins,dabbs,burbank,brigham,breland,beaman,arriola,yarborough,wallin,toscano,stowers,reiss,pichardo,orton,michels,mcnamee,mccrory,leatherman,kell,keister,horning,hargett,guay,ferro,deboer,dagostino,carper,blanks,beaudry,towle,tafoya,stricklin,strader,soper,sonnier,sigmon,schenk,saddler,pedigo,mendes,lunn,lohr,lahr,kingsbury,jarman,hume,holliman,hofmann,haworth,harrelson,hambrick,flick,edmunds,dacosta,crossman,colston,chaplin,carrell,budd,weiler,waits,valentino,trantham,tarr,solorio,roebuck,powe,plank,pettus,pagano,mink,luker,leathers,joslin,hartzell,gambrell,cepeda,carty,caputo,brewington,bedell,ballew,applewhite,warnock,walz,urena,tudor,reel,pigg,parton,mickelson,meagher,mclellan,mcculley,mandel,leech,lavallee,kraemer,kling,kipp,kehoe,hochstetler,harriman,gregoire,grabowski,gosselin,gammon,fancher,edens,desai,brannan,armendariz,woolsey,whitehouse,whetstone,ussery,towne,testa,tallman,studer,strait,steinmetz,sorrells,sauceda,rolfe,paddock,mitchem,mcginn,mccrea,lovato,hazen,gilpin,gaynor,fike,devoe,delrio,curiel,burkhardt,bode,backus,zinn,watanabe,wachter,vanpelt,turnage,shaner,schroder,sato,riordan,quimby,portis,natale,mckoy,mccown,kilmer,hotchkiss,hesse,halbert,gwinn,godsey,delisle,chrisman,canter,arbogast,angell,acree,yancy,woolley,wesson,weatherspoon,trainor,stockman,spiller,sipe,rooks,reavis,propst,porras,neilson,mullens,loucks,llewellyn,kumar,koester,klingensmith,kirsch,kester,honaker,hodson,hennessy,helmick,garrity,garibay,drain,casarez,callis,botello,aycock,avant,wingard,wayman,tully,theisen,szymanski,stansbury,segovia,rainwater,preece,pirtle,padron,mincey,mckelvey,mathes,larrabee,kornegay,klug,ingersoll,hecht,germain,eggers,dykstra,deering,decoteau,deason,dearing,cofield,carrigan,bonham,bahr,aucoin,appleby,almonte,yager,womble,wimmer,weimer,vanderpool,stancil,sprinkle,romine,remington,pfaff,peckham,olivera,meraz,maze,lathrop,koehn,hazelton,halvorson,hallock,haddock,ducharme,dehaven,caruthers,brehm,bosworth,bost,bias,beeman,basile,bane,aikens,wold,walther,tabb,suber,strawn,stocker,shirey,schlosser,riedel,rembert,reimer,pyles,peele,merriweather,letourneau,latta,kidder,hixon,hillis,hight,herbst,henriquez,haygood,hamill,gabel,fritts,eubank,dawes,correll,bushey,buchholz,brotherton,botts,barnwell,auger,atchley,westphal,veilleux,ulloa,stutzman,shriver,ryals,pilkington,moyers,marrs,mangrum,maddux,lockard,laing,kuhl,harney,hammock,hamlett,felker,doerr,depriest,carrasquillo,carothers,bogle,bischoff,bergen,albanese,wyckoff,vermillion,vansickle,thibault,tetreault,stickney,shoemake,ruggiero,rawson,racine,philpot,paschal,mcelhaney,mathison,legrand,lapierre,kwan,kremer,jiles,hilbert,geyer,faircloth,ehlers,egbert,desrosiers,dalrymple,cotten,cashman,cadena,boardman,alcaraz,wyrick,therrien,tankersley,strickler,puryear,plourde,pattison,pardue,mcginty,mcevoy,landreth,kuhns,koon,hewett,giddens,emerick,eades,deangelis,cosme,ceballos,birdsong,benham,bemis,armour,anguiano,welborn,tsosie,storms,shoup,sessoms,samaniego,rood,rojo,rhinehart,raby,northcutt,myer,munguia,morehouse,mcdevitt,mallett,lozada,lemoine,kuehn,hallett,grim,gillard,gaylor,garman,gallaher,feaster,faris,darrow,dardar,coney,carreon,braithwaite,boylan,boyett,bixler,bigham,benford,barragan,barnum,zuber,wyche,westcott,vining,stoltzfus,simonds,shupe,sabin,ruble,rittenhouse,richman,perrone,mulholland,millan,lomeli,kite,jemison,hulett,holler,hickerson,herold,hazelwood,griffen,gause,forde,eisenberg,dilworth,charron,chaisson,bristow,breunig,brace,boutwell,bentz,belk,bayless,batchelder,baran,baeza,zimmermann,weathersby,volk,toole,theis,tedesco,searle,schenck,satterwhite,ruelas,rankins,partida,nesbit,morel,menchaca,levasseur,kaylor,johnstone,hulse,hollar,hersey,harrigan,harbison,guyer,gish,giese,gerlach,geller,geisler,falcone,elwell,doucet,deese,darr,corder,chafin,byler,bussell,burdett,brasher,bowe,bellinger,bastian,barner,alleyne,wilborn,weil,wegner,tatro,spitzer,smithers,schoen,resendez,parisi,overman,obrian,mudd,mahler,maggio,lindner,lalonde,lacasse,laboy,killion,kahl,jessen,jamerson,houk,henshaw,gustin,graber,durst,duenas,davey,cundiff,conlon,colunga,coakley,chiles,capers,buell,bricker,bissonnette,bartz,bagby,zayas,volpe,treece,toombs,thom,terrazas,swinney,skiles,silveira,shouse,senn,ramage,moua,langham,kyles,holston,hoagland,herd,feller,denison,carraway,burford,bickel,ambriz,abercrombie,yamada,weidner,waddle,verduzco,thurmond,swindle,schrock,sanabria,rosenberger,probst,peabody,olinger,nazario,mccafferty,mcbroom,mcabee,mazur,matherne,mapes,leverett,killingsworth,heisler,griego,gosnell,frankel,franke,ferrante,fenn,ehrlich,christopherso,chasse,caton,brunelle,bloomfield,babbitt,azevedo,abramson,ables,abeyta,youmans,wozniak,wainwright,stowell,smitherman,samuelson,runge,rothman,rosenfeld,peake,owings,olmos,munro,moreira,leatherwood,larkins,krantz,kovacs,kizer,kindred,karnes,jaffe,hubbell,hosey,hauck,goodell,erdman,dvorak,doane,cureton,cofer,buehler,bierman,berndt,banta,abdullah,warwick,waltz,turcotte,torrey,stith,seger,sachs,quesada,pinder,peppers,pascual,paschall,parkhurst,ozuna,oster,nicholls,lheureux,lavalley,kimura,jablonski,haun,gourley,gilligan,croy,cotto,cargill,burwell,burgett,buckman,booher,adorno,wrenn,whittemore,urias,szabo,sayles,saiz,rutland,rael,pharr,pelkey,ogrady,nickell,musick,moats,mather,massa,kirschner,kieffer,kellar,hendershot,gott,godoy,gadson,furtado,fiedler,erskine,dutcher,dever,daggett,chevalier,brake,ballesteros,amerson,wingo,waldon,trott,silvey,showers,schlegel,ritz,pepin,pelayo,parsley,palermo,moorehead,mchale,lett,kocher,kilburn,iglesias,humble,hulbert,huckaby,hartford,hardiman,gurney,grigg,grasso,goings,fillmore,farber,depew,dandrea,cowen,covarrubias,burrus,bracy,ardoin,thompkins,standley,radcliffe,pohl,persaud,parenteau,pabon,newson,newhouse,napolitano,mulcahy,malave,keim,hooten,hernandes,heffernan,hearne,greenleaf,glick,fuhrman,fetter,faria,dishman,dickenson,crites,criss,clapper,chenault,castor,casto,bugg,bove,bonney,anderton,allgood,alderson,woodman,warrick,toomey,tooley,tarrant,summerville,stebbins,sokol,searles,schutz,schumann,scheer,remillard,raper,proulx,palmore,monroy,messier,melo,melanson,mashburn,manzano,lussier,jenks,huneycutt,hartwig,grimsley,fulk,fielding,fidler,engstrom,eldred,dantzler,crandell,calder,brumley,breton,brann,bramlett,boykins,bianco,bancroft,almaraz,alcantar,whitmer,whitener,welton,vineyard,rahn,paquin,mizell,mcmillin,mckean,marston,maciel,lundquist,liggins,lampkin,kranz,koski,kirkham,jiminez,hazzard,harrod,graziano,grammer,gendron,garrido,fordham,englert,dryden,demoss,deluna,crabb,comeau,brummett,blume,benally,wessel,vanbuskirk,thorson,stumpf,stockwell,reams,radtke,rackley,pelton,niemi,newland,nelsen,morrissette,miramontes,mcginley,mccluskey,marchant,luevano,lampe,lail,jeffcoat,infante,hinman,gaona,eady,desmarais,decosta,dansby,cisco,choe,breckenridge,bostwick,borg,bianchi,alberts,wilkie,whorton,vargo,tait,soucy,schuman,ousley,mumford,lippert,leath,lavergne,laliberte,kirksey,kenner,johnsen,izzo,hiles,gullett,greenwell,gaspar,galbreath,gaitan,ericson,delapaz,croom,cottingham,clift,bushnell,bice,beason,arrowood,waring,voorhees,truax,shreve,shockey,schatz,sandifer,rubino,rozier,roseberry,pieper,peden,nester,nave,murphey,malinowski,macgregor,lafrance,kunkle,kirkman,hipp,hasty,haddix,gervais,gerdes,gamache,fouts,fitzwater,dillingham,deming,deanda,cedeno,cannady,burson,bouldin,arceneaux,woodhouse,whitford,wescott,welty,weigel,torgerson,toms,surber,sunderland,sterner,setzer,riojas,pumphrey,puga,metts,mcgarry,mccandless,magill,lupo,loveland,llamas,leclerc,koons,kahler,huss,holbert,heintz,haupt,grimmett,gaskill,ellingson,dorr,dingess,deweese,desilva,crossley,cordeiro,converse,conde,caldera,cairns,burmeister,burkhalter,brawner,bott,youngs,vierra,valladares,shrum,shropshire,sevilla,rusk,rodarte,pedraza,nino,merino,mcminn,markle,mapp,lajoie,koerner,kittrell,kato,hyder,hollifield,heiser,hazlett,greenwald,fant,eldredge,dreher,delafuente,cravens,claypool,beecher,aronson,alanis,worthen,wojcik,winger,whitacre,valverde,valdivia,troupe,thrower,swindell,suttles,stroman,spires,slate,shealy,sarver,sartin,sadowski,rondeau,rolon,rascon,priddy,paulino,nolte,munroe,molloy,mciver,lykins,loggins,lenoir,klotz,kempf,hupp,hollowell,hollander,haynie,harkness,harker,gottlieb,frith,eddins,driskell,doggett,densmore,charette,cassady,byrum,burcham,buggs,benn,whitted,warrington,vandusen,vaillancourt,steger,siebert,scofield,quirk,purser,plumb,orcutt,nordstrom,mosely,michalski,mcphail,mcdavid,mccraw,marchese,mannino,lefevre,largent,lanza,kress,isham,hunsaker,hoch,hildebrandt,guarino,grijalva,graybill,fick,ewell,ewald,cusick,crumley,coston,cathcart,carruthers,bullington,bowes,blain,blackford,barboza,yingling,wert,weiland,varga,silverstein,sievers,shuster,shumway,runnels,rumsey,renfroe,provencher,polley,mohler,middlebrooks,kutz,koster,groth,glidden,fazio,deen,chipman,chenoweth,champlin,cedillo,carrero,carmody,buckles,brien,boutin,bosch,berkowitz,altamirano,wilfong,wiegand,waites,truesdale,toussaint,tobey,tedder,steelman,sirois,schnell,robichaud,richburg,plumley,pizarro,piercy,ortego,oberg,neace,mertz,mcnew,matta,lapp,lair,kibler,howlett,hollister,hofer,hatten,hagler,falgoust,engelhardt,eberle,dombrowski,dinsmore,daye,casares,braud,balch,autrey,wendel,tyndall,strobel,stoltz,spinelli,serrato,reber,rathbone,palomino,nickels,mayle,mathers,mach,loeffler,littrell,levinson,leong,lemire,lejeune,lazo,lasley,koller,kennard,hoelscher,hintz,hagerman,greaves,fore,eudy,engler,corrales,cordes,brunet,bidwell,bennet,tyrrell,tharpe,swinton,stribling,southworth,sisneros,savoie,samons,ruvalcaba,ries,ramer,omara,mosqueda,millar,mcpeak,macomber,luckey,litton,lehr,lavin,hubbs,hoard,hibbs,hagans,futrell,exum,evenson,culler,carbaugh,callen,brashear,bloomer,blakeney,bigler,addington,woodford,unruh,tolentino,sumrall,stgermain,smock,sherer,rayner,pooler,oquinn,nero,mcglothlin,linden,kowal,kerrigan,ibrahim,harvell,hanrahan,goodall,geist,fussell,fung,ferebee,eley,eggert,dorsett,dingman,destefano,colucci,clemmer,burnell,brumbaugh,boddie,berryhill,avelar,alcantara,winder,winchell,vandenberg,trotman,thurber,thibeault,stlouis,stilwell,sperling,shattuck,sarmiento,ruppert,rumph,renaud,randazzo,rademacher,quiles,pearman,palomo,mercurio,lowrey,lindeman,lawlor,larosa,lander,labrecque,hovis,holifield,henninger,hawkes,hartfield,hann,hague,genovese,garrick,fudge,frink,eddings,dinh,cribbs,calvillo,bunton,brodeur,bolding,blanding,agosto,zahn,wiener,trussell,tello,teixeira,speck,sharma,shanklin,sealy,scanlan,santamaria,roundy,robichaux,ringer,rigney,prevost,polson,nord,moxley,medford,mccaslin,mcardle,macarthur,lewin,lasher,ketcham,keiser,heine,hackworth,grose,grizzle,gillman,gartner,frazee,fleury,edson,edmonson,derry,cronk,conant,burress,burgin,broom,brockington,bolick,boger,birchfield,billington,baily,bahena,armbruster,anson,yoho,wilcher,tinney,timberlake,thielen,sutphin,stultz,sikora,serra,schulman,scheffler,santillan,rego,preciado,pinkham,mickle,lomas,lizotte,lent,kellerman,keil,johanson,hernadez,hartsfield,haber,gorski,farkas,eberhardt,duquette,delano,cropper,cozart,cockerham,chamblee,cartagena,cahoon,buzzell,brister,brewton,blackshear,benfield,aston,ashburn,arruda,wetmore,weise,vaccaro,tucci,sudduth,stromberg,stoops,showalter,shears,runion,rowden,rosenblum,riffle,renfrow,peres,obryant,leftwich,lark,landeros,kistler,killough,kerley,kastner,hoggard,hartung,guertin,govan,gatling,gailey,fullmer,fulford,flatt,esquibel,endicott,edmiston,edelstein,dufresne,dressler,dickman,chee,busse,bonnett,berard,yoshida,velarde,veach,vanhouten,vachon,tolson,tolman,tennyson,stites,soler,shutt,ruggles,rhone,pegues,neese,muro,moncrief,mefford,mcphee,mcmorris,mceachern,mcclurg,mansour,mader,leija,lecompte,lafountain,labrie,jaquez,heald,hash,hartle,gainer,frisby,farina,eidson,edgerton,dyke,durrett,duhon,cuomo,cobos,cervantez,bybee,brockway,borowski,binion,beery,arguello,amaro,acton,yuen,winton,wigfall,weekley,vidrine,vannoy,tardiff,shoop,shilling,schick,safford,prendergast,pilgrim,pellerin,osuna,nissen,nalley,moller,messner,messick,merrifield,mcguinness,matherly,marcano,mahone,lemos,lebrun,jara,hoffer,herren,hecker,haws,haug,gwin,gober,gilliard,fredette,favela,echeverria,downer,donofrio,desrochers,crozier,corson,bechtold,argueta,aparicio,zamudio,westover,westerman,utter,troyer,thies,tapley,slavin,shirk,sandler,roop,rimmer,raymer,radcliff,otten,moorer,millet,mckibben,mccutchen,mcavoy,mcadoo,mayorga,mastin,martineau,marek,madore,leflore,kroeger,kennon,jimerson,hostetter,hornback,hendley,hance,guardado,granado,gowen,goodale,flinn,fleetwood,fitz,durkee,duprey,dipietro,dilley,clyburn,brawley,beckley,arana,weatherby,vollmer,vestal,tunnell,trigg,tingle,takahashi,sweatt,storer,snapp,shiver,rooker,rathbun,poisson,perrine,perri,parmer,parke,pare,papa,palmieri,midkiff,mecham,mccomas,mcalpine,lovelady,lillard,lally,knopp,kile,kiger,haile,gupta,goldsberry,gilreath,fulks,friesen,franzen,flack,findlay,ferland,dreyer,dore,dennard,deckard,debose,crim,coulombe,chancey,cantor,branton,bissell,barns,woolard,witham,wasserman,spiegel,shoffner,scholz,ruch,rossman,petry,palacio,paez,neary,mortenson,millsap,miele,menke,mckim,mcanally,martines,lemley,larochelle,klaus,klatt,kaufmann,kapp,helmer,hedge,halloran,glisson,frechette,fontana,eagan,distefano,danley,creekmore,chartier,chaffee,carillo,burg,bolinger,berkley,benz,basso,bash,zelaya,woodring,witkowski,wilmot,wilkens,wieland,verdugo,urquhart,tsai,timms,swiger,swaim,sussman,pires,molnar,mcatee,lowder,loos,linker,landes,kingery,hufford,higa,hendren,hammack,hamann,gillam,gerhardt,edelman,delk,deans,curl,constantine,cleaver,claar,casiano,carruth,carlyle,brophy,bolanos,bibbs,bessette,beggs,baugher,bartel,averill,andresen,amin,adames,valente,turnbow,swink,sublett,stroh,stringfellow,ridgway,pugliese,poteat,ohare,neubauer,murchison,mingo,lemmons,kwon,kellam,kean,jarmon,hyden,hudak,hollinger,henkel,hemingway,hasson,hansel,halter,haire,ginsberg,gillispie,fogel,flory,etter,elledge,eckman,deas,currin,crafton,coomer,colter,claxton,bulter,braddock,bowyer,binns,bellows,baskerville,barros,ansley,woolf,wight,waldman,wadley,tull,trull,tesch,stouffer,stadler,slay,shubert,sedillo,santacruz,reinke,poynter,neri,neale,mowry,moralez,monger,mitchum,merryman,manion,macdougall,litchfield,levitt,lepage,lasalle,khoury,kavanagh,karns,ivie,huebner,hodgkins,halpin,garica,eversole,dutra,dunagan,duffey,dillman,dillion,deville,dearborn,damato,courson,coulson,burdine,bousquet,bonin,bish,atencio,westbrooks,wages,vaca,toner,tillis,swett,struble,stanfill,solorzano,slusher,sipple,silvas,shults,schexnayder,saez,rodas,rager,pulver,penton,paniagua,meneses,mcfarlin,mcauley,matz,maloy,magruder,lohman,landa,lacombe,jaimes,holzer,holst,heil,hackler,grundy,gilkey,farnham,durfee,dunton,dunston,duda,dews,craver,corriveau,conwell,colella,chambless,bremer,boutte,bourassa,blaisdell,backman,babineaux,audette,alleman,towner,taveras,tarango,sullins,suiter,stallard,solberg,schlueter,poulos,pimental,owsley,okelley,moffatt,metcalfe,meekins,medellin,mcglynn,mccowan,marriott,marable,lennox,lamoureux,koss,kerby,karp,isenberg,howze,hockenberry,highsmith,hallmark,gusman,greeley,giddings,gaudet,gallup,fleenor,eicher,edington,dimaggio,dement,demello,decastro,bushman,brundage,brooker,bourg,blackstock,bergmann,beaton,banister,argo,appling,wortman,watterson,villalpando,tillotson,tighe,sundberg,sternberg,stamey,shipe,seeger,scarberry,sattler,sain,rothstein,poteet,plowman,pettiford,penland,partain,pankey,oyler,ogletree,ogburn,moton,merkel,lucier,lakey,kratz,kinser,kershaw,josephson,imhoff,hendry,hammon,frisbie,frawley,fraga,forester,eskew,emmert,drennan,doyon,dandridge,cawley,carvajal,bracey,belisle,batey,ahner,wysocki,weiser,veliz,tincher,sansone,sankey,sandstrom,rohrer,risner,pridemore,pfeffer,persinger,peery,oubre,nowicki,musgrave,murdoch,mullinax,mccary,mathieu,livengood,kyser,klink,kimes,kellner,kavanaugh,kasten,imes,hoey,hinshaw,hake,gurule,grube,grillo,geter,gatto,garver,garretson,farwell,eiland,dunford,decarlo,corso,colman,collard,cleghorn,chasteen,cavender,carlile,calvo,byerly,brogdon,broadwater,breault,bono,bergin,behr,ballenger,amick,tamez,stiffler,steinke,simmon,shankle,schaller,salmons,sackett,saad,rideout,ratcliffe,ranson,plascencia,petterson,olszewski,olney,olguin,nilsson,nevels,morelli,montiel,monge,michaelson,mertens,mcchesney,mcalpin,mathewson,loudermilk,lineberry,liggett,kinlaw,kight,jost,hereford,hardeman,halpern,halliday,hafer,gaul,friel,freitag,forsberg,evangelista,doering,dicarlo,dendy,delp,deguzman,dameron,curtiss,cosper,cauthen,bradberry,bouton,bonnell,bixby,bieber,beveridge,bedwell,barhorst,bannon,baltazar,baier,ayotte,attaway,arenas,abrego,turgeon,tunstall,thaxton,tenorio,stotts,sthilaire,shedd,seabolt,scalf,salyers,ruhl,rowlett,robinett,pfister,perlman,pepe,parkman,nunnally,norvell,napper,modlin,mckellar,mcclean,mascarenas,leibowitz,ledezma,kuhlman,kobayashi,hunley,holmquist,hinkley,hazard,hartsell,gribble,gravely,fifield,eliason,doak,crossland,carleton,bridgeman,bojorquez,boggess,auten,woosley,whiteley,wexler,twomey,tullis,townley,standridge,santoyo,rueda,riendeau,revell,pless,ottinger,nigro,nickles,mulvey,menefee,mcshane,mcloughlin,mckinzie,markey,lockridge,lipsey,knisley,knepper,kitts,kiel,jinks,hathcock,godin,gallego,fikes,fecteau,estabrook,ellinger,dunlop,dudek,countryman,chauvin,chatham,bullins,brownfield,boughton,bloodworth,bibb,baucom,barbieri,aubin,armitage,alessi,absher,abbate,zito,woolery,wiggs,wacker,tynes,tolle,telles,tarter,swarey,strode,stockdale,stalnaker,spina,schiff,saari,risley,rameriz,rakes,pettaway,penner,paulus,palladino,omeara,montelongo,melnick,mehta,mcgary,mccourt,mccollough,marchetti,manzanares,lowther,leiva,lauderdale,lafontaine,kowalczyk,knighton,joubert,jaworski,huth,hurdle,housley,hackman,gulick,gordy,gilstrap,gehrke,gebhart,gaudette,foxworth,endres,dunkle,cimino,caddell,brauer,braley,bodine,blackmore,belden,backer,ayer,andress,wisner,vuong,valliere,twigg,tavarez,strahan,steib,staub,sowder,seiber,schutt,scharf,schade,rodriques,risinger,renshaw,rahman,presnell,piatt,nieman,nevins,mcilwain,mcgaha,mccully,mccomb,massengale,macedo,lesher,kearse,jauregui,husted,hudnall,holmberg,hertel,hardie,glidewell,frausto,fassett,dalessandro,dahlgren,corum,constantino,conlin,colquitt,colombo,claycomb,cardin,buller,boney,bocanegra,biggers,benedetto,araiza,andino,albin,zorn,werth,weisman,walley,vanegas,ulibarri,towe,tedford,teasley,suttle,steffens,stcyr,squire,singley,sifuentes,shuck,schram,sass,rieger,ridenhour,rickert,richerson,rayborn,rabe,raab,pendley,pastore,ordway,moynihan,mellott,mckissick,mcgann,mccready,mauney,marrufo,lenhart,lazar,lafave,keele,kautz,jardine,jahnke,jacobo,hord,hardcastle,hageman,giglio,gehring,fortson,duque,duplessis,dicken,derosier,deitz,dalessio,cram,castleman,candelario,callison,caceres,bozarth,biles,bejarano,bashaw,avina,armentrout,alverez,acord,waterhouse,vereen,vanlandingham,strawser,shotwell,severance,seltzer,schoonmaker,schock,schaub,schaffner,roeder,rodrigez,riffe,rasberry,rancourt,railey,quade,pursley,prouty,perdomo,oxley,osterman,nickens,murphree,mounts,merida,maus,mattern,masse,martinelli,mangan,lutes,ludwick,loney,laureano,lasater,knighten,kissinger,kimsey,kessinger,honea,hollingshead,hockett,heyer,heron,gurrola,gove,glasscock,gillett,galan,featherstone,eckhardt,duron,dunson,dasher,culbreth,cowden,cowans,claypoole,churchwell,chabot,caviness,cater,caston,callan,byington,burkey,boden,beckford,atwater,archambault,alvey,alsup,whisenant,weese,voyles,verret,tsang,tessier,sweitzer,sherwin,shaughnessy,revis,remy,prine,philpott,peavy,paynter,parmenter,ovalle,offutt,nightingale,newlin,nakano,myatt,muth,mohan,mcmillon,mccarley,mccaleb,maxson,marinelli,maley,liston,letendre,kain,huntsman,hirst,hagerty,gulledge,greenway,grajeda,gorton,goines,gittens,frederickson,fanelli,embree,eichelberger,dunkin,dixson,dillow,defelice,chumley,burleigh,borkowski,binette,biggerstaff,berglund,beller,audet,arbuckle,allain,alfano,youngman,wittman,weintraub,vanzant,vaden,twitty,stollings,standifer,sines,shope,scalise,saville,posada,pisano,otte,nolasco,mier,merkle,mendiola,melcher,mejias,mcmurry,mccalla,markowitz,manis,mallette,macfarlane,lough,looper,landin,kittle,kinsella,kinnard,hobart,helman,hellman,hartsock,halford,hage,gordan,glasser,gayton,gattis,gastelum,gaspard,frisch,fitzhugh,eckstein,eberly,dowden,despain,crumpler,crotty,cornelison,chouinard,chamness,catlin,cann,bumgardner,budde,branum,bradfield,braddy,borst,birdwell,bazan,banas,bade,arango,ahearn,addis,zumwalt,wurth,wilk,widener,wagstaff,urrutia,terwilliger,tart,steinman,staats,sloat,rives,riggle,revels,reichard,prickett,poff,pitzer,petro,pell,northrup,nicks,moline,mielke,maynor,mallon,magness,lingle,lindell,lieb,lesko,lebeau,lammers,lafond,kiernan,ketron,jurado,holmgren,hilburn,hayashi,hashimoto,harbaugh,guillot,gard,froehlich,feinberg,falco,dufour,drees,doney,diep,delao,daves,dail,crowson,coss,congdon,carner,camarena,butterworth,burlingame,bouffard,bloch,bilyeu,barta,bakke,baillargeon,avent,aquilar,zeringue,yarber,wolfson,vogler,voelker,truss,troxell,thrift,strouse,spielman,sistrunk,sevigny,schuller,schaaf,ruffner,routh,roseman,ricciardi,peraza,pegram,overturf,olander,odaniel,millner,melchor,maroney,machuca,macaluso,livesay,layfield,laskowski,kwiatkowski,kilby,hovey,heywood,hayman,havard,harville,haigh,hagood,grieco,glassman,gebhardt,fleischer,fann,elson,eccles,cunha,crumb,blakley,bardwell,abshire,woodham,wines,welter,wargo,varnado,tutt,traynor,swaney,stricker,stoffel,stambaugh,sickler,shackleford,selman,seaver,sansom,sanmiguel,royston,rourke,rockett,rioux,puleo,pitchford,nardi,mulvaney,middaugh,malek,leos,lathan,kujawa,kimbro,killebrew,houlihan,hinckley,herod,hepler,hamner,hammel,hallowell,gonsalez,gingerich,gambill,funkhouser,fricke,fewell,falkner,endsley,dulin,drennen,deaver,dambrosio,chadwell,castanon,burkes,brune,brisco,brinker,bowker,boldt,berner,beaumont,beaird,bazemore,barrick,albano,younts,wunderlich,weidman,vanness,toland,theobald,stickler,steiger,stanger,spies,spector,sollars,smedley,seibel,scoville,saito,rummel,rowles,rouleau,roos,rogan,roemer,ream,raya,purkey,priester,perreira,penick,paulin,parkins,overcash,oleson,neves,muldrow,minard,midgett,michalak,melgar,mcentire,mcauliffe,marte,lydon,lindholm,leyba,langevin,lagasse,lafayette,kesler,kelton,kaminsky,jaggers,humbert,huck,howarth,hinrichs,higley,gupton,guimond,gravois,giguere,fretwell,fontes,feeley,faucher,eichhorn,ecker,earp,dole,dinger,derryberry,demars,deel,copenhaver,collinsworth,colangelo,cloyd,claiborne,caulfield,carlsen,calzada,caffey,broadus,brenneman,bouie,bodnar,blaney,blanc,beltz,behling,barahona,yockey,winkle,windom,wimer,villatoro,trexler,teran,taliaferro,sydnor,swinson,snelling,smtih,simonton,simoneaux,simoneau,sherrer,seavey,scheel,rushton,rupe,ruano,rippy,reiner,reiff,rabinowitz,quach,penley,odle,nock,minnich,mckown,mccarver,mcandrew,longley,laux,lamothe,lafreniere,kropp,krick,kates,jepson,huie,howse,howie,henriques,haydon,haught,hatter,hartzog,harkey,grimaldo,goshorn,gormley,gluck,gilroy,gillenwater,giffin,fluker,feder,eyre,eshelman,eakins,detwiler,delrosario,davisson,catalan,canning,calton,brammer,botelho,blakney,bartell,averett,askins,aker,witmer,winkelman,widmer,whittier,weitzel,wardell,wagers,ullman,tupper,tingley,tilghman,talton,simard,seda,scheller,sala,rundell,rost,ribeiro,rabideau,primm,pinon,peart,ostrom,ober,nystrom,nussbaum,naughton,murr,moorhead,monti,monteiro,melson,meissner,mclin,mcgruder,marotta,makowski,majewski,madewell,lunt,lukens,leininger,lebel,lakin,kepler,jaques,hunnicutt,hungerford,hoopes,hertz,heins,halliburton,grosso,gravitt,glasper,gallman,gallaway,funke,fulbright,falgout,eakin,dostie,dorado,dewberry,derose,cutshall,crampton,costanzo,colletti,cloninger,claytor,chiang,campagna,burd,brokaw,broaddus,bretz,brainard,binford,bilbrey,alpert,aitken,ahlers,zajac,woolfolk,witten,windle,wayland,tramel,tittle,talavera,suter,straley,specht,sommerville,soloman,skeens,sigman,sibert,shavers,schuck,schmit,sartain,sabol,rosenblatt,rollo,rashid,rabb,polston,nyberg,northrop,navarra,muldoon,mikesell,mcdougald,mcburney,mariscal,lozier,lingerfelt,legere,latour,lagunas,lacour,kurth,killen,kiely,kayser,kahle,isley,huertas,hower,hinz,haugh,gumm,galicia,fortunato,flake,dunleavy,duggins,doby,digiovanni,devaney,deltoro,cribb,corpuz,coronel,coen,charbonneau,caine,burchette,blakey,blakemore,bergquist,beene,beaudette,bayles,ballance,bakker,bailes,asberry,arwood,zucker,willman,whitesell,wald,walcott,vancleave,trump,strasser,simas,shick,schleicher,schaal,saleh,rotz,resnick,rainer,partee,ollis,oller,oday,noles,munday,mong,millican,merwin,mazzola,mansell,magallanes,llanes,lewellen,lepore,kisner,keesee,jeanlouis,ingham,hornbeck,hawn,hartz,harber,haffner,gutshall,guth,grays,gowan,finlay,finkelstein,eyler,enloe,dungan,diez,dearman,cull,crosson,chronister,cassity,campion,callihan,butz,breazeale,blumenthal,berkey,batty,batton,arvizu,alderete,aldana,albaugh,abernethy,wolter,wille,tweed,tollefson,thomasson,teter,testerman,sproul,spates,southwick,soukup,skelly,senter,sealey,sawicki,sargeant,rossiter,rosemond,repp,pifer,ormsby,nickelson,naumann,morabito,monzon,millsaps,millen,mcelrath,marcoux,mantooth,madson,macneil,mackinnon,louque,leister,lampley,kushner,krouse,kirwan,jessee,janson,jahn,jacquez,islas,hutt,holladay,hillyer,hepburn,hensel,harrold,gingrich,geis,gales,fults,finnell,ferri,featherston,epley,ebersole,eames,dunigan,drye,dismuke,devaughn,delorenzo,damiano,confer,collum,clower,clow,claussen,clack,caylor,cawthon,casias,carreno,bluhm,bingaman,bewley,belew,beckner,auld,amey,wolfenbarger,wilkey,wicklund,waltman,villalba,valero,valdovinos,ullrich,tyus,twyman,trost,tardif,tanguay,stripling,steinbach,shumpert,sasaki,sappington,sandusky,reinhold,reinert,quijano,placencia,pinkard,phinney,perrotta,pernell,parrett,oxendine,owensby,orman,nuno,mori,mcroberts,mcneese,mckamey,mccullum,markel,mardis,maines,lueck,lubin,lefler,leffler,larios,labarbera,kershner,josey,jeanbaptiste,izaguirre,hermosillo,haviland,hartshorn,hafner,ginter,getty,franck,fiske,dufrene,doody,davie,dangerfield,dahlberg,cuthbertson,crone,coffelt,chidester,chesson,cauley,caudell,cantara,campo,caines,bullis,bucci,brochu,bogard,bickerstaff,benning,arzola,antonelli,adkinson,zellers,wulf,worsley,woolridge,whitton,westerfield,walczak,vassar,truett,trueblood,trawick,townsley,topping,tobar,telford,steverson,stagg,sitton,sill,sergent,schoenfeld,sarabia,rutkowski,rubenstein,rigdon,prentiss,pomerleau,plumlee,philbrick,patnode,oloughlin,obregon,nuss,morell,mikell,mele,mcinerney,mcguigan,mcbrayer,lollar,kuehl,kinzer,kamp,joplin,jacobi,howells,holstein,hedden,hassler,harty,halle,greig,gouge,goodrum,gerhart,geier,geddes,gast,forehand,ferree,fendley,feltner,esqueda,encarnacion,eichler,egger,edmundson,eatmon,doud,donohoe,donelson,dilorenzo,digiacomo,diggins,delozier,dejong,danford,crippen,coppage,cogswell,clardy,cioffi,cabe,brunette,bresnahan,blomquist,blackstone,biller,bevis,bevan,bethune,benbow,baty,basinger,balcom,andes,aman,aguero,adkisson,yandell,wilds,whisenhunt,weigand,weeden,voight,villar,trottier,tillett,suazo,setser,scurry,schuh,schreck,schauer,samora,roane,rinker,reimers,ratchford,popovich,parkin,natal,melville,mcbryde,magdaleno,loehr,lockman,lingo,leduc,larocca,lamere,laclair,krall,korte,koger,jalbert,hughs,higbee,henton,heaney,haith,gump,greeson,goodloe,gholston,gasper,gagliardi,fregoso,farthing,fabrizio,ensor,elswick,elgin,eklund,eaddy,drouin,dorton,dizon,derouen,deherrera,davy,dampier,cullum,culley,cowgill,cardoso,cardinale,brodsky,broadbent,brimmer,briceno,branscum,bolyard,boley,bennington,beadle,baur,ballentine,azure,aultman,arciniega,aguila,aceves,yepez,woodrum,wethington,weissman,veloz,trusty,troup,trammel,tarpley,stivers,steck,sprayberry,spraggins,spitler,spiers,sohn,seagraves,schiffman,rudnick,rizo,riccio,rennie,quackenbush,puma,plott,pearcy,parada,paiz,munford,moskowitz,mease,mcnary,mccusker,lozoya,longmire,loesch,lasky,kuhlmann,krieg,koziol,kowalewski,konrad,kindle,jowers,jolin,jaco,horgan,hine,hileman,hepner,heise,heady,hawkinson,hannigan,haberman,guilford,grimaldi,garton,gagliano,fruge,follett,fiscus,ferretti,ebner,easterday,eanes,dirks,dimarco,depalma,deforest,cruce,craighead,christner,candler,cadwell,burchell,buettner,brinton,brazier,brannen,brame,bova,bomar,blakeslee,belknap,bangs,balzer,athey,armes,alvis,alverson,alvardo,yeung,wheelock,westlund,wessels,volkman,threadgill,thelen,tague,symons,swinford,sturtevant,straka,stier,stagner,segarra,seawright,rutan,roux,ringler,riker,ramsdell,quattlebaum,purifoy,poulson,permenter,peloquin,pasley,pagel,osman,obannon,nygaard,newcomer,munos,motta,meadors,mcquiston,mcniel,mcmann,mccrae,mayne,matte,legault,lechner,kucera,krohn,kratzer,koopman,jeske,horrocks,hock,hibbler,hesson,hersh,harvin,halvorsen,griner,grindle,gladstone,garofalo,frampton,forbis,eddington,diorio,dingus,dewar,desalvo,curcio,creasy,cortese,cordoba,connally,cluff,cascio,capuano,canaday,calabro,bussard,brayton,borja,bigley,arnone,arguelles,acuff,zamarripa,wooton,widner,wideman,threatt,thiele,templin,teeters,synder,swint,swick,sturges,stogner,stedman,spratt,siegfried,shetler,scull,savino,sather,rothwell,rook,rone,rhee,quevedo,privett,pouliot,poche,pickel,petrillo,pellegrini,peaslee,partlow,otey,nunnery,morelock,morello,meunier,messinger,mckie,mccubbin,mccarron,lerch,lavine,laverty,lariviere,lamkin,kugler,krol,kissel,keeter,hubble,hickox,hetzel,hayner,hagy,hadlock,groh,gottschalk,goodsell,gassaway,garrard,galligan,firth,fenderson,feinstein,etienne,engleman,emrick,ellender,drews,doiron,degraw,deegan,dart,crissman,corr,cookson,coil,cleaves,charest,chapple,chaparro,castano,carpio,byer,bufford,bridgewater,bridgers,brandes,borrero,bonanno,aube,ancheta,abarca,abad,wooster,wimbush,willhite,willams,wigley,weisberg,wardlaw,vigue,vanhook,unknow,torre,tasker,tarbox,strachan,slover,shamblin,semple,schuyler,schrimsher,sayer,salzman,rubalcava,riles,reneau,reichel,rayfield,rabon,pyatt,prindle,poss,polito,plemmons,pesce,perrault,pereyra,ostrowski,nilsen,niemeyer,munsey,mundell,moncada,miceli,meader,mcmasters,mckeehan,matsumoto,marron,marden,lizarraga,lingenfelter,lewallen,langan,lamanna,kovac,kinsler,kephart,keown,kass,kammerer,jeffreys,hysell,hosmer,hardnett,hanner,guyette,greening,glazer,ginder,fromm,fluellen,finkle,fessler,essary,eisele,duren,dittmer,crochet,cosentino,cogan,coelho,cavin,carrizales,campuzano,brough,bopp,bookman,bobb,blouin,beesley,battista,bascom,bakken,badgett,arneson,anselmo,albino,ahumada,woodyard,wolters,wireman,willison,warman,waldrup,vowell,vantassel,twombly,toomer,tennison,teets,tedeschi,swanner,stutz,stelly,sheehy,schermerhorn,scala,sandidge,salters,salo,saechao,roseboro,rolle,ressler,renz,renn,redford,raposa,rainbolt,pelfrey,orndorff,oney,nolin,nimmons,nardone,myhre,morman,menjivar,mcglone,mccammon,maxon,marciano,manus,lowrance,lorenzen,lonergan,lollis,littles,lindahl,lamas,lach,kuster,krawczyk,knuth,knecht,kirkendall,keitt,keever,kantor,jarboe,hoye,houchens,holter,holsinger,hickok,helwig,helgeson,hassett,harner,hamman,hames,hadfield,goree,goldfarb,gaughan,gaudreau,gantz,gallion,frady,foti,flesher,ferrin,faught,engram,donegan,desouza,degroot,cutright,crowl,criner,coan,clinkscales,chewning,chavira,catchings,carlock,bulger,buenrostro,bramblett,brack,boulware,bookout,bitner,birt,baranowski,baisden,allmon,acklin,yoakum,wilbourn,whisler,weinberger,washer,vasques,vanzandt,vanatta,troxler,tomes,tindle,tims,throckmorton,thach,stpeter,stlaurent,stenson,spry,spitz,songer,snavely,shroyer,shortridge,shenk,sevier,seabrook,scrivner,saltzman,rosenberry,rockwood,robeson,roan,reiser,ramires,raber,posner,popham,piotrowski,pinard,peterkin,pelham,peiffer,peay,nadler,musso,millett,mestas,mcgowen,marques,marasco,manriquez,manos,mair,lipps,leiker,krumm,knorr,kinslow,kessel,kendricks,kelm,irick,ickes,hurlburt,horta,hoekstra,heuer,helmuth,heatherly,hampson,hagar,haga,greenlaw,grau,godbey,gingras,gillies,gibb,gayden,gauvin,garrow,fontanez,florio,finke,fasano,ezzell,ewers,eveland,eckenrode,duclos,drumm,dimmick,delancey,defazio,dashiell,cusack,crowther,crigger,cray,coolidge,coldiron,cleland,chalfant,cassel,camire,cabrales,broomfield,brittingham,brisson,brickey,braziel,brazell,bragdon,boulanger,boman,bohannan,beem,barre,azar,ashbaugh,armistead,almazan,adamski,zendejas,winburn,willaims,wilhoit,westberry,wentzel,wendling,visser,vanscoy,vankirk,vallee,tweedy,thornberry,sweeny,spradling,spano,smelser,shim,sechrist,schall,scaife,rugg,rothrock,roesler,riehl,ridings,render,ransdell,radke,pinero,petree,pendergast,peluso,pecoraro,pascoe,panek,oshiro,navarrette,murguia,moores,moberg,michaelis,mcwhirter,mcsweeney,mcquade,mccay,mauk,mariani,marceau,mandeville,maeda,lunde,ludlow,loeb,lindo,linderman,leveille,leith,larock,lambrecht,kulp,kinsley,kimberlin,kesterson,hoyos,helfrich,hanke,grisby,goyette,gouveia,glazier,gile,gerena,gelinas,gasaway,funches,fujimoto,flynt,fenske,fellers,fehr,eslinger,escalera,enciso,duley,dittman,dineen,diller,devault,collings,clymer,clowers,chavers,charland,castorena,castello,camargo,bunce,bullen,boyes,borchers,borchardt,birnbaum,birdsall,billman,benites,bankhead,ange,ammerman,adkison,winegar,wickman,warr,warnke,villeneuve,veasey,vassallo,vannatta,vadnais,twilley,towery,tomblin,tippett,theiss,talkington,talamantes,swart,swanger,streit,stines,stabler,spurling,sobel,sine,simmers,shippy,shiflett,shearin,sauter,sanderlin,rusch,runkle,ruckman,rorie,roesch,richert,rehm,randel,ragin,quesenberry,puentes,plyler,plotkin,paugh,oshaughnessy,ohalloran,norsworthy,niemann,nader,moorefield,mooneyham,modica,miyamoto,mickel,mebane,mckinnie,mazurek,mancilla,lukas,lovins,loughlin,lotz,lindsley,liddle,levan,lederman,leclaire,lasseter,lapoint,lamoreaux,lafollette,kubiak,kirtley,keffer,kaczmarek,housman,hiers,hibbert,herrod,hegarty,hathorn,greenhaw,grafton,govea,futch,furst,franko,forcier,foran,flickinger,fairfield,eure,emrich,embrey,edgington,ecklund,eckard,durante,deyo,delvecchio,dade,currey,creswell,cottrill,casavant,cartier,cargile,capel,cammack,calfee,burse,burruss,brust,brousseau,bridwell,braaten,borkholder,bloomquist,bjork,bartelt,amburgey,yeary,whitefield,vinyard,vanvalkenburg,twitchell,timmins,tapper,stringham,starcher,spotts,slaugh,simonsen,sheffer,sequeira,rosati,rhymes,quint,pollak,peirce,patillo,parkerson,paiva,nilson,nevin,narcisse,mitton,merriam,merced,meiners,mckain,mcelveen,mcbeth,marsden,marez,manke,mahurin,mabrey,luper,krull,hunsicker,hornbuckle,holtzclaw,hinnant,heston,hering,hemenway,hegwood,hearns,halterman,guiterrez,grote,granillo,grainger,glasco,gilder,garren,garlock,garey,fryar,fredricks,fraizer,foshee,ferrel,felty,everitt,evens,esser,elkin,eberhart,durso,duguay,driskill,doster,dewall,deveau,demps,demaio,delreal,deleo,darrah,cumberbatch,culberson,cranmer,cordle,colgan,chesley,cavallo,castellon,castelli,carreras,carnell,carlucci,bontrager,blumberg,blasingame,becton,artrip,andujar,alkire,alder,zukowski,zuckerman,wroblewski,wrigley,woodside,wigginton,westman,westgate,werts,washam,wardlow,walser,waiters,tadlock,stringfield,stimpson,stickley,standish,spurlin,spindler,speller,spaeth,sotomayor,sluder,shryock,shepardson,shatley,scannell,santistevan,rosner,resto,reinhard,rathburn,prisco,poulsen,pinney,phares,pennock,pastrana,oviedo,ostler,nauman,mulford,moise,moberly,mirabal,metoyer,metheny,mentzer,meldrum,mcinturff,mcelyea,mcdougle,massaro,lumpkins,loveday,lofgren,lirette,lesperance,lefkowitz,ledger,lauzon,lachapelle,klassen,keough,kempton,kaelin,jeffords,hsieh,hoyer,horwitz,hoeft,hennig,haskin,gourdine,golightly,girouard,fulgham,fritsch,freer,frasher,foulk,firestone,fiorentino,fedor,ensley,englehart,eells,dunphy,donahoe,dileo,dibenedetto,dabrowski,crick,coonrod,conder,coddington,chunn,chaput,cerna,carreiro,calahan,braggs,bourdon,bollman,bittle,bauder,barreras,aubuchon,anzalone,adamo,zerbe,willcox,westberg,weikel,waymire,vroman,vinci,vallejos,truesdell,troutt,trotta,tollison,toles,tichenor,symonds,surles,strayer,stgeorge,sroka,sorrentino,solares,snelson,silvestri,sikorski,shawver,schumaker,schorr,schooley,scates,satterlee,satchell,rymer,roselli,robitaille,riegel,regis,reames,provenzano,priestley,plaisance,pettey,palomares,nowakowski,monette,minyard,mclamb,mchone,mccarroll,masson,magoon,maddy,lundin,licata,leonhardt,landwehr,kircher,kinch,karpinski,johannsen,hussain,houghtaling,hoskinson,hollaway,holeman,hobgood,hiebert,goggin,geissler,gadbois,gabaldon,fleshman,flannigan,fairman,eilers,dycus,dunmire,duffield,dowler,deloatch,dehaan,deemer,clayborn,christofferso,chilson,chesney,chatfield,carron,canale,brigman,branstetter,bosse,borton,bonar,biron,barroso,arispe,zacharias,zabel,yaeger,woolford,whetzel,weakley,veatch,vandeusen,tufts,troxel,troche,traver,townsel,talarico,swilley,sterrett,stenger,speakman,sowards,sours,souders,souder,soles,sobers,snoddy,smither,shute,shoaf,shahan,schuetz,scaggs,santini,rosson,rolen,robidoux,rentas,recio,pixley,pawlowski,pawlak,paull,overbey,orear,oliveri,oldenburg,nutting,naugle,mossman,misner,milazzo,michelson,mcentee,mccullar,mccree,mcaleer,mazzone,mandell,manahan,malott,maisonet,mailloux,lumley,lowrie,louviere,lipinski,lindemann,leppert,leasure,labarge,kubik,knisely,knepp,kenworthy,kennelly,kelch,kanter,houchin,hosley,hosler,hollon,holleman,heitman,haggins,gwaltney,goulding,gorden,geraci,gathers,frison,feagin,falconer,espada,erving,erikson,eisenhauer,ebeling,durgin,dowdle,dinwiddie,delcastillo,dedrick,crimmins,covell,cournoyer,coria,cohan,cataldo,carpentier,canas,campa,brode,brashears,blaser,bicknell,bednar,barwick,ascencio,althoff,almodovar,alamo,zirkle,zabala,wolverton,winebrenner,wetherell,westlake,wegener,weddington,tuten,trosclair,tressler,theroux,teske,swinehart,swensen,sundquist,southall,socha,sizer,silverberg,shortt,shimizu,sherrard,shaeffer,scheid,scheetz,saravia,sanner,rubinstein,rozell,romer,rheaume,reisinger,randles,pullum,petrella,payan,nordin,norcross,nicoletti,nicholes,newbold,nakagawa,monteith,milstead,milliner,mellen,mccardle,liptak,leitch,latimore,larrison,landau,laborde,koval,izquierdo,hymel,hoskin,holte,hoefer,hayworth,hausman,harrill,harrel,hardt,gully,groover,grinnell,greenspan,graver,grandberry,gorrell,goldenberg,goguen,gilleland,fuson,feldmann,everly,dyess,dunnigan,downie,dolby,deatherage,cosey,cheever,celaya,caver,cashion,caplinger,cansler,byrge,bruder,breuer,breslin,brazelton,botkin,bonneau,bondurant,bohanan,bogue,bodner,boatner,blatt,bickley,belliveau,beiler,beier,beckstead,bachmann,atkin,altizer,alloway,allaire,albro,abron,zellmer,yetter,yelverton,wiens,whidden,viramontes,vanwormer,tarantino,tanksley,sumlin,strauch,strang,stice,spahn,sosebee,sigala,shrout,seamon,schrum,schneck,schantz,ruddy,romig,roehl,renninger,reding,polak,pohlman,pasillas,oldfield,oldaker,ohanlon,ogilvie,norberg,nolette,neufeld,nellis,mummert,mulvihill,mullaney,monteleone,mendonca,meisner,mcmullan,mccluney,mattis,massengill,manfredi,luedtke,lounsbury,liberatore,lamphere,laforge,jourdan,iorio,iniguez,ikeda,hubler,hodgdon,hocking,heacock,haslam,haralson,hanshaw,hannum,hallam,haden,garnes,garces,gammage,gambino,finkel,faucett,ehrhardt,eggen,dusek,durrant,dubay,dones,depasquale,delucia,degraff,decamp,davalos,cullins,conard,clouser,clontz,cifuentes,chappel,chaffins,celis,carwile,byram,bruggeman,bressler,brathwaite,brasfield,bradburn,boose,bodie,blosser,bertsch,bernardi,bernabe,bengtson,barrette,astorga,alday,albee,abrahamson,yarnell,wiltse,wiebe,waguespack,vasser,upham,turek,traxler,torain,tomaszewski,tinnin,tiner,tindell,styron,stahlman,staab,skiba,sheperd,seidl,secor,schutte,sanfilippo,ruder,rondon,rearick,procter,prochaska,pettengill,pauly,neilsen,nally,mullenax,morano,meads,mcnaughton,mcmurtry,mcmath,mckinsey,matthes,massenburg,marlar,margolis,malin,magallon,mackin,lovette,loughran,loring,longstreet,loiselle,lenihan,kunze,koepke,kerwin,kalinowski,kagan,innis,innes,holtzman,heinemann,harshman,haider,haack,grondin,grissett,greenawalt,goudy,goodlett,goldston,gokey,gardea,galaviz,gafford,gabrielson,furlow,fritch,fordyce,folger,elizalde,ehlert,eckhoff,eccleston,ealey,dubin,diemer,deschamps,delapena,decicco,debolt,cullinan,crittendon,crase,cossey,coppock,coots,colyer,cluck,chamberland,burkhead,bumpus,buchan,borman,birkholz,berardi,benda,behnke,barter,amezquita,wotring,wirtz,wingert,wiesner,whitesides,weyant,wainscott,venezia,varnell,tussey,thurlow,tabares,stiver,stell,starke,stanhope,stanek,sisler,sinnott,siciliano,shehan,selph,seager,scurlock,scranton,santucci,santangelo,saltsman,rogge,rettig,renwick,reidy,reider,redfield,premo,parente,paolucci,palmquist,ohler,netherton,mutchler,morita,mistretta,minnis,middendorf,menzel,mendosa,mendelson,meaux,mcspadden,mcquaid,mcnatt,manigault,maney,mager,lukes,lopresti,liriano,letson,lechuga,lazenby,lauria,larimore,krupp,krupa,kopec,kinchen,kifer,kerney,kerner,kennison,kegley,karcher,justis,johson,jellison,janke,huskins,holzman,hinojos,hefley,hatmaker,harte,halloway,hallenbeck,goodwyn,glaspie,geise,fullwood,fryman,frakes,fraire,farrer,enlow,engen,ellzey,eckles,earles,dunkley,drinkard,dreiling,draeger,dinardo,dills,desroches,desantiago,curlee,crumbley,critchlow,coury,courtright,coffield,cleek,charpentier,cardone,caples,cantin,buntin,bugbee,brinkerhoff,brackin,bourland,blassingame,beacham,banning,auguste,andreasen,amann,almon,alejo,adelman,abston,yerger,wymer,woodberry,windley,whiteaker,westfield,weibel,wanner,waldrep,villani,vanarsdale,utterback,updike,triggs,topete,tolar,tigner,thoms,tauber,tarvin,tally,swiney,sweatman,studebaker,stennett,starrett,stannard,stalvey,sonnenberg,smithey,sieber,sickles,shinault,segars,sanger,salmeron,rothe,rizzi,restrepo,ralls,ragusa,quiroga,papenfuss,oropeza,okane,mudge,mozingo,molinaro,mcvicker,mcgarvey,mcfalls,mccraney,matus,magers,llanos,livermore,linehan,leitner,laymon,lawing,lacourse,kwong,kollar,kneeland,kennett,kellett,kangas,janzen,hutter,huling,hofmeister,hewes,harjo,habib,guice,grullon,greggs,grayer,granier,grable,gowdy,giannini,getchell,gartman,garnica,ganey,gallimore,fetters,fergerson,farlow,fagundes,exley,esteves,enders,edenfield,easterwood,drakeford,dipasquale,desousa,deshields,deeter,dedmon,debord,daughtery,cutts,courtemanche,coursey,copple,coomes,collis,cogburn,clopton,choquette,chaidez,castrejon,calhoon,burbach,bulloch,buchman,bruhn,bohon,blough,baynes,barstow,zeman,zackery,yardley,yamashita,wulff,wilken,wiliams,wickersham,wible,whipkey,wedgeworth,walmsley,walkup,vreeland,verrill,umana,traub,swingle,summey,stroupe,stockstill,steffey,stefanski,statler,stapp,speights,solari,soderberg,shunk,shorey,shewmaker,sheilds,schiffer,schank,schaff,sagers,rochon,riser,rickett,reale,raglin,polen,plata,pitcock,percival,palen,orona,oberle,nocera,navas,nault,mullings,montejano,monreal,minick,middlebrook,meece,mcmillion,mccullen,mauck,marshburn,maillet,mahaney,magner,maclin,lucey,litteral,lippincott,leite,leaks,lamarre,jurgens,jerkins,jager,hurwitz,hughley,hotaling,horstman,hohman,hocker,hively,hipps,hessler,hermanson,hepworth,helland,hedlund,harkless,haigler,gutierez,grindstaff,glantz,giardina,gerken,gadsden,finnerty,farnum,encinas,drakes,dennie,cutlip,curtsinger,couto,cortinas,corby,chiasson,carle,carballo,brindle,borum,bober,blagg,berthiaume,beahm,batres,basnight,backes,axtell,atterberry,alvares,alegria,woodell,wojciechowski,winfree,winbush,wiest,wesner,wamsley,wakeman,verner,truex,trafton,toman,thorsen,theus,tellier,tallant,szeto,strope,stills,simkins,shuey,shaul,servin,serio,serafin,salguero,ryerson,rudder,ruark,rother,rohrbaugh,rohrbach,rohan,rogerson,risher,reeser,pryce,prokop,prins,priebe,prejean,pinheiro,petrone,petri,penson,pearlman,parikh,natoli,murakami,mullikin,mullane,motes,morningstar,mcveigh,mcgrady,mcgaughey,mccurley,marchan,manske,lusby,linde,likens,licon,leroux,lemaire,legette,laskey,laprade,laplant,kolar,kittredge,kinley,kerber,kanagy,jetton,janik,ippolito,inouye,hunsinger,howley,howery,horrell,holthaus,hiner,hilson,hilderbrand,hartzler,harnish,harada,hansford,halligan,hagedorn,gwynn,gudino,greenstein,greear,gracey,goudeau,goodner,ginsburg,gerth,gerner,fujii,frier,frenette,folmar,fleisher,fleischmann,fetzer,eisenman,earhart,dupuy,dunkelberger,drexler,dillinger,dilbeck,dewald,demby,deford,craine,chesnut,casady,carstens,carrick,carino,carignan,canchola,bushong,burman,buono,brownlow,broach,britten,brickhouse,boyden,boulton,borland,bohrer,blubaugh,bever,berggren,benevides,arocho,arends,amezcua,almendarez,zalewski,witzel,winkfield,wilhoite,vangundy,vanfleet,vanetten,vandergriff,urbanski,troiano,thibodaux,straus,stoneking,stjean,stillings,stange,speicher,speegle,smeltzer,slawson,simmonds,shuttleworth,serpa,senger,seidman,schweiger,schloss,schimmel,schechter,sayler,sabatini,ronan,rodiguez,riggleman,richins,reamer,prunty,porath,plunk,piland,philbrook,pettitt,perna,peralez,pascale,padula,oboyle,nivens,nickols,mundt,munden,montijo,mcmanis,mcgrane,mccrimmon,manzi,mangold,malick,mahar,maddock,losey,litten,leedy,leavell,ladue,krahn,kluge,junker,iversen,imler,hurtt,huizar,hubbert,howington,hollomon,holdren,hoisington,heiden,hauge,hartigan,gutirrez,griffie,greenhill,gratton,granata,gottfried,gertz,gautreaux,furry,furey,funderburg,flippen,fitzgibbon,drucker,donoghue,dildy,devers,detweiler,despres,denby,degeorge,cueto,cranston,courville,clukey,cirillo,chivers,caudillo,butera,bulluck,buckmaster,braunstein,bracamonte,bourdeau,bonnette".split(","),
54803us_tv_and_film:"you,i,to,that,it,me,what,this,know,i'm,no,have,my,don't,just,not,do,be,your,we,it's,so,but,all,well,oh,about,right,you're,get,here,out,going,like,yeah,if,can,up,want,think,that's,now,go,him,how,got,did,why,see,come,good,really,look,will,okay,back,can't,mean,tell,i'll,hey,he's,could,didn't,yes,something,because,say,take,way,little,make,need,gonna,never,we're,too,she's,i've,sure,our,sorry,what's,let,thing,maybe,down,man,very,there's,should,anything,said,much,any,even,off,please,doing,thank,give,thought,help,talk,god,still,wait,find,nothing,again,things,let's,doesn't,call,told,great,better,ever,night,away,believe,feel,everything,you've,fine,last,keep,does,put,around,stop,they're,i'd,guy,isn't,always,listen,wanted,guys,huh,those,big,lot,happened,thanks,won't,trying,kind,wrong,talking,guess,care,bad,mom,remember,getting,we'll,together,dad,leave,understand,wouldn't,actually,hear,baby,nice,father,else,stay,done,wasn't,course,might,mind,every,enough,try,hell,came,someone,you'll,whole,yourself,idea,ask,must,coming,looking,woman,room,knew,tonight,real,son,hope,went,hmm,happy,pretty,saw,girl,sir,friend,already,saying,next,job,problem,minute,thinking,haven't,heard,honey,matter,myself,couldn't,exactly,having,probably,happen,we've,hurt,boy,dead,gotta,alone,excuse,start,kill,hard,you'd,today,car,ready,without,wants,hold,wanna,yet,seen,deal,once,gone,morning,supposed,friends,head,stuff,worry,live,truth,face,forget,true,cause,soon,knows,telling,wife,who's,chance,run,move,anyone,person,bye,somebody,heart,miss,making,meet,anyway,phone,reason,damn,lost,looks,bring,case,turn,wish,tomorrow,kids,trust,check,change,anymore,least,aren't,working,makes,taking,means,brother,hate,ago,says,beautiful,gave,fact,crazy,sit,afraid,important,rest,fun,kid,word,watch,glad,everyone,sister,minutes,everybody,bit,couple,whoa,either,mrs,feeling,daughter,wow,gets,asked,break,promise,door,close,hand,easy,question,tried,far,walk,needs,mine,killed,hospital,anybody,alright,wedding,shut,able,die,perfect,stand,comes,hit,waiting,dinner,funny,husband,almost,pay,answer,cool,eyes,news,child,shouldn't,yours,moment,sleep,read,where's,sounds,sonny,pick,sometimes,bed,date,plan,hours,lose,hands,serious,shit,behind,inside,ahead,week,wonderful,fight,past,cut,quite,he'll,sick,it'll,eat,nobody,goes,save,seems,finally,lives,worried,upset,carly,met,brought,seem,sort,safe,weren't,leaving,front,shot,loved,asking,running,clear,figure,hot,felt,parents,drink,absolutely,how's,daddy,sweet,alive,sense,meant,happens,bet,blood,ain't,kidding,lie,meeting,dear,seeing,sound,fault,ten,buy,hour,speak,lady,jen,thinks,christmas,outside,hang,possible,worse,mistake,ooh,handle,spend,totally,giving,here's,marriage,realize,unless,sex,send,needed,scared,picture,talked,ass,hundred,changed,completely,explain,certainly,sign,boys,relationship,loves,hair,lying,choice,anywhere,future,weird,luck,she'll,turned,touch,kiss,crane,questions,obviously,wonder,pain,calling,somewhere,throw,straight,cold,fast,words,food,none,drive,feelings,they'll,marry,drop,cannot,dream,protect,twenty,surprise,sweetheart,poor,looked,mad,except,gun,y'know,dance,takes,appreciate,especially,situation,besides,pull,hasn't,worth,sheridan,amazing,expect,swear,piece,busy,happening,movie,we'd,catch,perhaps,step,fall,watching,kept,darling,dog,honor,moving,till,admit,problems,murder,he'd,evil,definitely,feels,honest,eye,broke,missed,longer,dollars,tired,evening,starting,entire,trip,niles,suppose,calm,imagine,fair,caught,blame,sitting,favor,apartment,terrible,clean,learn,frasier,relax,accident,wake,prove,smart,message,missing,forgot,interested,table,nbsp,mouth,pregnant,ring,careful,shall,dude,ride,figured,wear,shoot,stick,follow,angry,write,stopped,ran,standing,forgive,jail,wearing,ladies,kinda,lunch,cristian,greenlee,gotten,hoping,phoebe,thousand,ridge,paper,tough,tape,count,boyfriend,proud,agree,birthday,they've,share,offer,hurry,feet,wondering,decision,ones,finish,voice,herself,would've,mess,deserve,evidence,cute,dress,interesting,hotel,enjoy,quiet,concerned,staying,beat,sweetie,mention,clothes,fell,neither,mmm,fix,respect,prison,attention,holding,calls,surprised,bar,keeping,gift,hadn't,putting,dark,owe,ice,helping,normal,aunt,lawyer,apart,plans,jax,girlfriend,floor,whether,everything's,box,judge,upstairs,sake,mommy,possibly,worst,acting,accept,blow,strange,saved,conversation,plane,mama,yesterday,lied,quick,lately,stuck,difference,store,she'd,bought,doubt,listening,walking,cops,deep,dangerous,buffy,sleeping,chloe,rafe,join,card,crime,gentlemen,willing,window,walked,guilty,likes,fighting,difficult,soul,joke,favorite,uncle,promised,bother,seriously,cell,knowing,broken,advice,somehow,paid,losing,push,helped,killing,boss,liked,innocent,rules,learned,thirty,risk,letting,speaking,ridiculous,afternoon,apologize,nervous,charge,patient,boat,how'd,hide,detective,planning,huge,breakfast,horrible,awful,pleasure,driving,hanging,picked,sell,quit,apparently,dying,notice,congratulations,visit,could've,c'mon,letter,decide,forward,fool,showed,smell,seemed,spell,memory,pictures,slow,seconds,hungry,hearing,kitchen,ma'am,should've,realized,kick,grab,discuss,fifty,reading,idiot,suddenly,agent,destroy,bucks,shoes,peace,arms,demon,livvie,consider,papers,incredible,witch,drunk,attorney,tells,knock,ways,gives,nose,skye,turns,keeps,jealous,drug,sooner,cares,plenty,extra,outta,weekend,matters,gosh,opportunity,impossible,waste,pretend,jump,eating,proof,slept,arrest,breathe,perfectly,warm,pulled,twice,easier,goin,dating,suit,romantic,drugs,comfortable,finds,checked,divorce,begin,ourselves,closer,ruin,smile,laugh,treat,fear,what'd,otherwise,excited,mail,hiding,stole,pacey,noticed,fired,excellent,bringing,bottom,note,sudden,bathroom,honestly,sing,foot,remind,charges,witness,finding,tree,dare,hardly,that'll,steal,silly,contact,teach,shop,plus,colonel,fresh,trial,invited,roll,reach,dirty,choose,emergency,dropped,butt,credit,obvious,locked,loving,nuts,agreed,prue,goodbye,condition,guard,fuckin,grow,cake,mood,crap,crying,belong,partner,trick,pressure,dressed,taste,neck,nurse,raise,lots,carry,whoever,drinking,they'd,breaking,file,lock,wine,spot,paying,assume,asleep,turning,viki,bedroom,shower,nikolas,camera,fill,reasons,forty,bigger,nope,breath,doctors,pants,freak,movies,folks,cream,wild,truly,desk,convince,client,threw,hurts,spending,answers,shirt,chair,rough,doin,sees,ought,empty,wind,aware,dealing,pack,tight,hurting,guest,arrested,salem,confused,surgery,expecting,deacon,unfortunately,goddamn,bottle,beyond,whenever,pool,opinion,starts,jerk,secrets,falling,necessary,barely,dancing,tests,copy,cousin,ahem,twelve,tess,skin,fifteen,speech,orders,complicated,nowhere,escape,biggest,restaurant,grateful,usual,burn,address,someplace,screw,everywhere,regret,goodness,mistakes,details,responsibility,suspect,corner,hero,dumb,terrific,whoo,hole,memories,o'clock,teeth,ruined,bite,stenbeck,liar,showing,cards,desperate,search,pathetic,spoke,scare,marah,afford,settle,stayed,checking,hired,heads,concern,blew,alcazar,champagne,connection,tickets,happiness,saving,kissing,hated,personally,suggest,prepared,onto,downstairs,ticket,it'd,loose,holy,duty,convinced,throwing,kissed,legs,loud,saturday,babies,where'd,warning,miracle,carrying,blind,ugly,shopping,hates,sight,bride,coat,clearly,celebrate,brilliant,wanting,forrester,lips,custody,screwed,buying,toast,thoughts,reality,lexie,attitude,advantage,grandfather,sami,grandma,someday,roof,marrying,powerful,grown,grandmother,fake,must've,ideas,exciting,familiar,bomb,bout,harmony,schedule,capable,practically,correct,clue,forgotten,appointment,deserves,threat,bloody,lonely,shame,jacket,hook,scary,investigation,invite,shooting,lesson,criminal,victim,funeral,considering,burning,strength,harder,sisters,pushed,shock,pushing,heat,chocolate,miserable,corinthos,nightmare,brings,zander,crash,chances,sending,recognize,healthy,boring,feed,engaged,headed,treated,knife,drag,badly,hire,paint,pardon,behavior,closet,warn,gorgeous,milk,survive,ends,dump,rent,remembered,thanksgiving,rain,revenge,prefer,spare,pray,disappeared,aside,statement,sometime,meat,fantastic,breathing,laughing,stood,affair,ours,depends,protecting,jury,brave,fingers,murdered,explanation,picking,blah,stronger,handsome,unbelievable,anytime,shake,oakdale,wherever,pulling,facts,waited,lousy,circumstances,disappointed,weak,trusted,license,nothin,trash,understanding,slip,sounded,awake,friendship,stomach,weapon,threatened,mystery,vegas,understood,basically,switch,frankly,cheap,lifetime,deny,clock,garbage,why'd,tear,ears,indeed,changing,singing,tiny,decent,avoid,messed,filled,touched,disappear,exact,pills,kicked,harm,fortune,pretending,insurance,fancy,drove,cared,belongs,nights,lorelai,lift,timing,guarantee,chest,woke,burned,watched,heading,selfish,drinks,doll,committed,elevator,freeze,noise,wasting,ceremony,uncomfortable,staring,files,bike,stress,permission,thrown,possibility,borrow,fabulous,doors,screaming,bone,xander,what're,meal,apology,anger,honeymoon,bail,parking,fixed,wash,stolen,sensitive,stealing,photo,chose,lets,comfort,worrying,pocket,mateo,bleeding,shoulder,ignore,talent,tied,garage,dies,demons,dumped,witches,rude,crack,bothering,radar,soft,meantime,gimme,kinds,fate,concentrate,throat,prom,messages,intend,ashamed,somethin,manage,guilt,interrupt,guts,tongue,shoe,basement,sentence,purse,glasses,cabin,universe,repeat,mirror,wound,travers,tall,engagement,therapy,emotional,jeez,decisions,soup,thrilled,stake,chef,moves,extremely,moments,expensive,counting,shots,kidnapped,cleaning,shift,plate,impressed,smells,trapped,aidan,knocked,charming,attractive,argue,puts,whip,embarrassed,package,hitting,bust,stairs,alarm,pure,nail,nerve,incredibly,walks,dirt,stamp,terribly,friendly,damned,jobs,suffering,disgusting,stopping,deliver,riding,helps,disaster,bars,crossed,trap,talks,eggs,chick,threatening,spoken,introduce,confession,embarrassing,bags,impression,gate,reputation,presents,chat,suffer,argument,talkin,crowd,homework,coincidence,cancel,pride,solve,hopefully,pounds,pine,mate,illegal,generous,outfit,maid,bath,punch,freaked,begging,recall,enjoying,prepare,wheel,defend,signs,painful,yourselves,maris,that'd,suspicious,cooking,button,warned,sixty,pity,yelling,awhile,confidence,offering,pleased,panic,hers,gettin,refuse,grandpa,testify,choices,cruel,mental,gentleman,coma,cutting,proteus,guests,expert,benefit,faces,jumped,toilet,sneak,halloween,privacy,smoking,reminds,twins,swing,solid,options,commitment,crush,ambulance,wallet,gang,eleven,option,laundry,assure,stays,skip,fail,discussion,clinic,betrayed,sticking,bored,mansion,soda,sheriff,suite,handled,busted,load,happier,studying,romance,procedure,commit,assignment,suicide,minds,swim,yell,llanview,chasing,proper,believes,humor,hopes,lawyers,giant,latest,escaped,parent,tricks,insist,dropping,cheer,medication,flesh,routine,sandwich,handed,false,beating,warrant,awfully,odds,treating,thin,suggesting,fever,sweat,silent,clever,sweater,mall,sharing,assuming,judgment,goodnight,divorced,surely,steps,confess,math,listened,comin,answered,vulnerable,bless,dreaming,chip,zero,pissed,nate,kills,tears,knees,chill,brains,unusual,packed,dreamed,cure,lookin,grave,cheating,breaks,locker,gifts,awkward,thursday,joking,reasonable,dozen,curse,quartermaine,millions,dessert,rolling,detail,alien,delicious,closing,vampires,wore,tail,secure,salad,murderer,spit,offense,dust,conscience,bread,answering,lame,invitation,grief,smiling,pregnancy,prisoner,delivery,guards,virus,shrink,freezing,wreck,massimo,wire,technically,blown,anxious,cave,holidays,cleared,wishes,caring,candles,bound,charm,pulse,jumping,jokes,boom,occasion,silence,nonsense,frightened,slipped,dimera,blowing,relationships,kidnapping,spin,tool,roxy,packing,blaming,wrap,obsessed,fruit,torture,personality,there'll,fairy,necessarily,seventy,print,motel,underwear,grams,exhausted,believing,freaking,carefully,trace,touching,messing,recovery,intention,consequences,belt,sacrifice,courage,enjoyed,attracted,remove,testimony,intense,heal,defending,unfair,relieved,loyal,slowly,buzz,alcohol,surprises,psychiatrist,plain,attic,who'd,uniform,terrified,cleaned,zach,threaten,fella,enemies,satisfied,imagination,hooked,headache,forgetting,counselor,andie,acted,badge,naturally,frozen,sakes,appropriate,trunk,dunno,costume,sixteen,impressive,kicking,junk,grabbed,understands,describe,clients,owns,affect,witnesses,starving,instincts,happily,discussing,deserved,strangers,surveillance,admire,questioning,dragged,barn,deeply,wrapped,wasted,tense,hoped,fellas,roommate,mortal,fascinating,stops,arrangements,agenda,literally,propose,honesty,underneath,sauce,promises,lecture,eighty,torn,shocked,backup,differently,ninety,deck,biological,pheebs,ease,creep,waitress,telephone,ripped,raising,scratch,rings,prints,thee,arguing,ephram,asks,oops,diner,annoying,taggert,sergeant,blast,towel,clown,habit,creature,bermuda,snap,react,paranoid,handling,eaten,therapist,comment,sink,reporter,nurses,beats,priority,interrupting,warehouse,loyalty,inspector,pleasant,excuses,threats,guessing,tend,praying,motive,unconscious,mysterious,unhappy,tone,switched,rappaport,sookie,neighbor,loaded,swore,piss,balance,toss,misery,thief,squeeze,lobby,goa'uld,geez,exercise,forth,booked,sandburg,poker,eighteen,d'you,bury,everyday,digging,creepy,wondered,liver,hmmm,magical,fits,discussed,moral,helpful,searching,flew,depressed,aisle,cris,amen,vows,neighbors,darn,cents,arrange,annulment,useless,adventure,resist,fourteen,celebrating,inch,debt,violent,sand,teal'c,celebration,reminded,phones,paperwork,emotions,stubborn,pound,tension,stroke,steady,overnight,chips,beef,suits,boxes,cassadine,collect,tragedy,spoil,realm,wipe,surgeon,stretch,stepped,nephew,neat,limo,confident,perspective,climb,punishment,finest,springfield,hint,furniture,blanket,twist,proceed,fries,worries,niece,gloves,soap,signature,disappoint,crawl,convicted,flip,counsel,doubts,crimes,accusing,shaking,remembering,hallway,halfway,bothered,madam,gather,cameras,blackmail,symptoms,rope,ordinary,imagined,cigarette,supportive,explosion,trauma,ouch,furious,cheat,avoiding,whew,thick,oooh,boarding,approve,urgent,shhh,misunderstanding,drawer,phony,interfere,catching,bargain,tragic,respond,punish,penthouse,thou,rach,ohhh,insult,bugs,beside,begged,absolute,strictly,socks,senses,sneaking,reward,polite,checks,tale,physically,instructions,fooled,blows,tabby,bitter,adorable,y'all,tested,suggestion,jewelry,alike,jacks,distracted,shelter,lessons,constable,circus,audition,tune,shoulders,mask,helpless,feeding,explains,sucked,robbery,objection,behave,valuable,shadows,courtroom,confusing,talented,smarter,mistaken,customer,bizarre,scaring,motherfucker,alert,vecchio,reverend,foolish,compliment,bastards,worker,wheelchair,protective,gentle,reverse,picnic,knee,cage,wives,wednesday,voices,toes,stink,scares,pour,cheated,slide,ruining,filling,exit,cottage,upside,proves,parked,diary,complaining,confessed,pipe,merely,massage,chop,spill,prayer,betray,waiter,scam,rats,fraud,brush,tables,sympathy,pill,filthy,seventeen,employee,bracelet,pays,fairly,deeper,arrive,tracking,spite,shed,recommend,oughta,nanny,menu,diet,corn,roses,patch,dime,devastated,subtle,bullets,beans,pile,confirm,strings,parade,borrowed,toys,straighten,steak,premonition,planted,honored,exam,convenient,traveling,laying,insisted,dish,aitoro,kindly,grandson,donor,temper,teenager,proven,mothers,denial,backwards,tent,swell,noon,happiest,drives,thinkin,spirits,potion,holes,fence,whatsoever,rehearsal,overheard,lemme,hostage,bench,tryin,taxi,shove,moron,impress,needle,intelligent,instant,disagree,stinks,rianna,recover,groom,gesture,constantly,bartender,suspects,sealed,legally,hears,dresses,sheet,psychic,teenage,knocking,judging,accidentally,waking,rumor,manners,homeless,hollow,desperately,tapes,referring,item,genoa,gear,majesty,cried,tons,spells,instinct,quote,motorcycle,convincing,fashioned,aids,accomplished,grip,bump,upsetting,needing,invisible,forgiveness,feds,compare,bothers,tooth,inviting,earn,compromise,cocktail,tramp,jabot,intimate,dignity,dealt,souls,informed,gods,dressing,cigarettes,alistair,leak,fond,corky,seduce,liquor,fingerprints,enchantment,butters,stuffed,stavros,emotionally,transplant,tips,oxygen,nicely,lunatic,drill,complain,announcement,unfortunate,slap,prayers,plug,opens,oath,o'neill,mutual,yacht,remembers,fried,extraordinary,bait,warton,sworn,stare,safely,reunion,burst,might've,dive,aboard,expose,buddies,trusting,booze,sweep,sore,scudder,properly,parole,ditch,canceled,speaks,glow,wears,thirsty,skull,ringing,dorm,dining,bend,unexpected,pancakes,harsh,flattered,ahhh,troubles,fights,favourite,eats,rage,undercover,spoiled,sloane,shine,destroying,deliberately,conspiracy,thoughtful,sandwiches,plates,nails,miracles,fridge,drank,contrary,beloved,allergic,washed,stalking,solved,sack,misses,forgiven,bent,maciver,involve,dragging,cooked,pointing,foul,dull,beneath,heels,faking,deaf,stunt,jealousy,hopeless,fears,cuts,scenario,necklace,crashed,accuse,restraining,homicide,helicopter,firing,safer,auction,videotape,tore,reservations,pops,appetite,wounds,vanquish,ironic,fathers,excitement,anyhow,tearing,sends,rape,laughed,belly,dealer,cooperate,accomplish,wakes,spotted,sorts,reservation,ashes,tastes,supposedly,loft,intentions,integrity,wished,towels,suspected,investigating,inappropriate,lipstick,lawn,compassion,cafeteria,scarf,precisely,obsession,loses,lighten,infection,granddaughter,explode,balcony,this'll,spying,publicity,depend,cracked,conscious,ally,absurd,vicious,invented,forbid,directions,defendant,bare,announce,screwing,salesman,robbed,leap,lakeview,insanity,reveal,possibilities,kidnap,gown,chairs,wishing,setup,punished,criminals,regrets,raped,quarters,lamp,dentist,anyways,anonymous,semester,risks,owes,lungs,explaining,delicate,tricked,eager,doomed,adoption,stab,sickness,scum,floating,envelope,vault,sorel,pretended,potatoes,plea,photograph,payback,misunderstood,kiddo,healing,cascade,capeside,stabbed,remarkable,brat,privilege,passionate,nerves,lawsuit,kidney,disturbed,cozy,tire,shirts,oven,ordering,delay,risky,monsters,honorable,grounded,closest,breakdown,bald,abandon,scar,collar,worthless,sucking,enormous,disturbing,disturb,distract,deals,conclusions,vodka,dishes,crawling,briefcase,wiped,whistle,sits,roast,rented,pigs,flirting,deposit,bottles,topic,riot,overreacting,logical,hostile,embarrass,casual,beacon,amusing,altar,claus,survival,skirt,shave,porch,ghosts,favors,drops,dizzy,chili,advise,strikes,rehab,photographer,peaceful,leery,heavens,fortunately,fooling,expectations,cigar,weakness,ranch,practicing,examine,cranes,bribe,sail,prescription,hush,fragile,forensics,expense,drugged,cows,bells,visitor,suitcase,sorta,scan,manticore,insecure,imagining,hardest,clerk,wrist,what'll,starters,silk,pump,pale,nicer,haul,flies,boot,thumb,there'd,how're,elders,quietly,pulls,idiots,erase,denying,ankle,amnesia,accepting,heartbeat,devane,confront,minus,legitimate,fixing,arrogant,tuna,supper,slightest,sins,sayin,recipe,pier,paternity,humiliating,genuine,snack,rational,minded,guessed,weddings,tumor,humiliated,aspirin,spray,picks,eyed,drowning,contacts,ritual,perfume,hiring,hating,docks,creatures,visions,thanking,thankful,sock,nineteen,fork,throws,teenagers,stressed,slice,rolls,plead,ladder,kicks,detectives,assured,tellin,shallow,responsibilities,repay,howdy,girlfriends,deadly,comforting,ceiling,verdict,insensitive,spilled,respected,messy,interrupted,halliwell,blond,bleed,wardrobe,takin,murders,backs,underestimate,justify,harmless,frustrated,fold,enzo,communicate,bugging,arson,whack,salary,rumors,obligation,liking,dearest,congratulate,vengeance,rack,puzzle,fires,courtesy,caller,blamed,tops,quiz,prep,curiosity,circles,barbecue,sunnydale,spinning,psychotic,cough,accusations,resent,laughs,freshman,envy,drown,bartlet,asses,sofa,poster,highness,dock,apologies,theirs,stat,stall,realizes,psych,mmmm,fools,understandable,treats,succeed,stir,relaxed,makin,gratitude,faithful,accent,witter,wandering,locate,inevitable,gretel,deed,crushed,controlling,smelled,robe,gossip,gambling,cosmetics,accidents,surprising,stiff,sincere,rushed,refrigerator,preparing,nightmares,mijo,ignoring,hunch,fireworks,drowned,brass,whispering,sophisticated,luggage,hike,explore,emotion,crashing,contacted,complications,shining,rolled,righteous,reconsider,goody,geek,frightening,ethics,creeps,courthouse,camping,affection,smythe,haircut,essay,baked,apologized,vibe,respects,receipt,mami,hats,destructive,adore,adopt,tracked,shorts,reminding,dough,creations,cabot,barrel,snuck,slight,reporters,pressing,magnificent,madame,lazy,glorious,fiancee,bits,visitation,sane,kindness,shoulda,rescued,mattress,lounge,lifted,importantly,glove,enterprises,disappointment,condo,beings,admitting,yelled,waving,spoon,screech,satisfaction,reads,nailed,worm,tick,resting,marvelous,fuss,cortlandt,chased,pockets,luckily,lilith,filing,conversations,consideration,consciousness,worlds,innocence,forehead,aggressive,trailer,slam,quitting,inform,delighted,daylight,danced,confidential,aunts,washing,tossed,spectra,marrow,lined,implying,hatred,grill,corpse,clues,sober,offended,morgue,infected,humanity,distraction,cart,wired,violation,promising,harassment,glue,d'angelo,cursed,brutal,warlocks,wagon,unpleasant,proving,priorities,mustn't,lease,flame,disappearance,depressing,thrill,sitter,ribs,flush,earrings,deadline,corporal,collapsed,update,snapped,smack,melt,figuring,delusional,coulda,burnt,tender,sperm,realise,pork,popped,interrogation,esteem,choosing,undo,pres,prayed,plague,manipulate,insulting,detention,delightful,coffeehouse,betrayal,apologizing,adjust,wrecked,wont,whipped,rides,reminder,monsieur,faint,bake,distress,correctly,complaint,blocked,tortured,risking,pointless,handing,dumping,cups,alibi,struggling,shiny,risked,mummy,mint,hose,hobby,fortunate,fleischman,fitting,curtain,counseling,rode,puppet,modeling,memo,irresponsible,humiliation,hiya,freakin,felony,choke,blackmailing,appreciated,tabloid,suspicion,recovering,pledge,panicked,nursery,louder,jeans,investigator,homecoming,frustrating,buys,busting,buff,sleeve,irony,dope,declare,autopsy,workin,torch,prick,limb,hysterical,goddamnit,fetch,dimension,crowded,clip,climbing,bonding,woah,trusts,negotiate,lethal,iced,fantasies,deeds,bore,babysitter,questioned,outrageous,kiriakis,insulted,grudge,driveway,deserted,definite,beep,wires,suggestions,searched,owed,lend,drunken,demanding,costanza,conviction,bumped,weigh,touches,tempted,shout,resolve,relate,poisoned,meals,invitations,haunted,bogus,autograph,affects,tolerate,stepping,spontaneous,sleeps,probation,manny,fist,spectacular,hostages,heroin,havin,habits,encouraging,consult,burgers,boyfriends,bailed,baggage,watches,troubled,torturing,teasing,sweetest,qualities,postpone,overwhelmed,malkovich,impulse,classy,charging,amazed,policeman,hypocrite,humiliate,hideous,d'ya,costumes,bluffing,betting,bein,bedtime,alcoholic,vegetable,tray,suspicions,spreading,splendid,shrimp,shouting,pressed,nooo,grieving,gladly,fling,eliminate,cereal,aaah,sonofabitch,paralyzed,lotta,locks,guaranteed,dummy,despise,dental,briefing,bluff,batteries,whatta,sounding,servants,presume,handwriting,fainted,dried,allright,acknowledge,whacked,toxic,reliable,quicker,overwhelming,lining,harassing,fatal,endless,dolls,convict,whatcha,unlikely,shutting,positively,overcome,goddam,essence,dose,diagnosis,cured,bully,ahold,yearbook,tempting,shelf,prosecution,pouring,possessed,greedy,wonders,thorough,spine,rath,psychiatric,meaningless,latte,jammed,ignored,fiance,evidently,contempt,compromised,cans,weekends,urge,theft,suing,shipment,scissors,responding,proposition,noises,matching,hormones,hail,grandchildren,gently,smashed,sexually,sentimental,nicest,manipulated,intern,handcuffs,framed,errands,entertaining,crib,carriage,barge,spends,slipping,seated,rubbing,rely,reject,recommendation,reckon,headaches,float,embrace,corners,whining,sweating,skipped,mountie,motives,listens,cristobel,cleaner,cheerleader,balsom,unnecessary,stunning,scent,quartermaines,pose,montega,loosen,info,hottest,haunt,gracious,forgiving,errand,cakes,blames,abortion,sketch,shifts,plotting,perimeter,pals,mere,mattered,lonigan,interference,eyewitness,enthusiasm,diapers,strongest,shaken,punched,portal,catches,backyard,terrorists,sabotage,organs,needy,cuff,civilization,woof,who'll,prank,obnoxious,mates,hereby,gabby,faked,cellar,whitelighter,void,strangle,sour,muffins,interfering,demonic,clearing,boutique,barrington,terrace,smoked,righty,quack,petey,pact,knot,ketchup,disappearing,cordy,uptight,ticking,terrifying,tease,swamp,secretly,rejection,reflection,realizing,rays,mentally,marone,doubted,deception,congressman,cheesy,toto,stalling,scoop,ribbon,immune,expects,destined,bets,bathing,appreciation,accomplice,wander,shoved,sewer,scroll,retire,lasts,fugitive,freezer,discount,cranky,crank,clearance,bodyguard,anxiety,accountant,whoops,volunteered,talents,stinking,remotely,garlic,decency,cord,beds,altogether,uniforms,tremendous,popping,outa,observe,lung,hangs,feelin,dudes,donation,disguise,curb,bites,antique,toothbrush,realistic,predict,landlord,hourglass,hesitate,consolation,babbling,tipped,stranded,smartest,repeating,puke,psst,paycheck,overreacted,macho,juvenile,grocery,freshen,disposal,cuffs,caffeine,vanished,unfinished,ripping,pinch,flattering,expenses,dinners,colleague,ciao,belthazor,attorneys,woulda,whereabouts,waitin,truce,tripped,tasted,steer,poisoning,manipulative,immature,husbands,heel,granddad,delivering,condoms,addict,trashed,raining,pasta,needles,leaning,detector,coolest,batch,appointments,almighty,vegetables,spark,perfection,pains,momma,mole,meow,hairs,getaway,cracking,compliments,behold,verge,tougher,timer,tapped,taped,specialty,snooping,shoots,rendezvous,pentagon,leverage,jeopardize,janitor,grandparents,forbidden,clueless,bidding,ungrateful,unacceptable,tutor,serum,scuse,pajamas,mouths,lure,irrational,doom,cries,beautifully,arresting,approaching,traitor,sympathetic,smug,smash,rental,prostitute,premonitions,jumps,inventory,darlin,committing,banging,asap,worms,violated,vent,traumatic,traced,sweaty,shaft,overboard,insight,healed,grasp,experiencing,crappy,crab,chunk,awww,stain,shack,reacted,pronounce,poured,moms,marriages,jabez,handful,flipped,fireplace,embarrassment,disappears,concussion,bruises,brakes,twisting,swept,summon,splitting,sloppy,settling,reschedule,notch,hooray,grabbing,exquisite,disrespect,thornhart,straw,slapped,shipped,shattered,ruthless,refill,payroll,numb,mourning,manly,hunk,entertain,drift,dreadful,doorstep,confirmation,chops,appreciates,vague,tires,stressful,stashed,stash,sensed,preoccupied,predictable,noticing,madly,gunshot,dozens,dork,confuse,cleaners,charade,chalk,cappuccino,bouquet,amulet,addiction,who've,warming,unlock,satisfy,sacrificed,relaxing,lone,blocking,blend,blankets,addicted,yuck,hunger,hamburger,greeting,greet,gravy,gram,dreamt,dice,caution,backpack,agreeing,whale,taller,supervisor,sacrifices,phew,ounce,irrelevant,gran,felon,favorites,farther,fade,erased,easiest,convenience,compassionate,cane,backstage,agony,adores,veins,tweek,thieves,surgical,strangely,stetson,recital,proposing,productive,meaningful,immunity,hassle,goddamned,frighten,dearly,cease,ambition,wage,unstable,salvage,richer,refusing,raging,pumping,pressuring,mortals,lowlife,intimidated,intentionally,inspire,forgave,devotion,despicable,deciding,dash,comfy,breach,bark,aaaah,switching,swallowed,stove,screamed,scars,russians,pounding,poof,pipes,pawn,legit,invest,farewell,curtains,civilized,caviar,boost,token,superstition,supernatural,sadness,recorder,psyched,motivated,microwave,hallelujah,fraternity,dryer,cocoa,chewing,acceptable,unbelievably,smiled,smelling,simpler,respectable,remarks,khasinau,indication,gutter,grabs,fulfill,flashlight,ellenor,blooded,blink,blessings,beware,uhhh,turf,swings,slips,shovel,shocking,puff,mirrors,locking,heartless,fras,childish,cardiac,utterly,tuscany,ticked,stunned,statesville,sadly,purely,kiddin,jerks,hitch,flirt,fare,equals,dismiss,christening,casket,c'mere,breakup,biting,antibiotics,accusation,abducted,witchcraft,thread,runnin,punching,paramedics,newest,murdering,masks,lawndale,initials,grampa,choking,charms,careless,bushes,buns,bummed,shred,saves,saddle,rethink,regards,precinct,persuade,meds,manipulating,llanfair,leash,hearted,guarantees,fucks,disgrace,deposition,bookstore,boil,vitals,veil,trespassing,sidewalk,sensible,punishing,overtime,optimistic,obsessing,notify,mornin,jeopardy,jaffa,injection,hilarious,desires,confide,cautious,yada,where're,vindictive,vial,teeny,stroll,sittin,scrub,rebuild,posters,ordeal,nuns,intimacy,inheritance,exploded,donate,distracting,despair,crackers,wildwind,virtue,thoroughly,tails,spicy,sketches,sights,sheer,shaving,seize,scarecrow,refreshing,prosecute,platter,napkin,misplaced,merchandise,loony,jinx,heroic,frankenstein,ambitious,syrup,solitary,resemblance,reacting,premature,lavery,flashes,cheque,awright,acquainted,wrapping,untie,salute,realised,priceless,partying,lightly,lifting,kasnoff,insisting,glowing,generator,explosives,cutie,confronted,buts,blouse,ballistic,antidote,analyze,allowance,adjourned,unto,understatement,tucked,touchy,subconscious,screws,sarge,roommates,rambaldi,offend,nerd,knives,irresistible,incapable,hostility,goddammit,fuse,frat,curfew,blackmailed,walkin,starve,sleigh,sarcastic,recess,rebound,pinned,parlor,outfits,livin,heartache,haired,fundraiser,doorman,discreet,dilucca,cracks,considerate,climbed,catering,apophis,zoey,urine,strung,stitches,sordid,sark,protector,phoned,pets,hostess,flaw,flavor,deveraux,consumed,confidentiality,bourbon,straightened,specials,spaghetti,prettier,powerless,playin,playground,paranoia,instantly,havoc,exaggerating,eavesdropping,doughnuts,diversion,deepest,cutest,comb,bela,behaving,anyplace,accessory,workout,translate,stuffing,speeding,slime,royalty,polls,marital,lurking,lottery,imaginary,greetings,fairwinds,elegant,elbow,credibility,credentials,claws,chopped,bridal,bedside,babysitting,witty,unforgivable,underworld,tempt,tabs,sophomore,selfless,secrecy,restless,okey,movin,metaphor,messes,meltdown,lecter,incoming,gasoline,diefenbaker,buckle,admired,adjustment,warmth,throats,seduced,queer,parenting,noses,luckiest,graveyard,gifted,footsteps,dimeras,cynical,wedded,verbal,unpredictable,tuned,stoop,slides,sinking,rigged,plumbing,lingerie,hankey,greed,everwood,elope,dresser,chauffeur,bulletin,bugged,bouncing,temptation,strangest,slammed,sarcasm,pending,packages,orderly,obsessive,murderers,meteor,inconvenience,glimpse,froze,execute,courageous,consulate,closes,bosses,bees,amends,wuss,wolfram,wacky,unemployed,testifying,syringe,stew,startled,sorrow,sleazy,shaky,screams,rsquo,remark,poke,nutty,mentioning,mend,inspiring,impulsive,housekeeper,foam,fingernails,conditioning,baking,whine,thug,starved,sniffing,sedative,programmed,picket,paged,hound,homosexual,homo,hips,forgets,flipping,flea,flatter,dwell,dumpster,choo,assignments,ants,vile,unreasonable,tossing,thanked,steals,souvenir,scratched,psychopath,outs,obstruction,obey,lump,insists,harass,gloat,filth,edgy,didn,coroner,confessing,bruise,betraying,bailing,appealing,adebisi,wrath,wandered,waist,vain,traps,stepfather,poking,obligated,heavenly,dilemma,crazed,contagious,coaster,cheering,bundle,vomit,thingy,speeches,robbing,raft,pumped,pillows,peep,packs,neglected,m'kay,loneliness,intrude,helluva,gardener,forresters,drooling,betcha,vase,supermarket,squat,spitting,rhyme,relieve,receipts,racket,pictured,pause,overdue,motivation,morgendorffer,kidnapper,insect,horns,feminine,eyeballs,dumps,disappointing,crock,convertible,claw,clamp,canned,cambias,bathtub,avanya,artery,weep,warmer,suspense,summoned,spiders,reiber,raving,pushy,postponed,ohhhh,noooo,mold,laughter,incompetent,hugging,groceries,drip,communicating,auntie,adios,wraps,wiser,willingly,weirdest,timmih,thinner,swelling,swat,steroids,sensitivity,scrape,rehearse,prophecy,ledge,justified,insults,hateful,handles,doorway,chatting,buyer,buckaroo,bedrooms,askin,ammo,tutoring,subpoena,scratching,privileges,pager,mart,intriguing,idiotic,grape,enlighten,corrupt,brunch,bridesmaid,barking,applause,acquaintance,wretched,superficial,soak,smoothly,sensing,restraint,posing,pleading,payoff,oprah,nemo,morals,loaf,jumpy,ignorant,herbal,hangin,germs,generosity,flashing,doughnut,clumsy,chocolates,captive,behaved,apologise,vanity,stumbled,preview,poisonous,perjury,parental,onboard,mugged,minding,linen,knots,interviewing,humour,grind,greasy,goons,drastic,coop,comparing,cocky,clearer,bruised,brag,bind,worthwhile,whoop,vanquishing,tabloids,sprung,spotlight,sentencing,racist,provoke,pining,overly,locket,imply,impatient,hovering,hotter,fest,endure,dots,doren,debts,crawled,chained,brit,breaths,weirdo,warmed,wand,troubling,tok'ra,strapped,soaked,skipping,scrambled,rattle,profound,musta,mocking,misunderstand,limousine,kacl,hustle,forensic,enthusiastic,duct,drawers,devastating,conquer,clarify,chores,cheerleaders,cheaper,callin,blushing,barging,abused,yoga,wrecking,wits,waffles,virginity,vibes,uninvited,unfaithful,teller,strangled,scheming,ropes,rescuing,rave,postcard,o'reily,morphine,lotion,lads,kidneys,judgement,itch,indefinitely,grenade,glamorous,genetically,freud,discretion,delusions,crate,competent,bakery,argh,ahhhh,wedge,wager,unfit,tripping,torment,superhero,stirring,spinal,sorority,seminar,scenery,rabble,pneumonia,perks,override,ooooh,mija,manslaughter,mailed,lime,lettuce,intimidate,guarded,grieve,grad,frustration,doorbell,chinatown,authentic,arraignment,annulled,allergies,wanta,verify,vegetarian,tighter,telegram,stalk,spared,shoo,satisfying,saddam,requesting,pens,overprotective,obstacles,notified,nasedo,grandchild,genuinely,flushed,fluids,floss,escaping,ditched,cramp,corny,bunk,bitten,billions,bankrupt,yikes,wrists,ultrasound,ultimatum,thirst,sniff,shakes,salsa,retrieve,reassuring,pumps,neurotic,negotiating,needn't,monitors,millionaire,lydecker,limp,incriminating,hatchet,gracias,gordie,fills,feeds,doubting,decaf,biopsy,whiz,voluntarily,ventilator,unpack,unload,toad,spooked,snitch,schillinger,reassure,persuasive,mystical,mysteries,matrimony,mails,jock,headline,explanations,dispatch,curly,cupid,condolences,comrade,cassadines,bulb,bragging,awaits,assaulted,ambush,adolescent,abort,yank,whit,vaguely,undermine,tying,swamped,stabbing,slippers,slash,sincerely,sigh,setback,secondly,rotting,precaution,pcpd,melting,liaison,hots,hooking,headlines,haha,ganz,fury,felicity,fangs,encouragement,earring,dreidel,dory,donut,dictate,decorating,cocktails,bumps,blueberry,believable,backfired,backfire,apron,adjusting,vous,vouch,vitamins,ummm,tattoos,slimy,sibling,shhhh,renting,peculiar,parasite,paddington,marries,mailbox,magically,lovebirds,knocks,informant,exits,drazen,distractions,disconnected,dinosaurs,dashwood,crooked,conveniently,wink,warped,underestimated,tacky,shoving,seizure,reset,pushes,opener,mornings,mash,invent,indulge,horribly,hallucinating,festive,eyebrows,enjoys,desperation,dealers,darkest,daph,boragora,belts,bagel,authorization,auditions,agitated,wishful,wimp,vanish,unbearable,tonic,suffice,suction,slaying,safest,rocking,relive,puttin,prettiest,noisy,newlyweds,nauseous,misguided,mildly,midst,liable,judgmental,indy,hunted,givin,fascinated,elephants,dislike,deluded,decorate,crummy,contractions,carve,bottled,bonded,bahamas,unavailable,twenties,trustworthy,surgeons,stupidity,skies,remorse,preferably,pies,nausea,napkins,mule,mourn,melted,mashed,inherit,greatness,golly,excused,dumbo,drifting,delirious,damaging,cubicle,compelled,comm,chooses,checkup,boredom,bandages,alarms,windshield,who're,whaddya,transparent,surprisingly,sunglasses,slit,roar,reade,prognosis,probe,pitiful,persistent,peas,nosy,nagging,morons,masterpiece,martinis,limbo,liars,irritating,inclined,hump,hoynes,fiasco,eatin,cubans,concentrating,colorful,clam,cider,brochure,barto,bargaining,wiggle,welcoming,weighing,vanquished,stains,sooo,snacks,smear,sire,resentment,psychologist,pint,overhear,morality,landingham,kisser,hoot,holling,handshake,grilled,formality,elevators,depths,confirms,boathouse,accidental,westbridge,wacko,ulterior,thugs,thighs,tangled,stirred,snag,sling,sleaze,rumour,ripe,remarried,puddle,pins,perceptive,miraculous,longing,lockup,librarian,impressions,immoral,hypothetically,guarding,gourmet,gabe,faxed,extortion,downright,digest,cranberry,bygones,buzzing,burying,bikes,weary,taping,takeout,sweeping,stepmother,stale,senor,seaborn,pros,pepperoni,newborn,ludicrous,injected,geeks,forged,faults,drue,dire,dief,desi,deceiving,caterer,calmed,budge,ankles,vending,typing,tribbiani,there're,squared,snowing,shades,sexist,rewrite,regretted,raises,picky,orphan,mural,misjudged,miscarriage,memorize,leaking,jitters,invade,interruption,illegally,handicapped,glitch,gittes,finer,distraught,dispose,dishonest,digs,dads,cruelty,circling,canceling,butterflies,belongings,barbrady,amusement,alias,zombies,where've,unborn,swearing,stables,squeezed,sensational,resisting,radioactive,questionable,privileged,portofino,owning,overlook,orson,oddly,interrogate,imperative,impeccable,hurtful,hors,heap,graders,glance,disgust,devious,destruct,crazier,countdown,chump,cheeseburger,burglar,berries,ballroom,assumptions,annoyed,allergy,admirer,admirable,activate,underpants,twit,tack,strokes,stool,sham,scrap,retarded,resourceful,remarkably,refresh,pressured,precautions,pointy,nightclub,mustache,maui,lace,hunh,hubby,flare,dont,dokey,dangerously,crushing,clinging,choked,chem,cheerleading,checkbook,cashmere,calmly,blush,believer,amazingly,alas,what've,toilets,tacos,stairwell,spirited,sewing,rubbed,punches,protects,nuisance,motherfuckers,mingle,kynaston,knack,kinkle,impose,gullible,godmother,funniest,friggin,folding,fashions,eater,dysfunctional,drool,dripping,ditto,cruising,criticize,conceive,clone,cedars,caliber,brighter,blinded,birthdays,banquet,anticipate,annoy,whim,whichever,volatile,veto,vested,shroud,rests,reindeer,quarantine,pleases,painless,orphans,orphanage,offence,obliged,negotiation,narcotics,mistletoe,meddling,manifest,lookit,lilah,intrigued,injustice,homicidal,gigantic,exposing,elves,disturbance,disastrous,depended,demented,correction,cooped,cheerful,buyers,brownies,beverage,basics,arvin,weighs,upsets,unethical,swollen,sweaters,stupidest,sensation,scalpel,props,prescribed,pompous,objections,mushrooms,mulwray,manipulation,lured,internship,insignificant,inmate,incentive,fulfilled,disagreement,crypt,cornered,copied,brightest,beethoven,attendant,amaze,yogurt,wyndemere,vocabulary,tulsa,tactic,stuffy,respirator,pretends,polygraph,pennies,ordinarily,olives,necks,morally,martyr,leftovers,joints,hopping,homey,hints,heartbroken,forge,florist,firsthand,fiend,dandy,crippled,corrected,conniving,conditioner,clears,chemo,bubbly,bladder,beeper,baptism,wiring,wench,weaknesses,volunteering,violating,unlocked,tummy,surrogate,subid,stray,startle,specifics,slowing,scoot,robbers,rightful,richest,qfxmjrie,puffs,pierced,pencils,paralysis,makeover,luncheon,linksynergy,jerky,jacuzzi,hitched,hangover,fracture,flock,firemen,disgusted,darned,clams,borrowing,banged,wildest,weirder,unauthorized,stunts,sleeves,sixties,shush,shalt,retro,quits,pegged,painfully,paging,omelet,memorized,lawfully,jackets,intercept,ingredient,grownup,glued,fulfilling,enchanted,delusion,daring,compelling,carton,bridesmaids,bribed,boiling,bathrooms,bandage,awaiting,assign,arrogance,antiques,ainsley,turkeys,trashing,stockings,stalked,stabilized,skates,sedated,robes,respecting,psyche,presumptuous,prejudice,paragraph,mocha,mints,mating,mantan,lorne,loads,listener,itinerary,hepatitis,heave,guesses,fading,examining,dumbest,dishwasher,deceive,cunning,cripple,convictions,confided,compulsive,compromising,burglary,bumpy,brainwashed,benes,arnie,affirmative,adrenaline,adamant,watchin,waitresses,transgenic,toughest,tainted,surround,stormed,spree,spilling,spectacle,soaking,shreds,sewers,severed,scarce,scamming,scalp,rewind,rehearsing,pretentious,potions,overrated,obstacle,nerds,meems,mcmurphy,maternity,maneuver,loathe,fertility,eloping,ecstatic,ecstasy,divorcing,dignan,costing,clubhouse,clocks,candid,bursting,breather,braces,bending,arsonist,adored,absorb,valiant,uphold,unarmed,topolsky,thrilling,thigh,terminate,sustain,spaceship,snore,sneeze,smuggling,salty,quaint,patronize,patio,morbid,mamma,kettle,joyous,invincible,interpret,insecurities,impulses,illusions,holed,exploit,drivin,defenseless,dedicate,cradle,coupon,countless,conjure,cardboard,booking,backseat,accomplishment,wordsworth,wisely,valet,vaccine,urges,unnatural,unlucky,truths,traumatized,tasting,swears,strawberries,steaks,stats,skank,seducing,secretive,scumbag,screwdriver,schedules,rooting,rightfully,rattled,qualifies,puppets,prospects,pronto,posse,polling,pedestal,palms,muddy,morty,microscope,merci,lecturing,inject,incriminate,hygiene,grapefruit,gazebo,funnier,cuter,bossy,booby,aides,zende,winthrop,warrants,valentines,undressed,underage,truthfully,tampered,suffers,speechless,sparkling,sidelines,shrek,railing,puberty,pesky,outrage,outdoors,motions,moods,lunches,litter,kidnappers,itching,intuition,imitation,humility,hassling,gallons,drugstore,dosage,disrupt,dipping,deranged,debating,cuckoo,cremated,craziness,cooperating,circumstantial,chimney,blinking,biscuits,admiring,weeping,triad,trashy,soothing,slumber,slayers,skirts,siren,shindig,sentiment,rosco,riddance,quaid,purity,proceeding,pretzels,panicking,mckechnie,lovin,leaked,intruding,impersonating,ignorance,hamburgers,footprints,fluke,fleas,festivities,fences,feisty,evacuate,emergencies,deceived,creeping,craziest,corpses,conned,coincidences,bounced,bodyguards,blasted,bitterness,baloney,ashtray,apocalypse,zillion,watergate,wallpaper,telesave,sympathize,sweeter,startin,spades,sodas,snowed,sleepover,signor,seein,retainer,restroom,rested,repercussions,reliving,reconcile,prevail,preaching,overreact,o'neil,noose,moustache,manicure,maids,landlady,hypothetical,hopped,homesick,hives,hesitation,herbs,hectic,heartbreak,haunting,gangs,frown,fingerprint,exhausting,everytime,disregard,cling,chevron,chaperone,blinding,bitty,beads,battling,badgering,anticipation,upstanding,unprofessional,unhealthy,turmoil,truthful,toothpaste,tippin,thoughtless,tagataya,shooters,senseless,rewarding,propane,preposterous,pigeons,pastry,overhearing,obscene,negotiable,loner,jogging,itchy,insinuating,insides,hospitality,hormone,hearst,forthcoming,fists,fifties,etiquette,endings,destroys,despises,deprived,cuddy,crust,cloak,circumstance,chewed,casserole,bidder,bearer,artoo,applaud,appalling,vowed,virgins,vigilante,undone,throttle,testosterone,tailor,symptom,swoop,suitcases,stomp,sticker,stakeout,spoiling,snatched,smoochy,smitten,shameless,restraints,researching,renew,refund,reclaim,raoul,puzzles,purposely,punks,prosecuted,plaid,picturing,pickin,parasites,mysteriously,multiply,mascara,jukebox,interruptions,gunfire,furnace,elbows,duplicate,drapes,deliberate,decoy,cryptic,coupla,condemn,complicate,colossal,clerks,clarity,brushed,banished,argon,alarmed,worships,versa,uncanny,technicality,sundae,stumble,stripping,shuts,schmuck,satin,saliva,robber,relentless,reconnect,recipes,rearrange,rainy,psychiatrists,policemen,plunge,plugged,patched,overload,o'malley,mindless,menus,lullaby,lotte,leavin,killin,karinsky,invalid,hides,grownups,griff,flaws,flashy,flaming,fettes,evicted,dread,degrassi,dealings,dangers,cushion,bowel,barged,abide,abandoning,wonderfully,wait'll,violate,suicidal,stayin,sorted,slamming,sketchy,shoplifting,raiser,quizmaster,prefers,needless,motherhood,momentarily,migraine,lifts,leukemia,leftover,keepin,hinks,hellhole,gowns,goodies,gallon,futures,entertained,eighties,conspiring,cheery,benign,apiece,adjustments,abusive,abduction,wiping,whipping,welles,unspeakable,unidentified,trivial,transcripts,textbook,supervise,superstitious,stricken,stimulating,spielberg,slices,shelves,scratches,sabotaged,retrieval,repressed,rejecting,quickie,ponies,peeking,outraged,o'connell,moping,moaning,mausoleum,licked,kovich,klutz,interrogating,interfered,insulin,infested,incompetence,hyper,horrified,handedly,gekko,fraid,fractured,examiner,eloped,disoriented,dashing,crashdown,courier,cockroach,chipped,brushing,bombed,bolts,baths,baptized,astronaut,assurance,anemia,abuela,abiding,withholding,weave,wearin,weaker,suffocating,straws,straightforward,stench,steamed,starboard,sideways,shrinks,shortcut,scram,roasted,roaming,riviera,respectfully,repulsive,psychiatry,provoked,penitentiary,painkillers,ninotchka,mitzvah,milligrams,midge,marshmallows,looky,lapse,kubelik,intellect,improvise,implant,goa'ulds,giddy,geniuses,fruitcake,footing,fightin,drinkin,doork,detour,cuddle,crashes,combo,colonnade,cheats,cetera,bailiff,auditioning,assed,amused,alienate,aiding,aching,unwanted,topless,tongues,tiniest,superiors,soften,sheldrake,rawley,raisins,presses,plaster,nessa,narrowed,minions,merciful,lawsuits,intimidating,infirmary,inconvenient,imposter,hugged,honoring,holdin,hades,godforsaken,fumes,forgery,foolproof,folder,flattery,fingertips,exterminator,explodes,eccentric,dodging,disguised,crave,constructive,concealed,compartment,chute,chinpokomon,bodily,astronauts,alimony,accustomed,abdominal,wrinkle,wallow,valium,untrue,uncover,trembling,treasures,torched,toenails,timed,termites,telly,taunting,taransky,talker,succubus,smarts,sliding,sighting,semen,seizures,scarred,savvy,sauna,saddest,sacrificing,rubbish,riled,ratted,rationally,provenance,phonse,perky,pedal,overdose,nasal,nanites,mushy,movers,missus,midterm,merits,melodramatic,manure,knitting,invading,interpol,incapacitated,hotline,hauling,gunpoint,grail,ganza,framing,flannel,faded,eavesdrop,desserts,calories,breathtaking,bleak,blacked,batter,aggravated,yanked,wigand,whoah,unwind,undoubtedly,unattractive,twitch,trimester,torrance,timetable,taxpayers,strained,stared,slapping,sincerity,siding,shenanigans,shacking,sappy,samaritan,poorer,politely,paste,oysters,overruled,nightcap,mosquito,millimeter,merrier,manhood,lucked,kilos,ignition,hauled,harmed,goodwill,freshmen,fenmore,fasten,farce,exploding,erratic,drunks,ditching,d'artagnan,cramped,contacting,closets,clientele,chimp,bargained,arranging,anesthesia,amuse,altering,afternoons,accountable,abetting,wolek,waved,uneasy,toddy,tattooed,spauldings,sliced,sirens,schibetta,scatter,rinse,remedy,redemption,pleasures,optimism,oblige,mmmmm,masked,malicious,mailing,kosher,kiddies,judas,isolate,insecurity,incidentally,heals,headlights,growl,grilling,glazed,flunk,floats,fiery,fairness,exercising,excellency,disclosure,cupboard,counterfeit,condescending,conclusive,clicked,cleans,cholesterol,cashed,broccoli,brats,blueprints,blindfold,billing,attach,appalled,alrighty,wynant,unsolved,unreliable,toots,tighten,sweatshirt,steinbrenner,steamy,spouse,sonogram,slots,sleepless,shines,retaliate,rephrase,redeem,rambling,quilt,quarrel,prying,proverbial,priced,prescribe,prepped,pranks,possessive,plaintiff,pediatrics,overlooked,outcast,nightgown,mumbo,mediocre,mademoiselle,lunchtime,lifesaver,leaned,lambs,interns,hounding,hellmouth,hahaha,goner,ghoul,gardening,frenzy,foyer,extras,exaggerate,everlasting,enlightened,dialed,devote,deceitful,d'oeuvres,cosmetic,contaminated,conspired,conning,cavern,carving,butting,boiled,blurry,babysit,ascension,aaaaah,wildly,whoopee,whiny,weiskopf,walkie,vultures,vacations,upfront,unresolved,tampering,stockholders,snaps,sleepwalking,shrunk,sermon,seduction,scams,revolve,phenomenal,patrolling,paranormal,ounces,omigod,nightfall,lashing,innocents,infierno,incision,humming,haunts,gloss,gloating,frannie,fetal,feeny,entrapment,discomfort,detonator,dependable,concede,complication,commotion,commence,chulak,caucasian,casually,brainer,bolie,ballpark,anwar,analyzing,accommodations,youse,wring,wallowing,transgenics,thrive,tedious,stylish,strippers,sterile,squeezing,squeaky,sprained,solemn,snoring,shattering,shabby,seams,scrawny,revoked,residue,reeks,recite,ranting,quoting,predicament,plugs,pinpoint,petrified,pathological,passports,oughtta,nighter,navigate,kippie,intrigue,intentional,insufferable,hunky,how've,horrifying,hearty,hamptons,grazie,funerals,forks,fetched,excruciating,enjoyable,endanger,dumber,drying,diabolical,crossword,corry,comprehend,clipped,classmates,candlelight,brutally,brutality,boarded,bathrobe,authorize,assemble,aerobics,wholesome,whiff,vermin,trophies,trait,tragically,toying,testy,tasteful,stocked,spinach,sipping,sidetracked,scrubbing,scraping,sanctity,robberies,ridin,retribution,refrain,realities,radiant,protesting,projector,plutonium,payin,parting,o'reilly,nooooo,motherfucking,measly,manic,lalita,juggling,jerking,intro,inevitably,hypnosis,huddle,horrendous,hobbies,heartfelt,harlin,hairdresser,gonorrhea,fussing,furtwangler,fleeting,flawless,flashed,fetus,eulogy,distinctly,disrespectful,denies,crossbow,cregg,crabs,cowardly,contraction,contingency,confirming,condone,coffins,cleansing,cheesecake,certainty,cages,c'est,briefed,bravest,bosom,boils,binoculars,bachelorette,appetizer,ambushed,alerted,woozy,withhold,vulgar,utmost,unleashed,unholy,unhappiness,unconditional,typewriter,typed,twists,supermodel,subpoenaed,stringing,skeptical,schoolgirl,romantically,rocked,revoir,reopen,puncture,preach,polished,planetarium,penicillin,peacefully,nurturing,more'n,mmhmm,midgets,marklar,lodged,lifeline,jellyfish,infiltrate,hutch,horseback,heist,gents,frickin,freezes,forfeit,flakes,flair,fathered,eternally,epiphany,disgruntled,discouraged,delinquent,decipher,danvers,cubes,credible,coping,chills,cherished,catastrophe,bombshell,birthright,billionaire,ample,affections,admiration,abbotts,whatnot,watering,vinegar,unthinkable,unseen,unprepared,unorthodox,underhanded,uncool,timeless,thump,thermometer,theoretically,tapping,tagged,swung,stares,spiked,solves,smuggle,scarier,saucer,quitter,prudent,powdered,poked,pointers,peril,penetrate,penance,opium,nudge,nostrils,neurological,mockery,mobster,medically,loudly,insights,implicate,hypocritical,humanly,holiness,healthier,hammered,haldeman,gunman,gloom,freshly,francs,flunked,flawed,emptiness,drugging,dozer,derevko,deprive,deodorant,cryin,crocodile,coloring,colder,cognac,clocked,clippings,charades,chanting,certifiable,caterers,brute,brochures,botched,blinders,bitchin,banter,woken,ulcer,tread,thankfully,swine,swimsuit,swans,stressing,steaming,stamped,stabilize,squirm,snooze,shuffle,shredded,seafood,scratchy,savor,sadistic,rhetorical,revlon,realist,prosecuting,prophecies,polyester,petals,persuasion,paddles,o'leary,nuthin,neighbour,negroes,muster,meningitis,matron,lockers,letterman,legged,indictment,hypnotized,housekeeping,hopelessly,hallucinations,grader,goldilocks,girly,flask,envelopes,downside,doves,dissolve,discourage,disapprove,diabetic,deliveries,decorator,crossfire,criminally,containment,comrades,complimentary,chatter,catchy,cashier,cartel,caribou,cardiologist,brawl,booted,barbershop,aryan,angst,administer,zellie,wreak,whistles,vandalism,vamps,uterus,upstate,unstoppable,understudy,tristin,transcript,tranquilizer,toxins,tonsils,stempel,spotting,spectator,spatula,softer,snotty,slinging,showered,sexiest,sensual,sadder,rimbaud,restrain,resilient,remission,reinstate,rehash,recollection,rabies,popsicle,plausible,pediatric,patronizing,ostrich,ortolani,oooooh,omelette,mistrial,marseilles,loophole,laughin,kevvy,irritated,infidelity,hypothermia,horrific,groupie,grinding,graceful,goodspeed,gestures,frantic,extradition,echelon,disks,dawnie,dared,damsel,curled,collateral,collage,chant,calculating,bumping,bribes,boardwalk,blinds,blindly,bleeds,bickering,beasts,backside,avenge,apprehended,anguish,abusing,youthful,yells,yanking,whomever,when'd,vomiting,vengeful,unpacking,unfamiliar,undying,tumble,trolls,treacherous,tipping,tantrum,tanked,summons,straps,stomped,stinkin,stings,staked,squirrels,sprinkles,speculate,sorting,skinned,sicko,sicker,shootin,shatter,seeya,schnapps,s'posed,ronee,respectful,regroup,regretting,reeling,reckoned,ramifications,puddy,projections,preschool,plissken,platonic,permalash,outdone,outburst,mutants,mugging,misfortune,miserably,miraculously,medications,margaritas,manpower,lovemaking,logically,leeches,latrine,kneel,inflict,impostor,hypocrisy,hippies,heterosexual,heightened,hecuba,healer,gunned,grooming,groin,gooey,gloomy,frying,friendships,fredo,firepower,fathom,exhaustion,evils,endeavor,eggnog,dreaded,d'arcy,crotch,coughing,coronary,cookin,consummate,congrats,companionship,caved,caspar,bulletproof,brilliance,breakin,brash,blasting,aloud,airtight,advising,advertise,adultery,aches,wronged,upbeat,trillion,thingies,tending,tarts,surreal,specs,specialize,spade,shrew,shaping,selves,schoolwork,roomie,recuperating,rabid,quart,provocative,proudly,pretenses,prenatal,pharmaceuticals,pacing,overworked,originals,nicotine,murderous,mileage,mayonnaise,massages,losin,interrogated,injunction,impartial,homing,heartbreaker,hacks,glands,giver,fraizh,flips,flaunt,englishman,electrocuted,dusting,ducking,drifted,donating,cylon,crutches,crates,cowards,comfortably,chummy,chitchat,childbirth,businesswoman,brood,blatant,bethy,barring,bagged,awakened,asbestos,airplanes,worshipped,winnings,why're,visualize,unprotected,unleash,trays,thicker,therapists,takeoff,streisand,storeroom,stethoscope,stacked,spiteful,sneaks,snapping,slaughtered,slashed,simplest,silverware,shits,secluded,scruples,scrubs,scraps,ruptured,roaring,receptionist,recap,raditch,radiator,pushover,plastered,pharmacist,perverse,perpetrator,ornament,ointment,nineties,napping,nannies,mousse,moors,momentary,misunderstandings,manipulator,malfunction,laced,kivar,kickin,infuriating,impressionable,holdup,hires,hesitated,headphones,hammering,groundwork,grotesque,graces,gauze,gangsters,frivolous,freeing,fours,forwarding,ferrars,faulty,fantasizing,extracurricular,empathy,divorces,detonate,depraved,demeaning,deadlines,dalai,cursing,cufflink,crows,coupons,comforted,claustrophobic,casinos,camped,busboy,bluth,bennetts,baskets,attacker,aplastic,angrier,affectionate,zapped,wormhole,weaken,unrealistic,unravel,unimportant,unforgettable,twain,suspend,superbowl,stutter,stewardess,stepson,standin,spandex,souvenirs,sociopath,skeletons,shivering,sexier,selfishness,scrapbook,ritalin,ribbons,reunite,remarry,relaxation,rattling,rapist,psychosis,prepping,poses,pleasing,pisses,piling,persecuted,padded,operatives,negotiator,natty,menopause,mennihan,martimmys,loyalties,laynie,lando,justifies,intimately,inexperienced,impotent,immortality,horrors,hooky,hinges,heartbreaking,handcuffed,gypsies,guacamole,grovel,graziella,goggles,gestapo,fussy,ferragamo,feeble,eyesight,explosions,experimenting,enchanting,doubtful,dizziness,dismantle,detectors,deserving,defective,dangling,dancin,crumble,creamed,cramping,conceal,clockwork,chrissakes,chrissake,chopping,cabinets,brooding,bonfire,blurt,bloated,blackmailer,beforehand,bathed,bathe,barcode,banish,badges,babble,await,attentive,aroused,antibodies,animosity,ya'll,wrinkled,wonderland,willed,whisk,waltzing,waitressing,vigilant,upbringing,unselfish,uncles,trendy,trajectory,striped,stamina,stalled,staking,stacks,spoils,snuff,snooty,snide,shrinking,senora,secretaries,scoundrel,saline,salads,rundown,riddles,relapse,recommending,raspberry,plight,pecan,pantry,overslept,ornaments,niner,negligent,negligence,nailing,mucho,mouthed,monstrous,malpractice,lowly,loitering,logged,lingering,lettin,lattes,kamal,juror,jillefsky,jacked,irritate,intrusion,insatiable,infect,impromptu,icing,hmmmm,hefty,gasket,frightens,flapping,firstborn,faucet,estranged,envious,dopey,doesn,disposition,disposable,disappointments,dipped,dignified,deceit,dealership,deadbeat,curses,coven,counselors,concierge,clutches,casbah,callous,cahoots,brotherly,britches,brides,bethie,beige,autographed,attendants,attaboy,astonishing,appreciative,antibiotic,aneurysm,afterlife,affidavit,zoning,whats,whaddaya,vasectomy,unsuspecting,toula,topanga,tonio,toasted,tiring,terrorized,tenderness,tailing,sweats,suffocated,sucky,subconsciously,starvin,sprouts,spineless,sorrows,snowstorm,smirk,slicery,sledding,slander,simmer,signora,sigmund,seventies,sedate,scented,sandals,rollers,retraction,resigning,recuperate,receptive,racketeering,queasy,provoking,priors,prerogative,premed,pinched,pendant,outsiders,orbing,opportunist,olanov,neurologist,nanobot,mommies,molested,misread,mannered,laundromat,intercom,inspect,insanely,infatuation,indulgent,indiscretion,inconsiderate,hurrah,howling,herpes,hasta,harassed,hanukkah,groveling,groosalug,gander,galactica,futile,fridays,flier,fixes,exploiting,exorcism,evasive,endorse,emptied,dreary,dreamy,downloaded,dodged,doctored,disobeyed,disneyland,disable,dehydrated,contemplating,coconuts,cockroaches,clogged,chilling,chaperon,cameraman,bulbs,bucklands,bribing,brava,bracelets,bowels,bluepoint,appetizers,appendix,antics,anointed,analogy,almonds,yammering,winch,weirdness,wangler,vibrations,vendor,unmarked,unannounced,twerp,trespass,travesty,transfusion,trainee,towelie,tiresome,straightening,staggering,sonar,socializing,sinus,sinners,shambles,serene,scraped,scones,scepter,sarris,saberhagen,ridiculously,ridicule,rents,reconciled,radios,publicist,pubes,prune,prude,precrime,postponing,pluck,perish,peppermint,peeled,overdo,nutshell,nostalgic,mulan,mouthing,mistook,meddle,maybourne,martimmy,lobotomy,livelihood,lippman,likeness,kindest,kaffee,jocks,jerked,jeopardizing,jazzed,insured,inquisition,inhale,ingenious,holier,helmets,heirloom,heinous,haste,harmsway,hardship,hanky,gutters,gruesome,groping,goofing,godson,glare,finesse,figuratively,ferrie,endangerment,dreading,dozed,dorky,dmitri,divert,discredit,dialing,cufflinks,crutch,craps,corrupted,cocoon,cleavage,cannery,bystander,brushes,bruising,bribery,brainstorm,bolted,binge,ballistics,astute,arroway,adventurous,adoptive,addicts,addictive,yadda,whitelighters,wematanye,weeds,wedlock,wallets,vulnerability,vroom,vents,upped,unsettling,unharmed,trippin,trifle,tracing,tormenting,thats,syphilis,subtext,stickin,spices,sores,smacked,slumming,sinks,signore,shitting,shameful,shacked,septic,seedy,righteousness,relish,rectify,ravishing,quickest,phoebs,perverted,peeing,pedicure,pastrami,passionately,ozone,outnumbered,oregano,offender,nukes,nosed,nighty,nifty,mounties,motivate,moons,misinterpreted,mercenary,mentality,marsellus,lupus,lumbar,lovesick,lobsters,leaky,laundering,latch,jafar,instinctively,inspires,indoors,incarcerated,hundredth,handkerchief,gynecologist,guittierez,groundhog,grinning,goodbyes,geese,fullest,eyelashes,eyelash,enquirer,endlessly,elusive,disarm,detest,deluding,dangle,cotillion,corsage,conjugal,confessional,cones,commandment,coded,coals,chuckle,christmastime,cheeseburgers,chardonnay,celery,campfire,calming,burritos,brundle,broflovski,brighten,borderline,blinked,bling,beauties,bauers,battered,articulate,alienated,ahhhhh,agamemnon,accountants,y'see,wrongful,wrapper,workaholic,winnebago,whispered,warts,vacate,unworthy,unanswered,tonane,tolerated,throwin,throbbing,thrills,thorns,thereof,there've,tarot,sunscreen,stretcher,stereotype,soggy,sobbing,sizable,sightings,shucks,shrapnel,sever,senile,seaboard,scorned,saver,rebellious,rained,putty,prenup,pores,pinching,pertinent,peeping,paints,ovulating,opposites,occult,nutcracker,nutcase,newsstand,newfound,mocked,midterms,marshmallow,marbury,maclaren,leans,krudski,knowingly,keycard,junkies,juilliard,jolinar,irritable,invaluable,inuit,intoxicating,instruct,insolent,inexcusable,incubator,illustrious,hunsecker,houseguest,homosexuals,homeroom,hernia,harming,handgun,hallways,hallucination,gunshots,groupies,groggy,goiter,gingerbread,giggling,frigging,fledged,fedex,fairies,exchanging,exaggeration,esteemed,enlist,drags,dispense,disloyal,disconnect,desks,dentists,delacroix,degenerate,daydreaming,cushions,cuddly,corroborate,complexion,compensated,cobbler,closeness,chilled,checkmate,channing,carousel,calms,bylaws,benefactor,ballgame,baiting,backstabbing,artifact,airspace,adversary,actin,accuses,accelerant,abundantly,abstinence,zissou,zandt,yapping,witchy,willows,whadaya,vilandra,veiled,undress,undivided,underestimating,ultimatums,twirl,truckload,tremble,toasting,tingling,tents,tempered,sulking,stunk,sponges,spills,softly,snipers,scourge,rooftop,riana,revolting,revisit,refreshments,redecorating,recapture,raysy,pretense,prejudiced,precogs,pouting,poofs,pimple,piles,pediatrician,padre,packets,paces,orvelle,oblivious,objectivity,nighttime,nervosa,mexicans,meurice,melts,matchmaker,maeby,lugosi,lipnik,leprechaun,kissy,kafka,introductions,intestines,inspirational,insightful,inseparable,injections,inadvertently,hussy,huckabees,hittin,hemorrhaging,headin,haystack,hallowed,grudges,granilith,grandkids,grading,gracefully,godsend,gobbles,fragrance,fliers,finchley,farts,eyewitnesses,expendable,existential,dorms,delaying,degrading,deduction,darlings,danes,cylons,counsellor,contraire,consciously,conjuring,congratulating,cokes,buffay,brooch,bitching,bistro,bijou,bewitched,benevolent,bends,bearings,barren,aptitude,amish,amazes,abomination,worldly,whispers,whadda,wayward,wailing,vanishing,upscale,untouchable,unspoken,uncontrollable,unavoidable,unattended,trite,transvestite,toupee,timid,timers,terrorizing,swana,stumped,strolling,storybook,storming,stomachs,stoked,stationery,springtime,spontaneity,spits,spins,soaps,sentiments,scramble,scone,rooftops,retract,reflexes,rawdon,ragged,quirky,quantico,psychologically,prodigal,pounce,potty,pleasantries,pints,petting,perceive,onstage,notwithstanding,nibble,newmans,neutralize,mutilated,millionaires,mayflower,masquerade,mangy,macreedy,lunatics,lovable,locating,limping,lasagna,kwang,keepers,juvie,jaded,ironing,intuitive,intensely,insure,incantation,hysteria,hypnotize,humping,happenin,griet,grasping,glorified,ganging,g'night,focker,flunking,flimsy,flaunting,fixated,fitzwallace,fainting,eyebrow,exonerated,ether,electrician,egotistical,earthly,dusted,dignify,detonation,debrief,dazzling,dan'l,damnedest,daisies,crushes,crucify,contraband,confronting,collapsing,cocked,clicks,cliche,circled,chandelier,carburetor,callers,broads,breathes,bloodshed,blindsided,blabbing,bialystock,bashing,ballerina,aviva,arteries,anomaly,airstrip,agonizing,adjourn,aaaaa,yearning,wrecker,witnessing,whence,warhead,unsure,unheard,unfreeze,unfold,unbalanced,ugliest,troublemaker,toddler,tiptoe,threesome,thirties,thermostat,swipe,surgically,subtlety,stung,stumbling,stubs,stride,strangling,sprayed,socket,smuggled,showering,shhhhh,sabotaging,rumson,rounding,risotto,repairman,rehearsed,ratty,ragging,radiology,racquetball,racking,quieter,quicksand,prowl,prompt,premeditated,prematurely,prancing,porcupine,plated,pinocchio,peeked,peddle,panting,overweight,overrun,outing,outgrown,obsess,nursed,nodding,negativity,negatives,musketeers,mugger,motorcade,merrily,matured,masquerading,marvellous,maniacs,lovey,louse,linger,lilies,lawful,kudos,knuckle,juices,judgments,itches,intolerable,intermission,inept,incarceration,implication,imaginative,huckleberry,holster,heartburn,gunna,groomed,graciously,fulfillment,fugitives,forsaking,forgives,foreseeable,flavors,flares,fixation,fickle,fantasize,famished,fades,expiration,exclamation,erasing,eiffel,eerie,earful,duped,dulles,dissing,dissect,dispenser,dilated,detergent,desdemona,debriefing,damper,curing,crispina,crackpot,courting,cordial,conflicted,comprehension,commie,cleanup,chiropractor,charmer,chariot,cauldron,catatonic,bullied,buckets,brilliantly,breathed,booths,boardroom,blowout,blindness,blazing,biologically,bibles,biased,beseech,barbaric,balraj,audacity,anticipating,alcoholics,airhead,agendas,admittedly,absolution,youre,yippee,wittlesey,withheld,willful,whammy,weakest,washes,virtuous,videotapes,vials,unplugged,unpacked,unfairly,turbulence,tumbling,tricking,tremendously,traitors,torches,tinga,thyroid,teased,tawdry,taker,sympathies,swiped,sundaes,suave,strut,stepdad,spewing,spasm,socialize,slither,simulator,shutters,shrewd,shocks,semantics,schizophrenic,scans,savages,rya'c,runny,ruckus,royally,roadblocks,rewriting,revoke,repent,redecorate,recovers,recourse,ratched,ramali,racquet,quince,quiche,puppeteer,puking,puffed,problemo,praises,pouch,postcards,pooped,poised,piled,phoney,phobia,patching,parenthood,pardner,oozing,ohhhhh,numbing,nostril,nosey,neatly,nappa,nameless,mortuary,moronic,modesty,midwife,mcclane,matuka,maitre,lumps,lucid,loosened,loins,lawnmower,lamotta,kroehner,jinxy,jessep,jamming,jailhouse,jacking,intruders,inhuman,infatuated,indigestion,implore,implanted,hormonal,hoboken,hillbilly,heartwarming,headway,hatched,hartmans,harping,grapevine,gnome,forties,flyin,flirted,fingernail,exhilarating,enjoyment,embark,dumper,dubious,drell,docking,disillusioned,dishonor,disbarred,dicey,custodial,counterproductive,corned,cords,contemplate,concur,conceivable,cobblepot,chickened,checkout,carpe,cap'n,campers,buyin,bullies,braid,boxed,bouncy,blueberries,blubbering,bloodstream,bigamy,beeped,bearable,autographs,alarming,wretch,wimps,widower,whirlwind,whirl,warms,vandelay,unveiling,undoing,unbecoming,turnaround,touche,togetherness,tickles,ticker,teensy,taunt,sweethearts,stitched,standpoint,staffers,spotless,soothe,smothered,sickening,shouted,shepherds,shawl,seriousness,schooled,schoolboy,s'mores,roped,reminders,raggedy,preemptive,plucked,pheromones,particulars,pardoned,overpriced,overbearing,outrun,ohmigod,nosing,nicked,neanderthal,mosquitoes,mortified,milky,messin,mecha,markinson,marivellas,mannequin,manderley,madder,macready,lookie,locusts,lifetimes,lanna,lakhi,kholi,impersonate,hyperdrive,horrid,hopin,hogging,hearsay,harpy,harboring,hairdo,hafta,grasshopper,gobble,gatehouse,foosball,floozy,fished,firewood,finalize,felons,euphemism,entourage,elitist,elegance,drokken,drier,dredge,dossier,diseased,diarrhea,diagnose,despised,defuse,d'amour,contesting,conserve,conscientious,conjured,collars,clogs,chenille,chatty,chamomile,casing,calculator,brittle,breached,blurted,birthing,bikinis,astounding,assaulting,aroma,appliance,antsy,amnio,alienating,aliases,adolescence,xerox,wrongs,workload,willona,whistling,werewolves,wallaby,unwelcome,unseemly,unplug,undermining,ugliness,tyranny,tuesdays,trumpets,transference,ticks,tangible,tagging,swallowing,superheroes,studs,strep,stowed,stomping,steffy,sprain,spouting,sponsoring,sneezing,smeared,slink,shakin,sewed,seatbelt,scariest,scammed,sanctimonious,roasting,rightly,retinal,rethinking,resented,reruns,remover,racks,purest,progressing,presidente,preeclampsia,postponement,portals,poppa,pliers,pinning,pelvic,pampered,padding,overjoyed,ooooo,one'll,octavius,nonono,nicknames,neurosurgeon,narrows,misled,mislead,mishap,milltown,milking,meticulous,mediocrity,meatballs,machete,lurch,layin,knockin,khruschev,jurors,jumpin,jugular,jeweler,intellectually,inquiries,indulging,indestructible,indebted,imitate,ignores,hyperventilating,hyenas,hurrying,hermano,hellish,heheh,harshly,handout,grunemann,glances,giveaway,getup,gerome,furthest,frosting,frail,forwarded,forceful,flavored,flammable,flaky,fingered,fatherly,ethic,embezzlement,duffel,dotted,distressed,disobey,disappearances,dinky,diminish,diaphragm,deuces,creme,courteous,comforts,coerced,clots,clarification,chunks,chickie,chases,chaperoning,cartons,caper,calves,caged,bustin,bulging,bringin,boomhauer,blowin,blindfolded,biscotti,ballplayer,bagging,auster,assurances,aschen,arraigned,anonymity,alters,albatross,agreeable,adoring,abduct,wolfi,weirded,watchers,washroom,warheads,vincennes,urgency,understandably,uncomplicated,uhhhh,twitching,treadmill,thermos,tenorman,tangle,talkative,swarm,surrendering,summoning,strive,stilts,stickers,squashed,spraying,sparring,soaring,snort,sneezed,slaps,skanky,singin,sidle,shreck,shortness,shorthand,sharper,shamed,sadist,rydell,rusik,roulette,resumes,respiration,recount,reacts,purgatory,princesses,presentable,ponytail,plotted,pinot,pigtails,phillippe,peddling,paroled,orbed,offends,o'hara,moonlit,minefield,metaphors,malignant,mainframe,magicks,maggots,maclaine,loathing,leper,leaps,leaping,lashed,larch,larceny,lapses,ladyship,juncture,jiffy,jakov,invoke,infantile,inadmissible,horoscope,hinting,hideaway,hesitating,heddy,heckles,hairline,gripe,gratifying,governess,goebbels,freddo,foresee,fascination,exemplary,executioner,etcetera,escorts,endearing,eaters,earplugs,draped,disrupting,disagrees,dimes,devastate,detain,depositions,delicacy,darklighter,cynicism,cyanide,cutters,cronus,continuance,conquering,confiding,compartments,combing,cofell,clingy,cleanse,christmases,cheered,cheekbones,buttle,burdened,bruenell,broomstick,brained,bozos,bontecou,bluntman,blazes,blameless,bizarro,bellboy,beaucoup,barkeep,awaken,astray,assailant,appease,aphrodisiac,alleys,yesss,wrecks,woodpecker,wondrous,wimpy,willpower,wheeling,weepy,waxing,waive,videotaped,veritable,untouched,unlisted,unfounded,unforeseen,twinge,triggers,traipsing,toxin,tombstone,thumping,therein,testicles,telephones,tarmac,talby,tackled,swirling,suicides,suckered,subtitles,sturdy,strangler,stockbroker,stitching,steered,standup,squeal,sprinkler,spontaneously,splendor,spiking,spender,snipe,snagged,skimming,siddown,showroom,shovels,shotguns,shoelaces,shitload,shellfish,sharpest,shadowy,seizing,scrounge,scapegoat,sayonara,saddled,rummaging,roomful,renounce,reconsidered,recharge,realistically,radioed,quirks,quadrant,punctual,practising,pours,poolhouse,poltergeist,pocketbook,plainly,picnics,pesto,pawing,passageway,partied,oneself,numero,nostalgia,nitwit,neuro,mixer,meanest,mcbeal,matinee,margate,marce,manipulations,manhunt,manger,magicians,loafers,litvack,lightheaded,lifeguard,lawns,laughingstock,ingested,indignation,inconceivable,imposition,impersonal,imbecile,huddled,housewarming,horizons,homicides,hiccups,hearse,hardened,gushing,gushie,greased,goddamit,freelancer,forging,fondue,flustered,flung,flinch,flicker,fixin,festivus,fertilizer,farted,faggots,exonerate,evict,enormously,encrypted,emdash,embracing,duress,dupres,dowser,doormat,disfigured,disciplined,dibbs,depository,deathbed,dazzled,cuttin,cures,crowding,crepe,crammed,copycat,contradict,confidant,condemning,conceited,commute,comatose,clapping,circumference,chuppah,chore,choksondik,chestnuts,briault,bottomless,bonnet,blokes,berluti,beret,beggars,bankroll,bania,athos,arsenic,apperantly,ahhhhhh,afloat,accents,zipped,zeros,zeroes,zamir,yuppie,youngsters,yorkers,wisest,wipes,wield,whyn't,weirdos,wednesdays,vicksburg,upchuck,untraceable,unsupervised,unpleasantness,unhook,unconscionable,uncalled,trappings,tragedies,townie,thurgood,things'll,thine,tetanus,terrorize,temptations,tanning,tampons,swarming,straitjacket,steroid,startling,starry,squander,speculating,sollozzo,sneaked,slugs,skedaddle,sinker,silky,shortcomings,sellin,seasoned,scrubbed,screwup,scrapes,scarves,sandbox,salesmen,rooming,romances,revere,reproach,reprieve,rearranging,ravine,rationalize,raffle,punchy,psychobabble,provocation,profoundly,prescriptions,preferable,polishing,poached,pledges,pirelli,perverts,oversized,overdressed,outdid,nuptials,nefarious,mouthpiece,motels,mopping,mongrel,missin,metaphorically,mertin,memos,melodrama,melancholy,measles,meaner,mantel,maneuvering,mailroom,luring,listenin,lifeless,licks,levon,legwork,kneecaps,kippur,kiddie,kaput,justifiable,insistent,insidious,innuendo,innit,indecent,imaginable,horseshit,hemorrhoid,hella,healthiest,haywire,hamsters,hairbrush,grouchy,grisly,gratuitous,glutton,glimmer,gibberish,ghastly,gentler,generously,geeky,fuhrer,fronting,foolin,faxes,faceless,extinguisher,expel,etched,endangering,ducked,dodgeball,dives,dislocated,discrepancy,devour,derail,dementia,daycare,cynic,crumbling,cowardice,covet,cornwallis,corkscrew,cookbook,commandments,coincidental,cobwebs,clouded,clogging,clicking,clasp,chopsticks,chefs,chaps,cashing,carat,calmer,brazen,brainwashing,bradys,bowing,boned,bloodsucking,bleachers,bleached,bedpan,bearded,barrenger,bachelors,awwww,assures,assigning,asparagus,apprehend,anecdote,amoral,aggravation,afoot,acquaintances,accommodating,yakking,worshipping,wladek,willya,willies,wigged,whoosh,whisked,watered,warpath,volts,violates,valuables,uphill,unwise,untimely,unsavory,unresponsive,unpunished,unexplained,tubby,trolling,toxicology,tormented,toothache,tingly,timmiihh,thursdays,thoreau,terrifies,temperamental,telegrams,talkie,takers,symbiote,swirl,suffocate,stupider,strapping,steckler,springing,someway,sleepyhead,sledgehammer,slant,slams,showgirl,shoveling,shmoopy,sharkbait,shan't,scrambling,schematics,sandeman,sabbatical,rummy,reykjavik,revert,responsive,rescheduled,requisition,relinquish,rejoice,reckoning,recant,rebadow,reassurance,rattlesnake,ramble,primed,pricey,prance,pothole,pocus,persist,perpetrated,pekar,peeling,pastime,parmesan,pacemaker,overdrive,ominous,observant,nothings,noooooo,nonexistent,nodded,nieces,neglecting,nauseating,mutated,musket,mumbling,mowing,mouthful,mooseport,monologue,mistrust,meetin,masseuse,mantini,mailer,madre,lowlifes,locksmith,livid,liven,limos,liberating,lhasa,leniency,leering,laughable,lashes,lasagne,laceration,korben,katan,kalen,jittery,jammies,irreplaceable,intubate,intolerant,inhaler,inhaled,indifferent,indifference,impound,impolite,humbly,heroics,heigh,guillotine,guesthouse,grounding,grips,gossiping,goatee,gnomes,gellar,frutt,frobisher,freudian,foolishness,flagged,femme,fatso,fatherhood,fantasized,fairest,faintest,eyelids,extravagant,extraterrestrial,extraordinarily,escalator,elevate,drivel,dissed,dismal,disarray,dinnertime,devastation,dermatologist,delicately,defrost,debutante,debacle,damone,dainty,cuvee,culpa,crucified,creeped,crayons,courtship,convene,congresswoman,concocted,compromises,comprende,comma,coleslaw,clothed,clinically,chickenshit,checkin,cesspool,caskets,calzone,brothel,boomerang,bodega,blasphemy,bitsy,bicentennial,berlini,beatin,beards,barbas,barbarians,backpacking,arrhythmia,arousing,arbitrator,antagonize,angling,anesthetic,altercation,aggressor,adversity,acathla,aaahhh,wreaking,workup,wonderin,wither,wielding,what'm,what'cha,waxed,vibrating,veterinarian,venting,vasey,valor,validate,upholstery,untied,unscathed,uninterrupted,unforgiving,undies,uncut,twinkies,tucking,treatable,treasured,tranquility,townspeople,torso,tomei,tipsy,tinsel,tidings,thirtieth,tantrums,tamper,talky,swayed,swapping,suitor,stylist,stirs,standoff,sprinklers,sparkly,snobby,snatcher,smoother,sleepin,shrug,shoebox,sheesh,shackles,setbacks,sedatives,screeching,scorched,scanned,satyr,roadblock,riverbank,ridiculed,resentful,repellent,recreate,reconvene,rebuttal,realmedia,quizzes,questionnaire,punctured,pucker,prolong,professionalism,pleasantly,pigsty,penniless,paychecks,patiently,parading,overactive,ovaries,orderlies,oracles,oiled,offending,nudie,neonatal,neighborly,moops,moonlighting,mobilize,mmmmmm,milkshake,menial,meats,mayan,maxed,mangled,magua,lunacy,luckier,liters,lansbury,kooky,knowin,jeopardized,inkling,inhalation,inflated,infecting,incense,inbound,impractical,impenetrable,idealistic,i'mma,hypocrites,hurtin,humbled,hologram,hokey,hocus,hitchhiking,hemorrhoids,headhunter,hassled,harts,hardworking,haircuts,hacksaw,genitals,gazillion,gammy,gamesphere,fugue,footwear,folly,flashlights,fives,filet,extenuating,estrogen,entails,embezzled,eloquent,egomaniac,ducts,drowsy,drones,doree,donovon,disguises,diggin,deserting,depriving,defying,deductible,decorum,decked,daylights,daybreak,dashboard,damnation,cuddling,crunching,crickets,crazies,councilman,coughed,conundrum,complimented,cohaagen,clutching,clued,clader,cheques,checkpoint,chats,channeling,ceases,carasco,capisce,cantaloupe,cancelling,campsite,burglars,breakfasts,bra'tac,blueprint,bleedin,blabbed,beneficiary,basing,avert,atone,arlyn,approves,apothecary,antiseptic,aleikuum,advisement,zadir,wobbly,withnail,whattaya,whacking,wedged,wanders,vaginal,unimaginable,undeniable,unconditionally,uncharted,unbridled,tweezers,tvmegasite,trumped,triumphant,trimming,treading,tranquilizers,toontown,thunk,suture,suppressing,strays,stonewall,stogie,stepdaughter,stace,squint,spouses,splashed,speakin,sounder,sorrier,sorrel,sombrero,solemnly,softened,snobs,snippy,snare,smoothing,slump,slimeball,slaving,silently,shiller,shakedown,sensations,scrying,scrumptious,screamin,saucy,santoses,roundup,roughed,rosary,robechaux,retrospect,rescind,reprehensible,repel,remodeling,reconsidering,reciprocate,railroaded,psychics,promos,prob'ly,pristine,printout,priestess,prenuptial,precedes,pouty,phoning,peppy,pariah,parched,panes,overloaded,overdoing,nymphs,nother,notebooks,nearing,nearer,monstrosity,milady,mieke,mephesto,medicated,marshals,manilow,mammogram,m'lady,lotsa,loopy,lesion,lenient,learner,laszlo,kross,kinks,jinxed,involuntary,insubordination,ingrate,inflatable,incarnate,inane,hypoglycemia,huntin,humongous,hoodlum,honking,hemorrhage,helpin,hathor,hatching,grotto,grandmama,gorillas,godless,girlish,ghouls,gershwin,frosted,flutter,flagpole,fetching,fatter,faithfully,exert,evasion,escalate,enticing,enchantress,elopement,drills,downtime,downloading,dorks,doorways,divulge,dissociative,disgraceful,disconcerting,deteriorate,destinies,depressive,dented,denim,decruz,decidedly,deactivate,daydreams,curls,culprit,cruelest,crippling,cranberries,corvis,copped,commend,coastguard,cloning,cirque,churning,chock,chivalry,catalogues,cartwheels,carols,canister,buttered,bundt,buljanoff,bubbling,brokers,broaden,brimstone,brainless,bores,badmouthing,autopilot,ascertain,aorta,ampata,allenby,accosted,absolve,aborted,aaagh,aaaaaah,yonder,yellin,wyndham,wrongdoing,woodsboro,wigging,wasteland,warranty,waltzed,walnuts,vividly,veggie,unnecessarily,unloaded,unicorns,understated,unclean,umbrellas,twirling,turpentine,tupperware,triage,treehouse,tidbit,tickled,threes,thousandth,thingie,terminally,teething,tassel,talkies,swoon,switchboard,swerved,suspiciously,subsequentlyne,subscribe,strudel,stroking,strictest,stensland,starin,stannart,squirming,squealing,sorely,softie,snookums,sniveling,smidge,sloth,skulking,simian,sightseeing,siamese,shudder,shoppers,sharpen,shannen,semtex,secondhand,seance,scowl,scorn,safekeeping,russe,rummage,roshman,roomies,roaches,rinds,retrace,retires,resuscitate,rerun,reputations,rekall,refreshment,reenactment,recluse,ravioli,raves,raking,purses,punishable,punchline,puked,prosky,previews,poughkeepsie,poppins,polluted,placenta,pissy,petulant,perseverance,pears,pawns,pastries,partake,panky,palate,overzealous,orchids,obstructing,objectively,obituaries,obedient,nothingness,musty,motherly,mooning,momentous,mistaking,minutemen,milos,microchip,meself,merciless,menelaus,mazel,masturbate,mahogany,lysistrata,lillienfield,likable,liberate,leveled,letdown,larynx,lardass,lainey,lagged,klorel,kidnappings,keyed,karmic,jeebies,irate,invulnerable,intrusive,insemination,inquire,injecting,informative,informants,impure,impasse,imbalance,illiterate,hurled,hunts,hematoma,headstrong,handmade,handiwork,growling,gorky,getcha,gesundheit,gazing,galley,foolishly,fondness,floris,ferocious,feathered,fateful,fancies,fakes,faker,expire,ever'body,essentials,eskimos,enlightening,enchilada,emissary,embolism,elsinore,ecklie,drenched,drazi,doped,dogging,doable,dislikes,dishonesty,disengage,discouraging,derailed,deformed,deflect,defer,deactivated,crips,constellations,congressmen,complimenting,clubbing,clawing,chromium,chimes,chews,cheatin,chaste,cellblock,caving,catered,catacombs,calamari,bucking,brulee,brits,brisk,breezes,bounces,boudoir,binks,better'n,bellied,behrani,behaves,bedding,balmy,badmouth,backers,avenging,aromatherapy,armpit,armoire,anythin,anonymously,anniversaries,aftershave,affliction,adrift,admissible,adieu,acquittal,yucky,yearn,whitter,whirlpool,wendigo,watchdog,wannabes,wakey,vomited,voicemail,valedictorian,uttered,unwed,unrequited,unnoticed,unnerving,unkind,unjust,uniformed,unconfirmed,unadulterated,unaccounted,uglier,turnoff,trampled,tramell,toads,timbuktu,throwback,thimble,tasteless,tarantula,tamale,takeovers,swish,supposing,streaking,stargher,stanzi,stabs,squeamish,splattered,spiritually,spilt,speciality,smacking,skywire,skips,skaara,simpatico,shredding,showin,shortcuts,shite,shielding,shamelessly,serafine,sentimentality,seasick,schemer,scandalous,sainted,riedenschneider,rhyming,revel,retractor,retards,resurrect,remiss,reminiscing,remanded,reiben,regains,refuel,refresher,redoing,redheaded,reassured,rearranged,rapport,qumar,prowling,prejudices,precarious,powwow,pondering,plunger,plunged,pleasantville,playpen,phlegm,perfected,pancreas,paley,ovary,outbursts,oppressed,ooohhh,omoroca,offed,o'toole,nurture,nursemaid,nosebleed,necktie,muttering,munchies,mucking,mogul,mitosis,misdemeanor,miscarried,millionth,migraines,midler,manicurist,mandelbaum,manageable,malfunctioned,magnanimous,loudmouth,longed,lifestyles,liddy,lickety,leprechauns,komako,klute,kennel,justifying,irreversible,inventing,intergalactic,insinuate,inquiring,ingenuity,inconclusive,incessant,improv,impersonation,hyena,humperdinck,hubba,housework,hoffa,hither,hissy,hippy,hijacked,heparin,hellooo,hearth,hassles,hairstyle,hahahaha,hadda,guys'll,gutted,gulls,gritty,grievous,graft,gossamer,gooder,gambled,gadgets,fundamentals,frustrations,frolicking,frock,frilly,foreseen,footloose,fondly,flirtation,flinched,flatten,farthest,exposer,evading,escrow,empathize,embryos,embodiment,ellsberg,ebola,dulcinea,dreamin,drawbacks,doting,doose,doofy,disturbs,disorderly,disgusts,detox,denominator,demeanor,deliriously,decode,debauchery,croissant,cravings,cranked,coworkers,councilor,confuses,confiscate,confines,conduit,compress,combed,clouding,clamps,cinch,chinnery,celebratory,catalogs,carpenters,carnal,canin,bundys,bulldozer,buggers,bueller,brainy,booming,bookstores,bloodbath,bittersweet,bellhop,beeping,beanstalk,beady,baudelaire,bartenders,bargains,averted,armadillo,appreciating,appraised,antlers,aloof,allowances,alleyway,affleck,abject,zilch,youore,xanax,wrenching,wouldn,witted,wicca,whorehouse,whooo,whips,vouchers,victimized,vicodin,untested,unsolicited,unfocused,unfettered,unfeeling,unexplainable,understaffed,underbelly,tutorial,tryst,trampoline,towering,tirade,thieving,thang,swimmin,swayzak,suspecting,superstitions,stubbornness,streamers,strattman,stonewalling,stiffs,stacking,spout,splice,sonrisa,smarmy,slows,slicing,sisterly,shrill,shined,seeming,sedley,seatbelts,scour,scold,schoolyard,scarring,salieri,rustling,roxbury,rewire,revved,retriever,reputable,remodel,reins,reincarnation,rance,rafters,rackets,quail,pumbaa,proclaim,probing,privates,pried,prewedding,premeditation,posturing,posterity,pleasurable,pizzeria,pimps,penmanship,penchant,pelvis,overturn,overstepped,overcoat,ovens,outsmart,outed,ooohh,oncologist,omission,offhand,odour,nyazian,notarized,nobody'll,nightie,navel,nabbed,mystique,mover,mortician,morose,moratorium,mockingbird,mobsters,mingling,methinks,messengered,merde,masochist,martouf,martians,marinara,manray,majorly,magnifying,mackerel,lurid,lugging,lonnegan,loathsome,llantano,liberace,leprosy,latinos,lanterns,lamest,laferette,kraut,intestine,innocencia,inhibitions,ineffectual,indisposed,incurable,inconvenienced,inanimate,improbable,implode,hydrant,hustling,hustled,huevos,how'm,hooey,hoods,honcho,hinge,hijack,heimlich,hamunaptra,haladki,haiku,haggle,gutsy,grunting,grueling,gribbs,greevy,grandstanding,godparents,glows,glistening,gimmick,gaping,fraiser,formalities,foreigner,folders,foggy,fitty,fiends,fe'nos,favours,eyeing,extort,expedite,escalating,epinephrine,entitles,entice,eminence,eights,earthlings,eagerly,dunville,dugout,doublemeat,doling,dispensing,dispatcher,discoloration,diners,diddly,dictates,diazepam,derogatory,delights,defies,decoder,dealio,danson,cutthroat,crumbles,croissants,crematorium,craftsmanship,could'a,cordless,cools,conked,confine,concealing,complicates,communique,cockamamie,coasters,clobbered,clipping,clipboard,clemenza,cleanser,circumcision,chanukah,certainaly,cellmate,cancels,cadmium,buzzed,bumstead,bucko,browsing,broth,braver,boggling,bobbing,blurred,birkhead,benet,belvedere,bellies,begrudge,beckworth,banky,baldness,baggy,babysitters,aversion,astonished,assorted,appetites,angina,amiss,ambulances,alibis,airway,admires,adhesive,yoyou,xxxxxx,wreaked,wracking,woooo,wooing,wised,wilshire,wedgie,waging,violets,vincey,uplifting,untrustworthy,unmitigated,uneventful,undressing,underprivileged,unburden,umbilical,tweaking,turquoise,treachery,tosses,torching,toothpick,toasts,thickens,tereza,tenacious,teldar,taint,swill,sweatin,subtly,subdural,streep,stopwatch,stockholder,stillwater,stalkers,squished,squeegee,splinters,spliced,splat,spied,spackle,sophistication,snapshots,smite,sluggish,slithered,skeeters,sidewalks,sickly,shrugs,shrubbery,shrieking,shitless,settin,sentinels,selfishly,scarcely,sangria,sanctum,sahjhan,rustle,roving,rousing,rosomorf,riddled,responsibly,renoir,remoray,remedial,refundable,redirect,recheck,ravenwood,rationalizing,ramus,ramelle,quivering,pyjamas,psychos,provocations,prouder,protestors,prodded,proctologist,primordial,pricks,prickly,precedents,pentangeli,pathetically,parka,parakeet,panicky,overthruster,outsmarted,orthopedic,oncoming,offing,nutritious,nuthouse,nourishment,nibbling,newlywed,narcissist,mutilation,mundane,mummies,mumble,mowed,morvern,mortem,mopes,molasses,misplace,miscommunication,miney,midlife,menacing,memorizing,massaging,masking,magnets,luxuries,lounging,lothario,liposuction,lidocaine,libbets,levitate,leeway,launcelot,larek,lackeys,kumbaya,kryptonite,knapsack,keyhole,katarangura,juiced,jakey,ironclad,invoice,intertwined,interlude,interferes,injure,infernal,indeedy,incur,incorrigible,incantations,impediment,igloo,hysterectomy,hounded,hollering,hindsight,heebie,havesham,hasenfuss,hankering,hangers,hakuna,gutless,gusto,grubbing,grrrr,grazed,gratification,grandeur,gorak,godammit,gnawing,glanced,frostbite,frees,frazzled,fraulein,fraternizing,fortuneteller,formaldehyde,followup,foggiest,flunky,flickering,firecrackers,figger,fetuses,fates,eyeliner,extremities,extradited,expires,exceedingly,evaporate,erupt,epileptic,entrails,emporium,egregious,eggshells,easing,duwayne,droll,dreyfuss,dovey,doubly,doozy,donkeys,donde,distrust,distressing,disintegrate,discreetly,decapitated,dealin,deader,dashed,darkroom,dares,daddies,dabble,cushy,cupcakes,cuffed,croupier,croak,crapped,coursing,coolers,contaminate,consummated,construed,condos,concoction,compulsion,commish,coercion,clemency,clairvoyant,circulate,chesterton,checkered,charlatan,chaperones,categorically,cataracts,carano,capsules,capitalize,burdon,bullshitting,brewed,breathless,breasted,brainstorming,bossing,borealis,bonsoir,bobka,boast,blimp,bleep,bleeder,blackouts,bisque,billboards,beatings,bayberry,bashed,bamboozled,balding,baklava,baffled,backfires,babak,awkwardness,attest,attachments,apologizes,anyhoo,antiquated,alcante,advisable,aahhh,aaahh,zatarc,yearbooks,wuddya,wringing,womanhood,witless,winging,whatsa,wetting,waterproof,wastin,vogelman,vocation,vindicated,vigilance,vicariously,venza,vacuuming,utensils,uplink,unveil,unloved,unloading,uninhibited,unattached,tweaked,turnips,trinkets,toughen,toting,topside,terrors,terrify,technologically,tarnish,tagliati,szpilman,surly,supple,summation,suckin,stepmom,squeaking,splashmore,souffle,solitaire,solicitation,solarium,smokers,slugged,slobbering,skylight,skimpy,sinuses,silenced,sideburns,shrinkage,shoddy,shhhhhh,shelled,shareef,shangri,seuss,serenade,scuffle,scoff,scanners,sauerkraut,sardines,sarcophagus,salvy,rusted,russells,rowboat,rolfsky,ringside,respectability,reparations,renegotiate,reminisce,reimburse,regimen,raincoat,quibble,puzzled,purposefully,pubic,proofing,prescribing,prelim,poisons,poaching,personalized,personable,peroxide,pentonville,payphone,payoffs,paleontology,overflowing,oompa,oddest,objecting,o'hare,o'daniel,notches,nobody'd,nightstand,neutralized,nervousness,nerdy,needlessly,naquadah,nappy,nantucket,nambla,mountaineer,motherfuckin,morrie,monopolizing,mohel,mistreated,misreading,misbehave,miramax,minivan,milligram,milkshakes,metamorphosis,medics,mattresses,mathesar,matchbook,matata,marys,malucci,magilla,lymphoma,lowers,lordy,linens,lindenmeyer,limelight,leapt,laxative,lather,lapel,lamppost,laguardia,kindling,kegger,kawalsky,juries,jokin,jesminder,interning,innermost,injun,infallible,industrious,indulgence,incinerator,impossibility,impart,illuminate,iguanas,hypnotic,hyped,hospitable,hoses,homemaker,hirschmuller,helpers,headset,guardianship,guapo,grubby,granola,granddaddy,goren,goblet,gluttony,globes,giorno,getter,geritol,gassed,gaggle,foxhole,fouled,foretold,floorboards,flippers,flaked,fireflies,feedings,fashionably,farragut,fallback,facials,exterminate,excites,everything'll,evenin,ethically,ensue,enema,empath,eluded,eloquently,eject,edema,dumpling,droppings,dolled,distasteful,disputing,displeasure,disdain,deterrent,dehydration,defied,decomposing,dawned,dailies,custodian,crusts,crucifix,crowning,crier,crept,craze,crawls,couldn,correcting,corkmaster,copperfield,cooties,contraption,consumes,conspire,consenting,consented,conquers,congeniality,complains,communicator,commendable,collide,coladas,colada,clout,clooney,classifieds,clammy,civility,cirrhosis,chink,catskills,carvers,carpool,carelessness,cardio,carbs,capades,butabi,busmalis,burping,burdens,bunks,buncha,bulldozers,browse,brockovich,breakthroughs,bravado,boogety,blossoms,blooming,bloodsucker,blight,betterton,betrayer,belittle,beeps,bawling,barts,bartending,bankbooks,babish,atropine,assertive,armbrust,anyanka,annoyance,anemic,anago,airwaves,aimlessly,aaargh,aaand,yoghurt,writhing,workable,winking,winded,widen,whooping,whiter,whatya,wazoo,voila,virile,vests,vestibule,versed,vanishes,urkel,uproot,unwarranted,unscheduled,unparalleled,undergrad,tweedle,turtleneck,turban,trickery,transponder,toyed,townhouse,thyself,thunderstorm,thinning,thawed,tether,technicalities,tau'ri,tarnished,taffeta,tacked,systolic,swerve,sweepstakes,swabs,suspenders,superwoman,sunsets,succulent,subpoenas,stumper,stosh,stomachache,stewed,steppin,stepatech,stateside,spicoli,sparing,soulless,sonnets,sockets,snatching,smothering,slush,sloman,slashing,sitters,simpleton,sighs,sidra,sickens,shunned,shrunken,showbiz,shopped,shimmering,shagging,semblance,segue,sedation,scuzzlebutt,scumbags,screwin,scoundrels,scarsdale,scabs,saucers,saintly,saddened,runaways,runaround,rheya,resenting,rehashing,rehabilitated,regrettable,refreshed,redial,reconnecting,ravenous,raping,rafting,quandary,pylea,putrid,puffing,psychopathic,prunes,probate,prayin,pomegranate,plummeting,planing,plagues,pinata,pithy,perversion,personals,perched,peeps,peckish,pavarotti,pajama,packin,pacifier,overstepping,okama,obstetrician,nutso,nuance,normalcy,nonnegotiable,nomak,ninny,nines,nicey,newsflash,neutered,nether,negligee,necrosis,navigating,narcissistic,mylie,muses,momento,moisturizer,moderation,misinformed,misconception,minnifield,mikkos,methodical,mebbe,meager,maybes,matchmaking,masry,markovic,malakai,luzhin,lusting,lumberjack,loopholes,loaning,lightening,leotard,launder,lamaze,kubla,kneeling,kibosh,jumpsuit,joliet,jogger,janover,jakovasaurs,irreparable,innocently,inigo,infomercial,inexplicable,indispensable,impregnated,impossibly,imitating,hunches,hummus,houmfort,hothead,hostiles,hooves,hooligans,homos,homie,hisself,heyyy,hesitant,hangout,handsomest,handouts,hairless,gwennie,guzzling,guinevere,grungy,goading,glaring,gavel,gardino,gangrene,fruitful,friendlier,freckle,freakish,forthright,forearm,footnote,flops,fixer,firecracker,finito,figgered,fezzik,fastened,farfetched,fanciful,familiarize,faire,fahrenheit,extravaganza,exploratory,explanatory,everglades,eunuch,estas,escapade,erasers,emptying,embarassing,dweeb,dutiful,dumplings,dries,drafty,dollhouse,dismissing,disgraced,discrepancies,disbelief,disagreeing,digestion,didnt,deviled,deviated,demerol,delectable,decaying,decadent,dears,dateless,d'algout,cultivating,cryto,crumpled,crumbled,cronies,crease,craves,cozying,corduroy,congratulated,confidante,compressions,complicating,compadre,coerce,classier,chums,chumash,chivalrous,chinpoko,charred,chafing,celibacy,carted,carryin,carpeting,carotid,cannibals,candor,butterscotch,busts,busier,bullcrap,buggin,brookside,brodski,brassiere,brainwash,brainiac,botrelle,bonbon,boatload,blimey,blaring,blackness,bipartisan,bimbos,bigamist,biebe,biding,betrayals,bestow,bellerophon,bedpans,bassinet,basking,barzini,barnyard,barfed,backups,audited,asinine,asalaam,arouse,applejack,annoys,anchovies,ampule,alameida,aggravate,adage,accomplices,yokel,y'ever,wringer,witwer,withdrawals,windward,willfully,whorfin,whimsical,whimpering,weddin,weathered,warmest,wanton,volant,visceral,vindication,veggies,urinate,uproar,unwritten,unwrap,unsung,unsubstantiated,unspeakably,unscrupulous,unraveling,unquote,unqualified,unfulfilled,undetectable,underlined,unattainable,unappreciated,ummmm,ulcers,tylenol,tweak,turnin,tuatha,tropez,trellis,toppings,tootin,toodle,tinkering,thrives,thespis,theatrics,thatherton,tempers,tavington,tartar,tampon,swelled,sutures,sustenance,sunflowers,sublet,stubbins,strutting,strewn,stowaway,stoic,sternin,stabilizing,spiraling,spinster,speedometer,speakeasy,soooo,soiled,sneakin,smithereens,smelt,smacks,slaughterhouse,slacks,skids,sketching,skateboards,sizzling,sixes,sirree,simplistic,shouts,shorted,shoelace,sheeit,shards,shackled,sequestered,selmak,seduces,seclusion,seamstress,seabeas,scoops,scooped,scavenger,satch,s'more,rudeness,romancing,rioja,rifkin,rieper,revise,reunions,repugnant,replicating,repaid,renewing,relaxes,rekindle,regrettably,regenerate,reels,reciting,reappear,readin,ratting,rapes,rancher,rammed,rainstorm,railroading,queers,punxsutawney,punishes,pssst,prudy,proudest,protectors,procrastinating,proactive,priss,postmortem,pompoms,poise,pickings,perfectionist,peretti,people'll,pecking,patrolman,paralegal,paragraphs,paparazzi,pankot,pampering,overstep,overpower,outweigh,omnipotent,odious,nuwanda,nurtured,newsroom,neeson,needlepoint,necklaces,neato,muggers,muffler,mousy,mourned,mosey,mopey,mongolians,moldy,misinterpret,minibar,microfilm,mendola,mended,melissande,masturbating,masbath,manipulates,maimed,mailboxes,magnetism,m'lord,m'honey,lymph,lunge,lovelier,lefferts,leezak,ledgers,larraby,laloosh,kundun,kozinski,knockoff,kissin,kiosk,kennedys,kellman,karlo,kaleidoscope,jeffy,jaywalking,instructing,infraction,informer,infarction,impulsively,impressing,impersonated,impeach,idiocy,hyperbole,hurray,humped,huhuh,hsing,hordes,hoodlums,honky,hitchhiker,hideously,heaving,heathcliff,headgear,headboard,hazing,harem,handprint,hairspray,gutiurrez,goosebumps,gondola,glitches,gasping,frolic,freeways,frayed,fortitude,forgetful,forefathers,fonder,foiled,foaming,flossing,flailing,fitzgeralds,firehouse,finders,fiftieth,fellah,fawning,farquaad,faraway,fancied,extremists,exorcist,exhale,ethros,entrust,ennui,energized,encephalitis,embezzling,elster,elixir,electrolytes,duplex,dryers,drexl,dredging,drawback,don'ts,dobisch,divorcee,disrespected,disprove,disobeying,disinfectant,dingy,digress,dieting,dictating,devoured,devise,detonators,desist,deserter,derriere,deron,deceptive,debilitating,deathwok,daffodils,curtsy,cursory,cuppa,cumin,cronkite,cremation,credence,cranking,coverup,courted,countin,counselling,cornball,contentment,consensual,compost,cluett,cleverly,cleansed,cleanliness,chopec,chomp,chins,chime,cheswick,chessler,cheapest,chatted,cauliflower,catharsis,catchin,caress,camcorder,calorie,cackling,bystanders,buttoned,buttering,butted,buries,burgel,buffoon,brogna,bragged,boutros,bogeyman,blurting,blurb,blowup,bloodhound,blissful,birthmark,bigot,bestest,belted,belligerent,beggin,befall,beeswax,beatnik,beaming,barricade,baggoli,badness,awoke,artsy,artful,aroun,armpits,arming,annihilate,anise,angiogram,anaesthetic,amorous,ambiance,alligators,adoration,admittance,adama,abydos,zonked,zhivago,yorkin,wrongfully,writin,wrappers,worrywart,woops,wonderfalls,womanly,wickedness,whoopie,wholeheartedly,whimper,which'll,wheelchairs,what'ya,warranted,wallop,wading,wacked,virginal,vermouth,vermeil,verger,ventriss,veneer,vampira,utero,ushers,urgently,untoward,unshakable,unsettled,unruly,unlocks,ungodly,undue,uncooperative,uncontrollably,unbeatable,twitchy,tumbler,truest,triumphs,triplicate,tribbey,tortures,tongaree,tightening,thorazine,theres,testifies,teenaged,tearful,taxing,taldor,syllabus,swoops,swingin,suspending,sunburn,stuttering,stupor,strides,strategize,strangulation,stooped,stipulation,stingy,stapled,squeaks,squawking,spoilsport,splicing,spiel,spencers,spasms,spaniard,softener,sodding,soapbox,smoldering,smithbauer,skittish,sifting,sickest,sicilians,shuffling,shrivel,segretti,seeping,securely,scurrying,scrunch,scrote,screwups,schenkman,sawing,savin,satine,sapiens,salvaging,salmonella,sacrilege,rumpus,ruffle,roughing,rotted,rondall,ridding,rickshaw,rialto,rhinestone,restrooms,reroute,requisite,repress,rednecks,redeeming,rayed,ravell,raked,raincheck,raffi,racked,pushin,profess,prodding,procure,presuming,preppy,prednisone,potted,posttraumatic,poorhouse,podiatrist,plowed,pledging,playroom,plait,placate,pinback,picketing,photographing,pharoah,petrak,petal,persecuting,perchance,pellets,peeved,peerless,payable,pauses,pathologist,pagliacci,overwrought,overreaction,overqualified,overheated,outcasts,otherworldly,opinionated,oodles,oftentimes,occured,obstinate,nutritionist,numbness,nubile,nooooooo,nobodies,nepotism,neanderthals,mushu,mucus,mothering,mothballs,monogrammed,molesting,misspoke,misspelled,misconstrued,miscalculated,minimums,mince,mildew,mighta,middleman,mementos,mellowed,mayol,mauled,massaged,marmalade,mardi,makings,lundegaard,lovingly,loudest,lotto,loosing,loompa,looming,longs,loathes,littlest,littering,lifelike,legalities,laundered,lapdog,lacerations,kopalski,knobs,knitted,kittridge,kidnaps,kerosene,karras,jungles,jockeys,iranoff,invoices,invigorating,insolence,insincere,insectopia,inhumane,inhaling,ingrates,infestation,individuality,indeterminate,incomprehensible,inadequacy,impropriety,importer,imaginations,illuminating,ignite,hysterics,hypodermic,hyperventilate,hyperactive,humoring,honeymooning,honed,hoist,hoarding,hitching,hiker,hightail,hemoglobin,hell'd,heinie,growin,grasped,grandparent,granddaughters,gouged,goblins,gleam,glades,gigantor,get'em,geriatric,gatekeeper,gargoyles,gardenias,garcon,garbo,gallows,gabbing,futon,fulla,frightful,freshener,fortuitous,forceps,fogged,fodder,foamy,flogging,flaun,flared,fireplaces,feverish,favell,fattest,fattening,fallow,extraordinaire,evacuating,errant,envied,enchant,enamored,egocentric,dussander,dunwitty,dullest,dropout,dredged,dorsia,doornail,donot,dongs,dogged,dodgy,ditty,dishonorable,discriminating,discontinue,dings,dilly,dictation,dialysis,delly,delightfully,daryll,dandruff,cruddy,croquet,cringe,crimp,credo,crackling,courtside,counteroffer,counterfeiting,corrupting,copping,conveyor,contusions,contusion,conspirator,consoling,connoisseur,confetti,composure,compel,colic,coddle,cocksuckers,coattails,cloned,claustrophobia,clamoring,churn,chugga,chirping,chasin,chapped,chalkboard,centimeter,caymans,catheter,casings,caprica,capelli,cannolis,cannoli,camogli,camembert,butchers,butchered,busboys,bureaucrats,buckled,bubbe,brownstone,bravely,brackley,bouquets,botox,boozing,boosters,bodhi,blunders,blunder,blockage,biocyte,betrays,bested,beryllium,beheading,beggar,begbie,beamed,bastille,barstool,barricades,barbecues,barbecued,bandwagon,backfiring,bacarra,avenged,autopsies,aunties,associating,artichoke,arrowhead,appendage,apostrophe,antacid,ansel,annul,amuses,amped,amicable,amberg,alluring,adversaries,admirers,adlai,acupuncture,abnormality,aaaahhhh,zooming,zippity,zipping,zeroed,yuletide,yoyodyne,yengeese,yeahhh,wrinkly,wracked,withered,winks,windmills,whopping,wendle,weigart,waterworks,waterbed,watchful,wantin,wagging,waaah,vying,ventricle,varnish,vacuumed,unreachable,unprovoked,unmistakable,unfriendly,unfolding,underpaid,uncuff,unappealing,unabomber,typhoid,tuxedos,tushie,turds,tumnus,troubadour,trinium,treaters,treads,transpired,transgression,tought,thready,thins,thinners,techs,teary,tattaglia,tassels,tarzana,tanking,tablecloths,synchronize,symptomatic,sycophant,swimmingly,sweatshop,surfboard,superpowers,sunroom,sunblock,sugarplum,stupidly,strumpet,strapless,stooping,stools,stealthy,stalks,stairmaster,staffer,sshhh,squatting,squatters,spectacularly,sorbet,socked,sociable,snubbed,snorting,sniffles,snazzy,snakebite,smuggler,smorgasbord,smooching,slurping,slouch,slingshot,slaved,skimmed,sisterhood,silliest,sidarthur,sheraton,shebang,sharpening,shanghaied,shakers,sendoff,scurvy,scoliosis,scaredy,scagnetti,sawchuk,saugus,sasquatch,sandbag,saltines,s'pose,roston,rostle,riveting,ristle,rifling,revulsion,reverently,retrograde,restful,resents,reptilian,reorganize,renovating,reiterate,reinvent,reinmar,reibers,reechard,recuse,reconciling,recognizance,reclaiming,recitation,recieved,rebate,reacquainted,rascals,railly,quintuplets,quahog,pygmies,puzzling,punctuality,prosthetic,proms,probie,preys,preserver,preppie,poachers,plummet,plumbers,plannin,pitying,pitfalls,piqued,pinecrest,pinches,pillage,pigheaded,physique,pessimistic,persecute,perjure,percentile,pentothal,pensky,penises,peini,pazzi,pastels,parlour,paperweight,pamper,pained,overwhelm,overalls,outrank,outpouring,outhouse,outage,ouija,obstructed,obsessions,obeying,obese,o'riley,o'higgins,nosebleeds,norad,noooooooo,nononono,nonchalant,nippy,neurosis,nekhorvich,necronomicon,naquada,n'est,mystik,mystified,mumps,muddle,mothership,moped,monumentally,monogamous,mondesi,misogynistic,misinterpreting,mindlock,mending,megaphone,meeny,medicating,meanie,masseur,markstrom,marklars,margueritas,manifesting,maharajah,lukewarm,loveliest,loran,lizardo,liquored,lipped,lingers,limey,lemkin,leisurely,lathe,latched,lapping,ladle,krevlorneswath,kosygin,khakis,kenaru,keats,kaitlan,julliard,jollies,jaundice,jargon,jackals,invisibility,insipid,inflamed,inferiority,inexperience,incinerated,incinerate,incendiary,incan,inbred,implicating,impersonator,hunks,horsing,hooded,hippopotamus,hiked,hetson,hetero,hessian,henslowe,hendler,hellstrom,headstone,hayloft,harbucks,handguns,hallucinate,haldol,haggling,gynaecologist,gulag,guilder,guaranteeing,groundskeeper,grindstone,grimoir,grievance,griddle,gribbit,greystone,graceland,gooders,goeth,gentlemanly,gelatin,gawking,ganged,fukes,fromby,frenchmen,foursome,forsley,forbids,footwork,foothold,floater,flinging,flicking,fittest,fistfight,fireballs,fillings,fiddling,fennyman,felonious,felonies,feces,favoritism,fatten,fanatics,faceman,excusing,excepted,entwined,entree,ensconced,eladio,ehrlichman,easterland,dueling,dribbling,drape,downtrodden,doused,dosed,dorleen,dokie,distort,displeased,disown,dismount,disinherited,disarmed,disapproves,diperna,dined,diligent,dicaprio,depress,decoded,debatable,dealey,darsh,damsels,damning,dad'll,d'oeuvre,curlers,curie,cubed,crikey,crepes,countrymen,cornfield,coppers,copilot,copier,cooing,conspiracies,consigliere,condoning,commoner,commies,combust,comas,colds,clawed,clamped,choosy,chomping,chimps,chigorin,chianti,cheep,checkups,cheaters,celibate,cautiously,cautionary,castell,carpentry,caroling,carjacking,caritas,caregiver,cardiology,candlesticks,canasta,cain't,burro,burnin,bunking,bumming,bullwinkle,brummel,brooms,brews,breathin,braslow,bracing,botulism,boorish,bloodless,blayne,blatantly,blankie,bedbugs,becuase,barmaid,bared,baracus,banal,bakes,backpacks,attentions,atrocious,ativan,athame,asunder,astound,assuring,aspirins,asphyxiation,ashtrays,aryans,arnon,apprehension,applauding,anvil,antiquing,antidepressants,annoyingly,amputate,altruistic,alotta,alerting,afterthought,affront,affirm,actuality,abysmal,absentee,yeller,yakushova,wuzzy,wriggle,worrier,woogyman,womanizer,windpipe,windbag,willin,whisking,whimsy,wendall,weeny,weensy,weasels,watery,watcha,wasteful,waski,washcloth,waaay,vouched,viznick,ventriloquist,vendettas,veils,vayhue,vamanos,vadimus,upstage,uppity,unsaid,unlocking,unintentionally,undetected,undecided,uncaring,unbearably,tween,tryout,trotting,trini,trimmings,trickier,treatin,treadstone,trashcan,transcendent,tramps,townsfolk,torturous,torrid,toothpicks,tolerable,tireless,tiptoeing,timmay,tillinghouse,tidying,tibia,thumbing,thrusters,thrashing,these'll,thatos,testicular,teriyaki,tenors,tenacity,tellers,telemetry,tarragon,switchblade,swicker,swells,sweatshirts,swatches,surging,supremely,sump'n,succumb,subsidize,stumbles,stuffs,stoppin,stipulate,stenographer,steamroll,stasis,stagger,squandered,splint,splendidly,splashy,splashing,specter,sorcerers,somewheres,somber,snuggled,snowmobile,sniffed,snags,smugglers,smudged,smirking,smearing,slings,sleet,sleepovers,sleek,slackers,siree,siphoning,singed,sincerest,sickened,shuffled,shriveled,shorthanded,shittin,shish,shipwrecked,shins,sheetrock,shawshank,shamu,sha're,servitude,sequins,seascape,scrapings,scoured,scorching,sandpaper,saluting,salud,ruffled,roughnecks,rougher,rosslyn,rosses,roost,roomy,romping,revolutionize,reprimanded,refute,refrigerated,reeled,redundancies,rectal,recklessly,receding,reassignment,reapers,readout,ration,raring,ramblings,raccoons,quarantined,purging,punters,psychically,premarital,pregnancies,predisposed,precautionary,pollute,podunk,plums,plaything,pixilated,pitting,piranhas,pieced,piddles,pickled,photogenic,phosphorous,pffft,pestilence,pessimist,perspiration,perps,penticoff,passageways,pardons,panics,pancamo,paleontologist,overwhelms,overstating,overpaid,overdid,outlive,orthodontist,orgies,oreos,ordover,ordinates,ooooooh,oooohhh,omelettes,officiate,obtuse,obits,nymph,novocaine,noooooooooo,nipping,nilly,nightstick,negate,neatness,natured,narcotic,narcissism,namun,nakatomi,murky,muchacho,mouthwash,motzah,morsel,morph,morlocks,mooch,moloch,molest,mohra,modus,modicum,mockolate,misdemeanors,miscalculation,middies,meringue,mercilessly,meditating,mayakovsky,maximillian,marlee,markovski,maniacal,maneuvered,magnificence,maddening,lutze,lunged,lovelies,lorry,loosening,lookee,littered,lilac,lightened,laces,kurzon,kurtzweil,kind've,kimono,kenji,kembu,keanu,kazuo,jonesing,jilted,jiggling,jewelers,jewbilee,jacqnoud,jacksons,ivories,insurmountable,innocuous,innkeeper,infantery,indulged,indescribable,incoherent,impervious,impertinent,imperfections,hunnert,huffy,horsies,horseradish,hollowed,hogwash,hockley,hissing,hiromitsu,hidin,hereafter,helpmann,hehehe,haughty,happenings,hankie,handsomely,halliwells,haklar,haise,gunsights,grossly,grope,grocer,grits,gripping,grabby,glorificus,gizzard,gilardi,gibarian,geminon,gasses,garnish,galloping,gairwyn,futterman,futility,fumigated,fruitless,friendless,freon,foregone,forego,floored,flighty,flapjacks,fizzled,ficus,festering,farbman,fabricate,eyghon,extricate,exalted,eventful,esophagus,enterprising,entail,endor,emphatically,embarrasses,electroshock,easel,duffle,drumsticks,dissection,dissected,disposing,disparaging,disorientation,disintegrated,disarming,devoting,dessaline,deprecating,deplorable,delve,degenerative,deduct,decomposed,deathly,dearie,daunting,dankova,cyclotron,cyberspace,cutbacks,culpable,cuddled,crumpets,cruelly,crouching,cranium,cramming,cowering,couric,cordesh,conversational,conclusively,clung,clotting,cleanest,chipping,chimpanzee,chests,cheapen,chainsaws,censure,catapult,caravaggio,carats,captivating,calrissian,butlers,busybody,bussing,bunion,bulimic,budging,brung,browbeat,brokenhearted,brecher,breakdowns,bracebridge,boning,blowhard,blisters,blackboard,bigotry,bialy,bhamra,bended,begat,battering,baste,basquiat,barricaded,barometer,balled,baited,badenweiler,backhand,ascenscion,argumentative,appendicitis,apparition,anxiously,antagonistic,angora,anacott,amniotic,ambience,alonna,aleck,akashic,ageless,abouts,aawwww,aaaaarrrrrrggghhh,aaaaaa,zendi,yuppies,yodel,y'hear,wrangle,wombosi,wittle,withstanding,wisecracks,wiggling,wierd,whittlesley,whipper,whattya,whatsamatter,whatchamacallit,whassup,whad'ya,weakling,warfarin,waponis,wampum,wadn't,vorash,vizzini,virtucon,viridiana,veracity,ventilated,varicose,varcon,vandalized,vamos,vamoose,vaccinated,vacationing,usted,urinal,uppers,unwittingly,unsealed,unplanned,unhinged,unhand,unfathomable,unequivocally,unbreakable,unadvisedly,udall,tynacorp,tuxes,tussle,turati,tunic,tsavo,trussed,troublemakers,trollop,tremors,transsexual,transfusions,toothbrushes,toned,toddlers,tinted,tightened,thundering,thorpey,this'd,thespian,thaddius,tenuous,tenths,tenement,telethon,teleprompter,teaspoon,taunted,tattle,tardiness,taraka,tappy,tapioca,tapeworm,talcum,tacks,swivel,swaying,superpower,summarize,sumbitch,sultry,suburbia,styrofoam,stylings,strolls,strobe,stockpile,stewardesses,sterilized,sterilize,stealin,stakeouts,squawk,squalor,squabble,sprinkled,sportsmanship,spokes,spiritus,sparklers,spareribs,sowing,sororities,sonovabitch,solicit,softy,softness,softening,snuggling,snatchers,snarling,snarky,snacking,smears,slumped,slowest,slithering,sleazebag,slayed,slaughtering,skidded,skated,sivapathasundaram,sissies,silliness,silences,sidecar,sicced,shylock,shtick,shrugged,shriek,shoves,should'a,shortcake,shockingly,shirking,shaves,shatner,sharpener,shapely,shafted,sexless,septum,selflessness,seabea,scuff,screwball,scoping,scooch,scolding,schnitzel,schemed,scalper,santy,sankara,sanest,salesperson,sakulos,safehouse,sabers,runes,rumblings,rumbling,ruijven,ringers,righto,rhinestones,retrieving,reneging,remodelling,relentlessly,regurgitate,refills,reeking,reclusive,recklessness,recanted,ranchers,rafer,quaking,quacks,prophesied,propensity,profusely,problema,prided,prays,postmark,popsicles,poodles,pollyanna,polaroids,pokes,poconos,pocketful,plunging,plugging,pleeease,platters,pitied,pinetti,piercings,phooey,phonies,pestering,periscope,pentagram,pelts,patronized,paramour,paralyze,parachutes,pales,paella,paducci,owatta,overdone,overcrowded,overcompensating,ostracized,ordinate,optometrist,operandi,omens,okayed,oedipal,nuttier,nuptial,nunheim,noxious,nourish,notepad,nitroglycerin,nibblet,neuroses,nanosecond,nabbit,mythic,munchkins,multimillion,mulroney,mucous,muchas,mountaintop,morlin,mongorians,moneybags,mom'll,molto,mixup,misgivings,mindset,michalchuk,mesmerized,merman,mensa,meaty,mbwun,materialize,materialistic,masterminded,marginally,mapuhe,malfunctioning,magnify,macnamara,macinerney,machinations,macadamia,lysol,lurks,lovelorn,lopsided,locator,litback,litany,linea,limousines,limes,lighters,liebkind,levity,levelheaded,letterhead,lesabre,leron,lepers,lefts,leftenant,laziness,layaway,laughlan,lascivious,laryngitis,lapsed,landok,laminated,kurten,kobol,knucklehead,knowed,knotted,kirkeby,kinsa,karnovsky,jolla,jimson,jettison,jeric,jawed,jankis,janitors,jango,jalopy,jailbreak,jackers,jackasses,invalidate,intercepting,intercede,insinuations,infertile,impetuous,impaled,immerse,immaterial,imbeciles,imagines,idyllic,idolized,icebox,i'd've,hypochondriac,hyphen,hurtling,hurried,hunchback,hullo,horsting,hoooo,homeboys,hollandaise,hoity,hijinks,hesitates,herrero,herndorff,helplessly,heeyy,heathen,hearin,headband,harrassment,harpies,halstrom,hahahahaha,hacer,grumbling,grimlocks,grift,greets,grandmothers,grander,grafts,gordievsky,gondorff,godorsky,glscripts,gaudy,gardeners,gainful,fuses,fukienese,frizzy,freshness,freshening,fraught,frantically,foxbooks,fortieth,forked,foibles,flunkies,fleece,flatbed,fisted,firefight,fingerpaint,filibuster,fhloston,fenceline,femur,fatigues,fanucci,fantastically,familiars,falafel,fabulously,eyesore,expedient,ewwww,eviscerated,erogenous,epidural,enchante,embarassed,embarass,embalming,elude,elspeth,electrocute,eigth,eggshell,echinacea,eases,earpiece,earlobe,dumpsters,dumbshit,dumbasses,duloc,duisberg,drummed,drinkers,dressy,dorma,doily,divvy,diverting,dissuade,disrespecting,displace,disorganized,disgustingly,discord,disapproving,diligence,didja,diced,devouring,detach,destructing,desolate,demerits,delude,delirium,degrade,deevak,deemesa,deductions,deduce,debriefed,deadbeats,dateline,darndest,damnable,dalliance,daiquiri,d'agosta,cussing,cryss,cripes,cretins,crackerjack,cower,coveting,couriers,countermission,cotswolds,convertibles,conversationalist,consorting,consoled,consarn,confides,confidentially,commited,commiserate,comme,comforter,comeuppance,combative,comanches,colosseum,colling,coexist,coaxing,cliffside,chutes,chucked,chokes,childlike,childhoods,chickening,chenowith,charmingly,changin,catsup,captioning,capsize,cappucino,capiche,candlewell,cakewalk,cagey,caddie,buxley,bumbling,bulky,buggered,brussel,brunettes,brumby,brotha,bronck,brisket,bridegroom,braided,bovary,bookkeeper,bluster,bloodline,blissfully,blase,billionaires,bicker,berrisford,bereft,berating,berate,bendy,belive,belated,beikoku,beens,bedspread,bawdy,barreling,baptize,banya,balthazar,balmoral,bakshi,bails,badgered,backstreet,awkwardly,auras,attuned,atheists,astaire,assuredly,arrivederci,appetit,appendectomy,apologetic,antihistamine,anesthesiologist,amulets,albie,alarmist,aiight,adstream,admirably,acquaint,abound,abominable,aaaaaaah,zekes,zatunica,wussy,worded,wooed,woodrell,wiretap,windowsill,windjammer,windfall,whisker,whims,whatiya,whadya,weirdly,weenies,waunt,washout,wanto,waning,victimless,verdad,veranda,vandaley,vancomycin,valise,vaguest,upshot,unzip,unwashed,untrained,unstuck,unprincipled,unmentionables,unjustly,unfolds,unemployable,uneducated,unduly,undercut,uncovering,unconsciousness,unconsciously,tyndareus,turncoat,turlock,tulle,tryouts,trouper,triplette,trepkos,tremor,treeger,trapeze,traipse,tradeoff,trach,torin,tommorow,tollan,toity,timpani,thumbprint,thankless,tell'em,telepathy,telemarketing,telekinesis,teevee,teeming,tarred,tambourine,talentless,swooped,switcheroo,swirly,sweatpants,sunstroke,suitors,sugarcoat,subways,subterfuge,subservient,subletting,stunningly,strongbox,striptease,stravanavitch,stradling,stoolie,stodgy,stocky,stifle,stealer,squeezes,squatter,squarely,sprouted,spool,spindly,speedos,soups,soundly,soulmates,somebody'll,soliciting,solenoid,sobering,snowflakes,snowballs,snores,slung,slimming,skulk,skivvies,skewered,skewer,sizing,sistine,sidebar,sickos,shushing,shunt,shugga,shone,shol'va,sharpened,shapeshifter,shadowing,shadoe,selectman,sefelt,seared,scrounging,scribbling,scooping,scintillating,schmoozing,scallops,sapphires,sanitarium,sanded,safes,rudely,roust,rosebush,rosasharn,rondell,roadhouse,riveted,rewrote,revamp,retaliatory,reprimand,replicators,replaceable,remedied,relinquishing,rejoicing,reincarnated,reimbursed,reevaluate,redid,redefine,recreating,reconnected,rebelling,reassign,rearview,rayne,ravings,ratso,rambunctious,radiologist,quiver,quiero,queef,qualms,pyrotechnics,pulsating,psychosomatic,proverb,promiscuous,profanity,prioritize,preying,predisposition,precocious,precludes,prattling,prankster,povich,potting,postpartum,porridge,polluting,plowing,pistachio,pissin,pickpocket,physicals,peruse,pertains,personified,personalize,perjured,perfecting,pepys,pepperdine,pembry,peering,peels,pedophile,patties,passkey,paratrooper,paraphernalia,paralyzing,pandering,paltry,palpable,pagers,pachyderm,overstay,overestimated,overbite,outwit,outgrow,outbid,ooops,oomph,oohhh,oldie,obliterate,objectionable,nygma,notting,noches,nitty,nighters,newsstands,newborns,neurosurgery,nauseated,nastiest,narcolepsy,mutilate,muscled,murmur,mulva,mulling,mukada,muffled,morgues,moonbeams,monogamy,molester,molestation,molars,moans,misprint,mismatched,mirth,mindful,mimosas,millander,mescaline,menstrual,menage,mellowing,medevac,meddlesome,matey,manicures,malevolent,madmen,macaroons,lydell,lycra,lunchroom,lunching,lozenges,looped,litigious,liquidate,linoleum,lingk,limitless,limber,lilacs,ligature,liftoff,lemmiwinks,leggo,learnin,lazarre,lawyered,lactose,knelt,kenosha,kemosabe,jussy,junky,jordy,jimmies,jeriko,jakovasaur,issacs,isabela,irresponsibility,ironed,intoxication,insinuated,inherits,ingest,ingenue,inflexible,inflame,inevitability,inedible,inducement,indignant,indictments,indefensible,incomparable,incommunicado,improvising,impounded,illogical,ignoramus,hydrochloric,hydrate,hungover,humorless,humiliations,hugest,hoverdrone,hovel,hmmph,hitchhike,hibernating,henchman,helloooo,heirlooms,heartsick,headdress,hatches,harebrained,hapless,hanen,handsomer,hallows,habitual,guten,gummy,guiltier,guidebook,gstaad,gruff,griss,grieved,grata,gorignak,goosed,goofed,glowed,glitz,glimpses,glancing,gilmores,gianelli,geraniums,garroway,gangbusters,gamblers,galls,fuddy,frumpy,frowning,frothy,fro'tak,frere,fragrances,forgettin,follicles,flowery,flophouse,floatin,flirts,flings,flatfoot,fingerprinting,fingerprinted,fingering,finald,fillet,fianc,femoral,federales,fawkes,fascinates,farfel,fambly,falsified,fabricating,exterminators,expectant,excusez,excrement,excercises,evian,etins,esophageal,equivalency,equate,equalizer,entrees,enquire,endearment,empathetic,emailed,eggroll,earmuffs,dyslexic,duper,duesouth,drunker,druggie,dreadfully,dramatics,dragline,downplay,downers,dominatrix,doers,docket,docile,diversify,distracts,disloyalty,disinterested,discharging,disagreeable,dirtier,dinghy,dimwitted,dimoxinil,dimmy,diatribe,devising,deviate,detriment,desertion,depressants,depravity,deniability,delinquents,defiled,deepcore,deductive,decimate,deadbolt,dauthuille,dastardly,daiquiris,daggers,dachau,curiouser,curdled,cucamonga,cruller,cruces,crosswalk,crinkle,crescendo,cremate,counseled,couches,cornea,corday,copernicus,contrition,contemptible,constipated,conjoined,confounded,condescend,concoct,conch,compensating,committment,commandeered,comely,coddled,cockfight,cluttered,clunky,clownfish,cloaked,clenched,cleanin,civilised,circumcised,cimmeria,cilantro,chutzpah,chucking,chiseled,chicka,chattering,cervix,carrey,carpal,carnations,cappuccinos,candied,calluses,calisthenics,bushy,burners,budington,buchanans,brimming,braids,boycotting,bouncers,botticelli,botherin,bookkeeping,bogyman,bogged,bloodthirsty,blintzes,blanky,binturong,billable,bigboote,bewildered,betas,bequeath,behoove,befriend,bedpost,bedded,baudelaires,barreled,barboni,barbeque,bangin,baltus,bailout,backstabber,baccarat,awning,augie,arguillo,archway,apricots,apologising,annyong,anchorman,amenable,amazement,allspice,alannis,airfare,airbags,ahhhhhhhhh,ahhhhhhhh,ahhhhhhh,agitator,adrenal,acidosis,achoo,accessorizing,accentuate,abrasions,abductor,aaaahhh,aaaaaaaa,aaaaaaa,zeroing,zelner,zeldy,yevgeny,yeska,yellows,yeesh,yeahh,yamuri,wouldn't've,workmanship,woodsman,winnin,winked,wildness,whoring,whitewash,whiney,when're,wheezer,wheelman,wheelbarrow,westerburg,weeding,watermelons,washboard,waltzes,wafting,voulez,voluptuous,vitone,vigilantes,videotaping,viciously,vices,veruca,vermeer,verifying,vasculitis,valets,upholstered,unwavering,untold,unsympathetic,unromantic,unrecognizable,unpredictability,unmask,unleashing,unintentional,unglued,unequivocal,underrated,underfoot,unchecked,unbutton,unbind,unbiased,unagi,uhhhhh,tugging,triads,trespasses,treehorn,traviata,trappers,transplants,trannie,tramping,tracheotomy,tourniquet,tooty,toothless,tomarrow,toasters,thruster,thoughtfulness,thornwood,tengo,tenfold,telltale,telephoto,telephoned,telemarketer,tearin,tastic,tastefully,tasking,taser,tamed,tallow,taketh,taillight,tadpoles,tachibana,syringes,sweated,swarthy,swagger,surges,supermodels,superhighway,sunup,sun'll,sulfa,sugarless,sufficed,subside,strolled,stringy,strengthens,straightest,straightens,storefront,stopper,stockpiling,stimulant,stiffed,steyne,sternum,stepladder,stepbrother,steers,steelheads,steakhouse,stathis,stankylecartmankennymr,standoffish,stalwart,squirted,spritz,sprig,sprawl,spousal,sphincter,spenders,spearmint,spatter,spangled,southey,soured,sonuvabitch,somethng,snuffed,sniffs,smokescreen,smilin,slobs,sleepwalker,sleds,slays,slayage,skydiving,sketched,skanks,sixed,siphoned,siphon,simpering,sigfried,sidearm,siddons,sickie,shuteye,shuffleboard,shrubberies,shrouded,showmanship,shouldn't've,shoplift,shiatsu,sentries,sentance,sensuality,seething,secretions,searing,scuttlebutt,sculpt,scowling,scouring,scorecard,schoolers,schmucks,scepters,scaly,scalps,scaffolding,sauces,sartorius,santen,salivating,sainthood,saget,saddens,rygalski,rusting,ruination,rueland,rudabaga,rottweiler,roofies,romantics,rollerblading,roldy,roadshow,rickets,rible,rheza,revisiting,retentive,resurface,restores,respite,resounding,resorting,resists,repulse,repressing,repaying,reneged,refunds,rediscover,redecorated,reconstructive,recommitted,recollect,receptacle,reassess,reanimation,realtors,razinin,rationalization,ratatouille,rashum,rasczak,rancheros,rampler,quizzing,quips,quartered,purring,pummeling,puede,proximo,prospectus,pronouncing,prolonging,procreation,proclamations,principled,prides,preoccupation,prego,precog,prattle,pounced,potshots,potpourri,porque,pomegranates,polenta,plying,pluie,plesac,playmates,plantains,pillowcase,piddle,pickers,photocopied,philistine,perpetuate,perpetually,perilous,pawned,pausing,pauper,parter,parlez,parlay,pally,ovulation,overtake,overstate,overpowering,overpowered,overconfident,overbooked,ovaltine,outweighs,outings,ottos,orrin,orifice,orangutan,oopsy,ooooooooh,oooooo,ooohhhh,ocular,obstruct,obscenely,o'dwyer,nutjob,nunur,notifying,nostrand,nonny,nonfat,noblest,nimble,nikes,nicht,newsworthy,nestled,nearsighted,ne'er,nastier,narco,nakedness,muted,mummified,mudda,mozzarella,moxica,motivator,motility,mothafucka,mortmain,mortgaged,mores,mongers,mobbed,mitigating,mistah,misrepresented,mishke,misfortunes,misdirection,mischievous,mineshaft,millaney,microwaves,metzenbaum,mccovey,masterful,masochistic,marliston,marijawana,manya,mantumbi,malarkey,magnifique,madrona,madox,machida,m'hidi,lullabies,loveliness,lotions,looka,lompoc,litterbug,litigator,lithe,liquorice,linds,limericks,lightbulb,lewises,letch,lemec,layover,lavatory,laurels,lateness,laparotomy,laboring,kuato,kroff,krispy,krauts,knuckleheads,kitschy,kippers,kimbrow,keypad,keepsake,kebab,karloff,junket,judgemental,jointed,jezzie,jetting,jeeze,jeeter,jeesus,jeebs,janeane,jails,jackhammer,ixnay,irritates,irritability,irrevocable,irrefutable,irked,invoking,intricacies,interferon,intents,insubordinate,instructive,instinctive,inquisitive,inlay,injuns,inebriated,indignity,indecisive,incisors,incacha,inalienable,impresses,impregnate,impregnable,implosion,idolizes,hypothyroidism,hypoglycemic,huseni,humvee,huddling,honing,hobnobbing,hobnob,histrionics,histamine,hirohito,hippocratic,hindquarters,hikita,hikes,hightailed,hieroglyphics,heretofore,herbalist,hehey,hedriks,heartstrings,headmistress,headlight,hardheaded,happend,handlebars,hagitha,habla,gyroscope,guys'd,guy'd,guttersnipe,grump,growed,grovelling,groan,greenbacks,gravedigger,grating,grasshoppers,grandiose,grandest,grafted,gooood,goood,gooks,godsakes,goaded,glamorama,giveth,gingham,ghostbusters,germane,georgy,gazzo,gazelles,gargle,garbled,galgenstein,gaffe,g'day,fyarl,furnish,furies,fulfills,frowns,frowned,frighteningly,freebies,freakishly,forewarned,foreclose,forearms,fordson,fonics,flushes,flitting,flemmer,flabby,fishbowl,fidgeting,fevers,feigning,faxing,fatigued,fathoms,fatherless,fancier,fanatical,factored,eyelid,eyeglasses,expresso,expletive,expectin,excruciatingly,evidentiary,ever'thing,eurotrash,eubie,estrangement,erlich,epitome,entrap,enclose,emphysema,embers,emasculating,eighths,eardrum,dyslexia,duplicitous,dumpty,dumbledore,dufus,duddy,duchamp,drunkenness,drumlin,drowns,droid,drinky,drifts,drawbridge,dramamine,douggie,douchebag,dostoyevsky,doodling,don'tcha,domineering,doings,dogcatcher,doctoring,ditzy,dissimilar,dissecting,disparage,disliking,disintegrating,dishwalla,dishonored,dishing,disengaged,disavowed,dippy,diorama,dimmed,dilate,digitalis,diggory,dicing,diagnosing,devola,desolation,dennings,denials,deliverance,deliciously,delicacies,degenerates,degas,deflector,defile,deference,decrepit,deciphered,dawdle,dauphine,daresay,dangles,dampen,damndest,cucumbers,cucaracha,cryogenically,croaks,croaked,criticise,crisper,creepiest,creams,crackle,crackin,covertly,counterintelligence,corrosive,cordially,cops'll,convulsions,convoluted,conversing,conga,confrontational,confab,condolence,condiments,complicit,compiegne,commodus,comings,cometh,collusion,collared,cockeyed,clobber,clemonds,clarithromycin,cienega,christmasy,christmassy,chloroform,chippie,chested,cheeco,checklist,chauvinist,chandlers,chambermaid,chakras,cellophane,caveat,cataloguing,cartmanland,carples,carny,carded,caramels,cappy,caped,canvassing,callback,calibrated,calamine,buttermilk,butterfingers,bunsen,bulimia,bukatari,buildin,budged,brobich,bringer,brendell,brawling,bratty,braised,boyish,boundless,botch,boosh,bookies,bonbons,bodes,bobunk,bluntly,blossoming,bloomers,bloodstains,bloodhounds,blech,biter,biometric,bioethics,bijan,bigoted,bicep,bereaved,bellowing,belching,beholden,beached,batmobile,barcodes,barch,barbecuing,bandanna,backwater,backtrack,backdraft,augustino,atrophy,atrocity,atley,atchoo,asthmatic,assoc,armchair,arachnids,aptly,appetizing,antisocial,antagonizing,anorexia,anini,andersons,anagram,amputation,alleluia,airlock,aimless,agonized,agitate,aggravating,aerosol,acing,accomplishing,accidently,abuser,abstain,abnormally,aberration,aaaaahh,zlotys,zesty,zerzura,zapruder,zantopia,yelburton,yeess,y'knowwhati'msayin,wwhat,wussies,wrenched,would'a,worryin,wormser,wooooo,wookiee,wolchek,wishin,wiseguys,windbreaker,wiggy,wieners,wiedersehen,whoopin,whittled,wherefore,wharvey,welts,wellstone,wedges,wavered,watchit,wastebasket,wango,waken,waitressed,wacquiem,vrykolaka,voula,vitally,visualizing,viciousness,vespers,vertes,verily,vegetarians,vater,vaporize,vannacutt,vallens,ussher,urinating,upping,unwitting,untangle,untamed,unsanitary,unraveled,unopened,unisex,uninvolved,uninteresting,unintelligible,unimaginative,undeserving,undermines,undergarments,unconcerned,tyrants,typist,tykes,tybalt,twosome,twits,tutti,turndown,tularemia,tuberculoma,tsimshian,truffaut,truer,truant,trove,triumphed,tripe,trigonometry,trifled,trifecta,tribulations,tremont,tremoille,transcends,trafficker,touchin,tomfoolery,tinkered,tinfoil,tightrope,thousan,thoracotomy,thesaurus,thawing,thatta,tessio,temps,taxidermist,tator,tachycardia,t'akaya,swelco,sweetbreads,swatting,supercollider,sunbathing,summarily,suffocation,sueleen,succinct,subsided,submissive,subjecting,subbing,subatomic,stupendous,stunted,stubble,stubbed,streetwalker,strategizing,straining,straightaway,stoli,stiffer,stickup,stens,steamroller,steadwell,steadfast,stateroom,stans,sshhhh,squishing,squinting,squealed,sprouting,sprimp,spreadsheets,sprawled,spotlights,spooning,spirals,speedboat,spectacles,speakerphone,southglen,souse,soundproof,soothsayer,sommes,somethings,solidify,soars,snorted,snorkeling,snitches,sniping,snifter,sniffin,snickering,sneer,snarl,smila,slinking,slanted,slanderous,slammin,skimp,skilosh,siteid,sirloin,singe,sighing,sidekicks,sicken,showstopper,shoplifter,shimokawa,sherborne,shavadai,sharpshooters,sharking,shagged,shaddup,senorita,sesterces,sensuous,seahaven,scullery,scorcher,schotzie,schnoz,schmooze,schlep,schizo,scents,scalping,scalped,scallop,scalding,sayeth,saybrooke,sawed,savoring,sardine,sandstorm,sandalwood,salutations,sagman,s'okay,rsvp'd,rousted,rootin,romper,romanovs,rollercoaster,rolfie,robinsons,ritzy,ritualistic,ringwald,rhymed,rheingold,rewrites,revoking,reverts,retrofit,retort,retinas,respirations,reprobate,replaying,repaint,renquist,renege,relapsing,rekindled,rejuvenating,rejuvenated,reinstating,recriminations,rechecked,reassemble,rears,reamed,reacquaint,rayanne,ravish,rathole,raspail,rarest,rapists,rants,racketeer,quittin,quitters,quintessential,queremos,quellek,quelle,quasimodo,pyromaniac,puttanesca,puritanical,purer,puree,pungent,pummel,puedo,psychotherapist,prosecutorial,prosciutto,propositioning,procrastination,probationary,primping,preventative,prevails,preservatives,preachy,praetorians,practicality,powders,potus,postop,positives,poser,portolano,portokalos,poolside,poltergeists,pocketed,poach,plummeted,plucking,plimpton,playthings,plastique,plainclothes,pinpointed,pinkus,pinks,pigskin,piffle,pictionary,piccata,photocopy,phobias,perignon,perfumes,pecks,pecked,patently,passable,parasailing,paramus,papier,paintbrush,pacer,paaiint,overtures,overthink,overstayed,overrule,overestimate,overcooked,outlandish,outgrew,outdoorsy,outdo,orchestrate,oppress,opposable,oooohh,oomupwah,okeydokey,okaaay,ohashi,of'em,obscenities,oakie,o'gar,nurection,nostradamus,norther,norcom,nooch,nonsensical,nipped,nimbala,nervously,neckline,nebbleman,narwhal,nametag,n'n't,mycenae,muzak,muumuu,mumbled,mulvehill,muggings,muffet,mouthy,motivates,motaba,moocher,mongi,moley,moisturize,mohair,mocky,mmkay,mistuh,missis,misdeeds,mincemeat,miggs,miffed,methadone,messieur,menopausal,menagerie,mcgillicuddy,mayflowers,matrimonial,matick,masai,marzipan,maplewood,manzelle,mannequins,manhole,manhandle,malfunctions,madwoman,machiavelli,lynley,lynched,lurconis,lujack,lubricant,looove,loons,loofah,lonelyhearts,lollipops,lineswoman,lifers,lexter,lepner,lemony,leggy,leafy,leadeth,lazerus,lazare,lawford,languishing,lagoda,ladman,kundera,krinkle,krendler,kreigel,kowolski,knockdown,knifed,kneed,kneecap,kids'll,kennie,kenmore,keeled,kazootie,katzenmoyer,kasdan,karak,kapowski,kakistos,julyan,jockstrap,jobless,jiggly,jaunt,jarring,jabbering,irrigate,irrevocably,irrationally,ironies,invitro,intimated,intently,intentioned,intelligently,instill,instigator,instep,inopportune,innuendoes,inflate,infects,infamy,indiscretions,indiscreet,indio,indignities,indict,indecision,inconspicuous,inappropriately,impunity,impudent,impotence,implicates,implausible,imperfection,impatience,immutable,immobilize,idealist,iambic,hysterically,hyperspace,hygienist,hydraulics,hydrated,huzzah,husks,hunched,huffed,hubris,hubbub,hovercraft,houngan,hosed,horoscopes,hopelessness,hoodwinked,honorably,honeysuckle,homegirl,holiest,hippity,hildie,hieroglyphs,hexton,herein,heckle,heaping,healthilizer,headfirst,hatsue,harlot,hardwired,halothane,hairstyles,haagen,haaaaa,gutting,gummi,groundless,groaning,gristle,grills,graynamore,grabbin,goodes,goggle,glittering,glint,gleaming,glassy,girth,gimbal,giblets,gellers,geezers,geeze,garshaw,gargantuan,garfunkel,gangway,gandarium,gamut,galoshes,gallivanting,gainfully,gachnar,fusionlips,fusilli,furiously,frugal,fricking,frederika,freckling,frauds,fountainhead,forthwith,forgo,forgettable,foresight,foresaw,fondling,fondled,fondle,folksy,fluttering,fluffing,floundering,flirtatious,flexing,flatterer,flaring,fixating,finchy,figurehead,fiendish,fertilize,ferment,fending,fellahs,feelers,fascinate,fantabulous,falsify,fallopian,faithless,fairer,fainter,failings,facetious,eyepatch,exxon,extraterrestrials,extradite,extracurriculars,extinguish,expunged,expelling,exorbitant,exhilarated,exertion,exerting,excercise,everbody,evaporated,escargot,escapee,erases,epizootics,epithelials,ephrum,entanglements,enslave,engrossed,emphatic,emeralds,ember,emancipated,elevates,ejaculate,effeminate,eccentricities,easygoing,earshot,dunks,dullness,dulli,dulled,drumstick,dropper,driftwood,dregs,dreck,dreamboat,draggin,downsizing,donowitz,dominoes,diversions,distended,dissipate,disraeli,disqualify,disowned,dishwashing,disciplining,discerning,disappoints,dinged,digested,dicking,detonating,despising,depressor,depose,deport,dents,defused,deflecting,decryption,decoys,decoupage,decompress,decibel,decadence,deafening,dawning,dater,darkened,dappy,dallying,dagon,czechoslovakians,cuticles,cuteness,cupboards,culottes,cruisin,crosshairs,cronyn,criminalistics,creatively,creaming,crapping,cranny,cowed,contradicting,constipation,confining,confidences,conceiving,conceivably,concealment,compulsively,complainin,complacent,compels,communing,commode,comming,commensurate,columnists,colonoscopy,colchicine,coddling,clump,clubbed,clowning,cliffhanger,clang,cissy,choosers,choker,chiffon,channeled,chalet,cellmates,cathartic,caseload,carjack,canvass,canisters,candlestick,candlelit,camry,calzones,calitri,caldy,byline,butterball,bustier,burlap,bureaucrat,buffoons,buenas,brookline,bronzed,broiled,broda,briss,brioche,briar,breathable,brays,brassieres,boysenberry,bowline,boooo,boonies,booklets,bookish,boogeyman,boogey,bogas,boardinghouse,bluuch,blundering,bluer,blowed,blotchy,blossomed,bloodwork,bloodied,blithering,blinks,blathering,blasphemous,blacking,birdson,bings,bfmid,bfast,bettin,berkshires,benjamins,benevolence,benched,benatar,bellybutton,belabor,behooves,beddy,beaujolais,beattle,baxworth,baseless,barfing,bannish,bankrolled,banek,ballsy,ballpoint,baffling,badder,badda,bactine,backgammon,baako,aztreonam,authoritah,auctioning,arachtoids,apropos,aprons,apprised,apprehensive,anythng,antivenin,antichrist,anorexic,anoint,anguished,angioplasty,angio,amply,ampicillin,amphetamines,alternator,alcove,alabaster,airlifted,agrabah,affidavits,admonished,admonish,addled,addendum,accuser,accompli,absurdity,absolved,abrusso,abreast,aboot,abductions,abducting,aback,ababwa,aaahhhh,zorin,zinthar,zinfandel,zillions,zephyrs,zatarcs,zacks,youuu,yokels,yardstick,yammer,y'understand,wynette,wrung,wreaths,wowed,wouldn'ta,worming,wormed,workday,woodsy,woodshed,woodchuck,wojadubakowski,withering,witching,wiseass,wiretaps,wining,willoby,wiccaning,whupped,whoopi,whoomp,wholesaler,whiteness,whiner,whatchya,wharves,wenus,weirdoes,weaning,watusi,waponi,waistband,wackos,vouching,votre,vivica,viveca,vivant,vivacious,visor,visitin,visage,vicrum,vetted,ventriloquism,venison,varnsen,vaporized,vapid,vanstock,uuuuh,ushering,urologist,urination,upstart,uprooted,unsubtitled,unspoiled,unseat,unseasonably,unseal,unsatisfying,unnerve,unlikable,unleaded,uninsured,uninspired,unicycle,unhooked,unfunny,unfreezing,unflattering,unfairness,unexpressed,unending,unencumbered,unearth,undiscovered,undisciplined,understan,undershirt,underlings,underline,undercurrent,uncivilized,uncharacteristic,umpteenth,uglies,tuney,trumps,truckasaurus,trubshaw,trouser,tringle,trifling,trickster,trespassers,trespasser,traumas,trattoria,trashes,transgressions,trampling,tp'ed,toxoplasmosis,tounge,tortillas,topsy,topple,topnotch,tonsil,tions,timmuh,timithious,tilney,tighty,tightness,tightens,tidbits,ticketed,thyme,threepio,thoughtfully,thorkel,thommo,thing'll,thefts,that've,thanksgivings,tetherball,testikov,terraforming,tepid,tendonitis,tenboom,telex,teenybopper,tattered,tattaglias,tanneke,tailspin,tablecloth,swooping,swizzle,swiping,swindled,swilling,swerving,sweatshops,swaddling,swackhammer,svetkoff,supossed,superdad,sumptuous,sugary,sugai,subvert,substantiate,submersible,sublimating,subjugation,stymied,strychnine,streetlights,strassmans,stranglehold,strangeness,straddling,straddle,stowaways,stotch,stockbrokers,stifling,stepford,steerage,steena,statuary,starlets,staggeringly,ssshhh,squaw,spurt,spungeon,spritzer,sprightly,sprays,sportswear,spoonful,splittin,splitsville,speedily,specialise,spastic,sparrin,souvlaki,southie,sourpuss,soupy,soundstage,soothes,somebody'd,softest,sociopathic,socialized,snyders,snowmobiles,snowballed,snatches,smugness,smoothest,smashes,sloshed,sleight,skyrocket,skied,skewed,sixpence,sipowicz,singling,simulates,shyness,shuvanis,showoff,shortsighted,shopkeeper,shoehorn,shithouse,shirtless,shipshape,shifu,shelve,shelbyville,sheepskin,sharpens,shaquille,shanshu,servings,sequined,seizes,seashells,scrambler,scopes,schnauzer,schmo,schizoid,scampered,savagely,saudis,santas,sandovals,sanding,saleswoman,sagging,s'cuse,rutting,ruthlessly,runneth,ruffians,rubes,rosalita,rollerblades,rohypnol,roasts,roadies,ritten,rippling,ripples,rigoletto,richardo,rethought,reshoot,reserving,reseda,rescuer,reread,requisitions,repute,reprogram,replenish,repetitious,reorganizing,reinventing,reinvented,reheat,refrigerators,reenter,recruiter,recliner,rawdy,rashes,rajeski,raison,raisers,rages,quinine,questscape,queller,pygmalion,pushers,pusan,purview,pumpin,pubescent,prudes,provolone,propriety,propped,procrastinate,processional,preyed,pretrial,portent,pooling,poofy,polloi,policia,poacher,pluses,pleasuring,platitudes,plateaued,plaguing,pittance,pinheads,pincushion,pimply,pimped,piggyback,piecing,phillipe,philipse,philby,pharaohs,petyr,petitioner,peshtigo,pesaram,persnickety,perpetrate,percolating,pepto,penne,penell,pemmican,peeks,pedaling,peacemaker,pawnshop,patting,pathologically,patchouli,pasts,pasties,passin,parlors,paltrow,palamon,padlock,paddling,oversleep,overheating,overdosed,overcharge,overblown,outrageously,ornery,opportune,oooooooooh,oohhhh,ohhhhhh,ogres,odorless,obliterated,nyong,nymphomaniac,ntozake,novocain,nough,nonnie,nonissue,nodules,nightmarish,nightline,niceties,newsman,needra,nedry,necking,navour,nauseam,nauls,narim,namath,nagged,naboo,n'sync,myslexia,mutator,mustafi,musketeer,murtaugh,murderess,munching,mumsy,muley,mouseville,mortifying,morgendorffers,moola,montel,mongoloid,molestered,moldings,mocarbies,mo'ss,mixers,misrell,misnomer,misheard,mishandled,miscreant,misconceptions,miniscule,millgate,mettle,metricconverter,meteors,menorah,mengele,melding,meanness,mcgruff,mcarnold,matzoh,matted,mastectomy,massager,marveling,marooned,marmaduke,marick,manhandled,manatees,man'll,maltin,maliciously,malfeasance,malahide,maketh,makeovers,maiming,machismo,lumpectomy,lumbering,lucci,lording,lorca,lookouts,loogie,loners,loathed,lissen,lighthearted,lifer,lickin,lewen,levitation,lestercorp,lessee,lentils,legislate,legalizing,lederhosen,lawmen,lasskopf,lardner,lambeau,lamagra,ladonn,lactic,lacquer,labatier,krabappel,kooks,knickknacks,klutzy,kleynach,klendathu,kinross,kinkaid,kind'a,ketch,kesher,karikos,karenina,kanamits,junshi,jumbled,joust,jotted,jobson,jingling,jigalong,jerries,jellies,jeeps,javna,irresistable,internist,intercranial,inseminated,inquisitor,infuriate,inflating,infidelities,incessantly,incensed,incase,incapacitate,inasmuch,inaccuracies,imploding,impeding,impediments,immaturity,illegible,iditarod,icicles,ibuprofen,i'i'm,hymie,hydrolase,hunker,humps,humons,humidor,humdinger,humbling,huggin,huffing,housecleaning,hothouse,hotcakes,hosty,hootenanny,hootchie,hoosegow,honks,honeymooners,homily,homeopathic,hitchhikers,hissed,hillnigger,hexavalent,hewwo,hershe,hermey,hergott,henny,hennigans,henhouse,hemolytic,helipad,heifer,hebrews,hebbing,heaved,headlock,harrowing,harnessed,hangovers,handi,handbasket,halfrek,hacene,gyges,guys're,gundersons,gumption,gruntmaster,grubs,grossie,groped,grins,greaseball,gravesite,gratuity,granma,grandfathers,grandbaby,gradski,gracing,gossips,gooble,goners,golitsyn,gofer,godsake,goddaughter,gnats,gluing,glares,givers,ginza,gimmie,gimmee,gennero,gemme,gazpacho,gazed,gassy,gargling,gandhiji,galvanized,gallbladder,gaaah,furtive,fumigation,fucka,fronkonsteen,frills,freezin,freewald,freeloader,frailty,forger,foolhardy,fondest,fomin,followin,follicle,flotation,flopping,floodgates,flogged,flicked,flenders,fleabag,fixings,fixable,fistful,firewater,firelight,fingerbang,finalizing,fillin,filipov,fiderer,felling,feldberg,feign,faunia,fatale,farkus,fallible,faithfulness,factoring,eyeful,extramarital,exterminated,exhume,exasperated,eviscerate,estoy,esmerelda,escapades,epoxy,enticed,enthused,entendre,engrossing,endorphins,emptive,emmys,eminently,embezzler,embarressed,embarrassingly,embalmed,eludes,eling,elated,eirie,egotitis,effecting,eerily,eecom,eczema,earthy,earlobes,eally,dyeing,dwells,duvet,duncans,dulcet,droves,droppin,drools,drey'auc,downriver,domesticity,dollop,doesnt,dobler,divulged,diversionary,distancing,dispensers,disorienting,disneyworld,dismissive,disingenuous,disheveled,disfiguring,dinning,dimming,diligently,dilettante,dilation,dickensian,diaphragms,devastatingly,destabilize,desecrate,deposing,deniece,demony,delving,delicates,deigned,defraud,deflower,defibrillator,defiantly,defenceless,defacing,deconstruction,decompose,deciphering,decibels,deceptively,deceptions,decapitation,debutantes,debonair,deadlier,dawdling,davic,darwinism,darnit,darks,danke,danieljackson,dangled,cytoxan,cutout,cutlery,curveball,curfews,cummerbund,crunches,crouched,crisps,cripples,crilly,cribs,crewman,creepin,creeds,credenza,creak,crawly,crawlin,crawlers,crated,crackheads,coworker,couldn't've,corwins,coriander,copiously,convenes,contraceptives,contingencies,contaminating,conniption,condiment,concocting,comprehending,complacency,commendatore,comebacks,com'on,collarbone,colitis,coldly,coiffure,coffers,coeds,codependent,cocksucking,cockney,cockles,clutched,closeted,cloistered,cleve,cleats,clarifying,clapped,cinnabar,chunnel,chumps,cholinesterase,choirboy,chocolatey,chlamydia,chigliak,cheesie,chauvinistic,chasm,chartreuse,charo,charnier,chapil,chalked,chadway,certifiably,cellulite,celled,cavalcade,cataloging,castrated,cassio,cashews,cartouche,carnivore,carcinogens,capulet,captivated,capt'n,cancellations,campin,callate,callar,caffeinated,cadavers,cacophony,cackle,buzzes,buttoning,busload,burglaries,burbs,buona,bunions,bullheaded,buffs,bucyk,buckling,bruschetta,browbeating,broomsticks,broody,bromly,brolin,briefings,brewskies,breathalyzer,breakups,bratwurst,brania,braiding,brags,braggin,bradywood,bottomed,bossa,bordello,bookshelf,boogida,bondsman,bolder,boggles,bludgeoned,blowtorch,blotter,blips,blemish,bleaching,blainetologists,blading,blabbermouth,birdseed,bimmel,biloxi,biggly,bianchinni,betadine,berenson,belus,belloq,begets,befitting,beepers,beelzebub,beefed,bedridden,bedevere,beckons,beaded,baubles,bauble,battleground,bathrobes,basketballs,basements,barroom,barnacle,barkin,barked,baretta,bangles,bangler,banality,bambang,baltar,ballplayers,bagman,baffles,backroom,babysat,baboons,averse,audiotape,auctioneer,atten,atcha,astonishment,arugula,arroz,antihistamines,annoyances,anesthesiology,anatomically,anachronism,amiable,amaretto,allahu,alight,aimin,ailment,afterglow,affronte,advil,adrenals,actualization,acrost,ached,accursed,accoutrements,absconded,aboveboard,abetted,aargh,aaaahh,zuwicky,zolda,ziploc,zakamatak,youve,yippie,yesterdays,yella,yearns,yearnings,yearned,yawning,yalta,yahtzee,y'mean,y'are,wuthering,wreaks,worrisome,workiiing,wooooooo,wonky,womanizing,wolodarsky,wiwith,withdraws,wishy,wisht,wipers,wiper,winos,windthorne,windsurfing,windermere,wiggled,wiggen,whwhat,whodunit,whoaaa,whittling,whitesnake,whereof,wheezing,wheeze,whatd'ya,whataya,whammo,whackin,wellll,weightless,weevil,wedgies,webbing,weasly,wayside,waxes,waturi,washy,washrooms,wandell,waitaminute,waddya,waaaah,vornac,vishnoor,virulent,vindictiveness,vinceres,villier,vigeous,vestigial,ventilate,vented,venereal,veering,veered,veddy,vaslova,valosky,vailsburg,vaginas,vagas,urethra,upstaged,uploading,unwrapping,unwieldy,untapped,unsatisfied,unquenchable,unnerved,unmentionable,unlovable,unknowns,uninformed,unimpressed,unhappily,unguarded,unexplored,undergarment,undeniably,unclench,unclaimed,uncharacteristically,unbuttoned,unblemished,ululd,uhhhm,tweeze,tutsami,tushy,tuscarora,turkle,turghan,turbinium,tubers,trucoat,troxa,tropicana,triquetra,trimmers,triceps,trespassed,traya,traumatizing,transvestites,trainors,tradin,trackers,townies,tourelles,toucha,tossin,tortious,topshop,topes,tonics,tongs,tomsk,tomorrows,toiling,toddle,tizzy,tippers,timmi,thwap,thusly,ththe,thrusts,throwers,throwed,throughway,thickening,thermonuclear,thelwall,thataway,terrifically,tendons,teleportation,telepathically,telekinetic,teetering,teaspoons,tarantulas,tapas,tanned,tangling,tamales,tailors,tahitian,tactful,tachy,tablespoon,syrah,synchronicity,synch,synapses,swooning,switchman,swimsuits,sweltering,sweetly,suvolte,suslov,surfed,supposition,suppertime,supervillains,superfluous,superego,sunspots,sunning,sunless,sundress,suckah,succotash,sublevel,subbasement,studious,striping,strenuously,straights,stonewalled,stillness,stilettos,stevesy,steno,steenwyck,stargates,stammering,staedert,squiggly,squiggle,squashing,squaring,spreadsheet,spramp,spotters,sporto,spooking,splendido,spittin,spirulina,spiky,spate,spartacus,spacerun,soonest,something'll,someth,somepin,someone'll,sofas,soberly,sobered,snowmen,snowbank,snowballing,snivelling,sniffling,snakeskin,snagging,smush,smooter,smidgen,smackers,slumlord,slossum,slimmer,slighted,sleepwalk,sleazeball,skokie,skeptic,sitarides,sistah,sipped,sindell,simpletons,simony,silkwood,silks,silken,sightless,sideboard,shuttles,shrugging,shrouds,showy,shoveled,shouldn'ta,shoplifters,shitstorm,sheeny,shapetype,shaming,shallows,shackle,shabbily,shabbas,seppuku,senility,semite,semiautomatic,selznick,secretarial,sebacio,scuzzy,scummy,scrutinized,scrunchie,scribbled,scotches,scolded,scissor,schlub,scavenging,scarin,scarfing,scallions,scald,savour,savored,saute,sarcoidosis,sandbar,saluted,salish,saith,sailboats,sagittarius,sacre,saccharine,sacamano,rushdie,rumpled,rumba,rulebook,rubbers,roughage,rotisserie,rootie,roofy,roofie,romanticize,rittle,ristorante,rippin,rinsing,ringin,rincess,rickety,reveling,retest,retaliating,restorative,reston,restaurateur,reshoots,resetting,resentments,reprogramming,repossess,repartee,renzo,remore,remitting,remeber,relaxants,rejuvenate,rejections,regenerated,refocus,referrals,reeno,recycles,recrimination,reclining,recanting,reattach,reassigning,razgul,raved,rattlesnakes,rattles,rashly,raquetball,ransack,raisinettes,raheem,radisson,radishes,raban,quoth,qumari,quints,quilts,quilting,quien,quarreled,purty,purblind,punchbowl,publically,psychotics,psychopaths,psychoanalyze,pruning,provasik,protectin,propping,proportioned,prophylactic,proofed,prompter,procreate,proclivities,prioritizing,prinze,pricked,press'll,presets,prescribes,preocupe,prejudicial,prefex,preconceived,precipice,pralines,pragmatist,powerbar,pottie,pottersville,potsie,potholes,posses,posies,portkey,porterhouse,pornographers,poring,poppycock,poppers,pomponi,pokin,poitier,podiatry,pleeze,pleadings,playbook,platelets,plane'arium,placebos,place'll,pistachios,pirated,pinochle,pineapples,pinafore,pimples,piggly,piddling,picon,pickpockets,picchu,physiologically,physic,phobic,philandering,phenomenally,pheasants,pewter,petticoat,petronis,petitioning,perturbed,perpetuating,permutat,perishable,perimeters,perfumed,percocet,per'sus,pepperjack,penalize,pelting,pellet,peignoir,pedicures,peckers,pecans,pawning,paulsson,pattycake,patrolmen,patois,pathos,pasted,parishioner,parcheesi,parachuting,papayas,pantaloons,palpitations,palantine,paintballing,overtired,overstress,oversensitive,overnights,overexcited,overanxious,overachiever,outwitted,outvoted,outnumber,outlast,outlander,out've,orphey,orchestrating,openers,ooooooo,okies,ohhhhhhhhh,ohhhhhhhh,ogling,offbeat,obsessively,obeyed,o'hana,o'bannon,o'bannion,numpce,nummy,nuked,nuances,nourishing,nosedive,norbu,nomlies,nomine,nixed,nihilist,nightshift,newmeat,neglectful,neediness,needin,naphthalene,nanocytes,nanite,naivete,n'yeah,mystifying,myhnegon,mutating,musing,mulled,muggy,muerto,muckraker,muchachos,mountainside,motherless,mosquitos,morphed,mopped,moodoo,moncho,mollem,moisturiser,mohicans,mocks,mistresses,misspent,misinterpretation,miscarry,minuses,mindee,mimes,millisecond,milked,mightn't,mightier,mierzwiak,microchips,meyerling,mesmerizing,mershaw,meecrob,medicate,meddled,mckinnons,mcgewan,mcdunnough,mcats,mbien,matzah,matriarch,masturbated,masselin,martialed,marlboros,marksmanship,marinate,marchin,manicured,malnourished,malign,majorek,magnon,magnificently,macking,machiavellian,macdougal,macchiato,macaws,macanaw,m'self,lydells,lusts,lucite,lubricants,lopper,lopped,loneliest,lonelier,lomez,lojack,loath,liquefy,lippy,limps,likin,lightness,liesl,liebchen,licious,libris,libation,lhamo,leotards,leanin,laxatives,lavished,latka,lanyard,lanky,landmines,lameness,laddies,lacerated,labored,l'amour,kreskin,kovitch,kournikova,kootchy,konoss,knknow,knickety,knackety,kmart,klicks,kiwanis,kissable,kindergartners,kilter,kidnet,kid'll,kicky,kickbacks,kickback,kholokov,kewpie,kendo,katra,kareoke,kafelnikov,kabob,junjun,jumba,julep,jordie,jondy,jolson,jenoff,jawbone,janitorial,janiro,ipecac,invigorated,intruded,intros,intravenously,interruptus,interrogations,interject,interfacing,interestin,insuring,instilled,insensitivity,inscrutable,inroads,innards,inlaid,injector,ingratitude,infuriates,infra,infliction,indelicate,incubators,incrimination,inconveniencing,inconsolable,incestuous,incas,incarcerate,inbreeding,impudence,impressionists,impeached,impassioned,imipenem,idling,idiosyncrasies,icebergs,hypotensive,hydrochloride,hushed,humus,humph,hummm,hulking,hubcaps,hubald,howya,howbout,how'll,housebroken,hotwire,hotspots,hotheaded,horrace,hopsfield,honto,honkin,honeymoons,homewrecker,hombres,hollers,hollerin,hoedown,hoboes,hobbling,hobble,hoarse,hinky,highlighters,hexes,heru'ur,hernias,heppleman,hell're,heighten,heheheheheh,heheheh,hedging,heckling,heckled,heavyset,heatshield,heathens,heartthrob,headpiece,hayseed,haveo,hauls,hasten,harridan,harpoons,hardens,harcesis,harbouring,hangouts,halkein,haleh,halberstam,hairnet,hairdressers,hacky,haaaa,h'yah,gusta,gushy,gurgling,guilted,gruel,grudging,grrrrrr,grosses,groomsmen,griping,gravest,gratified,grated,goulash,goopy,goona,goodly,godliness,godawful,godamn,glycerin,glutes,glowy,globetrotters,glimpsed,glenville,glaucoma,girlscout,giraffes,gilbey,gigglepuss,ghora,gestating,gelato,geishas,gearshift,gayness,gasped,gaslighting,garretts,garba,gablyczyck,g'head,fumigating,fumbling,fudged,fuckwad,fuck're,fuchsia,fretting,freshest,frenchies,freezers,fredrica,fraziers,fraidy,foxholes,fourty,fossilized,forsake,forfeits,foreclosed,foreal,footsies,florists,flopped,floorshow,floorboard,flinching,flecks,flaubert,flatware,flatulence,flatlined,flashdance,flail,flagging,fiver,fitzy,fishsticks,finetti,finelli,finagle,filko,fieldstone,fibber,ferrini,feedin,feasting,favore,fathering,farrouhk,farmin,fairytale,fairservice,factoid,facedown,fabled,eyeballin,extortionist,exquisitely,expedited,exorcise,existentialist,execs,exculpatory,exacerbate,everthing,eventuality,evander,euphoric,euphemisms,estamos,erred,entitle,enquiries,enormity,enfants,endive,encyclopedias,emulating,embittered,effortless,ectopic,ecirc,easely,earphones,earmarks,dweller,durslar,durned,dunois,dunking,dunked,dumdum,dullard,dudleys,druthers,druggist,drossos,drooled,driveways,drippy,dreamless,drawstring,drang,drainpipe,dozing,dotes,dorkface,doorknobs,doohickey,donnatella,doncha,domicile,dokos,dobermans,dizzying,divola,ditsy,distaste,disservice,dislodged,dislodge,disinherit,disinformation,discounting,dinka,dimly,digesting,diello,diddling,dictatorships,dictators,diagnostician,devours,devilishly,detract,detoxing,detours,detente,destructs,desecrated,derris,deplore,deplete,demure,demolitions,demean,delish,delbruck,delaford,degaulle,deftly,deformity,deflate,definatly,defector,decrypted,decontamination,decapitate,decanter,dardis,dampener,damme,daddy'll,dabbling,dabbled,d'etre,d'argent,d'alene,d'agnasti,czechoslovakian,cymbal,cyberdyne,cutoffs,cuticle,curvaceous,curiousity,crowing,crowed,croutons,cropped,criminy,crescentis,crashers,cranwell,coverin,courtrooms,countenance,cosmically,cosign,corroboration,coroners,cornflakes,copperpot,copperhead,copacetic,coordsize,convulsing,consults,conjures,congenial,concealer,compactor,commercialism,cokey,cognizant,clunkers,clumsily,clucking,cloves,cloven,cloths,clothe,clods,clocking,clings,clavicle,classless,clashing,clanking,clanging,clamping,civvies,citywide,circulatory,circuited,chronisters,chromic,choos,chloroformed,chillun,cheesed,chatterbox,chaperoned,channukah,cerebellum,centerpieces,centerfold,ceecee,ccedil,cavorting,cavemen,cauterized,cauldwell,catting,caterine,cassiopeia,carves,cartwheel,carpeted,carob,caressing,carelessly,careening,capricious,capitalistic,capillaries,candidly,camaraderie,callously,calfskin,caddies,buttholes,busywork,busses,burps,burgomeister,bunkhouse,bungchow,bugler,buffets,buffed,brutish,brusque,bronchitis,bromden,brolly,broached,brewskis,brewin,brean,breadwinner,brana,bountiful,bouncin,bosoms,borgnine,bopping,bootlegs,booing,bombosity,bolting,boilerplate,bluey,blowback,blouses,bloodsuckers,bloodstained,bloat,bleeth,blackface,blackest,blackened,blacken,blackballed,blabs,blabbering,birdbrain,bipartisanship,biodegradable,biltmore,bilked,big'uns,bidet,besotted,bernheim,benegas,bendiga,belushi,bellboys,belittling,behinds,begone,bedsheets,beckoning,beaute,beaudine,beastly,beachfront,bathes,batak,baser,baseballs,barbella,bankrolling,bandaged,baerly,backlog,backin,babying,azkaban,awwwww,aviary,authorizes,austero,aunty,attics,atreus,astounded,astonish,artemus,arses,arintero,appraiser,apathetic,anybody'd,anxieties,anticlimactic,antar,anglos,angleman,anesthetist,androscoggin,andolini,andale,amway,amuck,amniocentesis,amnesiac,americano,amara,alvah,altruism,alternapalooza,alphabetize,alpaca,allus,allergist,alexandros,alaikum,akimbo,agoraphobia,agides,aggrhh,aftertaste,adoptions,adjuster,addictions,adamantium,activator,accomplishes,aberrant,aaaaargh,aaaaaaaaaaaaa,a'ight,zzzzzzz,zucchini,zookeeper,zirconia,zippers,zequiel,zellary,zeitgeist,zanuck,zagat,you'n,ylang,yes'm,yenta,yecchh,yecch,yawns,yankin,yahdah,yaaah,y'got,xeroxed,wwooww,wristwatch,wrangled,wouldst,worthiness,worshiping,wormy,wormtail,wormholes,woosh,wollsten,wolfing,woefully,wobbling,wintry,wingding,windstorm,windowtext,wiluna,wilting,wilted,willick,willenholly,wildflowers,wildebeest,whyyy,whoppers,whoaa,whizzing,whizz,whitest,whistled,whist,whinny,wheelies,whazzup,whatwhatwhaaat,whato,whatdya,what'dya,whacks,wewell,wetsuit,welluh,weeps,waylander,wavin,wassail,wasnt,warneford,warbucks,waltons,wallbanger,waiving,waitwait,vowing,voucher,vornoff,vorhees,voldemort,vivre,vittles,vindaloo,videogames,vichyssoise,vicarious,vesuvius,verguenza,ven't,velveteen,velour,velociraptor,vastness,vasectomies,vapors,vanderhof,valmont,validates,valiantly,vacuums,usurp,usernum,us'll,urinals,unyielding,unvarnished,unturned,untouchables,untangled,unsecured,unscramble,unreturned,unremarkable,unpretentious,unnerstand,unmade,unimpeachable,unfashionable,underwrite,underlining,underling,underestimates,underappreciated,uncouth,uncork,uncommonly,unclog,uncircumcised,unchallenged,uncas,unbuttoning,unapproved,unamerican,unafraid,umpteen,umhmm,uhwhy,ughuh,typewriters,twitches,twitched,twirly,twinkling,twinges,twiddling,turners,turnabout,tumblin,tryed,trowel,trousseau,trivialize,trifles,tribianni,trenchcoat,trembled,traumatize,transitory,transients,transfuse,transcribing,tranq,trampy,traipsed,trainin,trachea,traceable,touristy,toughie,toscanini,tortola,tortilla,torreon,toreador,tommorrow,tollbooth,tollans,toidy,togas,tofurkey,toddling,toddies,toasties,toadstool,to've,tingles,timin,timey,timetables,tightest,thuggee,thrusting,thrombus,throes,thrifty,thornharts,thinnest,thicket,thetas,thesulac,tethered,testaburger,tersenadine,terrif,terdlington,tepui,temping,tector,taxidermy,tastebuds,tartlets,tartabull,tar'd,tantamount,tangy,tangles,tamer,tabula,tabletops,tabithia,szechwan,synthedyne,svenjolly,svengali,survivalists,surmise,surfboards,surefire,suprise,supremacists,suppositories,superstore,supercilious,suntac,sunburned,summercliff,sullied,sugared,suckle,subtleties,substantiated,subsides,subliminal,subhuman,strowman,stroked,stroganoff,streetlight,straying,strainer,straighter,straightener,stoplight,stirrups,stewing,stereotyping,stepmommy,stephano,stashing,starshine,stairwells,squatsie,squandering,squalid,squabbling,squab,sprinkling,spreader,spongy,spokesmen,splintered,spittle,spitter,spiced,spews,spendin,spect,spearchucker,spatulas,southtown,soused,soshi,sorter,sorrowful,sooth,some'in,soliloquy,soiree,sodomized,sobriki,soaping,snows,snowcone,snitching,snitched,sneering,snausages,snaking,smoothed,smoochies,smarten,smallish,slushy,slurring,sluman,slithers,slippin,sleuthing,sleeveless,skinless,skillfully,sketchbook,skagnetti,sista,sinning,singularly,sinewy,silverlake,siguto,signorina,sieve,sidearms,shying,shunning,shtud,shrieks,shorting,shortbread,shopkeepers,shmancy,shizzit,shitheads,shitfaced,shipmates,shiftless,shelving,shedlow,shavings,shatters,sharifa,shampoos,shallots,shafter,sha'nauc,sextant,serviceable,sepsis,senores,sendin,semis,semanski,selflessly,seinfelds,seers,seeps,seductress,secaucus,sealant,scuttling,scusa,scrunched,scissorhands,schreber,schmancy,scamps,scalloped,savoir,savagery,sarong,sarnia,santangel,samool,sallow,salino,safecracker,sadism,sacrilegious,sabrini,sabath,s'aright,ruttheimer,rudest,rubbery,rousting,rotarian,roslin,roomed,romari,romanica,rolltop,rolfski,rockettes,roared,ringleader,riffing,ribcage,rewired,retrial,reting,resuscitated,restock,resale,reprogrammed,replicant,repentant,repellant,repays,repainting,renegotiating,rendez,remem,relived,relinquishes,relearn,relaxant,rekindling,rehydrate,refueled,refreshingly,refilling,reexamine,reeseman,redness,redeemable,redcoats,rectangles,recoup,reciprocated,reassessing,realy,realer,reachin,re'kali,rawlston,ravages,rappaports,ramoray,ramming,raindrops,rahesh,radials,racists,rabartu,quiches,quench,quarreling,quaintly,quadrants,putumayo,put'em,purifier,pureed,punitis,pullout,pukin,pudgy,puddings,puckering,pterodactyl,psychodrama,psats,protestations,protectee,prosaic,propositioned,proclivity,probed,printouts,prevision,pressers,preset,preposition,preempt,preemie,preconceptions,prancan,powerpuff,potties,potpie,poseur,porthole,poops,pooping,pomade,polyps,polymerized,politeness,polisher,polack,pocketknife,poatia,plebeian,playgroup,platonically,platitude,plastering,plasmapheresis,plaids,placemats,pizzazz,pintauro,pinstripes,pinpoints,pinkner,pincer,pimento,pileup,pilates,pigmen,pieeee,phrased,photocopies,phoebes,philistines,philanderer,pheromone,phasers,pfeffernuesse,pervs,perspire,personify,perservere,perplexed,perpetrating,perkiness,perjurer,periodontist,perfunctory,perdido,percodan,pentameter,pentacle,pensive,pensione,pennybaker,pennbrooke,penhall,pengin,penetti,penetrates,pegnoir,peeve,peephole,pectorals,peckin,peaky,peaksville,paxcow,paused,patted,parkishoff,parkers,pardoning,paraplegic,paraphrasing,paperers,papered,pangs,paneling,palooza,palmed,palmdale,palatable,pacify,pacified,owwwww,oversexed,overrides,overpaying,overdrawn,overcompensate,overcomes,overcharged,outmaneuver,outfoxed,oughtn't,ostentatious,oshun,orthopedist,or'derves,ophthalmologist,operagirl,oozes,oooooooh,onesie,omnis,omelets,oktoberfest,okeydoke,ofthe,ofher,obstetrical,obeys,obeah,o'henry,nyquil,nyanyanyanyah,nuttin,nutsy,nutball,nurhachi,numbskull,nullifies,nullification,nucking,nubbin,nourished,nonspecific,noing,noinch,nohoho,nobler,nitwits,newsprint,newspaperman,newscaster,neuropathy,netherworld,neediest,navasky,narcissists,napped,nafta,mache,mykonos,mutilating,mutherfucker,mutha,mutates,mutate,musn't,murchy,multitasking,mujeeb,mudslinging,muckraking,mousetrap,mourns,mournful,motherf,mostro,morphing,morphate,moralistic,moochy,mooching,monotonous,monopolize,monocle,molehill,moland,mofet,mockup,mobilizing,mmmmmmm,mitzvahs,mistreating,misstep,misjudge,misinformation,misdirected,miscarriages,miniskirt,mindwarped,minced,milquetoast,miguelito,mightily,midstream,midriff,mideast,microbe,methuselah,mesdames,mescal,men'll,memma,megaton,megara,megalomaniac,meeee,medulla,medivac,meaninglessness,mcnuggets,mccarthyism,maypole,may've,mauve,mateys,marshack,markles,marketable,mansiere,manservant,manse,manhandling,mallomars,malcontent,malaise,majesties,mainsail,mailmen,mahandra,magnolias,magnified,magev,maelstrom,machu,macado,m'boy,m'appelle,lustrous,lureen,lunges,lumped,lumberyard,lulled,luego,lucks,lubricated,loveseat,loused,lounger,loski,lorre,loora,looong,loonies,loincloth,lofts,lodgers,lobbing,loaner,livered,liqueur,ligourin,lifesaving,lifeguards,lifeblood,liaisons,let'em,lesbianism,lence,lemonlyman,legitimize,leadin,lazars,lazarro,lawyering,laugher,laudanum,latrines,lations,laters,lapels,lakefront,lahit,lafortunata,lachrymose,l'italien,kwaini,kruczynski,kramerica,kowtow,kovinsky,korsekov,kopek,knowakowski,knievel,knacks,kiowas,killington,kickball,keyworth,keymaster,kevie,keveral,kenyons,keggers,keepsakes,kechner,keaty,kavorka,karajan,kamerev,kaggs,jujyfruit,jostled,jonestown,jokey,joists,jocko,jimmied,jiggled,jests,jenzen,jenko,jellyman,jedediah,jealitosis,jaunty,jarmel,jankle,jagoff,jagielski,jackrabbits,jabbing,jabberjaw,izzat,irresponsibly,irrepressible,irregularity,irredeemable,inuvik,intuitions,intubated,intimates,interminable,interloper,intercostal,instyle,instigate,instantaneously,ining,ingrown,ingesting,infusing,infringe,infinitum,infact,inequities,indubitably,indisputable,indescribably,indentation,indefinable,incontrovertible,inconsequential,incompletes,incoherently,inclement,incidentals,inarticulate,inadequacies,imprudent,improprieties,imprison,imprinted,impressively,impostors,importante,imperious,impale,immodest,immobile,imbedded,imbecilic,illegals,idn't,hysteric,hypotenuse,hygienic,hyeah,hushpuppies,hunhh,humpback,humored,hummed,humiliates,humidifier,huggy,huggers,huckster,hotbed,hosing,hosers,horsehair,homebody,homebake,holing,holies,hoisting,hogwallop,hocks,hobbits,hoaxes,hmmmmm,hisses,hippest,hillbillies,hilarity,heurh,herniated,hermaphrodite,hennifer,hemlines,hemline,hemery,helplessness,helmsley,hellhound,heheheheh,heeey,hedda,heartbeats,heaped,healers,headstart,headsets,headlong,hawkland,havta,haulin,harvey'll,hanta,hansom,hangnail,handstand,handrail,handoff,hallucinogen,hallor,halitosis,haberdashery,gypped,guy'll,gumbel,guerillas,guava,guardrail,grunther,grunick,groppi,groomer,grodin,gripes,grinds,grifters,gretch,greevey,greasing,graveyards,grandkid,grainy,gouging,gooney,googly,goldmuff,goldenrod,goingo,godly,gobbledygook,gobbledegook,glues,gloriously,glengarry,glassware,glamor,gimmicks,giggly,giambetti,ghoulish,ghettos,ghali,gether,geriatrics,gerbils,geosynchronous,georgio,gente,gendarme,gelbman,gazillionth,gayest,gauging,gastro,gaslight,gasbag,garters,garish,garas,gantu,gangy,gangly,gangland,galling,gadda,furrowed,funnies,funkytown,fugimotto,fudging,fuckeen,frustrates,froufrou,froot,fromberge,frizzies,fritters,frightfully,friendliest,freeloading,freelancing,freakazoid,fraternization,framers,fornication,fornicating,forethought,footstool,foisting,focussing,focking,flurries,fluffed,flintstones,fledermaus,flayed,flawlessly,flatters,flashbang,flapped,fishies,firmer,fireproof,firebug,fingerpainting,finessed,findin,financials,finality,fillets,fiercest,fiefdom,fibbing,fervor,fentanyl,fenelon,fedorchuk,feckless,feathering,faucets,farewells,fantasyland,fanaticism,faltered,faggy,faberge,extorting,extorted,exterminating,exhumation,exhilaration,exhausts,exfoliate,excels,exasperating,exacting,everybody'd,evasions,espressos,esmail,errrr,erratically,eroding,ernswiler,epcot,enthralled,ensenada,enriching,enrage,enhancer,endear,encrusted,encino,empathic,embezzle,emanates,electricians,eking,egomaniacal,egging,effacing,ectoplasm,eavesdropped,dummkopf,dugray,duchaisne,drunkard,drudge,droop,droids,drips,dripped,dribbles,drazens,downy,downsize,downpour,dosages,doppelganger,dopes,doohicky,dontcha,doneghy,divining,divest,diuretics,diuretic,distrustful,disrupts,dismemberment,dismember,disinfect,disillusionment,disheartening,discourteous,discotheque,discolored,dirtiest,diphtheria,dinks,dimpled,didya,dickwad,diatribes,diathesis,diabetics,deviants,detonates,detests,detestable,detaining,despondent,desecration,derision,derailing,deputized,depressors,dependant,dentures,denominators,demur,demonology,delts,dellarte,delacour,deflated,defib,defaced,decorators,deaqon,davola,datin,darwinian,darklighters,dandelions,dampened,damaskinos,dalrimple,d'peshu,d'hoffryn,d'astier,cynics,cutesy,cutaway,curmudgeon,curdle,culpability,cuisinart,cuffing,crypts,cryptid,crunched,crumblers,crudely,crosscheck,croon,crissake,crevasse,creswood,creepo,creases,creased,creaky,cranks,crabgrass,coveralls,couple'a,coughs,coslaw,corporeal,cornucopia,cornering,corks,cordoned,coolly,coolin,cookbooks,contrite,contented,constrictor,confound,confit,confiscating,condoned,conditioners,concussions,comprendo,comers,combustible,combusted,collingswood,coldness,coitus,codicil,coasting,clydesdale,cluttering,clunker,clunk,clumsiness,clotted,clothesline,clinches,clincher,cleverness,clench,clein,cleanses,claymores,clammed,chugging,chronically,christsakes,choque,chompers,chiseling,chirpy,chirp,chinks,chingachgook,chickenpox,chickadee,chewin,chessboard,chargin,chanteuse,chandeliers,chamdo,chagrined,chaff,certs,certainties,cerreno,cerebrum,censured,cemetary,caterwauling,cataclysmic,casitas,cased,carvel,carting,carrear,carolling,carolers,carnie,cardiogram,carbuncle,capulets,canines,candaules,canape,caldecott,calamitous,cadillacs,cachet,cabeza,cabdriver,buzzards,butai,businesswomen,bungled,bumpkins,bummers,bulldoze,buffybot,bubut,bubbies,brrrrr,brownout,brouhaha,bronzing,bronchial,broiler,briskly,briefcases,bricked,breezing,breeher,breakable,breadstick,bravenet,braved,brandies,brainwaves,brainiest,braggart,bradlee,boys're,boys'll,boys'd,boutonniere,bossed,bosomy,borans,boosts,bookshelves,bookends,boneless,bombarding,bollo,boinked,boink,bluest,bluebells,bloodshot,blockhead,blockbusters,blithely,blather,blankly,bladders,blackbeard,bitte,bippy,biogenetics,bilge,bigglesworth,bicuspids,beususe,betaseron,besmirch,bernece,bereavement,bentonville,benchley,benching,bembe,bellyaching,bellhops,belie,beleaguered,behrle,beginnin,begining,beenie,beefs,beechwood,becau,beaverhausen,beakers,bazillion,baudouin,barrytown,barringtons,barneys,barbs,barbers,barbatus,bankrupted,bailiffs,backslide,baby'd,baaad,b'fore,awwwk,aways,awakes,automatics,authenticate,aught,aubyn,attired,attagirl,atrophied,asystole,astroturf,assertiveness,artichokes,arquillians,aright,archenemy,appraise,appeased,antin,anspaugh,anesthetics,anaphylactic,amscray,ambivalence,amalio,alriiight,alphabetized,alpena,alouette,allora,alliteration,allenwood,allegiances,algerians,alcerro,alastor,ahaha,agitators,aforethought,advertises,admonition,adirondacks,adenoids,acupuncturist,acula,actuarial,activators,actionable,achingly,accusers,acclimated,acclimate,absurdly,absorbent,absolvo,absolutes,absences,abdomenizer,aaaaaaaaah,aaaaaaaaaa,a'right".split(","),
54804male_names:"james,john,robert,michael,william,david,richard,charles,joseph,thomas,christopher,daniel,paul,mark,donald,george,kenneth,steven,edward,brian,ronald,anthony,kevin,jason,matthew,gary,timothy,jose,larry,jeffrey,frank,scott,eric,stephen,andrew,raymond,gregory,joshua,jerry,dennis,walter,patrick,peter,harold,douglas,henry,carl,arthur,ryan,roger,joe,juan,jack,albert,jonathan,justin,terry,gerald,keith,samuel,willie,ralph,lawrence,nicholas,roy,benjamin,bruce,brandon,adam,harry,fred,wayne,billy,steve,louis,jeremy,aaron,randy,eugene,carlos,russell,bobby,victor,ernest,phillip,todd,jesse,craig,alan,shawn,clarence,sean,philip,chris,johnny,earl,jimmy,antonio,danny,bryan,tony,luis,mike,stanley,leonard,nathan,dale,manuel,rodney,curtis,norman,marvin,vincent,glenn,jeffery,travis,jeff,chad,jacob,melvin,alfred,kyle,francis,bradley,jesus,herbert,frederick,ray,joel,edwin,don,eddie,ricky,troy,randall,barry,bernard,mario,leroy,francisco,marcus,micheal,theodore,clifford,miguel,oscar,jay,jim,tom,calvin,alex,jon,ronnie,bill,lloyd,tommy,leon,derek,darrell,jerome,floyd,leo,alvin,tim,wesley,dean,greg,jorge,dustin,pedro,derrick,dan,zachary,corey,herman,maurice,vernon,roberto,clyde,glen,hector,shane,ricardo,sam,rick,lester,brent,ramon,tyler,gilbert,gene,marc,reginald,ruben,brett,nathaniel,rafael,edgar,milton,raul,ben,cecil,duane,andre,elmer,brad,gabriel,ron,roland,jared,adrian,karl,cory,claude,erik,darryl,neil,christian,javier,fernando,clinton,ted,mathew,tyrone,darren,lonnie,lance,cody,julio,kurt,allan,clayton,hugh,max,dwayne,dwight,armando,felix,jimmie,everett,ian,ken,bob,jaime,casey,alfredo,alberto,dave,ivan,johnnie,sidney,byron,julian,isaac,clifton,willard,daryl,virgil,andy,salvador,kirk,sergio,seth,kent,terrance,rene,eduardo,terrence,enrique,freddie,stuart,fredrick,arturo,alejandro,joey,nick,luther,wendell,jeremiah,evan,julius,donnie,otis,trevor,luke,homer,gerard,doug,kenny,hubert,angelo,shaun,lyle,matt,alfonso,orlando,rex,carlton,ernesto,pablo,lorenzo,omar,wilbur,blake,horace,roderick,kerry,abraham,rickey,ira,andres,cesar,johnathan,malcolm,rudolph,damon,kelvin,rudy,preston,alton,archie,marco,pete,randolph,garry,geoffrey,jonathon,felipe,bennie,gerardo,dominic,loren,delbert,colin,guillermo,earnest,benny,noel,rodolfo,myron,edmund,salvatore,cedric,lowell,gregg,sherman,devin,sylvester,roosevelt,israel,jermaine,forrest,wilbert,leland,simon,irving,owen,rufus,woodrow,sammy,kristopher,levi,marcos,gustavo,jake,lionel,marty,gilberto,clint,nicolas,laurence,ismael,orville,drew,ervin,dewey,wilfred,josh,hugo,ignacio,caleb,tomas,sheldon,erick,frankie,darrel,rogelio,terence,alonzo,elias,bert,elbert,ramiro,conrad,noah,grady,phil,cornelius,lamar,rolando,clay,percy,bradford,merle,darin,amos,terrell,moses,irvin,saul,roman,darnell,randal,tommie,timmy,darrin,brendan,toby,van,abel,dominick,emilio,elijah,cary,domingo,aubrey,emmett,marlon,emanuel,jerald,edmond,emil,dewayne,otto,teddy,reynaldo,bret,jess,trent,humberto,emmanuel,stephan,louie,vicente,lamont,garland,micah,efrain,heath,rodger,demetrius,ethan,eldon,rocky,pierre,eli,bryce,antoine,robbie,kendall,royce,sterling,grover,elton,cleveland,dylan,chuck,damian,reuben,stan,leonardo,russel,erwin,benito,hans,monte,blaine,ernie,curt,quentin,agustin,jamal,devon,adolfo,tyson,wilfredo,bart,jarrod,vance,denis,damien,joaquin,harlan,desmond,elliot,darwin,gregorio,kermit,roscoe,esteban,anton,solomon,norbert,elvin,nolan,carey,rod,quinton,hal,brain,rob,elwood,kendrick,darius,moises,marlin,fidel,thaddeus,cliff,marcel,ali,raphael,bryon,armand,alvaro,jeffry,dane,joesph,thurman,ned,sammie,rusty,michel,monty,rory,fabian,reggie,kris,isaiah,gus,avery,loyd,diego,adolph,millard,rocco,gonzalo,derick,rodrigo,gerry,rigoberto,alphonso,rickie,noe,vern,elvis,bernardo,mauricio,hiram,donovan,basil,nickolas,scot,vince,quincy,eddy,sebastian,federico,ulysses,heriberto,donnell,denny,gavin,emery,romeo,jayson,dion,dante,clement,coy,odell,jarvis,bruno,issac,dudley,sanford,colby,carmelo,nestor,hollis,stefan,donny,linwood,beau,weldon,galen,isidro,truman,delmar,johnathon,silas,frederic,irwin,merrill,charley,marcelino,carlo,trenton,kurtis,aurelio,winfred,vito,collin,denver,leonel,emory,pasquale,mohammad,mariano,danial,landon,dirk,branden,adan,numbers,clair,buford,bernie,wilmer,emerson,zachery,jacques,errol,josue,edwardo,wilford,theron,raymundo,daren,tristan,robby,lincoln,jame,genaro,octavio,cornell,hung,arron,antony,herschel,alva,giovanni,garth,cyrus,cyril,ronny,stevie,lon,kennith,carmine,augustine,erich,chadwick,wilburn,russ,myles,jonas,mitchel,mervin,zane,jamel,lazaro,alphonse,randell,johnie,jarrett,ariel,abdul,dusty,luciano,seymour,scottie,eugenio,mohammed,arnulfo,lucien,ferdinand,thad,ezra,aldo,rubin,mitch,earle,abe,marquis,lanny,kareem,jamar,boris,isiah,emile,elmo,aron,leopoldo,everette,josef,eloy,dorian,rodrick,reinaldo,lucio,jerrod,weston,hershel,lemuel,lavern,burt,jules,gil,eliseo,ahmad,nigel,efren,antwan,alden,margarito,refugio,dino,osvaldo,les,deandre,normand,kieth,ivory,trey,norberto,napoleon,jerold,fritz,rosendo,milford,sang,deon,christoper,alfonzo,lyman,josiah,brant,wilton,rico,jamaal,dewitt,brenton,yong,olin,faustino,claudio,judson,gino,edgardo,alec,jarred,donn,trinidad,tad,porfirio,odis,lenard,chauncey,tod,mel,marcelo,kory,augustus,keven,hilario,bud,sal,orval,mauro,dannie,zachariah,olen,anibal,milo,jed,thanh,amado,lenny,tory,richie,horacio,brice,mohamed,delmer,dario,mac,jonah,jerrold,robt,hank,sung,rupert,rolland,kenton,damion,chi,antone,waldo,fredric,bradly,kip,burl,tyree,jefferey,ahmed,willy,stanford,oren,moshe,mikel,enoch,brendon,quintin,jamison,florencio,darrick,tobias,minh,hassan,giuseppe,demarcus,cletus,tyrell,lyndon,keenan,werner,theo,geraldo,columbus,chet,bertram,markus,huey,hilton,dwain,donte,tyron,omer,isaias,hipolito,fermin,chung,adalberto,jamey,teodoro,mckinley,maximo,raleigh,lawerence,abram,rashad,emmitt,daron,chong,samual,otha,miquel,eusebio,dong,domenic,darron,wilber,renato,hoyt,haywood,ezekiel,chas,florentino,elroy,clemente,arden,neville,edison,deshawn,carrol,shayne,nathanial,jordon,danilo,claud,sherwood,raymon,rayford,cristobal,ambrose,titus,hyman,felton,ezequiel,erasmo,lonny,milan,lino,jarod,herb,andreas,rhett,jude,douglass,cordell,oswaldo,ellsworth,virgilio,toney,nathanael,benedict,mose,hong,isreal,garret,fausto,arlen,zack,modesto,francesco,manual,gaylord,gaston,filiberto,deangelo,michale,granville,malik,zackary,tuan,nicky,cristopher,antione,malcom,korey,jospeh,colton,waylon,hosea,shad,santo,rudolf,rolf,renaldo,marcellus,lucius,kristofer,harland,arnoldo,rueben,leandro,kraig,jerrell,jeromy,hobert,cedrick,arlie,winford,wally,luigi,keneth,jacinto,graig,franklyn,edmundo,leif,jeramy,willian,vincenzo,shon,michal,lynwood,jere,elden,darell,broderick,alonso".split(",")},module.exports=frequency_lists;
54805
54806},{}],4:[function(require,module,exports){
54807var feedback,matching,scoring,time,time_estimates,zxcvbn;matching=require("./matching"),scoring=require("./scoring"),time_estimates=require("./time_estimates"),feedback=require("./feedback"),time=function(){return(new Date).getTime()},zxcvbn=function(e,t){var i,n,c,s,a,r,m,o,u,g,_;for(null==t&&(t=[]),g=time(),u=[],c=0,s=t.length;c<s;c++)i=t[c],"string"!=(m=typeof i)&&"number"!==m&&"boolean"!==m||u.push(i.toString().toLowerCase());matching.set_user_input_dictionary(u),a=matching.omnimatch(e),o=scoring.most_guessable_match_sequence(e,a),o.calc_time=time()-g,n=time_estimates.estimate_attack_times(o.guesses);for(r in n)_=n[r],o[r]=_;return o.feedback=feedback.get_feedback(o.score,o.sequence),o},module.exports=zxcvbn;
54808
54809},{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
54810var DATE_MAX_YEAR,DATE_MIN_YEAR,DATE_SPLITS,GRAPHS,L33T_TABLE,RANKED_DICTIONARIES,REGEXEN,adjacency_graphs,build_ranked_dict,frequency_lists,lst,matching,name,scoring;frequency_lists=require("./frequency_lists"),adjacency_graphs=require("./adjacency_graphs"),scoring=require("./scoring"),build_ranked_dict=function(e){var t,n,r,i,a;for(i={},t=1,r=0,n=e.length;r<n;r++)a=e[r],i[a]=t,t+=1;return i},RANKED_DICTIONARIES={};for(name in frequency_lists)lst=frequency_lists[name],RANKED_DICTIONARIES[name]=build_ranked_dict(lst);GRAPHS={qwerty:adjacency_graphs.qwerty,dvorak:adjacency_graphs.dvorak,keypad:adjacency_graphs.keypad,mac_keypad:adjacency_graphs.mac_keypad},L33T_TABLE={a:["4","@"],b:["8"],c:["(","{","[","<"],e:["3"],g:["6","9"],i:["1","!","|"],l:["1","|","7"],o:["0"],s:["$","5"],t:["+","7"],x:["%"],z:["2"]},REGEXEN={recent_year:/19\d\d|200\d|201\d/g},DATE_MAX_YEAR=2050,DATE_MIN_YEAR=1e3,DATE_SPLITS={4:[[1,2],[2,3]],5:[[1,3],[2,3]],6:[[1,2],[2,4],[4,5]],7:[[1,3],[2,3],[4,5],[4,6]],8:[[2,4],[4,6]]},matching={empty:function(e){var t;return 0===function(){var n;n=[];for(t in e)n.push(t);return n}().length},extend:function(e,t){return e.push.apply(e,t)},translate:function(e,t){var n;return function(){var r,i,a,s;for(a=e.split(""),s=[],i=0,r=a.length;i<r;i++)n=a[i],s.push(t[n]||n);return s}().join("")},mod:function(e,t){return(e%t+t)%t},sorted:function(e){return e.sort(function(e,t){return e.i-t.i||e.j-t.j})},omnimatch:function(e){var t,n,r,i,a;for(i=[],r=[this.dictionary_match,this.reverse_dictionary_match,this.l33t_match,this.spatial_match,this.repeat_match,this.sequence_match,this.regex_match,this.date_match],a=0,t=r.length;a<t;a++)n=r[a],this.extend(i,n.call(this,e));return this.sorted(i)},dictionary_match:function(e,t){var n,r,i,a,s,o,h,u,c,l,_,f,d,p;null==t&&(t=RANKED_DICTIONARIES),s=[],a=e.length,u=e.toLowerCase();for(n in t)for(l=t[n],r=o=0,_=a;0<=_?o<_:o>_;r=0<=_?++o:--o)for(i=h=f=r,d=a;f<=d?h<d:h>d;i=f<=d?++h:--h)u.slice(r,+i+1||9e9)in l&&(p=u.slice(r,+i+1||9e9),c=l[p],s.push({pattern:"dictionary",i:r,j:i,token:e.slice(r,+i+1||9e9),matched_word:p,rank:c,dictionary_name:n,reversed:!1,l33t:!1}));return this.sorted(s)},reverse_dictionary_match:function(e,t){var n,r,i,a,s,o;for(null==t&&(t=RANKED_DICTIONARIES),o=e.split("").reverse().join(""),i=this.dictionary_match(o,t),a=0,n=i.length;a<n;a++)r=i[a],r.token=r.token.split("").reverse().join(""),r.reversed=!0,s=[e.length-1-r.j,e.length-1-r.i],r.i=s[0],r.j=s[1];return this.sorted(i)},set_user_input_dictionary:function(e){return RANKED_DICTIONARIES.user_inputs=build_ranked_dict(e.slice())},relevant_l33t_subtable:function(e,t){var n,r,i,a,s,o,h,u,c,l;for(s={},o=e.split(""),a=0,r=o.length;a<r;a++)n=o[a],s[n]=!0;l={};for(i in t)c=t[i],h=function(){var e,t,n;for(n=[],t=0,e=c.length;t<e;t++)u=c[t],u in s&&n.push(u);return n}(),h.length>0&&(l[i]=h);return l},enumerate_l33t_subs:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;a=function(){var t;t=[];for(i in e)t.push(i);return t}(),p=[[]],n=function(e){var t,n,r,a,s,o,h,u;for(n=[],s={},o=0,a=e.length;o<a;o++)h=e[o],t=function(){var e,t,n;for(n=[],u=t=0,e=h.length;t<e;u=++t)i=h[u],n.push([i,u]);return n}(),t.sort(),r=function(){var e,n,r;for(r=[],u=n=0,e=t.length;n<e;u=++n)i=t[u],r.push(i+","+u);return r}().join("-"),r in s||(s[r]=!0,n.push(h));return n},r=function(t){var i,a,s,o,h,u,c,l,_,f,d,g,m,A,E,y;if(t.length){for(a=t[0],m=t.slice(1),c=[],d=e[a],l=0,h=d.length;l<h;l++)for(o=d[l],_=0,u=p.length;_<u;_++){for(A=p[_],i=-1,s=f=0,g=A.length;0<=g?f<g:f>g;s=0<=g?++f:--f)if(A[s][0]===o){i=s;break}i===-1?(y=A.concat([[o,a]]),c.push(y)):(E=A.slice(0),E.splice(i,1),E.push([o,a]),c.push(A),c.push(E))}return p=n(c),r(m)}},r(a),d=[];for(u=0,o=p.length;u<o;u++){for(_=p[u],f={},c=0,h=_.length;c<h;c++)l=_[c],s=l[0],t=l[1],f[s]=t;d.push(f)}return d},l33t_match:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A;for(null==t&&(t=RANKED_DICTIONARIES),null==n&&(n=L33T_TABLE),u=[],_=this.enumerate_l33t_subs(this.relevant_l33t_subtable(e,n)),c=0,a=_.length;c<a&&(d=_[c],!this.empty(d));c++)for(g=this.translate(e,d),f=this.dictionary_match(g,t),l=0,s=f.length;l<s;l++)if(o=f[l],m=e.slice(o.i,+o.j+1||9e9),m.toLowerCase()!==o.matched_word){h={};for(p in d)r=d[p],m.indexOf(p)!==-1&&(h[p]=r);o.l33t=!0,o.token=m,o.sub=h,o.sub_display=function(){var e;e=[];for(i in h)A=h[i],e.push(i+" -> "+A);return e}().join(", "),u.push(o)}return this.sorted(u.filter(function(e){return e.token.length>1}))},spatial_match:function(e,t){var n,r,i;null==t&&(t=GRAPHS),i=[];for(r in t)n=t[r],this.extend(i,this.spatial_match_helper(e,n,r));return this.sorted(i)},SHIFTED_RX:/[~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?]/,spatial_match_helper:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m;for(f=[],u=0;u<e.length-1;)for(c=u+1,l=null,m=0,g="qwerty"!==n&&"dvorak"!==n||!this.SHIFTED_RX.exec(e.charAt(u))?0:1;;){if(p=e.charAt(c-1),o=!1,h=-1,s=-1,i=t[p]||[],c<e.length)for(a=e.charAt(c),d=0,_=i.length;d<_;d++)if(r=i[d],s+=1,r&&r.indexOf(a)!==-1){o=!0,h=s,1===r.indexOf(a)&&(g+=1),l!==h&&(m+=1,l=h);break}if(!o){c-u>2&&f.push({pattern:"spatial",i:u,j:c-1,token:e.slice(u,c),graph:n,turns:m,shifted_count:g}),u=c;break}c+=1}return f},repeat_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;for(d=[],a=/(.+)\1+/g,c=/(.+?)\1+/g,l=/^(.+?)\1+$/,u=0;u<e.length&&(a.lastIndex=c.lastIndex=u,s=a.exec(e),_=c.exec(e),null!=s);)s[0].length>_[0].length?(f=s,i=l.exec(f[0])[1]):(f=_,i=f[1]),p=[f.index,f.index+f[0].length-1],o=p[0],h=p[1],t=scoring.most_guessable_match_sequence(i,this.omnimatch(i)),r=t.sequence,n=t.guesses,d.push({pattern:"repeat",i:o,j:h,token:f[0],base_token:i,base_guesses:n,base_matches:r,repeat_count:f[0].length/i.length}),u=h+1;return d},MAX_DELTA:5,sequence_match:function(e){var t,n,r,i,a,s,o,h,u;if(1===e.length)return[];for(u=function(t){return function(n,r,i){var a,s,o,u;if((r-n>1||1===Math.abs(i))&&0<(a=Math.abs(i))&&a<=t.MAX_DELTA)return u=e.slice(n,+r+1||9e9),/^[a-z]+$/.test(u)?(s="lower",o=26):/^[A-Z]+$/.test(u)?(s="upper",o=26):/^\d+$/.test(u)?(s="digits",o=10):(s="unicode",o=26),h.push({pattern:"sequence",i:n,j:r,token:e.slice(n,+r+1||9e9),sequence_name:s,sequence_space:o,ascending:i>0})}}(this),h=[],n=0,a=null,i=s=1,o=e.length;1<=o?s<o:s>o;i=1<=o?++s:--s)t=e.charCodeAt(i)-e.charCodeAt(i-1),null==a&&(a=t),t!==a&&(r=i-1,u(n,r,a),n=r,a=t);return u(n,e.length-1,a),h},regex_match:function(e,t){var n,r,i,a;null==t&&(t=REGEXEN),n=[];for(name in t)for(r=t[name],r.lastIndex=0;i=r.exec(e);)a=i[0],n.push({pattern:"regex",token:a,i:i.index,j:i.index+i[0].length-1,regex_name:name,regex_match:i});return this.sorted(n)},date_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A,E,y,v,I,R,T,D,k,x,j,b,N,S,q,L,M;for(_=[],f=/^\d{4,8}$/,d=/^(\d{1,4})([\s\/\\_.-])(\d{1,2})\2(\d{1,4})$/,s=m=0,v=e.length-4;0<=v?m<=v:m>=v;s=0<=v?++m:--m)for(o=A=I=s+3,R=s+7;(I<=R?A<=R:A>=R)&&!(o>=e.length);o=I<=R?++A:--A)if(M=e.slice(s,+o+1||9e9),f.exec(M)){for(r=[],T=DATE_SPLITS[M.length],E=0,c=T.length;E<c;E++)D=T[E],h=D[0],u=D[1],a=this.map_ints_to_dmy([parseInt(M.slice(0,h)),parseInt(M.slice(h,u)),parseInt(M.slice(u))]),null!=a&&r.push(a);if(r.length>0){for(t=r[0],p=function(e){return Math.abs(e.year-scoring.REFERENCE_YEAR)},g=p(r[0]),k=r.slice(1),y=0,l=k.length;y<l;y++)n=k[y],i=p(n),i<g&&(x=[n,i],t=x[0],g=x[1]);_.push({pattern:"date",token:M,i:s,j:o,separator:"",year:t.year,month:t.month,day:t.day})}}for(s=q=0,j=e.length-6;0<=j?q<=j:q>=j;s=0<=j?++q:--q)for(o=L=b=s+5,N=s+9;(b<=N?L<=N:L>=N)&&!(o>=e.length);o=b<=N?++L:--L)M=e.slice(s,+o+1||9e9),S=d.exec(M),null!=S&&(a=this.map_ints_to_dmy([parseInt(S[1]),parseInt(S[3]),parseInt(S[4])]),null!=a&&_.push({pattern:"date",token:M,i:s,j:o,separator:S[2],year:a.year,month:a.month,day:a.day}));return this.sorted(_.filter(function(e){var t,n,r,i;for(t=!1,i=0,n=_.length;i<n;i++)if(r=_[i],e!==r&&r.i<=e.i&&r.j>=e.j){t=!0;break}return!t}))},map_ints_to_dmy:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g;if(!(e[1]>31||e[1]<=0)){for(o=0,h=0,p=0,s=0,r=e.length;s<r;s++){if(n=e[s],99<n&&n<DATE_MIN_YEAR||n>DATE_MAX_YEAR)return;n>31&&(h+=1),n>12&&(o+=1),n<=0&&(p+=1)}if(!(h>=2||3===o||p>=2)){for(c=[[e[2],e.slice(0,2)],[e[0],e.slice(1,3)]],u=0,i=c.length;u<i;u++)if(_=c[u],g=_[0],d=_[1],DATE_MIN_YEAR<=g&&g<=DATE_MAX_YEAR)return t=this.map_ints_to_dm(d),null!=t?{year:g,month:t.month,day:t.day}:void 0;for(l=0,a=c.length;l<a;l++)if(f=c[l],g=f[0],d=f[1],t=this.map_ints_to_dm(d),null!=t)return g=this.two_to_four_digit_year(g),{year:g,month:t.month,day:t.day}}}},map_ints_to_dm:function(e){var t,n,r,i,a,s;for(a=[e,e.slice().reverse()],i=0,n=a.length;i<n;i++)if(s=a[i],t=s[0],r=s[1],1<=t&&t<=31&&1<=r&&r<=12)return{day:t,month:r}},two_to_four_digit_year:function(e){return e>99?e:e>50?e+1900:e+2e3}},module.exports=matching;
54811
54812},{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
54813var BRUTEFORCE_CARDINALITY,MIN_GUESSES_BEFORE_GROWING_SEQUENCE,MIN_SUBMATCH_GUESSES_MULTI_CHAR,MIN_SUBMATCH_GUESSES_SINGLE_CHAR,adjacency_graphs,calc_average_degree,k,scoring,v;adjacency_graphs=require("./adjacency_graphs"),calc_average_degree=function(e){var t,r,n,s,a,u;t=0;for(n in e)a=e[n],t+=function(){var e,t,r;for(r=[],t=0,e=a.length;t<e;t++)s=a[t],s&&r.push(s);return r}().length;return t/=function(){var t;t=[];for(r in e)u=e[r],t.push(r);return t}().length},BRUTEFORCE_CARDINALITY=10,MIN_GUESSES_BEFORE_GROWING_SEQUENCE=1e4,MIN_SUBMATCH_GUESSES_SINGLE_CHAR=10,MIN_SUBMATCH_GUESSES_MULTI_CHAR=50,scoring={nCk:function(e,t){var r,n,s,a;if(t>e)return 0;if(0===t)return 1;for(s=1,r=n=1,a=t;1<=a?n<=a:n>=a;r=1<=a?++n:--n)s*=e,s/=r,e-=1;return s},log10:function(e){return Math.log(e)/Math.log(10)},log2:function(e){return Math.log(e)/Math.log(2)},factorial:function(e){var t,r,n,s;if(e<2)return 1;for(t=1,r=n=2,s=e;2<=s?n<=s:n>=s;r=2<=s?++n:--n)t*=r;return t},most_guessable_match_sequence:function(e,t,r){var n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S,R,v,I,M,N,C,U,T;for(null==r&&(r=!1),l=e.length,f=function(){var e,t,r;for(r=[],n=e=0,t=l;0<=t?e<t:e>t;n=0<=t?++e:--e)r.push([]);return r}(),p=0,_=t.length;p<_;p++)c=t[p],f[c.j].push(c);for(v=0,o=f.length;v<o;v++)E=f[v],E.sort(function(e,t){return e.i-t.i});for(A={m:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),pi:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),g:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}()},U=function(t){return function(n,s){var a,u,i,_,o,h;_=n.j,o=t.estimate_guesses(n,e),s>1&&(o*=A.pi[n.i-1][s-1]),i=t.factorial(s)*o,r||(i+=Math.pow(MIN_GUESSES_BEFORE_GROWING_SEQUENCE,s-1)),h=A.g[_];for(u in h)if(a=h[u],!(u>s)&&a<=i)return;return A.g[_][s]=i,A.m[_][s]=n,A.pi[_][s]=o}}(this),s=function(e){return function(e){var t,r,n,s,a,u;for(c=g(0,e),U(c,1),a=[],t=u=1,s=e;1<=s?u<=s:u>=s;t=1<=s?++u:--u)c=g(t,e),a.push(function(){var e,s;e=A.m[t-1],s=[];for(r in e)n=e[r],r=parseInt(r),"bruteforce"!==n.pattern&&s.push(U(c,r+1));return s}());return a}}(this),g=function(t){return function(t,r){return{pattern:"bruteforce",token:e.slice(t,+r+1||9e9),i:t,j:r}}}(this),C=function(e){return function(e){var t,r,n,s,a,u,i;u=[],s=e-1,a=void 0,n=1/0,i=A.g[s];for(r in i)t=i[r],t<n&&(a=r,n=t);for(;s>=0;)c=A.m[s][a],u.unshift(c),s=c.i-1,a--;return u}}(this),u=N=0,I=l;0<=I?N<I:N>I;u=0<=I?++N:--N){for(M=f[u],T=0,h=M.length;T<h;T++)if(c=M[T],c.i>0)for(i in A.m[c.i-1])i=parseInt(i),U(c,i+1);else U(c,1);s(u)}return R=C(l),S=R.length,a=0===e.length?1:A.g[l-1][S],{password:e,guesses:a,guesses_log10:this.log10(a),sequence:R}},estimate_guesses:function(e,t){var r,n,s;return null!=e.guesses?e.guesses:(s=1,e.token.length<t.length&&(s=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR:MIN_SUBMATCH_GUESSES_MULTI_CHAR),r={bruteforce:this.bruteforce_guesses,dictionary:this.dictionary_guesses,spatial:this.spatial_guesses,repeat:this.repeat_guesses,sequence:this.sequence_guesses,regex:this.regex_guesses,date:this.date_guesses},n=r[e.pattern].call(this,e),e.guesses=Math.max(n,s),e.guesses_log10=this.log10(e.guesses),e.guesses)},bruteforce_guesses:function(e){var t,r;return t=Math.pow(BRUTEFORCE_CARDINALITY,e.token.length),r=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR+1:MIN_SUBMATCH_GUESSES_MULTI_CHAR+1,Math.max(t,r)},repeat_guesses:function(e){return e.base_guesses*e.repeat_count},sequence_guesses:function(e){var t,r;return r=e.token.charAt(0),t="a"===r||"A"===r||"z"===r||"Z"===r||"0"===r||"1"===r||"9"===r?4:r.match(/\d/)?10:26,e.ascending||(t*=2),t*e.token.length},MIN_YEAR_SPACE:20,REFERENCE_YEAR:2016,regex_guesses:function(e){var t,r;if(t={alpha_lower:26,alpha_upper:26,alpha:52,alphanumeric:62,digits:10,symbols:33},e.regex_name in t)return Math.pow(t[e.regex_name],e.token.length);switch(e.regex_name){case"recent_year":return r=Math.abs(parseInt(e.regex_match[0])-this.REFERENCE_YEAR),r=Math.max(r,this.MIN_YEAR_SPACE)}},date_guesses:function(e){var t,r;return r=Math.max(Math.abs(e.year-this.REFERENCE_YEAR),this.MIN_YEAR_SPACE),t=365*r,e.separator&&(t*=4),t},KEYBOARD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.qwerty),KEYPAD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.keypad),KEYBOARD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.qwerty,t=[];for(k in e)v=e[k],t.push(k);return t}().length,KEYPAD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.keypad,t=[];for(k in e)v=e[k],t.push(k);return t}().length,spatial_guesses:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S;for("qwerty"===(E=e.graph)||"dvorak"===E?(l=this.KEYBOARD_STARTING_POSITIONS,s=this.KEYBOARD_AVERAGE_DEGREE):(l=this.KEYPAD_STARTING_POSITIONS,s=this.KEYPAD_AVERAGE_DEGREE),a=0,t=e.token.length,A=e.turns,u=_=2,c=t;2<=c?_<=c:_>=c;u=2<=c?++_:--_)for(o=Math.min(A,u-1),i=h=1,g=o;1<=g?h<=g:h>=g;i=1<=g?++h:--h)a+=this.nCk(u-1,i-1)*l*Math.pow(s,i);if(e.shifted_count)if(r=e.shifted_count,n=e.token.length-e.shifted_count,0===r||0===n)a*=2;else{for(p=0,u=S=1,f=Math.min(r,n);1<=f?S<=f:S>=f;u=1<=f?++S:--S)p+=this.nCk(r+n,u);a*=p}return a},dictionary_guesses:function(e){var t;return e.base_guesses=e.rank,e.uppercase_variations=this.uppercase_variations(e),e.l33t_variations=this.l33t_variations(e),t=e.reversed&&2||1,e.base_guesses*e.uppercase_variations*e.l33t_variations*t},START_UPPER:/^[A-Z][^A-Z]+$/,END_UPPER:/^[^A-Z]+[A-Z]$/,ALL_UPPER:/^[^a-z]+$/,ALL_LOWER:/^[^A-Z]+$/,uppercase_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c;if(c=e.token,c.match(this.ALL_LOWER)||c.toLowerCase()===c)return 1;for(_=[this.START_UPPER,this.END_UPPER,this.ALL_UPPER],u=0,a=_.length;u<a;u++)if(h=_[u],c.match(h))return 2;for(r=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[A-Z]/)&&s.push(n);return s}().length,t=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[a-z]/)&&s.push(n);return s}().length,E=0,s=i=1,o=Math.min(r,t);1<=o?i<=o:i>=o;s=1<=o?++i:--i)E+=this.nCk(r+t,s);return E},l33t_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g;if(!e.l33t)return 1;g=1,o=e.sub;for(E in o)if(c=o[E],s=e.token.toLowerCase().split(""),t=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===E&&r.push(n);return r}().length,r=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===c&&r.push(n);return r}().length,0===t||0===r)g*=2;else{for(i=Math.min(r,t),_=0,a=u=1,h=i;1<=h?u<=h:u>=h;a=1<=h?++u:--u)_+=this.nCk(r+t,a);g*=_}return g}},module.exports=scoring;
54814
54815},{"./adjacency_graphs":1}],7:[function(require,module,exports){
54816var time_estimates;time_estimates={estimate_attack_times:function(e){var t,n,s,o;n={online_throttling_100_per_hour:e/(100/3600),online_no_throttling_10_per_second:e/10,offline_slow_hashing_1e4_per_second:e/1e4,offline_fast_hashing_1e10_per_second:e/1e10},t={};for(s in n)o=n[s],t[s]=this.display_time(o);return{crack_times_seconds:n,crack_times_display:t,score:this.guesses_to_score(e)}},guesses_to_score:function(e){var t;return t=5,e<1e3+t?0:e<1e6+t?1:e<1e8+t?2:e<1e10+t?3:4},display_time:function(e){var t,n,s,o,_,r,i,a,u,c;return i=60,r=60*i,s=24*r,a=31*s,c=12*a,n=100*c,u=e<1?[null,"less than a second"]:e<i?(t=Math.round(e),[t,t+" second"]):e<r?(t=Math.round(e/i),[t,t+" minute"]):e<s?(t=Math.round(e/r),[t,t+" hour"]):e<a?(t=Math.round(e/s),[t,t+" day"]):e<c?(t=Math.round(e/a),[t,t+" month"]):e<n?(t=Math.round(e/c),[t,t+" year"]):[null,"centuries"],o=u[0],_=u[1],null!=o&&1!==o&&(_+="s"),_}},module.exports=time_estimates;
54817
54818},{}]},{},[4])(4)
54819});
861750ae 54820
95f04905
IC
54821</script>
54822 <script>/*
54823 * Detects entropy from a string.
54824 *
54825 * Formats include:
54826 * binary [0-1]
54827 * base 6 [0-5]
54828 * dice 6 [1-6]
54829 * decimal [0-9]
54830 * hexadecimal [0-9A-F]
9e97eb76 54831 * card [A2-9TJQK][CDHS]
95f04905
IC
54832 *
54833 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
54834 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
54835 * entropy.
54836 */
54837
54838window.Entropy = new (function() {
54839
78b8d604
IC
54840 var TWO = new BigInteger(2);
54841
95f04905
IC
54842 // matchers returns an array of the matched events for each type of entropy.
54843 // eg
54844 // matchers.binary("010") returns ["0", "1", "0"]
54845 // matchers.binary("a10") returns ["1", "0"]
54846 // matchers.hex("a10") returns ["a", "1", "0"]
54847 var matchers = {
54848 binary: function(str) {
54849 return str.match(/[0-1]/gi) || [];
54850 },
54851 base6: function(str) {
54852 return str.match(/[0-5]/gi) || [];
54853 },
54854 dice: function(str) {
54855 return str.match(/[1-6]/gi) || []; // ie dice numbers
54856 },
54857 base10: function(str) {
54858 return str.match(/[0-9]/gi) || [];
54859 },
54860 hex: function(str) {
54861 return str.match(/[0-9A-F]/gi) || [];
54862 },
54863 card: function(str) {
54864 // Format is NumberSuit, eg
54865 // AH ace of hearts
54866 // 8C eight of clubs
54867 // TD ten of diamonds
54868 // JS jack of spades
54869 // QH queen of hearts
54870 // KC king of clubs
54871 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
54872 }
54873 }
54874
54875 // Convert array of cards from ["ac", "4d", "ks"]
54876 // to numbers between 0 and 51 [0, 16, 51]
54877 function convertCardsToInts(cards) {
54878 var ints = [];
54879 var values = "a23456789tjqk";
54880 var suits = "cdhs";
54881 for (var i=0; i<cards.length; i++) {
54882 var card = cards[i].toLowerCase();
54883 var value = card[0];
54884 var suit = card[1];
54885 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
54886 ints.push(asInt);
54887 }
54888 return ints;
54889 }
54890
54891 this.fromString = function(rawEntropyStr) {
54892 // Find type of entropy being used (binary, hex, dice etc)
54893 var base = getBase(rawEntropyStr);
54894 // Convert dice to base6 entropy (ie 1-6 to 0-5)
54895 // This is done by changing all 6s to 0s
54896 if (base.str == "dice") {
54897 var newParts = [];
54898 var newInts = [];
54899 for (var i=0; i<base.parts.length; i++) {
54900 var c = base.parts[i];
54901 if ("12345".indexOf(c) > -1) {
54902 newParts[i] = base.parts[i];
54903 newInts[i] = base.ints[i];
54904 }
54905 else {
54906 newParts[i] = "0";
54907 newInts[i] = 0;
54908 }
54909 }
54910 base.str = "base 6 (dice)";
54911 base.ints = newInts;
54912 base.parts = newParts;
54913 base.matcher = matchers.base6;
54914 }
54915 // Detect empty entropy
54916 if (base.parts.length == 0) {
54917 return {
54918 binaryStr: "",
54919 cleanStr: "",
54920 cleanHtml: "",
54921 base: base,
54922 };
54923 }
54924 // Convert base.ints to BigInteger.
54925 // Due to using unusual bases, eg cards of base52, this is not as simple as
54926 // using BigInteger.parse()
54927 var entropyInt = BigInteger.ZERO;
54928 for (var i=base.ints.length-1; i>=0; i--) {
54929 var thisInt = BigInteger.parse(base.ints[i]);
54930 var power = (base.ints.length - 1) - i;
54931 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
54932 entropyInt = entropyInt.add(additionalEntropy);
54933 }
54934 // Convert entropy to binary
54935 var entropyBin = entropyInt.toString(2);
54936 // If the first integer is small, it must be padded with zeros.
54937 // Otherwise the chance of the first bit being 1 is 100%, which is
54938 // obviously incorrect.
54939 // This is not perfect for non-2^n bases.
54940 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
54941 while (entropyBin.length < expectedBits) {
54942 entropyBin = "0" + entropyBin;
54943 }
94959756
IC
54944 // Calculate the number of bits per event
54945 var bitsPerEvent = Math.log2(base.asInt);
ea87f1d3 54946 // Cards binary must be handled differently, since they're not replaced
9e97eb76 54947 if (base.asInt == 52) {
94959756
IC
54948 var cardEntropy = processCardEntropy(base.parts);
54949 entropyBin = cardEntropy.binaryStr;
54950 bitsPerEvent = cardEntropy.bitsPerEvent;
9e97eb76 54951 }
95f04905
IC
54952 // Supply a 'filtered' entropy string for display purposes
54953 var entropyClean = base.parts.join("");
54954 var entropyHtml = base.parts.join("");
54955 if (base.asInt == 52) {
54956 entropyClean = base.parts.join(" ").toUpperCase();
54957 entropyClean = entropyClean.replace(/C/g, "\u2663");
54958 entropyClean = entropyClean.replace(/D/g, "\u2666");
54959 entropyClean = entropyClean.replace(/H/g, "\u2665");
54960 entropyClean = entropyClean.replace(/S/g, "\u2660");
54961 entropyHtml = base.parts.join(" ").toUpperCase();
54962 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
54963 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
54964 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
54965 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
54966 }
9e97eb76 54967 // Return the result
95f04905
IC
54968 var e = {
54969 binaryStr: entropyBin,
54970 cleanStr: entropyClean,
54971 cleanHtml: entropyHtml,
94959756 54972 bitsPerEvent: bitsPerEvent,
95f04905
IC
54973 base: base,
54974 }
54975 return e;
54976 }
54977
78b8d604
IC
54978 function getSortedDeck() {
54979 var s = [];
54980 var suits = "CDHS";
54981 var values = "A23456789TJQK";
54982 for (var i=0; i<suits.length; i++) {
54983 for (var j=0; j<values.length; j++) {
54984 s.push(values[j]+suits[i]);
54985 }
54986 }
54987 return s;
54988 }
54989
95f04905
IC
54990 function getBase(str) {
54991 // Need to get the lowest base for the supplied entropy.
54992 // This prevents interpreting, say, dice rolls as hexadecimal.
54993 var binaryMatches = matchers.binary(str);
54994 var hexMatches = matchers.hex(str);
54995 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
54996 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
54997 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
54998 return {
54999 ints: ints,
55000 parts: binaryMatches,
55001 matcher: matchers.binary,
55002 asInt: 2,
55003 str: "binary",
55004 }
55005 }
55006 var cardMatches = matchers.card(str);
55007 if (cardMatches.length >= hexMatches.length / 2) {
55008 var ints = convertCardsToInts(cardMatches);
55009 return {
55010 ints: ints,
55011 parts: cardMatches,
55012 matcher: matchers.card,
55013 asInt: 52,
55014 str: "card",
55015 }
55016 }
55017 var diceMatches = matchers.dice(str);
55018 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
55019 var ints = diceMatches.map(function(i) { return parseInt(i) });
55020 return {
55021 ints: ints,
55022 parts: diceMatches,
55023 matcher: matchers.dice,
55024 asInt: 6,
55025 str: "dice",
55026 }
55027 }
55028 var base6Matches = matchers.base6(str);
55029 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
55030 var ints = base6Matches.map(function(i) { return parseInt(i) });
55031 return {
55032 ints: ints,
55033 parts: base6Matches,
55034 matcher: matchers.base6,
55035 asInt: 6,
55036 str: "base 6",
55037 }
55038 }
55039 var base10Matches = matchers.base10(str);
55040 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
55041 var ints = base10Matches.map(function(i) { return parseInt(i) });
55042 return {
55043 ints: ints,
55044 parts: base10Matches,
55045 matcher: matchers.base10,
55046 asInt: 10,
55047 str: "base 10",
55048 }
55049 }
55050 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
55051 return {
55052 ints: ints,
55053 parts: hexMatches,
55054 matcher: matchers.hex,
55055 asInt: 16,
55056 str: "hexadecimal",
55057 }
55058 }
55059
ea87f1d3
IC
55060 // Assume cards are NOT replaced.
55061 // Additional entropy decreases as more cards are used. This means
55062 // total possible entropy is measured using n!, not base^n.
55063 // eg the second last card can be only one of two, not one of fifty two
55064 // so the added entropy for that card is only one bit at most
94959756 55065 function processCardEntropy(cards) {
ea87f1d3
IC
55066 // Track how many instances of each card have been used, and thus
55067 // how many decks are in use.
55068 var cardCounts = {};
55069 var numberOfDecks = 0;
55070 // Work out number of decks by max(duplicates)
55071 for (var i=0; i<cards.length; i++) {
55072 // Get the card that was drawn
55073 var cardLower = cards[i];
55074 var card = cardLower.toUpperCase();
55075 // Initialize the count for this card if needed
55076 if (!(card in cardCounts)) {
55077 cardCounts[card] = 0;
55078 }
55079 cardCounts[card] += 1;
55080 // See if this is max(duplicates)
55081 if (cardCounts[card] > numberOfDecks) {
55082 numberOfDecks = cardCounts[card];
55083 }
55084 }
55085 // Work out the total number of bits for this many decks
55086 // See http://crypto.stackexchange.com/q/41886
fc7c248f
IC
55087 var gainedBits = 0;
55088 // Equivalent of Math.log2(factorial(52*numberOfDecks))
55089 // which becomes infinity for numberOfDecks > 4
55090 for (var i=1; i<=52*numberOfDecks; i++) {
55091 gainedBits = gainedBits + Math.log2(i);
55092 }
ea87f1d3
IC
55093 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
55094 var maxBits = gainedBits - lostBits;
55095 // Convert the drawn cards to a binary representation.
55096 // The exact technique for doing this is unclear.
55097 // See
55098 // http://crypto.stackexchange.com/a/41896
55099 // "I even doubt that this is well defined (only the average entropy
55100 // is, I believe)."
55101 // See
55102 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
55103 // "The binary representation can be the first log(permutations,2) bits
55104 // of the sha-2 hash of the normalized deck string."
55105 //
55106 // In this specific implementation, the first N bits of the hash of the
55107 // normalized cards string is being used. Uppercase, no spaces; eg
55108 // sha256("AH8DQSTC2H")
55109 var totalCards = numberOfDecks * 52;
55110 var percentUsed = cards.length / totalCards;
55111 // Calculate the average number of bits of entropy for the number of
55112 // cards drawn.
55113 var numberOfBits = Math.floor(maxBits * percentUsed);
55114 // Create a normalized string of the selected cards
55115 var normalizedCards = cards.join("").toUpperCase();
55116 // Convert to binary using the SHA256 hash of the normalized cards.
434caecd 55117 // If the number of bits is more than 256, multiple hashes
ea87f1d3
IC
55118 // are used until the required number of bits is reached.
55119 var entropyBin = "";
55120 var iterations = 0;
55121 while (entropyBin.length < numberOfBits) {
434caecd 55122 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
ea87f1d3
IC
55123 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
55124 for (var i=0; i<hashHex.length; i++) {
55125 var decimal = parseInt(hashHex[i], 16);
55126 var binary = decimal.toString(2);
55127 while (binary.length < 4) {
55128 binary = "0" + binary;
55129 }
55130 entropyBin = entropyBin + binary;
55131 }
55132 iterations = iterations + 1;
55133 }
55134 // Truncate to the appropriate number of bits.
55135 entropyBin = entropyBin.substring(0, numberOfBits);
94959756
IC
55136 // Get the number of bits per event
55137 bitsPerEvent = maxBits / totalCards;
55138 return {
55139 binaryStr: entropyBin,
55140 bitsPerEvent: bitsPerEvent,
55141 }
ea87f1d3
IC
55142 }
55143
95f04905
IC
55144 // Polyfill for Math.log2
55145 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
55146 Math.log2 = Math.log2 || function(x) {
55147 // The polyfill isn't good enough because of the poor accuracy of
55148 // Math.LOG2E
55149 // log2(8) gave 2.9999999999999996 which when floored causes issues.
55150 // So instead use the BigInteger library to get it right.
55151 return BigInteger.log(x) / BigInteger.log(2);
55152 };
55153
9e97eb76
IC
55154 // Depends on BigInteger
55155 function factorial(n) {
55156 if (n == 0) {
55157 return 1;
55158 }
55159 f = BigInteger.ONE;
55160 for (var i=1; i<=n; i++) {
55161 f = f.multiply(new BigInteger(i));
55162 }
55163 return f;
55164 }
55165
95f04905 55166})();
c6624d51
IC
55167</script>
55168 <script>(function() {
55169
55170 // mnemonics is populated as required by getLanguage
55171 var mnemonics = { "english": new Mnemonic("english") };
55172 var mnemonic = mnemonics["english"];
3725abb5 55173 var seed = null;
c6624d51
IC
55174 var bip32RootKey = null;
55175 var bip32ExtendedKey = null;
9987f0c1 55176 var network = bitcoinjs.bitcoin.networks.bitcoin;
c6624d51
IC
55177 var addressRowTemplate = $("#address-row-template");
55178
55179 var showIndex = true;
55180 var showAddress = true;
55181 var showPubKey = true;
55182 var showPrivKey = true;
52da415f 55183 var showQr = false;
cf6c2044 55184 var litecoinUseLtub = true;
c6624d51
IC
55185
55186 var entropyChangeTimeoutEvent = null;
55187 var phraseChangeTimeoutEvent = null;
55188 var rootKeyChangedTimeoutEvent = null;
55189
40892aba
IC
55190 var generationProcesses = [];
55191
c6624d51
IC
55192 var DOM = {};
55193 DOM.network = $(".network");
56530adc 55194 DOM.bip32Client = $("#bip32-client");
c6624d51
IC
55195 DOM.phraseNetwork = $("#network-phrase");
55196 DOM.useEntropy = $(".use-entropy");
55197 DOM.entropyContainer = $(".entropy-container");
55198 DOM.entropy = $(".entropy");
2a6dd137
IC
55199 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
55200 DOM.entropyType = DOM.entropyContainer.find(".type");
f1e5d484 55201 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
2a6dd137
IC
55202 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
55203 DOM.entropyBits = DOM.entropyContainer.find(".bits");
55204 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
55205 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
55206 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
55207 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
9ff30bab 55208 DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning");
c6624d51
IC
55209 DOM.phrase = $(".phrase");
55210 DOM.passphrase = $(".passphrase");
55211 DOM.generateContainer = $(".generate-container");
55212 DOM.generate = $(".generate");
55213 DOM.seed = $(".seed");
55214 DOM.rootKey = $(".root-key");
8d18f379
IC
55215 DOM.litecoinLtubContainer = $(".litecoin-ltub-container");
55216 DOM.litecoinUseLtub = $(".litecoin-use-ltub");
c6624d51
IC
55217 DOM.extendedPrivKey = $(".extended-priv-key");
55218 DOM.extendedPubKey = $(".extended-pub-key");
55219 DOM.bip32tab = $("#bip32-tab");
55220 DOM.bip44tab = $("#bip44-tab");
9987f0c1 55221 DOM.bip49tab = $("#bip49-tab");
cf6c2044 55222 DOM.bip141tab = $("#bip141-tab");
c6624d51
IC
55223 DOM.bip32panel = $("#bip32");
55224 DOM.bip44panel = $("#bip44");
9987f0c1 55225 DOM.bip49panel = $("#bip49");
c6624d51
IC
55226 DOM.bip32path = $("#bip32-path");
55227 DOM.bip44path = $("#bip44-path");
55228 DOM.bip44purpose = $("#bip44 .purpose");
55229 DOM.bip44coin = $("#bip44 .coin");
55230 DOM.bip44account = $("#bip44 .account");
20083ab9
IC
55231 DOM.bip44accountXprv = $("#bip44 .account-xprv");
55232 DOM.bip44accountXpub = $("#bip44 .account-xpub");
c6624d51 55233 DOM.bip44change = $("#bip44 .change");
9987f0c1
IC
55234 DOM.bip49unavailable = $("#bip49 .unavailable");
55235 DOM.bip49available = $("#bip49 .available");
55236 DOM.bip49path = $("#bip49-path");
55237 DOM.bip49purpose = $("#bip49 .purpose");
55238 DOM.bip49coin = $("#bip49 .coin");
55239 DOM.bip49account = $("#bip49 .account");
55240 DOM.bip49accountXprv = $("#bip49 .account-xprv");
55241 DOM.bip49accountXpub = $("#bip49 .account-xpub");
55242 DOM.bip49change = $("#bip49 .change");
cf6c2044
IC
55243 DOM.bip141unavailable = $("#bip141 .unavailable");
55244 DOM.bip141available = $("#bip141 .available");
55245 DOM.bip141path = $("#bip141-path");
55246 DOM.bip141semantics = $(".bip141-semantics");
18abe53b 55247 DOM.generatedStrength = $(".generate-container .strength");
c6624d51 55248 DOM.hardenedAddresses = $(".hardened-addresses");
0f6b34d6
IC
55249 DOM.useBitpayAddressesContainer = $(".use-bitpay-addresses-container");
55250 DOM.useBitpayAddresses = $(".use-bitpay-addresses");
c6624d51
IC
55251 DOM.addresses = $(".addresses");
55252 DOM.rowsToAdd = $(".rows-to-add");
55253 DOM.more = $(".more");
924727ed 55254 DOM.moreRowsStartIndex = $(".more-rows-start-index");
c6624d51
IC
55255 DOM.feedback = $(".feedback");
55256 DOM.tab = $(".derivation-type a");
55257 DOM.indexToggle = $(".index-toggle");
55258 DOM.addressToggle = $(".address-toggle");
55259 DOM.publicKeyToggle = $(".public-key-toggle");
55260 DOM.privateKeyToggle = $(".private-key-toggle");
55261 DOM.languages = $(".languages a");
e00964cc 55262 DOM.qrContainer = $(".qr-container");
52da415f 55263 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
e00964cc
IC
55264 DOM.qrImage = DOM.qrContainer.find(".qr-image");
55265 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
55266 DOM.showQrEls = $("[data-show-qr]");
c6624d51
IC
55267
55268 function init() {
55269 // Events
55270 DOM.network.on("change", networkChanged);
56530adc 55271 DOM.bip32Client.on("change", bip32ClientChanged);
c6624d51
IC
55272 DOM.useEntropy.on("change", setEntropyVisibility);
55273 DOM.entropy.on("input", delayedEntropyChanged);
18abe53b 55274 DOM.entropyMnemonicLength.on("change", entropyChanged);
c6624d51
IC
55275 DOM.phrase.on("input", delayedPhraseChanged);
55276 DOM.passphrase.on("input", delayedPhraseChanged);
55277 DOM.generate.on("click", generateClicked);
55278 DOM.more.on("click", showMore);
55279 DOM.rootKey.on("input", delayedRootKeyChanged);
8d18f379 55280 DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
c6624d51 55281 DOM.bip32path.on("input", calcForDerivationPath);
c6624d51
IC
55282 DOM.bip44account.on("input", calcForDerivationPath);
55283 DOM.bip44change.on("input", calcForDerivationPath);
9987f0c1
IC
55284 DOM.bip49account.on("input", calcForDerivationPath);
55285 DOM.bip49change.on("input", calcForDerivationPath);
cf6c2044
IC
55286 DOM.bip141path.on("input", calcForDerivationPath);
55287 DOM.bip141semantics.on("change", tabChanged);
0f6b34d6 55288 DOM.tab.on("shown.bs.tab", tabChanged);
c6624d51
IC
55289 DOM.hardenedAddresses.on("change", calcForDerivationPath);
55290 DOM.indexToggle.on("click", toggleIndexes);
55291 DOM.addressToggle.on("click", toggleAddresses);
55292 DOM.publicKeyToggle.on("click", togglePublicKeys);
55293 DOM.privateKeyToggle.on("click", togglePrivateKeys);
55294 DOM.languages.on("click", languageChanged);
0f6b34d6 55295 DOM.useBitpayAddresses.on("change", useBitpayAddressesChange);
e00964cc 55296 setQrEvents(DOM.showQrEls);
c6624d51
IC
55297 disableForms();
55298 hidePending();
55299 hideValidationError();
55300 populateNetworkSelect();
56530adc 55301 populateClientSelect();
c6624d51
IC
55302 }
55303
55304 // Event handlers
55305
55306 function networkChanged(e) {
9987f0c1
IC
55307 clearDerivedKeys();
55308 clearAddressesList();
8d18f379 55309 DOM.litecoinLtubContainer.addClass("hidden");
0f6b34d6 55310 DOM.useBitpayAddressesContainer.addClass("hidden");
c6624d51 55311 var networkIndex = e.target.value;
9987f0c1
IC
55312 var network = networks[networkIndex];
55313 network.onSelect();
cf6c2044
IC
55314 if (network.segwitAvailable) {
55315 adjustNetworkForSegwit();
55316 showSegwitAvailable();
9987f0c1
IC
55317 }
55318 else {
cf6c2044 55319 showSegwitUnavailable();
9987f0c1 55320 }
c6624d51
IC
55321 if (seed != null) {
55322 phraseChanged();
55323 }
55324 else {
55325 rootKeyChanged();
55326 }
55327 }
55328
56530adc
IC
55329 function bip32ClientChanged(e) {
55330 var clientIndex = DOM.bip32Client.val();
55331 if (clientIndex == "custom") {
55332 DOM.bip32path.prop("readonly", false);
55333 }
55334 else {
55335 DOM.bip32path.prop("readonly", true);
55336 clients[clientIndex].onSelect();
55337 if (seed != null) {
55338 phraseChanged();
55339 }
55340 else {
55341 rootKeyChanged();
55342 }
55343 }
55344 }
55345
c6624d51
IC
55346 function setEntropyVisibility() {
55347 if (isUsingOwnEntropy()) {
55348 DOM.entropyContainer.removeClass("hidden");
55349 DOM.generateContainer.addClass("hidden");
55350 DOM.phrase.prop("readonly", true);
55351 DOM.entropy.focus();
55352 entropyChanged();
55353 }
55354 else {
55355 DOM.entropyContainer.addClass("hidden");
55356 DOM.generateContainer.removeClass("hidden");
55357 DOM.phrase.prop("readonly", false);
18abe53b 55358 hidePending();
c6624d51
IC
55359 }
55360 }
55361
55362 function delayedPhraseChanged() {
55363 hideValidationError();
f128bd58
IC
55364 seed = null;
55365 bip32RootKey = null;
55366 bip32ExtendedKey = null;
55367 clearAddressesList();
c6624d51
IC
55368 showPending();
55369 if (phraseChangeTimeoutEvent != null) {
55370 clearTimeout(phraseChangeTimeoutEvent);
55371 }
55372 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
55373 }
55374
55375 function phraseChanged() {
55376 showPending();
c6624d51
IC
55377 setMnemonicLanguage();
55378 // Get the mnemonic phrase
55379 var phrase = DOM.phrase.val();
55380 var errorText = findPhraseErrors(phrase);
55381 if (errorText) {
55382 showValidationError(errorText);
55383 return;
55384 }
55385 // Calculate and display
55386 var passphrase = DOM.passphrase.val();
55387 calcBip32RootKeyFromSeed(phrase, passphrase);
55388 calcForDerivationPath();
c6624d51
IC
55389 }
55390
0f6b34d6
IC
55391 function tabChanged() {
55392 showPending();
cf6c2044 55393 adjustNetworkForSegwit();
0f6b34d6
IC
55394 var phrase = DOM.phrase.val();
55395 if (phrase != "") {
55396 // Calculate and display for mnemonic
55397 var errorText = findPhraseErrors(phrase);
55398 if (errorText) {
55399 showValidationError(errorText);
55400 return;
55401 }
55402 // Calculate and display
55403 var passphrase = DOM.passphrase.val();
55404 calcBip32RootKeyFromSeed(phrase, passphrase);
55405 }
55406 else {
55407 // Calculate and display for root key
55408 var rootKeyBase58 = DOM.rootKey.val();
55409 var errorText = validateRootKey(rootKeyBase58);
55410 if (errorText) {
55411 showValidationError(errorText);
55412 return;
55413 }
55414 // Calculate and display
55415 calcBip32RootKeyFromBase58(rootKeyBase58);
55416 }
55417 calcForDerivationPath();
55418 }
55419
c6624d51
IC
55420 function delayedEntropyChanged() {
55421 hideValidationError();
55422 showPending();
55423 if (entropyChangeTimeoutEvent != null) {
55424 clearTimeout(entropyChangeTimeoutEvent);
55425 }
55426 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
55427 }
55428
55429 function entropyChanged() {
18abe53b
IC
55430 // If blank entropy, clear mnemonic, addresses, errors
55431 if (DOM.entropy.val().trim().length == 0) {
55432 clearDisplay();
2a6dd137 55433 clearEntropyFeedback();
18abe53b
IC
55434 DOM.phrase.val("");
55435 showValidationError("Blank entropy");
55436 return;
55437 }
55438 // Get the current phrase to detect changes
55439 var phrase = DOM.phrase.val();
55440 // Set the phrase from the entropy
c6624d51 55441 setMnemonicFromEntropy();
18abe53b
IC
55442 // Recalc addresses if the phrase has changed
55443 var newPhrase = DOM.phrase.val();
55444 if (newPhrase != phrase) {
55445 if (newPhrase.length == 0) {
55446 clearDisplay();
55447 }
55448 else {
55449 phraseChanged();
55450 }
55451 }
55452 else {
55453 hidePending();
55454 }
c6624d51
IC
55455 }
55456
55457 function delayedRootKeyChanged() {
55458 // Warn if there is an existing mnemonic or passphrase.
55459 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
55460 if (!confirm("This will clear existing mnemonic and passphrase")) {
55461 DOM.rootKey.val(bip32RootKey);
55462 return
55463 }
55464 }
55465 hideValidationError();
55466 showPending();
55467 // Clear existing mnemonic and passphrase
55468 DOM.phrase.val("");
55469 DOM.passphrase.val("");
55470 seed = null;
55471 if (rootKeyChangedTimeoutEvent != null) {
55472 clearTimeout(rootKeyChangedTimeoutEvent);
55473 }
55474 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
55475 }
55476
55477 function rootKeyChanged() {
55478 showPending();
55479 hideValidationError();
c6624d51
IC
55480 var rootKeyBase58 = DOM.rootKey.val();
55481 var errorText = validateRootKey(rootKeyBase58);
55482 if (errorText) {
55483 showValidationError(errorText);
55484 return;
55485 }
55486 // Calculate and display
55487 calcBip32RootKeyFromBase58(rootKeyBase58);
55488 calcForDerivationPath();
c6624d51
IC
55489 }
55490
8d18f379
IC
55491 function litecoinUseLtubChanged() {
55492 litecoinUseLtub = DOM.litecoinUseLtub.prop("checked");
55493 if (litecoinUseLtub) {
cf6c2044 55494 network = bitcoinjs.bitcoin.networks.litecoin;
8d18f379
IC
55495 }
55496 else {
cf6c2044 55497 network = bitcoinjs.bitcoin.networks.litecoinXprv;
8d18f379
IC
55498 }
55499 phraseChanged();
55500 }
55501
c6624d51 55502 function calcForDerivationPath() {
9987f0c1 55503 clearDerivedKeys();
ba3cb9ec 55504 clearAddressesList();
f128bd58 55505 showPending();
cf6c2044
IC
55506 // Don't show segwit if it's selected but network doesn't support it
55507 if (segwitSelected() && !networkHasSegwit()) {
9987f0c1
IC
55508 return;
55509 }
c6624d51
IC
55510 // Get the derivation path
55511 var derivationPath = getDerivationPath();
55512 var errorText = findDerivationPathErrors(derivationPath);
55513 if (errorText) {
55514 showValidationError(errorText);
55515 return;
55516 }
20083ab9
IC
55517 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
55518 if (bip44TabSelected()) {
55519 displayBip44Info();
55520 }
cf6c2044 55521 else if (bip49TabSelected()) {
9987f0c1
IC
55522 displayBip49Info();
55523 }
c6624d51 55524 displayBip32Info();
c6624d51
IC
55525 }
55526
55527 function generateClicked() {
55528 if (isUsingOwnEntropy()) {
55529 return;
55530 }
55531 clearDisplay();
55532 showPending();
55533 setTimeout(function() {
55534 setMnemonicLanguage();
55535 var phrase = generateRandomPhrase();
55536 if (!phrase) {
55537 return;
55538 }
55539 phraseChanged();
55540 }, 50);
55541 }
55542
55543 function languageChanged() {
55544 setTimeout(function() {
55545 setMnemonicLanguage();
55546 if (DOM.phrase.val().length > 0) {
55547 var newPhrase = convertPhraseToNewLanguage();
55548 DOM.phrase.val(newPhrase);
55549 phraseChanged();
55550 }
55551 else {
55552 DOM.generate.trigger("click");
55553 }
55554 }, 50);
55555 }
55556
0f6b34d6
IC
55557 function useBitpayAddressesChange() {
55558 setBitcoinCashNetworkValues();
55559 phraseChanged();
55560 }
55561
c6624d51
IC
55562 function toggleIndexes() {
55563 showIndex = !showIndex;
55564 $("td.index span").toggleClass("invisible");
55565 }
55566
55567 function toggleAddresses() {
55568 showAddress = !showAddress;
55569 $("td.address span").toggleClass("invisible");
55570 }
55571
55572 function togglePublicKeys() {
55573 showPubKey = !showPubKey;
55574 $("td.pubkey span").toggleClass("invisible");
55575 }
55576
55577 function togglePrivateKeys() {
55578 showPrivKey = !showPrivKey;
55579 $("td.privkey span").toggleClass("invisible");
55580 }
55581
55582 // Private methods
55583
55584 function generateRandomPhrase() {
55585 if (!hasStrongRandom()) {
55586 var errorText = "This browser does not support strong randomness";
55587 showValidationError(errorText);
55588 return;
55589 }
18abe53b 55590 var numWords = parseInt(DOM.generatedStrength.val());
c6624d51
IC
55591 var strength = numWords / 3 * 32;
55592 var words = mnemonic.generate(strength);
55593 DOM.phrase.val(words);
55594 return words;
55595 }
55596
55597 function calcBip32RootKeyFromSeed(phrase, passphrase) {
55598 seed = mnemonic.toSeed(phrase, passphrase);
9987f0c1 55599 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
c6624d51
IC
55600 }
55601
55602 function calcBip32RootKeyFromBase58(rootKeyBase58) {
9987f0c1 55603 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
c6624d51
IC
55604 }
55605
55606 function calcBip32ExtendedKey(path) {
0a1f0259
IC
55607 // Check there's a root key to derive from
55608 if (!bip32RootKey) {
55609 return bip32RootKey;
55610 }
20083ab9 55611 var extendedKey = bip32RootKey;
c6624d51
IC
55612 // Derive the key from the path
55613 var pathBits = path.split("/");
ebd8d4e8
IC
55614 for (var i=0; i<pathBits.length; i++) {
55615 var bit = pathBits[i];
55616 var index = parseInt(bit);
55617 if (isNaN(index)) {
55618 continue;
55619 }
55620 var hardened = bit[bit.length-1] == "'";
9987f0c1 55621 var isPriv = !(extendedKey.isNeutered());
ba3cb9ec
IC
55622 var invalidDerivationPath = hardened && !isPriv;
55623 if (invalidDerivationPath) {
55624 extendedKey = null;
55625 }
55626 else if (hardened) {
20083ab9 55627 extendedKey = extendedKey.deriveHardened(index);
ebd8d4e8
IC
55628 }
55629 else {
20083ab9 55630 extendedKey = extendedKey.derive(index);
ebd8d4e8
IC
55631 }
55632 }
20083ab9 55633 return extendedKey
ebd8d4e8
IC
55634 }
55635
55636 function showValidationError(errorText) {
55637 DOM.feedback
55638 .text(errorText)
55639 .show();
55640 }
55641
55642 function hideValidationError() {
55643 DOM.feedback
55644 .text("")
55645 .hide();
55646 }
55647
55648 function findPhraseErrors(phrase) {
ebd8d4e8 55649 // Preprocess the words
783981de 55650 phrase = mnemonic.normalizeString(phrase);
0515eeec 55651 var words = phraseToWordArray(phrase);
18abe53b
IC
55652 // Detect blank phrase
55653 if (words.length == 0) {
55654 return "Blank mnemonic";
55655 }
563e401a 55656 // Check each word
0515eeec
IC
55657 for (var i=0; i<words.length; i++) {
55658 var word = words[i];
55659 var language = getLanguage();
55660 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
55661 console.log("Finding closest match to " + word);
55662 var nearestWord = findNearestWord(word);
55663 return word + " not in wordlist, did you mean " + nearestWord + "?";
55664 }
55665 }
ebd8d4e8 55666 // Check the words are valid
0515eeec 55667 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
55668 var isValid = mnemonic.check(properPhrase);
55669 if (!isValid) {
55670 return "Invalid mnemonic";
55671 }
55672 return false;
55673 }
55674
efe41586
IC
55675 function validateRootKey(rootKeyBase58) {
55676 try {
0a8d06d0 55677 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
efe41586
IC
55678 }
55679 catch (e) {
55680 return "Invalid root key";
55681 }
55682 return "";
55683 }
55684
38523d36 55685 function getDerivationPath() {
20083ab9 55686 if (bip44TabSelected()) {
38523d36
IC
55687 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
55688 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
55689 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
55690 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
55691 var path = "m/";
55692 path += purpose + "'/";
55693 path += coin + "'/";
55694 path += account + "'/";
55695 path += change;
55696 DOM.bip44path.val(path);
55697 var derivationPath = DOM.bip44path.val();
55698 console.log("Using derivation path from BIP44 tab: " + derivationPath);
55699 return derivationPath;
55700 }
cf6c2044 55701 else if (bip49TabSelected()) {
9987f0c1
IC
55702 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
55703 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
55704 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
55705 var change = parseIntNoNaN(DOM.bip49change.val(), 0);
55706 var path = "m/";
55707 path += purpose + "'/";
55708 path += coin + "'/";
55709 path += account + "'/";
55710 path += change;
55711 DOM.bip49path.val(path);
55712 var derivationPath = DOM.bip49path.val();
55713 console.log("Using derivation path from BIP49 tab: " + derivationPath);
55714 return derivationPath;
55715 }
20083ab9 55716 else if (bip32TabSelected()) {
38523d36
IC
55717 var derivationPath = DOM.bip32path.val();
55718 console.log("Using derivation path from BIP32 tab: " + derivationPath);
55719 return derivationPath;
55720 }
cf6c2044
IC
55721 else if (bip141TabSelected()) {
55722 var derivationPath = DOM.bip141path.val();
55723 console.log("Using derivation path from BIP141 tab: " + derivationPath);
55724 return derivationPath;
55725 }
38523d36
IC
55726 else {
55727 console.log("Unknown derivation path");
55728 }
55729 }
55730
ebd8d4e8 55731 function findDerivationPathErrors(path) {
30c9e79d
IC
55732 // TODO is not perfect but is better than nothing
55733 // Inspired by
55734 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
55735 // and
55736 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
55737 var maxDepth = 255; // TODO verify this!!
55738 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
55739 if (path[0] != "m") {
55740 return "First character must be 'm'";
55741 }
55742 if (path.length > 1) {
55743 if (path[1] != "/") {
55744 return "Separator must be '/'";
55745 }
55746 var indexes = path.split("/");
55747 if (indexes.length > maxDepth) {
55748 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
55749 }
55750 for (var depth = 1; depth<indexes.length; depth++) {
55751 var index = indexes[depth];
55752 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
55753 if (invalidChars.length > 0) {
55754 return "Invalid characters " + invalidChars + " found at depth " + depth;
55755 }
55756 var indexValue = parseInt(index.replace("'", ""));
55757 if (isNaN(depth)) {
55758 return "Invalid number at depth " + depth;
55759 }
55760 if (indexValue > maxIndexValue) {
55761 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
55762 }
55763 }
55764 }
0a1f0259
IC
55765 // Check root key exists or else derivation path is useless!
55766 if (!bip32RootKey) {
55767 return "No root key";
55768 }
ba3cb9ec 55769 // Check no hardened derivation path when using xpub keys
8d18f379
IC
55770 var hardenedPath = path.indexOf("'") > -1;
55771 var hardenedAddresses = bip32TabSelected() && DOM.hardenedAddresses.prop("checked");
55772 var hardened = hardenedPath || hardenedAddresses;
9987f0c1 55773 var isXpubkey = bip32RootKey.isNeutered();
ba3cb9ec
IC
55774 if (hardened && isXpubkey) {
55775 return "Hardened derivation path is invalid with xpub key";
55776 }
ebd8d4e8
IC
55777 return false;
55778 }
55779
20083ab9
IC
55780 function displayBip44Info() {
55781 // Get the derivation path for the account
55782 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
55783 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
55784 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
55785 var path = "m/";
55786 path += purpose + "'/";
55787 path += coin + "'/";
55788 path += account + "'/";
55789 // Calculate the account extended keys
55790 var accountExtendedKey = calcBip32ExtendedKey(path);
55791 var accountXprv = accountExtendedKey.toBase58();
9987f0c1 55792 var accountXpub = accountExtendedKey.neutered().toBase58();
20083ab9
IC
55793 // Display the extended keys
55794 DOM.bip44accountXprv.val(accountXprv);
55795 DOM.bip44accountXpub.val(accountXpub);
55796 }
55797
9987f0c1
IC
55798 function displayBip49Info() {
55799 // Get the derivation path for the account
55800 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
55801 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
55802 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
55803 var path = "m/";
55804 path += purpose + "'/";
55805 path += coin + "'/";
55806 path += account + "'/";
55807 // Calculate the account extended keys
55808 var accountExtendedKey = calcBip32ExtendedKey(path);
55809 var accountXprv = accountExtendedKey.toBase58();
55810 var accountXpub = accountExtendedKey.neutered().toBase58();
55811 // Display the extended keys
55812 DOM.bip49accountXprv.val(accountXprv);
55813 DOM.bip49accountXpub.val(accountXpub);
55814 }
55815
ebd8d4e8
IC
55816 function displayBip32Info() {
55817 // Display the key
73161a92 55818 DOM.seed.val(seed);
ebd8d4e8
IC
55819 var rootKey = bip32RootKey.toBase58();
55820 DOM.rootKey.val(rootKey);
ba3cb9ec 55821 var xprvkeyB58 = "NA";
9987f0c1 55822 if (!bip32ExtendedKey.isNeutered()) {
ba3cb9ec
IC
55823 xprvkeyB58 = bip32ExtendedKey.toBase58();
55824 }
55825 var extendedPrivKey = xprvkeyB58;
ebd8d4e8 55826 DOM.extendedPrivKey.val(extendedPrivKey);
9987f0c1 55827 var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
ebd8d4e8
IC
55828 DOM.extendedPubKey.val(extendedPubKey);
55829 // Display the addresses and privkeys
55830 clearAddressesList();
55831 displayAddresses(0, 20);
55832 }
55833
55834 function displayAddresses(start, total) {
40892aba
IC
55835 generationProcesses.push(new (function() {
55836
55837 var rows = [];
55838
55839 this.stop = function() {
55840 for (var i=0; i<rows.length; i++) {
55841 rows[i].shouldGenerate = false;
55842 }
f128bd58 55843 hidePending();
40892aba
IC
55844 }
55845
55846 for (var i=0; i<total; i++) {
55847 var index = i + start;
f128bd58
IC
55848 var isLast = i == total - 1;
55849 rows.push(new TableRow(index, isLast));
40892aba
IC
55850 }
55851
55852 })());
80c4dd2a
IC
55853 }
55854
cf6c2044
IC
55855 function segwitSelected() {
55856 return bip49TabSelected() || bip141TabSelected();
55857 }
55858
55859 function p2wpkhSelected() {
55860 return bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh";
55861 }
55862
55863 function p2wpkhInP2shSelected() {
55864 return bip49TabSelected() ||
55865 (bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh-p2sh");
0f6b34d6
IC
55866 }
55867
f128bd58 55868 function TableRow(index, isLast) {
80c4dd2a 55869
40892aba
IC
55870 var self = this;
55871 this.shouldGenerate = true;
1975bfbc 55872 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
cf6c2044
IC
55873 var isSegwit = segwitSelected();
55874 var segwitAvailable = networkHasSegwit();
55875 var isP2wpkh = p2wpkhSelected();
55876 var isP2wpkhInP2sh = p2wpkhInP2shSelected();
1975bfbc 55877
80c4dd2a
IC
55878 function init() {
55879 calculateValues();
55880 }
55881
55882 function calculateValues() {
55883 setTimeout(function() {
40892aba
IC
55884 if (!self.shouldGenerate) {
55885 return;
55886 }
9987f0c1 55887 var key = "NA";
1975bfbc
IC
55888 if (useHardenedAddresses) {
55889 key = bip32ExtendedKey.deriveHardened(index);
55890 }
55891 else {
55892 key = bip32ExtendedKey.derive(index);
55893 }
80c4dd2a 55894 var address = key.getAddress().toString();
ba3cb9ec 55895 var privkey = "NA";
9987f0c1
IC
55896 if (!key.isNeutered()) {
55897 privkey = key.keyPair.toWIF(network);
ba3cb9ec 55898 }
9987f0c1 55899 var pubkey = key.getPublicKeyBuffer().toString('hex');
38523d36 55900 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
55901 if (useHardenedAddresses) {
55902 indexText = indexText + "'";
55903 }
8b095871 55904 // Ethereum values are different
534481b6 55905 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
9987f0c1 55906 var privKeyBuffer = key.keyPair.d.toBuffer();
8b095871
IC
55907 privkey = privKeyBuffer.toString('hex');
55908 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
49b21f12
IC
55909 var hexAddress = addressBuffer.toString('hex');
55910 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
55911 address = ethUtil.addHexPrefix(checksumAddress);
920eb591
IC
55912 privkey = ethUtil.addHexPrefix(privkey);
55913 pubkey = ethUtil.addHexPrefix(pubkey);
8b095871 55914 }
8a1f452d 55915 // Ripple values are different
534481b6 55916 if (networks[DOM.network.val()].name == "XRP - Ripple") {
8a1f452d 55917 privkey = convertRipplePriv(privkey);
55918 address = convertRippleAdrr(address);
55919 }
cf6c2044
IC
55920 // Segwit addresses are different
55921 if (isSegwit) {
55922 if (!segwitAvailable) {
9987f0c1
IC
55923 return;
55924 }
cf6c2044
IC
55925 if (isP2wpkh) {
55926 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
55927 var scriptpubkey = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
55928 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
55929 }
55930 else if (isP2wpkhInP2sh) {
55931 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
55932 var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
55933 var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig);
55934 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
55935 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
55936 }
9987f0c1 55937 }
1b12b2f5 55938 addAddressToList(indexText, address, pubkey, privkey);
f128bd58
IC
55939 if (isLast) {
55940 hidePending();
55941 }
80c4dd2a 55942 }, 50)
ebd8d4e8 55943 }
80c4dd2a
IC
55944
55945 init();
55946
ebd8d4e8
IC
55947 }
55948
55949 function showMore() {
ebd8d4e8
IC
55950 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
55951 if (isNaN(rowsToAdd)) {
55952 rowsToAdd = 20;
55953 DOM.rowsToAdd.val("20");
55954 }
924727ed
IC
55955 var start = parseInt(DOM.moreRowsStartIndex.val())
55956 if (isNaN(start)) {
55957 start = lastIndexInTable() + 1;
55958 }
55959 else {
55960 var newStart = start + rowsToAdd;
55961 DOM.moreRowsStartIndex.val(newStart);
55962 }
ebd8d4e8
IC
55963 if (rowsToAdd > 200) {
55964 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
55965 msg += "Do you want to continue?";
55966 if (!confirm(msg)) {
55967 return;
55968 }
55969 }
ebd8d4e8 55970 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
55971 }
55972
55973 function clearDisplay() {
55974 clearAddressesList();
9987f0c1 55975 clearKeys();
ebd8d4e8
IC
55976 hideValidationError();
55977 }
55978
55979 function clearAddressesList() {
55980 DOM.addresses.empty();
40892aba
IC
55981 stopGenerating();
55982 }
55983
55984 function stopGenerating() {
55985 while (generationProcesses.length > 0) {
55986 var generation = generationProcesses.shift();
55987 generation.stop();
55988 }
ebd8d4e8
IC
55989 }
55990
9987f0c1
IC
55991 function clearKeys() {
55992 clearRootKey();
55993 clearDerivedKeys();
55994 }
55995
55996 function clearRootKey() {
ebd8d4e8 55997 DOM.rootKey.val("");
9987f0c1
IC
55998 }
55999
56000 function clearDerivedKeys() {
ebd8d4e8
IC
56001 DOM.extendedPrivKey.val("");
56002 DOM.extendedPubKey.val("");
9987f0c1
IC
56003 DOM.bip44accountXprv.val("");
56004 DOM.bip44accountXpub.val("");
ebd8d4e8
IC
56005 }
56006
1b12b2f5 56007 function addAddressToList(indexText, address, pubkey, privkey) {
ebd8d4e8 56008 var row = $(addressRowTemplate.html());
80c4dd2a
IC
56009 // Elements
56010 var indexCell = row.find(".index span");
56011 var addressCell = row.find(".address span");
1b12b2f5 56012 var pubkeyCell = row.find(".pubkey span");
80c4dd2a
IC
56013 var privkeyCell = row.find(".privkey span");
56014 // Content
ae30fed8 56015 indexCell.text(indexText);
80c4dd2a 56016 addressCell.text(address);
1b12b2f5 56017 pubkeyCell.text(pubkey);
80c4dd2a
IC
56018 privkeyCell.text(privkey);
56019 // Visibility
56020 if (!showIndex) {
56021 indexCell.addClass("invisible");
56022 }
56023 if (!showAddress) {
56024 addressCell.addClass("invisible");
56025 }
1b12b2f5
IC
56026 if (!showPubKey) {
56027 pubkeyCell.addClass("invisible");
56028 }
80c4dd2a 56029 if (!showPrivKey) {
6d628db7 56030 privkeyCell.addClass("invisible");
80c4dd2a 56031 }
ebd8d4e8 56032 DOM.addresses.append(row);
e00964cc
IC
56033 var rowShowQrEls = row.find("[data-show-qr]");
56034 setQrEvents(rowShowQrEls);
ebd8d4e8
IC
56035 }
56036
56037 function hasStrongRandom() {
56038 return 'crypto' in window && window['crypto'] !== null;
56039 }
56040
56041 function disableForms() {
56042 $("form").on("submit", function(e) {
56043 e.preventDefault();
56044 });
56045 }
56046
ebd8d4e8
IC
56047 function parseIntNoNaN(val, defaultVal) {
56048 var v = parseInt(val);
56049 if (isNaN(v)) {
56050 return defaultVal;
56051 }
56052 return v;
56053 }
56054
56055 function showPending() {
56056 DOM.feedback
56057 .text("Calculating...")
56058 .show();
56059 }
56060
563e401a 56061 function findNearestWord(word) {
0515eeec
IC
56062 var language = getLanguage();
56063 var words = WORDLISTS[language];
563e401a
IC
56064 var minDistance = 99;
56065 var closestWord = words[0];
56066 for (var i=0; i<words.length; i++) {
56067 var comparedTo = words[i];
6ea15134
IC
56068 if (comparedTo.indexOf(word) == 0) {
56069 return comparedTo;
56070 }
563e401a
IC
56071 var distance = Levenshtein.get(word, comparedTo);
56072 if (distance < minDistance) {
56073 closestWord = comparedTo;
56074 minDistance = distance;
56075 }
56076 }
56077 return closestWord;
56078 }
56079
ebd8d4e8
IC
56080 function hidePending() {
56081 DOM.feedback
56082 .text("")
56083 .hide();
56084 }
56085
ab78acc6
IC
56086 function populateNetworkSelect() {
56087 for (var i=0; i<networks.length; i++) {
56088 var network = networks[i];
56089 var option = $("<option>");
56090 option.attr("value", i);
56091 option.text(network.name);
b3cc3930
IC
56092 if (network.name == "BTC - Bitcoin") {
56093 option.prop("selected", true);
56094 }
ab78acc6
IC
56095 DOM.phraseNetwork.append(option);
56096 }
56097 }
56098
56530adc
IC
56099 function populateClientSelect() {
56100 for (var i=0; i<clients.length; i++) {
56101 var client = clients[i];
56102 var option = $("<option>");
56103 option.attr("value", i);
56104 option.text(client.name);
56105 DOM.bip32Client.append(option);
56106 }
56107 }
56108
0515eeec
IC
56109 function getLanguage() {
56110 var defaultLanguage = "english";
56111 // Try to get from existing phrase
56112 var language = getLanguageFromPhrase();
56113 // Try to get from url if not from phrase
56114 if (language.length == 0) {
56115 language = getLanguageFromUrl();
56116 }
56117 // Default to English if no other option
56118 if (language.length == 0) {
56119 language = defaultLanguage;
56120 }
56121 return language;
56122 }
56123
56124 function getLanguageFromPhrase(phrase) {
56125 // Check if how many words from existing phrase match a language.
56126 var language = "";
56127 if (!phrase) {
56128 phrase = DOM.phrase.val();
56129 }
56130 if (phrase.length > 0) {
56131 var words = phraseToWordArray(phrase);
56132 var languageMatches = {};
56133 for (l in WORDLISTS) {
56134 // Track how many words match in this language
56135 languageMatches[l] = 0;
56136 for (var i=0; i<words.length; i++) {
56137 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
56138 if (wordInLanguage) {
56139 languageMatches[l]++;
56140 }
56141 }
56142 // Find languages with most word matches.
56143 // This is made difficult due to commonalities between Chinese
56144 // simplified vs traditional.
56145 var mostMatches = 0;
56146 var mostMatchedLanguages = [];
56147 for (var l in languageMatches) {
56148 var numMatches = languageMatches[l];
56149 if (numMatches > mostMatches) {
56150 mostMatches = numMatches;
56151 mostMatchedLanguages = [l];
56152 }
56153 else if (numMatches == mostMatches) {
56154 mostMatchedLanguages.push(l);
56155 }
56156 }
56157 }
56158 if (mostMatchedLanguages.length > 0) {
56159 // Use first language and warn if multiple detected
56160 language = mostMatchedLanguages[0];
56161 if (mostMatchedLanguages.length > 1) {
56162 console.warn("Multiple possible languages");
56163 console.warn(mostMatchedLanguages);
56164 }
56165 }
56166 }
56167 return language;
56168 }
56169
56170 function getLanguageFromUrl() {
c6624d51
IC
56171 for (var language in WORDLISTS) {
56172 if (window.location.hash.indexOf(language) > -1) {
56173 return language;
56174 }
56175 }
56176 return "";
0515eeec
IC
56177 }
56178
56179 function setMnemonicLanguage() {
56180 var language = getLanguage();
56181 // Load the bip39 mnemonic generator for this language if required
56182 if (!(language in mnemonics)) {
56183 mnemonics[language] = new Mnemonic(language);
56184 }
56185 mnemonic = mnemonics[language];
56186 }
56187
56188 function convertPhraseToNewLanguage() {
56189 var oldLanguage = getLanguageFromPhrase();
56190 var newLanguage = getLanguageFromUrl();
56191 var oldPhrase = DOM.phrase.val();
56192 var oldWords = phraseToWordArray(oldPhrase);
56193 var newWords = [];
56194 for (var i=0; i<oldWords.length; i++) {
56195 var oldWord = oldWords[i];
56196 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
56197 var newWord = WORDLISTS[newLanguage][index];
56198 newWords.push(newWord);
56199 }
56200 newPhrase = wordArrayToPhrase(newWords);
56201 return newPhrase;
56202 }
56203
56204 // TODO look at jsbip39 - mnemonic.splitWords
56205 function phraseToWordArray(phrase) {
56206 var words = phrase.split(/\s/g);
56207 var noBlanks = [];
56208 for (var i=0; i<words.length; i++) {
56209 var word = words[i];
56210 if (word.length > 0) {
56211 noBlanks.push(word);
56212 }
56213 }
56214 return noBlanks;
56215 }
56216
56217 // TODO look at jsbip39 - mnemonic.joinWords
56218 function wordArrayToPhrase(words) {
56219 var phrase = words.join(" ");
56220 var language = getLanguageFromPhrase(phrase);
56221 if (language == "japanese") {
56222 phrase = words.join("\u3000");
56223 }
56224 return phrase;
56225 }
56226
c6624d51
IC
56227 function isUsingOwnEntropy() {
56228 return DOM.useEntropy.prop("checked");
56229 }
56230
56231 function setMnemonicFromEntropy() {
2a6dd137 56232 clearEntropyFeedback();
18abe53b 56233 // Get entropy value
c6624d51 56234 var entropyStr = DOM.entropy.val();
18abe53b 56235 // Work out minimum base for entropy
c6624d51 56236 var entropy = Entropy.fromString(entropyStr);
18abe53b 56237 if (entropy.binaryStr.length == 0) {
c6624d51
IC
56238 return;
56239 }
56240 // Show entropy details
18abe53b
IC
56241 showEntropyFeedback(entropy);
56242 // Use entropy hash if not using raw entropy
56243 var bits = entropy.binaryStr;
56244 var mnemonicLength = DOM.entropyMnemonicLength.val();
56245 if (mnemonicLength != "raw") {
56246 // Get bits by hashing entropy with SHA256
56247 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
56248 var hex = sjcl.codec.hex.fromBits(hash);
56249 bits = BigInteger.parse(hex, 16).toString(2);
53aaab27 56250 while (bits.length % 256 != 0) {
18abe53b
IC
56251 bits = "0" + bits;
56252 }
56253 // Truncate hash to suit number of words
56254 mnemonicLength = parseInt(mnemonicLength);
56255 var numberOfBits = 32 * mnemonicLength / 3;
56256 bits = bits.substring(0, numberOfBits);
c6624d51 56257 }
c6624d51 56258 // Discard trailing entropy
18abe53b 56259 var bitsToUse = Math.floor(bits.length / 32) * 32;
2a6dd137
IC
56260 var start = bits.length - bitsToUse;
56261 var binaryStr = bits.substring(start);
c6624d51
IC
56262 // Convert entropy string to numeric array
56263 var entropyArr = [];
18abe53b
IC
56264 for (var i=0; i<binaryStr.length / 8; i++) {
56265 var byteAsBits = binaryStr.substring(i*8, i*8+8);
56266 var entropyByte = parseInt(byteAsBits, 2);
c6624d51
IC
56267 entropyArr.push(entropyByte)
56268 }
56269 // Convert entropy array to mnemonic
56270 var phrase = mnemonic.toMnemonic(entropyArr);
56271 // Set the mnemonic in the UI
56272 DOM.phrase.val(phrase);
56273 }
56274
2a6dd137 56275 function clearEntropyFeedback() {
f1e5d484 56276 DOM.entropyCrackTime.text("...");
18abe53b 56277 DOM.entropyType.text("");
2a6dd137
IC
56278 DOM.entropyWordCount.text("0");
56279 DOM.entropyEventCount.text("0");
56280 DOM.entropyBitsPerEvent.text("0");
56281 DOM.entropyBits.text("0");
56282 DOM.entropyFiltered.html("&nbsp;");
56283 DOM.entropyBinary.html("&nbsp;");
c6624d51
IC
56284 }
56285
18abe53b 56286 function showEntropyFeedback(entropy) {
9e97eb76 56287 var numberOfBits = entropy.binaryStr.length;
f1e5d484 56288 var timeToCrack = "unknown";
95f04905
IC
56289 try {
56290 var z = zxcvbn(entropy.base.parts.join(""));
f1e5d484
IC
56291 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
56292 if (z.feedback.warning != "") {
56293 timeToCrack = timeToCrack + " - " + z.feedback.warning;
56294 };
18abe53b 56295 }
95f04905 56296 catch (e) {
95f04905
IC
56297 console.log("Error detecting entropy strength with zxcvbn:");
56298 console.log(e);
56299 }
95f04905 56300 var entropyTypeStr = getEntropyTypeStr(entropy);
9e97eb76 56301 var wordCount = Math.floor(numberOfBits / 32) * 3;
94959756 56302 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
2a6dd137 56303 DOM.entropyFiltered.html(entropy.cleanHtml);
95f04905 56304 DOM.entropyType.text(entropyTypeStr);
f1e5d484 56305 DOM.entropyCrackTime.text(timeToCrack);
18abe53b 56306 DOM.entropyEventCount.text(entropy.base.ints.length);
9e97eb76 56307 DOM.entropyBits.text(numberOfBits);
2a6dd137
IC
56308 DOM.entropyWordCount.text(wordCount);
56309 DOM.entropyBinary.text(entropy.binaryStr);
9e97eb76 56310 DOM.entropyBitsPerEvent.text(bitsPerEvent);
9ff30bab
IC
56311 // detect and warn of filtering
56312 var rawNoSpaces = DOM.entropy.val().replace(/\s/g, "");
56313 var cleanNoSpaces = entropy.cleanStr.replace(/\s/g, "");
56314 var isFiltered = rawNoSpaces.length != cleanNoSpaces.length;
56315 if (isFiltered) {
56316 DOM.entropyFilterWarning.removeClass('hidden');
56317 }
56318 else {
56319 DOM.entropyFilterWarning.addClass('hidden');
56320 }
95f04905
IC
56321 }
56322
56323 function getEntropyTypeStr(entropy) {
56324 var typeStr = entropy.base.str;
56325 // Add some detail if these are cards
56326 if (entropy.base.asInt == 52) {
56327 var cardDetail = []; // array of message strings
56328 // Detect duplicates
56329 var dupes = [];
56330 var dupeTracker = {};
56331 for (var i=0; i<entropy.base.parts.length; i++) {
56332 var card = entropy.base.parts[i];
9e97eb76
IC
56333 var cardUpper = card.toUpperCase();
56334 if (cardUpper in dupeTracker) {
95f04905
IC
56335 dupes.push(card);
56336 }
9e97eb76 56337 dupeTracker[cardUpper] = true;
95f04905
IC
56338 }
56339 if (dupes.length > 0) {
56340 var dupeWord = "duplicates";
56341 if (dupes.length == 1) {
56342 dupeWord = "duplicate";
56343 }
56344 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
56345 if (dupes.length > 3) {
56346 msg += "...";
56347 }
56348 cardDetail.push(msg);
56349 }
56350 // Detect full deck
56351 var uniqueCards = [];
56352 for (var uniqueCard in dupeTracker) {
56353 uniqueCards.push(uniqueCard);
56354 }
56355 if (uniqueCards.length == 52) {
56356 cardDetail.unshift("full deck");
56357 }
9e97eb76
IC
56358 // Detect missing cards
56359 var values = "A23456789TJQK";
56360 var suits = "CDHS";
56361 var missingCards = [];
56362 for (var i=0; i<suits.length; i++) {
56363 for (var j=0; j<values.length; j++) {
56364 var card = values[j] + suits[i];
56365 if (!(card in dupeTracker)) {
56366 missingCards.push(card);
56367 }
56368 }
56369 }
56370 // Display missing cards if six or less, ie clearly going for full deck
56371 if (missingCards.length > 0 && missingCards.length <= 6) {
56372 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
56373 if (missingCards.length > 3) {
56374 msg += "...";
56375 }
56376 cardDetail.push(msg);
56377 }
95f04905
IC
56378 // Add card details to typeStr
56379 if (cardDetail.length > 0) {
56380 typeStr += " (" + cardDetail.join(", ") + ")";
56381 }
56382 }
56383 return typeStr;
56384 }
56385
e00964cc
IC
56386 function setQrEvents(els) {
56387 els.on("mouseenter", createQr);
56388 els.on("mouseleave", destroyQr);
56389 els.on("click", toggleQr);
56390 }
56391
56392 function createQr(e) {
56393 var content = e.target.textContent || e.target.value;
56394 if (content) {
56395 var size = 130;
56396 DOM.qrImage.qrcode({width: size, height: size, text: content});
56397 if (!showQr) {
52da415f
IC
56398 DOM.qrHider.addClass("hidden");
56399 }
56400 else {
56401 DOM.qrHider.removeClass("hidden");
e00964cc
IC
56402 }
56403 DOM.qrContainer.removeClass("hidden");
56404 }
56405 }
56406
56407 function destroyQr() {
56408 DOM.qrImage.text("");
56409 DOM.qrContainer.addClass("hidden");
56410 }
56411
56412 function toggleQr() {
56413 showQr = !showQr;
52da415f 56414 DOM.qrHider.toggleClass("hidden");
e00964cc
IC
56415 DOM.qrHint.toggleClass("hidden");
56416 }
56417
20083ab9
IC
56418 function bip44TabSelected() {
56419 return DOM.bip44tab.hasClass("active");
56420 }
56421
56422 function bip32TabSelected() {
56423 return DOM.bip32tab.hasClass("active");
56424 }
56425
cf6c2044
IC
56426 function networkHasSegwit() {
56427 return networks[DOM.network.val()].segwitAvailable;
9987f0c1
IC
56428 }
56429
56430 function bip49TabSelected() {
56431 return DOM.bip49tab.hasClass("active");
56432 }
56433
cf6c2044
IC
56434 function bip141TabSelected() {
56435 return DOM.bip141tab.hasClass("active");
56436 }
56437
9987f0c1
IC
56438 function setHdCoin(coinValue) {
56439 DOM.bip44coin.val(coinValue);
56440 DOM.bip49coin.val(coinValue);
56441 }
56442
cf6c2044 56443 function showSegwitAvailable() {
9987f0c1
IC
56444 DOM.bip49unavailable.addClass("hidden");
56445 DOM.bip49available.removeClass("hidden");
cf6c2044
IC
56446 DOM.bip141unavailable.addClass("hidden");
56447 DOM.bip141available.removeClass("hidden");
9987f0c1
IC
56448 }
56449
cf6c2044 56450 function showSegwitUnavailable() {
9987f0c1
IC
56451 DOM.bip49available.addClass("hidden");
56452 DOM.bip49unavailable.removeClass("hidden");
cf6c2044
IC
56453 DOM.bip141available.addClass("hidden");
56454 DOM.bip141unavailable.removeClass("hidden");
9987f0c1
IC
56455 }
56456
0f6b34d6
IC
56457 function useBitpayAddresses() {
56458 return !(DOM.useBitpayAddresses.prop("checked"));
56459 }
56460
56461 function setBitcoinCashNetworkValues() {
56462 if (useBitpayAddresses()) {
56463 network = bitcoinjs.bitcoin.networks.bitcoin;
56464 }
56465 else {
56466 network = bitcoinjs.bitcoin.networks.bitcoinCashBitbpay;
56467 }
56468 }
56469
cf6c2044
IC
56470 function adjustNetworkForSegwit() {
56471 // If segwit is selected the xpub/xprv prefixes need to be adjusted
0f6b34d6
IC
56472 // to avoid accidentally importing BIP49 xpub to BIP44 watch only
56473 // wallet.
56474 // See https://github.com/iancoleman/bip39/issues/125
cf6c2044
IC
56475 var segwitNetworks = null;
56476 // if a segwit network is alread selected, need to use base network to
56477 // look up new parameters
56478 if ("baseNetwork" in network) {
56479 network = bitcoinjs.bitcoin.networks[network.baseNetwork];
0f6b34d6 56480 }
cf6c2044
IC
56481 // choose the right segwit params
56482 if (p2wpkhSelected() && "p2wpkh" in network) {
56483 network = network.p2wpkh;
56484 }
56485 else if (p2wpkhInP2shSelected() && "p2wpkhInP2sh" in network) {
56486 network = network.p2wpkhInP2sh;
0f6b34d6
IC
56487 }
56488 }
56489
924727ed
IC
56490 function lastIndexInTable() {
56491 var pathText = DOM.addresses.find(".index").last().text();
56492 var pathBits = pathText.split("/");
56493 var lastBit = pathBits[pathBits.length-1];
56494 var lastBitClean = lastBit.replace("'", "");
56495 return parseInt(lastBitClean);
56496 }
56497
ab78acc6 56498 var networks = [
b3cc3930
IC
56499 {
56500 name: "BCH - Bitcoin Cash",
cf6c2044 56501 segwitAvailable: false,
b3cc3930 56502 onSelect: function() {
0f6b34d6
IC
56503 DOM.useBitpayAddressesContainer.removeClass("hidden");
56504 setBitcoinCashNetworkValues();
b3cc3930
IC
56505 setHdCoin(145);
56506 },
56507 },
ab78acc6 56508 {
534481b6 56509 name: "BTC - Bitcoin",
cf6c2044 56510 segwitAvailable: true,
ab78acc6 56511 onSelect: function() {
9987f0c1
IC
56512 network = bitcoinjs.bitcoin.networks.bitcoin;
56513 setHdCoin(0);
ab78acc6
IC
56514 },
56515 },
56516 {
534481b6 56517 name: "BTC - Bitcoin Testnet",
cf6c2044 56518 segwitAvailable: true,
ab78acc6 56519 onSelect: function() {
9987f0c1
IC
56520 network = bitcoinjs.bitcoin.networks.testnet;
56521 setHdCoin(1);
ab78acc6
IC
56522 },
56523 },
39608073
RS
56524 {
56525 name: "BTG - Bitcoin Gold",
cf6c2044 56526 segwitAvailable: true,
39608073
RS
56527 onSelect: function() {
56528 network = bitcoinjs.bitcoin.networks.bgold;
56529 setHdCoin(0);
56530 },
56531 },
ab78acc6 56532 {
534481b6 56533 name: "CLAM - Clams",
cf6c2044 56534 segwitAvailable: false,
ab78acc6 56535 onSelect: function() {
9987f0c1
IC
56536 network = bitcoinjs.bitcoin.networks.clam;
56537 setHdCoin(23);
ab78acc6
IC
56538 },
56539 },
0921f370 56540 {
56541 name: "CRW - Crown",
cf6c2044 56542 segwitAvailable: false,
0921f370 56543 onSelect: function() {
9987f0c1
IC
56544 network = bitcoinjs.bitcoin.networks.crown;
56545 setHdCoin(72);
0921f370 56546 },
56547 },
ab78acc6 56548 {
534481b6 56549 name: "DASH - Dash",
cf6c2044 56550 segwitAvailable: false,
d5dc92fd 56551 onSelect: function() {
9987f0c1
IC
56552 network = bitcoinjs.bitcoin.networks.dash;
56553 setHdCoin(5);
d5dc92fd
IC
56554 },
56555 },
c0386f3b 56556 {
534481b6 56557 name: "DASH - Dash Testnet",
cf6c2044 56558 segwitAvailable: false,
c0386f3b 56559 onSelect: function() {
9987f0c1
IC
56560 network = bitcoinjs.bitcoin.networks.dashtn;
56561 setHdCoin(1);
c0386f3b
KR
56562 },
56563 },
d5dc92fd 56564 {
534481b6 56565 name: "DOGE - Dogecoin",
cf6c2044 56566 segwitAvailable: false,
534481b6 56567 onSelect: function() {
9987f0c1
IC
56568 network = bitcoinjs.bitcoin.networks.dogecoin;
56569 setHdCoin(3);
534481b6 56570 },
56571 },
56572 {
56573 name: "ETH - Ethereum",
cf6c2044 56574 segwitAvailable: false,
d5dc92fd 56575 onSelect: function() {
9987f0c1
IC
56576 network = bitcoinjs.bitcoin.networks.bitcoin;
56577 setHdCoin(60);
d5dc92fd
IC
56578 },
56579 },
1102f201
IC
56580 {
56581 name: "FJC - Fujicoin",
cf6c2044 56582 segwitAvailable: false,
1102f201
IC
56583 onSelect: function() {
56584 network = bitcoinjs.bitcoin.networks.fujicoin;
56585 setHdCoin(75);
56586 },
56587 },
f88fab20 56588 {
534481b6 56589 name: "GAME - GameCredits",
cf6c2044 56590 segwitAvailable: false,
f88fab20 56591 onSelect: function() {
9987f0c1
IC
56592 network = bitcoinjs.bitcoin.networks.game;
56593 setHdCoin(101);
f88fab20 56594 },
56595 },
a3baa26e 56596 {
534481b6 56597 name: "JBS - Jumbucks",
cf6c2044 56598 segwitAvailable: false,
a3baa26e 56599 onSelect: function() {
9987f0c1
IC
56600 network = bitcoinjs.bitcoin.networks.jumbucks;
56601 setHdCoin(26);
a3baa26e
IC
56602 },
56603 },
56604 {
534481b6 56605 name: "LTC - Litecoin",
cf6c2044 56606 segwitAvailable: true,
a3baa26e 56607 onSelect: function() {
9987f0c1
IC
56608 network = bitcoinjs.bitcoin.networks.litecoin;
56609 setHdCoin(2);
8d18f379 56610 DOM.litecoinLtubContainer.removeClass("hidden");
a3baa26e
IC
56611 },
56612 },
56ad9601
JS
56613 {
56614 name: "MAZA - Maza",
cf6c2044 56615 segwitAvailable: false,
56ad9601
JS
56616 onSelect: function() {
56617 network = bitcoinjs.bitcoin.networks.maza;
56618 setHdCoin(13);
56619 },
56620 },
924727ed
IC
56621 {
56622 name: "MONA - Monacoin",
cf6c2044 56623 segwitAvailable: true,
924727ed
IC
56624 onSelect: function() {
56625 network = bitcoinjs.bitcoin.networks.monacoin,
56626 setHdCoin(22);
56627 },
56628 },
a3baa26e 56629 {
534481b6 56630 name: "NMC - Namecoin",
cf6c2044 56631 segwitAvailable: false,
a3baa26e 56632 onSelect: function() {
9987f0c1
IC
56633 network = bitcoinjs.bitcoin.networks.namecoin;
56634 setHdCoin(7);
a3baa26e
IC
56635 },
56636 },
f128bd58
IC
56637 {
56638 name: "PIVX - PIVX",
cf6c2044 56639 segwitAvailable: false,
f128bd58
IC
56640 onSelect: function() {
56641 network = bitcoinjs.bitcoin.networks.pivx;
56642 setHdCoin(119);
56643 },
56644 },
56645 {
56646 name: "PIVX - PIVX Testnet",
cf6c2044 56647 segwitAvailable: false,
f128bd58
IC
56648 onSelect: function() {
56649 network = bitcoinjs.bitcoin.networks.pivxtestnet;
56650 setHdCoin(1);
56651 },
56652 },
5c434a8a 56653 {
534481b6 56654 name: "PPC - Peercoin",
cf6c2044 56655 segwitAvailable: false,
5c434a8a 56656 onSelect: function() {
9987f0c1
IC
56657 network = bitcoinjs.bitcoin.networks.peercoin;
56658 setHdCoin(6);
5c434a8a
CM
56659 },
56660 },
8a1f452d 56661 {
534481b6 56662 name: "SDC - ShadowCash",
cf6c2044 56663 segwitAvailable: false,
5493efc3 56664 onSelect: function() {
9987f0c1
IC
56665 network = bitcoinjs.bitcoin.networks.shadow;
56666 setHdCoin(35);
5493efc3 56667 },
56668 },
07ac4350 56669 {
534481b6 56670 name: "SDC - ShadowCash Testnet",
cf6c2044 56671 segwitAvailable: false,
07ac4350 56672 onSelect: function() {
9987f0c1
IC
56673 network = bitcoinjs.bitcoin.networks.shadowtn;
56674 setHdCoin(1);
07ac4350 56675 },
56676 },
01e81e53 56677 {
534481b6 56678 name: "SLM - Slimcoin",
cf6c2044 56679 segwitAvailable: false,
01e81e53 56680 onSelect: function() {
9987f0c1
IC
56681 network = bitcoinjs.bitcoin.networks.slimcoin;
56682 setHdCoin(63);
01e81e53
GH
56683 },
56684 },
56685 {
534481b6 56686 name: "SLM - Slimcoin Testnet",
cf6c2044 56687 segwitAvailable: false,
01e81e53 56688 onSelect: function() {
9987f0c1
IC
56689 network = bitcoinjs.bitcoin.networks.slimcointn;
56690 setHdCoin(111);
01e81e53
GH
56691 },
56692 },
0f6b34d6
IC
56693 {
56694 name: "USNBT - NuBits",
cf6c2044 56695 segwitAvailable: false,
0f6b34d6
IC
56696 onSelect: function() {
56697 network = bitcoinjs.bitcoin.networks.nubits;
56698 setHdCoin(12);
56699 },
56700 },
07ac4350 56701 {
534481b6 56702 name: "VIA - Viacoin",
cf6c2044 56703 segwitAvailable: false,
07ac4350 56704 onSelect: function() {
9987f0c1
IC
56705 network = bitcoinjs.bitcoin.networks.viacoin;
56706 setHdCoin(14);
07ac4350 56707 },
56708 },
8b095871 56709 {
534481b6 56710 name: "VIA - Viacoin Testnet",
cf6c2044 56711 segwitAvailable: false,
8b095871 56712 onSelect: function() {
9987f0c1
IC
56713 network = bitcoinjs.bitcoin.networks.viacointestnet;
56714 setHdCoin(1);
8b095871
IC
56715 },
56716 },
b3cc3930
IC
56717 {
56718 name: "XMY - Myriadcoin",
cf6c2044 56719 segwitAvailable: false,
b3cc3930
IC
56720 onSelect: function() {
56721 network = bitcoinjs.bitcoin.networks.myriadcoin;
56722 setHdCoin(90);
56723 },
56724 },
534481b6 56725 {
56726 name: "XRP - Ripple",
cf6c2044 56727 segwitAvailable: false,
534481b6 56728 onSelect: function() {
9987f0c1
IC
56729 network = bitcoinjs.bitcoin.networks.bitcoin;
56730 setHdCoin(144);
534481b6 56731 },
56732 }
ab78acc6
IC
56733 ]
56734
56530adc
IC
56735 var clients = [
56736 {
56737 name: "Bitcoin Core",
56738 onSelect: function() {
56739 DOM.bip32path.val("m/0'/0'");
56740 DOM.hardenedAddresses.prop('checked', true);
56741 },
56742 },
56743 {
56744 name: "blockchain.info",
56745 onSelect: function() {
56746 DOM.bip32path.val("m/44'/0'/0'");
56747 DOM.hardenedAddresses.prop('checked', false);
56748 },
56749 },
56750 {
56751 name: "MultiBit HD",
56752 onSelect: function() {
56753 DOM.bip32path.val("m/0'/0");
56754 DOM.hardenedAddresses.prop('checked', false);
56755 },
56756 }
56757 ]
56758
ebd8d4e8
IC
56759 init();
56760
56761})();
dc55c6b0 56762</script>
ebd8d4e8
IC
56763 </body>
56764</html>