]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
BIP32 client select compiled into standalone
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
1 <!DOCTYPE html>
2 <html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
6 <style>/*!
7 * Bootstrap v3.2.0 (http://getbootstrap.com)
8 * Copyright 2011-2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
10 *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}</style>
11 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
12 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
13 <meta content="bitcoin mnemonic converter" name="description" />
14 <meta content="Ian Coleman" name="author" />
15
16 <style>
17 body {
18 padding-bottom: 32px;
19 }
20 .form-control[readonly] {
21 cursor: text;
22 }
23 .feedback-container {
24 position: fixed;
25 top: 0;
26 width: 100%;
27 text-align: center;
28 z-index: 4;
29 }
30 .feedback {
31 display: table;
32 padding: 0.5em 1em;
33 background-color: orange;
34 margin: 0 auto;
35 font-size: 2em;
36 color: #444;
37 border: 2px solid #555;
38 border-top: 0;
39 border-bottom-left-radius: 20px 20px;
40 border-bottom-right-radius: 20px 20px;
41 }
42 .no-border {
43 border: 0;
44 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
45 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 }
47 .phrase {
48 word-break: keep-all;
49 }
50 .generate-container .strength {
51 /* override mobile width from bootstrap */
52 width: auto!important;
53 display: inline-block;
54 }
55 .languages a {
56 padding-left: 10px;
57 }
58 .languages a:nth-of-type(1) {
59 margin-left: -12px;
60 padding-left: 0;
61 }
62 .monospace {
63 font-family: monospace;
64 }
65 .entropy-container .filtered,
66 .entropy-container .binary {
67 word-wrap: break-word;
68 }
69 .entropy-container li {
70 padding-bottom: 5px;
71 }
72 .card-suit {
73 font-size: 19px;
74 line-height: 0;
75 }
76 .card-suit.club {
77 color: #009F00;
78 }
79 .card-suit.diamond {
80 color: #3D5DC4;
81 }
82 .card-suit.heart {
83 color: #F00;
84 }
85 .card-suit.spade {
86 color: #000;
87 }
88 .qr-container {
89 position: fixed;
90 top: 0;
91 right: 0;
92 text-align: center;
93 background-color: #FFF;
94 border: 1px solid #CCC;
95 }
96 .qr-image {
97 margin: 5px;
98 }
99 .qr-hint,
100 .qr-warning {
101 padding: 2px;
102 max-width: 150px;
103 }
104 .more-info {
105 cursor: help;
106 border-bottom: 1px dashed #000;
107 text-decoration: none;
108 }
109 </style>
110 </head>
111 <body>
112 <div class="container">
113
114 <h1 class="text-center">Mnemonic Code Converter</h1>
115 <hr>
116 <div class="row">
117 <div class="col-md-12">
118 <h2>Mnemonic</h2>
119 <form class="form-horizontal" role="form">
120 <div class="form-group">
121 <div class="col-sm-2"></div>
122 <div class="col-sm-10">
123 <p data-translate>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>
124 <p data-translate-html>
125 For more info see the
126 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
127 </p>
128 </div>
129 </div>
130 <div class="form-group generate-container">
131 <label class="col-sm-2 control-label"></label>
132 <div class="col-sm-10">
133 <div class="form-inline">
134 <div class="input-group-inline">
135 <span data-translate>Generate a random mnemonic, or enter your own below</span>:
136 <button class="btn generate">Generate</button>
137 <select id="strength" class="strength form-control">
138 <option value="3">3</option>
139 <option value="6">6</option>
140 <option value="9">9</option>
141 <option value="12">12</option>
142 <option value="15" selected>15</option>
143 <option value="18">18</option>
144 <option value="21">21</option>
145 <option value="24">24</option>
146 </select>
147 <span data-translate>words</span>
148 </div>
149 </div>
150 </div>
151 </div>
152 <div class="entropy-container hidden">
153 <div class="form-group text-danger">
154 <label class="col-sm-2 control-label" data-translate>Warning</label>
155 <div class="col-sm-10 form-control-static">
156 <span data-translate>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
157 <a href="#entropy-notes" data-translate>Read more</a>
158 </div>
159 </div>
160 <div class="form-group">
161 <label for="entropy" class="col-sm-2 control-label" data-translate>Entropy</label>
162 <div class="col-sm-7">
163 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards" data-translate-placeholder></textarea>
164 <div class="row">
165 <label class="col-sm-3 control-label" data-translate>Strength</label>
166 <div class="strength col-sm-3 form-control-static"></div>
167 <label class="col-sm-3 control-label" data-translate>Event Count</label>
168 <div class="event-count col-sm-3 form-control-static"></div>
169 </div>
170 <div class="row">
171 <label class="col-sm-3 control-label" data-translate>Entropy Type</label>
172 <div class="type col-sm-3 form-control-static"></div>
173 <label class="col-sm-3 control-label" data-translate>Bits Per Event</label>
174 <div class="bits-per-event col-sm-3 form-control-static"></div>
175 </div>
176 <div class="row">
177 <label class="col-sm-3 control-label" data-translate>Word Count</label>
178 <div class="word-count col-sm-3 form-control-static"></div>
179 <label class="col-sm-3 control-label" data-translate><span class="more-info" data-translate-title title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
180 <div class="bits col-sm-3 form-control-static"></div>
181 </div>
182 <label class="col-sm-3 control-label" data-translate>Filtered Entropy</label>
183 <div class="filtered col-sm-9 form-control-static"></div>
184 <label class="col-sm-3 control-label" data-translate>Raw Binary</label>
185 <div class="binary col-sm-9 form-control-static"></div>
186 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label>
187 <div class="col-sm-9">
188 <select class="mnemonic-length form-control">
189 <option value="raw" selected data-translate>Use Raw Entropy (3 words per 32 bits)</option>
190 <option value="12">12 <span data-translate>Words</span></option>
191 <option value="15">15 <span data-translate>Words</option>
192 <option value="18">18 <span data-translate>Words</span></option>
193 <option value="21">21 <span data-translate>Words</span></option>
194 <option value="24">24 <span data-translate>Words</span></option>
195 </select>
196 </div>
197 </div>
198 <div class="col-sm-3">
199 <p data-translate>Valid entropy values include:</p>
200 <ul>
201 <li><strong data-translate>Binary</strong> [0-1]<br>101010011</li>
202 <li><strong data-translate>Base 6</strong> [0-5]<br>123434014</li>
203 <li><strong data-translate>Dice</strong> [1-6]<br>62535634</li>
204 <li><strong data-translate>Base 10</strong> [0-9]<br>90834528</li>
205 <li><strong data-translate>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
206 <li><strong data-translate>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
207 </ul>
208 </div>
209 </div>
210 </div>
211 <div class="form-group">
212 <div class="col-sm-2"></div>
213 <div class="col-sm-10 checkbox">
214 <label>
215 <input type="checkbox" class="use-entropy">
216 <span data-translate>Supply my own source of entropy</span>
217 </label>
218 </div>
219 </div>
220 <div class="form-group">
221 <label class="col-sm-2 control-label" data-translate>Mnemonic Language</label>
222 <div class="col-sm-10 languages">
223 <div class="form-control no-border">
224 <a href="#english">English</a>
225 <a href="#japanese" title="Japanese">日本語</a>
226 <a href="#spanish" title="Spanish">Español</a>
227 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
228 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
229 <a href="#french" title="French">Français</a>
230 <a href="#italian" title="Italian">Italiano</a>
231 </div>
232 </div>
233 </div>
234 <div class="form-group">
235 <label for="phrase" class="col-sm-2 control-label" data-translate>BIP39 Mnemonic</label>
236 <div class="col-sm-10">
237 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
238 </div>
239 </div>
240 <div class="form-group">
241 <label for="passphrase" class="col-sm-2 control-label" data-translate>BIP39 Passphrase (optional)</label>
242 <div class="col-sm-10">
243 <textarea id="passphrase" class="passphrase form-control"></textarea>
244 </div>
245 </div>
246 <div class="form-group">
247 <label for="seed" class="col-sm-2 control-label" data-translate>BIP39 Seed</label>
248 <div class="col-sm-10">
249 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
250 </div>
251 </div>
252 <div class="form-group">
253 <label for="network-phrase" class="col-sm-2 control-label" data-translate>Coin</label>
254 <div class="col-sm-10">
255 <select id="network-phrase" class="network form-control">
256 <!-- populated by javascript -->
257 </select>
258 </div>
259 </div>
260 <div class="form-group">
261 <label for="root-key" class="col-sm-2 control-label" data-translate>BIP32 Root Key</label>
262 <div class="col-sm-10">
263 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
264 </div>
265 </div>
266 </form>
267 </div>
268 </div>
269
270 <hr>
271
272 <div class="row">
273 <div class="col-md-12">
274 <h2>Derivation Path</h2>
275 <ul class="derivation-type nav nav-tabs" role="tablist">
276 <li id="bip44-tab" class="active">
277 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
278 </li>
279 <li id="bip32-tab">
280 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
281 </li>
282 </ul>
283 <div class="derivation-type tab-content">
284 <div id="bip44" class="tab-pane active">
285 <form class="form-horizontal" role="form">
286 <br>
287 <div class="col-sm-2"></div>
288 <div class="col-sm-10">
289 <p data-translate-html>
290 For more info see the
291 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
292 </p>
293 </div>
294 <div class="form-group">
295 <label for="purpose" class="col-sm-2 control-label">
296 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank" data-translate>Purpose</a>
297 </label>
298 <div class="col-sm-10">
299 <input id="purpose" type="text" class="purpose form-control" value="44">
300 </div>
301 </div>
302 <div class="form-group">
303 <label for="coin" class="col-sm-2 control-label">
304 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank" data-translate>Coin</a>
305 </label>
306 <div class="col-sm-10">
307 <input id="coin" type="text" class="coin form-control" value="0">
308 </div>
309 </div>
310 <div class="form-group">
311 <label for="account" class="col-sm-2 control-label">
312 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank" data-translate>Account</a>
313 </label>
314 <div class="col-sm-10">
315 <input id="account" type="text" class="account form-control" value="0">
316 </div>
317 </div>
318 <div class="form-group">
319 <label for="change" class="col-sm-2 control-label">
320 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank" data-translate>External / Internal</a>
321 </label>
322 <div class="col-sm-10">
323 <input id="change" type="text" class="change form-control" value="0">
324 </div>
325 </div>
326 <div class="form-group">
327 <label class="col-sm-2 control-label">
328 </label>
329 <div class="col-sm-10">
330 <p data-translate>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
331 </div>
332 </div>
333 <div class="form-group">
334 <label for="account-xprv" class="col-sm-2 control-label">
335 <span data-translate>Account Extended Private Key</span>
336 </label>
337 <div class="col-sm-10">
338 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
339 </div>
340 </div>
341 <div class="form-group">
342 <label for="account-xpub" class="col-sm-2 control-label">
343 <span data-translate>Account Extended Public Key</span>
344 </label>
345 <div class="col-sm-10">
346 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
347 </div>
348 </div>
349 <div class="form-group">
350 <label class="col-sm-2 control-label">
351 </label>
352 <div class="col-sm-10">
353 <p data-translate>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
354 </div>
355 </div>
356 <div class="form-group">
357 <label for="bip44-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
358 <div class="col-sm-10">
359 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
360 </div>
361 </div>
362 </form>
363 </div>
364 <div id="bip32" class="tab-pane">
365 <form class="form-horizontal" role="form">
366 <br>
367 <div class="col-sm-2"></div>
368 <div class="col-sm-10">
369 <p data-translate>
370 For more info see the
371 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
372 </p>
373 </div>
374 <div class="form-group">
375 <label for="bip32-client" class="col-sm-2 control-label" data-translate>Client</label>
376 <div class="col-sm-10">
377 <select id="bip32-client" class="client form-control">
378 <option value="custom">Custom derivation path</option>
379 <!-- populated by javascript -->
380 </select>
381 </div>
382 </div>
383 <div class="form-group">
384 <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
385 <div class="col-sm-10">
386 <input id="bip32-path" type="text" class="path form-control" value="m/0">
387 </div>
388 </div>
389 <div class="form-group">
390 <div class="col-sm-2"></div>
391 <label class="col-sm-10">
392 <input class="hardened-addresses" type="checkbox">
393 <span data-translate>Use hardened addresses</span>
394 </label>
395 </div>
396 <div class="form-group">
397 <label for="core-path" class="col-sm-2 control-label" data-translate>Bitcoin Core</label>
398 <div class="col-sm-10">
399 <p class="form-control no-border" data-translate-html>
400 Use path <code>m/0'/0'</code> with hardened addresses.
401 </p>
402 <p class="form-control no-border" data-translate-html>
403 For more info see the
404 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
405 </p>
406 </div>
407 </div>
408 <div class="form-group">
409 <label for="core-path" class="col-sm-2 control-label" data-translate>Multibit</label>
410 <div class="col-sm-10">
411 <p class="form-control no-border">
412 <span data-translate-html>Use path <code>m/0'/0</code>.</span>
413 </p>
414 <p class="form-control no-border">
415 <span data-translate>For more info see</span>
416 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
417 </p>
418 </div>
419 </div>
420 <div class="form-group">
421 <label class="col-sm-2 control-label" data-translate>Block Explorers</label>
422 <div class="col-sm-10">
423 <p class="form-control no-border">
424 <span data-translate-html>Use path <code>m/44'/0'/0'</code>.</span>
425 <span data-translate-html>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
426 </p>
427 <p class="form-control no-border">
428 <span data-translate>Can be used with</span>:
429 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
430 </p>
431 </div>
432 </div>
433 </form>
434 </div>
435 </div>
436 <form class="form-horizontal" role="form">
437 <div class="form-group">
438 <label for="extended-priv-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Private Key</label>
439 <div class="col-sm-10">
440 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
441 </div>
442 </div>
443 <div class="form-group">
444 <label for="extended-pub-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Public Key</label>
445 <div class="col-sm-10">
446 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
447 </div>
448 </div>
449 </form>
450 </div>
451 </div>
452
453 <hr>
454
455 <div class="row">
456 <div class="col-md-12">
457 <h2>Derived Addresses</h2>
458 <p data-translate>Note these addreses are derived from the BIP32 Extended Key</p>
459 <table class="table table-striped">
460 <thead>
461 <th>
462 <div class="input-group">
463 <span data-translate>Path</span>&nbsp;&nbsp;
464 <button class="index-toggle" data-translate>Toggle</button>
465 </div>
466 </th>
467 <th>
468 <div class="input-group">
469 <span data-translate>Address</span>&nbsp;&nbsp;
470 <button class="address-toggle" data-translate>Toggle</button>
471 </div>
472 </th>
473 <th>
474 <div class="input-group">
475 <span data-translate>Public Key</span>&nbsp;&nbsp;
476 <button class="public-key-toggle" data-translate>Toggle</button>
477 </div>
478 </th>
479 <th>
480 <div class="input-group">
481 <span data-translate>Private Key</span>&nbsp;&nbsp;
482 <button class="private-key-toggle" data-translate>Toggle</button>
483 </div>
484 </th>
485 </thead>
486 <tbody class="addresses monospace">
487 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
488 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
489 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
490 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
491 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
492 </tbody>
493 </table>
494 </div>
495 </div>
496 <span data-translate>Show more rows</span>:
497 <input type="number" class="rows-to-add" value="20">
498 <button class="more" data-translate>Show</button>
499
500 <hr>
501
502 <div class="row">
503 <div class="col-md-12">
504 <h2 data-translate>More info</h2>
505 <h3>BIP39 <span class="small" data-translate>Mnemonic code for generating deterministic keys</span></h3>
506 <p data-translate-html>
507 Read more at the
508 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
509 </p>
510 <h3>BIP32 <span class="small" data-translate>Hierarchical Deterministic Wallets</span></h3>
511 <p data-translate-html>
512 Read more at the
513 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
514 </p>
515 <p data-translate-html>
516 See the demo at
517 <a href="http://bip32.org/" target="_blank">bip32.org</a>
518 </p>
519 <h3>BIP44 <span class="small" data-translate>Multi-Account Hierarchy for Deterministic Wallets</span></h3>
520 <p data-translate-html>
521 Read more at the
522 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
523 </p>
524 <h3 data-translate>Private Keys</h3>
525 <p>
526 <span data-translate-html>
527 Use private keys at
528 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
529 </span>
530 <span data-translate>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
531 </p>
532 <h3 id="entropy-notes" data-translate>Entropy</h3>
533 <p>
534 <span data-translate-html>
535 Entropy values must be sourced from a
536 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
537 </span>
538 <span data-translate>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
539 <span data-translate-html>
540 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address,
541 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
542 random enough for the needs of this tool.
543 </span>
544 </p>
545 <p>
546 <strong><span data-translate>Do not store entropy.</span></strong>
547 </p>
548 <p>
549 <span data-translate>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
550 <span data-translate>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
551 <span data-translate-html><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
552 </p>
553 <p>
554 <span data-translate-html>
555 The random mnemonic generator on this page uses a
556 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
557 </span>
558 <span data-translate>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
559 <span data-translate>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
560 <span data-translate>In that case you might choose to use your own source of entropy.</span>
561 </p>
562 <p>
563 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank" data-translate>You are not a good source of entropy.</a>
564 </p>
565 <h3 data-translate>License</h3>
566 <p>
567 <span data-translate-html>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
568 </span>
569 </p>
570 <p data-translate>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>
571 </div>
572 </div>
573
574 <hr>
575
576 <div class="row">
577 <div class="col-md-12">
578
579 <h2 data-translate>Offline Usage</h2>
580
581 <p data-translate>
582 You can use this tool without having to be online.
583 </p>
584 <p data-translate>
585 In your browser, select file save-as, and save this page
586 as a file.
587 </p>
588 <p data-translate>
589 Double-click that file to open it in a browser
590 on any offline computer.
591 </p>
592 <p>
593 <span data-translate>Alternatively, download the file from the repository</span>
594 -
595 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
596 </p>
597
598 </div>
599 </div>
600
601 <hr>
602
603 <div class="row">
604 <div class="col-md-12">
605
606 <h2 data-translate>This project is 100% open-source code</h2>
607
608 <p>
609 <span data-translate>Get the source code from the repository</span>
610 -
611 <a href="https://github.com/iancoleman/bip39" target="_blank">
612 https://github.com/iancoleman/bip39
613 </a>
614 </p>
615
616 <h3 data-translate>Libraries</h3>
617
618 <p>
619 <span>BitcoinJS - </span>
620 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
621 https://github.com/bitcoinjs/bitcoinjs-lib
622 </a>
623 </p>
624
625 <p>
626 <span>jsBIP39 - </span>
627 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
628 https://github.com/iancoleman/jsbip39
629 </a>
630 </p>
631
632 <p>
633 <span>sjcl - </span>
634 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
635 https://github.com/bitwiseshiftleft/sjcl
636 </a>
637 </p>
638
639 <p>
640 <span>jQuery - </span>
641 <a href="https://jquery.com/" target="_blank">
642 https://jquery.com/
643 </a>
644 </p>
645
646 <p>
647 <span>Twitter Bootstrap - </span>
648 <a href="http://getbootstrap.com/" target="_blank">
649 http://getbootstrap.com/
650 </a>
651 </p>
652
653 </div>
654 </div>
655
656 </div>
657
658 <div class="qr-container hidden">
659 <div class="qr-hint bg-primary hidden" data-translate>Click field to hide QR</div>
660 <div class="qr-hint bg-primary" data-translate>Click field to show QR</div>
661 <div class="qr-hider hidden">
662 <div class="qr-image"></div>
663 <div class="qr-warning bg-primary" data-translate>Caution: Scanner may keep history</div>
664 </div>
665 </div>
666
667 <div class="feedback-container">
668 <div class="feedback">Loading...</div>
669 </div>
670
671 <script type="text/template" id="address-row-template">
672 <tr>
673 <td class="index"><span></span></td>
674 <td class="address"><span data-show-qr></span></td>
675 <td class="pubkey"><span data-show-qr></span></td>
676 <td class="privkey"><span data-show-qr></span></td>
677 </tr>
678 </script>
679 <script>// From
680 // https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
681 // Required for ethereumjs-utils.js when run in phantomjs-2.1.1
682 // but is not required in any modern browsers.
683 // For more information, see
684 // https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
685
686 //----------------------------------------------------------------------
687 //
688 // ECMAScript 2015 Polyfills
689 //
690 //----------------------------------------------------------------------
691
692 (function (global) {
693 "use strict";
694
695 // Set this to always override native implementations, for testing
696 // the polyfill in browsers with partial/full ES2015 support.
697 var OVERRIDE_NATIVE_FOR_TESTING = false;
698
699 var undefined = (void 0); // Paranoia
700
701 // Helpers
702
703 function strict(o) {
704 return o === global ? undefined : o;
705 }
706
707 function hook(o, p, f) {
708 var op = o[p];
709 console.assert(typeof op === 'function', 'Hooking a non-function');
710 o[p] = function() {
711 var o = strict(this);
712 var r = f.apply(o, arguments);
713 return r !== undefined ? r : op.apply(o, arguments);
714 };
715 }
716
717 function isSymbol(s) {
718 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
719 }
720
721 function getPropertyDescriptor(target, name) {
722 var desc = Object.getOwnPropertyDescriptor(target, name);
723 var proto = Object.getPrototypeOf(target);
724 while (!desc && proto) {
725 desc = Object.getOwnPropertyDescriptor(proto, name);
726 proto = Object.getPrototypeOf(proto);
727 }
728 return desc;
729 }
730
731 var enqueue = (function(nativePromise, nativeSetImmediate) {
732 if (nativePromise)
733 return function(job) { nativePromise.resolve().then(function() { job(); }); };
734 if (nativeSetImmediate)
735 return function(job) { nativeSetImmediate(job); };
736 return function(job) { setTimeout(job, 0); };
737 }(global['Promise'], global['setImmediate']));
738
739 function define(o, p, v, override) {
740 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
741 return;
742
743 if (typeof v === 'function') {
744 // Sanity check that functions are appropriately named (where possible)
745 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
746 Object.defineProperty(o, p, {
747 value: v,
748 configurable: true,
749 enumerable: false,
750 writable: true
751 });
752 } else {
753 Object.defineProperty(o, p, {
754 value: v,
755 configurable: false,
756 enumerable: false,
757 writable: false
758 });
759 }
760 }
761
762 function set_internal(o, p, v) {
763 Object.defineProperty(o, p, {
764 value: v,
765 configurable: false,
766 enumerable: false,
767 writable: true
768 });
769 }
770
771 // Snapshot intrinsic functions
772 var $isNaN = global.isNaN,
773 $parseInt = global.parseInt,
774 $parseFloat = global.parseFloat;
775
776 var E = Math.E,
777 LOG10E = Math.LOG10E,
778 LOG2E = Math.LOG2E,
779 abs = Math.abs,
780 ceil = Math.ceil,
781 exp = Math.exp,
782 floor = Math.floor,
783 log = Math.log,
784 max = Math.max,
785 min = Math.min,
786 pow = Math.pow,
787 random = Math.random,
788 sqrt = Math.sqrt;
789
790 var orig_match = String.prototype.match,
791 orig_replace = String.prototype.replace,
792 orig_search = String.prototype.search,
793 orig_split = String.prototype.split;
794
795 // These are used for implementing the polyfills, but not exported.
796
797 // Inspired by https://gist.github.com/1638059
798 /** @constructor */
799 function EphemeronTable() {
800 var secretKey = ObjectCreate(null);
801
802 function conceal(o) {
803 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
804 Object.defineProperty(o, 'valueOf', {
805 value: (function(secretKey) {
806 return function (k) {
807 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
808 };
809 }(secretKey)),
810 configurable: true,
811 writeable: true,
812 enumerable: false
813 });
814 return secrets;
815 }
816
817 function reveal(o) {
818 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
819 return v === o ? null : v;
820 }
821
822 return {
823 clear: function() {
824 secretKey = ObjectCreate(null);
825 },
826 remove: function(key) {
827 var secrets = reveal(key);
828 if (secrets && HasOwnProperty(secrets, 'value')) {
829 delete secrets.value;
830 return true;
831 }
832 return false;
833 },
834 get: function(key, defaultValue) {
835 var secrets = reveal(key);
836 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
837 },
838 has: function(key) {
839 var secrets = reveal(key);
840 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
841 },
842 set: function(key, value) {
843 var secrets = reveal(key) || conceal(key);
844 secrets.value = value;
845 }
846 };
847 }
848
849 var empty = Object.create(null);
850
851 //----------------------------------------------------------------------
852 //
853 // ECMAScript 2015
854 // http://www.ecma-international.org/ecma-262/6.0/
855 //
856 //----------------------------------------------------------------------
857
858 // ---------------------------------------
859 // 19.4 Symbol Objects
860 // ---------------------------------------
861
862 // NOTE: Symbols are defined here - out of spec order - since we need the
863 // properties and prototype to be populated for other polyfills.
864
865 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
866
867 var symbolForKey;
868 (function() {
869 var secret = Object.create(null);
870 var symbolMap = {};
871 symbolForKey = function(k) {
872 return symbolMap[k];
873 };
874
875 var GlobalSymbolRegistry = [];
876
877 function unique(bits) {
878 return Array(bits + 1).join('x').replace(/x/g, function() {
879 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
880 });
881 }
882
883 // 19.4.1 The Symbol Constructor
884 // 19.4.1.1 Symbol ( description=undefined )
885 function Symbol(description) {
886 if (!(this instanceof Symbol)) return new Symbol(description, secret);
887 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
888
889 var descString = description === undefined ? undefined : String(description);
890
891 set_internal(this, '[[SymbolData]]', unique(128));
892 set_internal(this, '[[Description]]', descString);
893
894 symbolMap[this] = this;
895 return this;
896 }
897
898 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
899 global.Symbol = Symbol;
900
901 // 19.4.2 Properties of the Symbol Constructor
902
903 // 19.4.2.1 Symbol.for (key)
904 define(Symbol, 'for', function for_(key) {
905 var stringKey = String(key);
906 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
907 var e = GlobalSymbolRegistry[i];
908 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
909 }
910 var newSymbol = Symbol(key);
911 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
912 return newSymbol;
913 });
914
915 // 19.4.2.2 Symbol.hasInstance
916 // 19.4.2.3 Symbol.isConcatSpreadable
917
918 // 19.4.2.4 Symbol.iterator
919 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
920
921 // 19.4.2.5 Symbol.keyFor (sym)
922 define(Symbol, 'keyFor', function keyFor(sym) {
923 if (!(sym instanceof Symbol)) throw TypeError();
924 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
925 var e = GlobalSymbolRegistry[i];
926 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
927 }
928 return undefined;
929 });
930
931 // 19.4.2.6 Symbol.match
932 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
933
934 // 19.4.2.7 Symbol.prototype
935
936 // 19.4.2.8 Symbol.replace
937 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
938
939 // 19.4.2.9 Symbol.search
940 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
941
942 // 19.4.2.10 Symbol.species
943
944 // 19.4.2.11 Symbol.search
945 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
946
947 // 19.4.2.12 Symbol.toPrimitive
948
949 // 19.4.2.13 Symbol.toStringTag
950 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
951
952 // 19.4.2.14 Symbol.unscopables
953
954 // 19.4.3 Properties of the Symbol Prototype Object
955 // 19.4.3.1 Symbol.prototype.constructor
956
957 // 19.4.3.2 Symbol.prototype.toString ( )
958 Object.defineProperty(Symbol.prototype, 'toString', {
959 value: function toString() {
960 var s = strict(this);
961 var desc = s['[[Description]]'];
962 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
963 },
964 configurable: true, writeable: true, enumerable: false });
965
966 // 19.4.3.3 Symbol.prototype.valueOf ( )
967 Object.defineProperty(Symbol.prototype, 'valueOf', {
968 value: function valueOf() {
969 // To prevent automatic string conversion:
970 throw TypeError();
971
972 // Spec has approximately the following:
973 //var s = strict(this);
974 //if (Type(s) === 'symbol') return s;
975 //if (Type(s) !== 'object') throw TypeError();
976 //if (!('[[SymbolData]]' in s)) throw TypeError();
977 //return s['[[SymbolData]]'];
978 },
979 configurable: true, writeable: true, enumerable: false });
980
981 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
982 // (Done later to polyfill partial implementations)
983
984 // 19.4.4 Properties of Symbol Instances
985 }());
986
987 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
988
989 // Defined here so that other prototypes can reference it
990 // 25.1.2 The %IteratorPrototype% Object
991 var $IteratorPrototype$ = {};
992
993 //----------------------------------------
994 // 6 ECMAScript Data Types and Values
995 //----------------------------------------
996
997 // 6.1 ECMAScript Language Types
998
999 // "Type(x)" is used as shorthand for "the type of x"...
1000 function Type(v) {
1001 switch (typeof v) {
1002 case 'undefined': return 'undefined';
1003 case 'boolean': return 'boolean';
1004 case 'number': return 'number';
1005 case 'string': return 'string';
1006 case 'symbol': return 'symbol';
1007 default:
1008 if (v === null) return 'null';
1009 if (v instanceof global.Symbol) return 'symbol';
1010 return 'object';
1011 }
1012 }
1013
1014 // 6.1.5.1 Well-Known Symbols
1015 var $$iterator = global.Symbol.iterator,
1016 $$match = global.Symbol.match,
1017 $$replace = global.Symbol.replace,
1018 $$search = global.Symbol.search,
1019 $$split = global.Symbol.split,
1020 $$toStringTag = global.Symbol.toStringTag;
1021
1022 //----------------------------------------
1023 // 7 Abstract Operations
1024 //----------------------------------------
1025
1026 //----------------------------------------
1027 // 7.1 Type Conversion
1028 //----------------------------------------
1029
1030 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1031 // just use valueOf()
1032
1033 // 7.1.2 ToBoolean ( argument )
1034 // just use Boolean()
1035
1036 // 7.1.3 ToNumber ( argument )
1037 // just use Number()
1038
1039 // 7.1.4 ToInteger ( argument )
1040 function ToInteger(n) {
1041 n = Number(n);
1042 if ($isNaN(n)) return 0;
1043 if (n === 0 || n === Infinity || n === -Infinity) return n;
1044 return ((n < 0) ? -1 : 1) * floor(abs(n));
1045 }
1046
1047 // 7.1.5 ToInt32 ( argument )
1048 function ToInt32(v) { return v >> 0; }
1049
1050 // 7.1.6 ToUint32 ( argument )
1051 function ToUint32(v) { return v >>> 0; }
1052
1053 // 7.1.7 ToInt16 ( argument )
1054 function ToInt16(v) { return (v << 16) >> 16; }
1055
1056 // 7.1.8 ToUint16 ( argument )
1057 function ToUint16(v) { return v & 0xFFFF; }
1058
1059 // 7.1.9 ToInt8 ( argument )
1060 function ToInt8(v) { return (v << 24) >> 24; }
1061
1062 // 7.1.10 ToUint8 ( argument )
1063 function ToUint8(v) { return v & 0xFF; }
1064
1065 // 7.1.11 ToUint8Clamp ( argument )
1066 function ToUint8Clamp(argument) {
1067 var number = Number(argument);
1068 if ($isNaN(number)) return 0;
1069 if (number <= 0) return 0;
1070 if (number >= 255) return 255;
1071 var f = floor(number);
1072 if ((f + 0.5) < number) return f + 1;
1073 if (number < (f + 0.5)) return f;
1074 if (f % 2) return f + 1;
1075 return f;
1076 }
1077
1078 // 7.1.12 ToString ( argument )
1079 // just use String()
1080
1081 // 7.1.13 ToObject ( argument )
1082 function ToObject(v) {
1083 if (v === null || v === undefined) throw TypeError();
1084 return Object(v);
1085 }
1086
1087 // 7.1.14 ToPropertyKey ( argument )
1088 function ToPropertyKey(v) {
1089 return String(v);
1090 }
1091
1092 // 7.1.15 ToLength ( argument )
1093 function ToLength(v) {
1094 var len = ToInteger(v);
1095 if (len <= 0) return 0;
1096 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1097 return min(len, 0x20000000000000 - 1); // 2^53-1
1098 }
1099
1100 // 7.1.16 CanonicalNumericIndexString ( argument )
1101
1102 //----------------------------------------
1103 // 7.2 Testing and Comparison Operations
1104 //----------------------------------------
1105
1106 // 7.2.1 RequireObjectCoercible ( argument )
1107 // 7.2.2 IsArray ( argument )
1108
1109 // 7.2.3 IsCallable ( argument )
1110 function IsCallable(o) { return typeof o === 'function'; }
1111
1112 // 7.2.4 IsConstructor ( argument )
1113 function IsConstructor(o) {
1114 // Hacks for Safari 7 TypedArray XXXConstructor objects
1115 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1116 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1117 // TODO: Can this be improved on?
1118 return typeof o === 'function';
1119 }
1120
1121 // 7.2.5 IsExtensible (O)
1122 // 7.2.6 IsInteger ( argument )
1123
1124 // 7.2.7 IsPropertyKey ( argument )
1125 function IsPropertyKey(argument) {
1126 if (Type(argument) === 'string') return true;
1127 if (Type(argument) === 'symbol') return true;
1128 return false;
1129 }
1130
1131 // 7.2.8 IsRegExp ( argument )
1132 // 7.2.5 IsConstructor ( argument )
1133
1134 // 7.2.9 SameValue(x, y)
1135 function SameValue(x, y) {
1136 if (typeof x !== typeof y) return false;
1137 switch (typeof x) {
1138 case 'undefined':
1139 return true;
1140 case 'number':
1141 if (x !== x && y !== y) return true;
1142 if (x === 0 && y === 0) return 1/x === 1/y;
1143 return x === y;
1144 case 'boolean':
1145 case 'string':
1146 case 'object':
1147 default:
1148 return x === y;
1149 }
1150 }
1151
1152 // 7.2.10 SameValueZero(x, y)
1153 function SameValueZero(x, y) {
1154 if (typeof x !== typeof y) return false;
1155 switch (typeof x) {
1156 case 'undefined':
1157 return true;
1158 case 'number':
1159 if (x !== x && y !== y) return true;
1160 return x === y;
1161 case 'boolean':
1162 case 'string':
1163 case 'object':
1164 default:
1165 return x === y;
1166 }
1167 }
1168
1169 //----------------------------------------
1170 // 7.3 Operations on Objects
1171 //----------------------------------------
1172
1173 // 7.3.1 Get (O, P)
1174 // - just use o.p or o[p]
1175
1176 // 7.3.2 GetV (V, P)
1177 function GetV(v, p) {
1178 var o = ToObject(v);
1179 return o[p];
1180 }
1181
1182 // 7.3.3 Set (O, P, V, Throw)
1183 // - just use o.p = v or o[p] = v
1184
1185
1186
1187
1188 // 7.3.9 GetMethod (O, P)
1189 function GetMethod(o, p) {
1190 var func = GetV(o, p);
1191 if (func === undefined || func === null) return undefined;
1192 if (!IsCallable(func)) throw TypeError();
1193 return func;
1194 }
1195
1196 // 7.3.10 HasProperty (O, P)
1197 function HasProperty(o, p) {
1198 while (o) {
1199 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1200 if (Type(o) !== 'object') return false;
1201 o = Object.getPrototypeOf(o);
1202 }
1203 return false;
1204 }
1205
1206 // 7.3.11 HasOwnProperty (O, P)
1207 function HasOwnProperty(o, p) {
1208 return Object.prototype.hasOwnProperty.call(o, p);
1209 }
1210
1211 //----------------------------------------
1212 // 7.4 Operations on Iterator Objects
1213 //----------------------------------------
1214
1215 // 7.4.1 GetIterator ( obj, method )
1216 function GetIterator(obj, method) {
1217 if (arguments.length < 2)
1218 method = GetMethod(obj, $$iterator);
1219 var iterator = method.call(obj);
1220 if (Type(iterator) !== 'object') throw TypeError();
1221 return iterator;
1222 }
1223
1224 // 7.4.2 IteratorNext ( iterator, value )
1225 function IteratorNext(iterator, value) {
1226 if (arguments.length < 2)
1227 var result = iterator.next();
1228 else
1229 result = iterator.next(value);
1230 if (Type(result) !== 'object') throw TypeError();
1231 return result;
1232 }
1233
1234 // 7.4.3 IteratorComplete ( iterResult )
1235 function IteratorComplete(iterResult) {
1236 console.assert(Type(iterResult) === 'object');
1237 return Boolean(iterResult.done);
1238 }
1239
1240 // 7.4.4 IteratorValue ( iterResult )
1241 function IteratorValue(iterResult) {
1242 console.assert(Type(iterResult) === 'object');
1243 return iterResult.value;
1244 }
1245
1246 // 7.4.5 IteratorStep ( iterator )
1247 function IteratorStep( iterator, value ) {
1248 var result = IteratorNext(iterator, value);
1249 var done = result['done'];
1250 if (Boolean(done) === true) return false;
1251 return result;
1252 }
1253
1254 // 7.4.6 IteratorClose( iterator, completion )
1255 function IteratorClose( iterator, completion ) {
1256 console.assert(Type(iterator) === 'object');
1257 var _return = GetMethod(iterator, 'return');
1258 if (_return === undefined) return completion;
1259 try {
1260 var innerResult = _return[iterator]();
1261 } catch (result) {
1262 // TODO: If completion.[[type]] is throw, return completion
1263 return result;
1264 }
1265 if (Type(innerResult) !== 'object') throw TypeError();
1266 return completion;
1267 }
1268
1269 // 7.4.7 CreateIterResultObject (value, done)
1270 function CreateIterResultObject(value, done) {
1271 console.assert(Type(done) === 'boolean');
1272 var obj = {};
1273 obj["value"] = value;
1274 obj["done"] = done;
1275 return obj;
1276 }
1277
1278 // 7.4.8 CreateListIterator (list)
1279 // 7.4.8.1 ListIterator next( )
1280 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1281 // 7.4.9.1 CompoundIterator next( )
1282
1283 //----------------------------------------
1284 // 8 Executable Code and Execution Contexts
1285 //----------------------------------------
1286
1287 //----------------------------------------
1288 // 8.4 Jobs and Job Queues
1289 //----------------------------------------
1290
1291 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1292 function EnqueueJob(queueName, job, args) {
1293 var fn = function() { job.apply(undefined, args); };
1294 enqueue(fn);
1295 }
1296
1297 // 8.4.2 NextJob result
1298 function NextJob(result) {
1299 // no-op
1300 }
1301
1302 //----------------------------------------
1303 // 9 Ordinary and Exotic Objects Behaviors
1304 //----------------------------------------
1305
1306 // 9.1.11 [[Enumerate]] ()
1307 function Enumerate(obj) {
1308 var e = [];
1309 if (Object(obj) !== obj) return e;
1310 var visited = new Set;
1311 while (obj !== null) {
1312 Object.getOwnPropertyNames(obj).forEach(function(name) {
1313 if (!visited.has(name)) {
1314 var desc = Object.getOwnPropertyDescriptor(obj, name);
1315 if (desc) {
1316 visited.add(name);
1317 if (desc.enumerable) e.push(name);
1318 }
1319 }
1320 });
1321 obj = Object.getPrototypeOf(obj);
1322 }
1323 return e[$$iterator]();
1324 }
1325
1326 // 9.1.12 [[OwnPropertyKeys]] ( )
1327 function OwnPropertyKeys(o) {
1328 return Object.getOwnPropertyNames(o);
1329 }
1330
1331 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1332 function ObjectCreate(proto, internalSlotsList) {
1333 return Object.create(proto, internalSlotsList);
1334 }
1335
1336 // ---------------------------------------
1337 // 19 Fundamental Objects
1338 // ---------------------------------------
1339
1340 // ---------------------------------------
1341 // 19.1 Object Objects
1342 // ---------------------------------------
1343
1344 // 19.1.1 The Object Constructor
1345 // 19.1.1.1 Object ( [ value ] )
1346 // 19.1.2 Properties of the Object Constructor
1347 // 19.1.2.1 Object.assign ( target, ...sources )
1348 define(
1349 Object, 'assign',
1350 function assign(target, /*...*/sources) {
1351 var to = ToObject(target);
1352 if (arguments.length < 2) return to;
1353
1354 var sourcesIndex = 1;
1355 while (sourcesIndex < arguments.length) {
1356 var nextSource = arguments[sourcesIndex++];
1357 if (nextSource === undefined || nextSource === null) {
1358 var keys = [];
1359 } else {
1360 var from = ToObject(nextSource);
1361 keys = OwnPropertyKeys(from);
1362 }
1363 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1364 var nextKey = keys[keysIndex];
1365 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1366 if (desc !== undefined && desc.enumerable) {
1367 var propValue = from[nextKey];
1368 to[nextKey] = propValue;
1369 }
1370 }
1371 }
1372 return to;
1373 });
1374
1375 // 19.1.2.2 Object.create ( O [ , Properties ] )
1376 // 19.1.2.3 Object.defineProperties ( O, Properties )
1377 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1378 // 19.1.2.5 Object.freeze ( O )
1379 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1380
1381 (function() {
1382 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1383 $getOwnPropertyNames = Object.getOwnPropertyNames,
1384 $keys = Object.keys,
1385 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1386
1387 function isStringKey(k) { return !symbolForKey(k); }
1388
1389 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1390 define(
1391 Object, 'getOwnPropertyNames',
1392 function getOwnPropertyNames(o) {
1393 if (Object.prototype.toString.call(o) === '[object Window]') {
1394 // Workaround for cross-realm calling by IE itself.
1395 // https://github.com/inexorabletash/polyfill/issues/96
1396 try {
1397 return $getOwnPropertyNames(o).filter(isStringKey);
1398 } catch (_) {
1399 return $window_names.slice();
1400 }
1401 }
1402 return $getOwnPropertyNames(o).filter(isStringKey);
1403 }, !nativeSymbols);
1404
1405 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1406 define(
1407 Object, 'getOwnPropertySymbols',
1408 function getOwnPropertySymbols(o) {
1409 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1410 }, !nativeSymbols);
1411
1412 // 19.1.2.14 Object.keys ( O )
1413 define(
1414 Object, 'keys',
1415 function keys(o) {
1416 return $keys(o).filter(isStringKey);
1417 }, !nativeSymbols);
1418 }());
1419
1420 // 19.1.2.9 Object.getPrototypeOf ( O )
1421 // 19.1.2.10 Object.is ( value1, value2 )
1422 define(
1423 Object, 'is',
1424 function is(value1, value2) {
1425 return SameValue(value1, value2);
1426 });
1427
1428 // 19.1.2.11 Object.isExtensible ( O )
1429 // 19.1.2.12 Object.isFrozen ( O )
1430 // 19.1.2.13 Object.isSealed ( O )
1431
1432 // 19.1.2.14 Object.keys ( O )
1433 // see above
1434
1435 // 19.1.2.15 Object.preventExtensions ( O )
1436 // 19.1.2.16 Object.prototype
1437 // 19.1.2.17 Object.seal ( O )
1438
1439 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1440 define(
1441 Object, 'setPrototypeOf',
1442 function setPrototypeOf(o, proto) {
1443 if (Type(o) !== 'object') throw TypeError();
1444 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1445 o.__proto__ = proto;
1446 return o;
1447 }
1448 );
1449
1450 // 19.1.3 Properties of the Object Prototype Object
1451 // 19.1.3.1 Object.prototype.constructor
1452 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1453 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1454 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1455 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1456 // 19.1.3.6 Object.prototype.toString ( )
1457 hook(Object.prototype, 'toString',
1458 function() {
1459 var o = strict(this);
1460 if (o === Object(o) && $$toStringTag in o) {
1461 return '[object ' + o[$$toStringTag] + ']';
1462 }
1463 return undefined;
1464 });
1465
1466 // 19.1.3.7 Object.prototype.valueOf ( )
1467 // 19.1.4 Properties of Object Instances
1468
1469 // ---------------------------------------
1470 // 19.2 Function Objects
1471 // ---------------------------------------
1472
1473 // 19.2.1 The Function Constructor
1474 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1475 // 19.2.2 Properties of the Function Constructor
1476 // 19.2.2.1 Function.length
1477 // 19.2.2.2 Function.prototype
1478 // 19.2.3 Properties of the Function Prototype Object
1479 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1480 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1481 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1482 // 19.2.3.4 Function.prototype.constructor
1483 // 19.2.3.5 Function.prototype.toString ( )
1484 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1485 // 19.2.4 Function Instances
1486 // 19.2.4.1 length
1487 // 19.2.4.2 name
1488 // 19.2.4.3 prototype
1489
1490 // (No polyfillable changes from ES5)
1491
1492 // ---------------------------------------
1493 // 19.3 Boolean Objects
1494 // ---------------------------------------
1495
1496 // 19.3.1 The Boolean Constructor
1497 // 19.3.1.1 Boolean ( value )
1498 // 19.3.2 Properties of the Boolean Constructor
1499 // 19.3.2.1 Boolean.prototype
1500 // 19.3.3 Properties of the Boolean Prototype Object
1501 // 19.3.3.1 Boolean.prototype.constructor
1502 // 19.3.3.2 Boolean.prototype.toString ( )
1503 // 19.3.3.3 Boolean.prototype.valueOf ( )
1504 // 19.3.4 Properties of Boolean Instances
1505
1506 // (No polyfillable changes from ES5)
1507
1508 // ---------------------------------------
1509 // 19.4 Symbol Objects
1510 // ---------------------------------------
1511
1512 // Moved earlier in this script, so that other polyfills can depend on them.
1513
1514 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1515 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1516
1517 // ---------------------------------------
1518 // 19.5 Error Objects
1519 // ---------------------------------------
1520
1521 // 19.5.1 The Error Constructor
1522 // 19.5.1.1 Error ( message )
1523 // 19.5.1.2 new Error( ...argumentsList )
1524 // 19.5.2 Properties of the Error Constructor
1525 // 19.5.2.1 Error.prototype
1526 // 19.5.3 Properties of the Error Prototype Object
1527 // 19.5.3.1 Error.prototype.constructor
1528 // 19.5.3.2 Error.prototype.message
1529 // 19.5.3.3 Error.prototype.name
1530 // 19.5.3.4 Error.prototype.toString ( )
1531 // 19.5.4 Properties of Error Instances
1532 // 19.5.5 Native Error Types Used in This Standard
1533 // 19.5.5.1 EvalError
1534 // 19.5.5.2 RangeError
1535 // 19.5.5.3 ReferenceError
1536 // 19.5.5.4 SyntaxError
1537 // 19.5.5.5 TypeError
1538 // 19.5.5.6 URIError
1539 // 19.5.6 NativeError Object Structure
1540 // 19.5.6.1 NativeError Constructors
1541 // 19.5.6.1.1 NativeError ( message )
1542 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1543 // 19.5.6.2 Properties of the NativeError Constructors
1544 // 19.5.6.2.1 NativeError.prototype
1545 // 19.5.6.3 Properties of the NativeError Prototype Objects
1546 // 19.5.6.4 Properties of NativeError Instances
1547
1548 // (No polyfillable changes from ES5)
1549
1550 // ---------------------------------------
1551 // 20 Numbers and Dates
1552 // ---------------------------------------
1553
1554 // ---------------------------------------
1555 // 20.1 Number Objects
1556 // ---------------------------------------
1557
1558 // 20.1.1 The Number Constructor
1559 // 20.1.1.1 Number ( [ value ] )
1560 // 20.1.1.2 new Number ( ...argumentsList )
1561 // 20.1.2 Properties of the Number Constructor
1562
1563 // 20.1.2.1 Number.EPSILON
1564 define(
1565 Number, 'EPSILON',
1566 (function () {
1567 var next, result;
1568 for (next = 1; 1 + next !== 1; next = next / 2)
1569 result = next;
1570 return result;
1571 }()));
1572
1573 // 20.1.2.2 Number.isFinite ( number )
1574 define(
1575 Number, 'isFinite',
1576 function isFinite(number) {
1577 if (Type(number) !== 'number') return false;
1578 if (number !== number || number === +Infinity || number === -Infinity) return false;
1579 return true;
1580 });
1581
1582 // 20.1.2.3 Number.isInteger ( number )
1583 define(
1584 Number, 'isInteger',
1585 function isInteger(number) {
1586 if (Type(number) !== 'number') return false;
1587 if (number !== number || number === +Infinity || number === -Infinity) return false;
1588 var integer = ToInteger(number);
1589 if (integer !== number) return false;
1590 return true;
1591 });
1592
1593 // 20.1.2.4 Number.isNaN ( number )
1594 define(
1595 Number, 'isNaN',
1596 function isNaN(number) {
1597 if (Type(number) !== 'number') return false;
1598 if (number !== number) return true;
1599 return false;
1600 });
1601
1602 // 20.1.2.5 Number.isSafeInteger ( number )
1603 define(
1604 Number, 'isSafeInteger',
1605 function isSafeInteger(number) {
1606 if (Type(number) !== 'number') return false;
1607 if (number !== number || number === +Infinity || number === -Infinity) return false;
1608 var integer = ToInteger(number);
1609 if (integer !== number) return false;
1610 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1611 return true;
1612 return false;
1613 });
1614
1615 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1616 define(
1617 Number, 'MAX_SAFE_INTEGER',
1618 9007199254740991); // 2^53-1
1619
1620 // 20.1.2.7 Number.MAX_VALUE
1621
1622 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1623 define(
1624 Number, 'MIN_SAFE_INTEGER',
1625 -9007199254740991); // -2^53+1
1626
1627 // 20.1.2.9 Number.MIN_VALUE
1628 // 20.1.2.10 Number.NaN
1629 // 20.1.2.11 Number.NEGATIVE_INFINITY
1630
1631 // 20.1.2.12 Number.parseFloat ( string )
1632 define(Number, 'parseFloat', $parseFloat);
1633
1634 // 20.1.2.13 Number.parseInt ( string, radix )
1635 define(Number, 'parseInt', $parseInt);
1636
1637 // 20.1.2.14 Number.POSITIVE_INFINITY
1638 // 20.1.2.15 Number.prototype
1639
1640 // 20.1.3 Properties of the Number Prototype Object
1641 // 20.1.3.1 Number.prototype.constructor
1642 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1643 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1644 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1645 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1646 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1647 // 20.1.3.7 Number.prototype.valueOf ( )
1648 // 20.1.4 Properties of Number Instances
1649
1650 // ---------------------------------------
1651 // 20.2 The Math Object
1652 // ---------------------------------------
1653
1654 // 20.2.1 Value Properties of the Math Object
1655 // 20.2.1.1 Math.E
1656 // 20.2.1.2 Math.LN10
1657 // 20.2.1.3 Math.LN2
1658 // 20.2.1.4 Math.LOG10E
1659 // 20.2.1.5 Math.LOG2E
1660 // 20.2.1.6 Math.PI
1661 // 20.2.1.7 Math.SQRT1_2
1662 // 20.2.1.8 Math.SQRT2
1663
1664 // 20.2.1.9 Math [ @@toStringTag ]
1665 define(Math, $$toStringTag, 'Math');
1666
1667 // 20.2.2 Function Properties of the Math Object
1668 // 20.2.2.1 Math.abs ( x )
1669 // 20.2.2.2 Math.acos ( x )
1670
1671 // 20.2.2.3 Math.acosh(x)
1672 define(
1673 Math, 'acosh',
1674 function acosh(x) {
1675 x = Number(x);
1676 return log(x + sqrt(x * x - 1));
1677 });
1678
1679 // 20.2.2.4 Math.asin ( x )
1680
1681 // 20.2.2.5 Math.asinh( x )
1682 define(
1683 Math, 'asinh',
1684 function asinh(x) {
1685 x = Number(x);
1686 if (SameValue(x, -0)) {
1687 return x;
1688 }
1689 var s = sqrt(x * x + 1);
1690 return (s === -x) ? log(0) : log(x + s);
1691 });
1692
1693 // 20.2.2.6 Math.atan ( x )
1694
1695 // 20.2.2.7 Math.atanh( x )
1696 define(
1697 Math, 'atanh',
1698 function atanh(x) {
1699 x = Number(x);
1700 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1701 });
1702
1703 // 20.2.2.8 Math.atan2 ( y, x )
1704
1705 // 20.2.2.9 Math.cbrt ( x )
1706 define(
1707 Math, 'cbrt',
1708 function cbrt(x) {
1709 x = Number(x);
1710 if ($isNaN(x/x)) {
1711 return x;
1712 }
1713 var r = pow(abs(x), 1/3);
1714 var t = x/r/r;
1715 return r + (r * (t-r) / (2*r + t));
1716 });
1717
1718 // 20.2.2.10 Math.ceil ( x )
1719
1720 // 20.2.2.11 Math.clz32 ( x )
1721 define(
1722 Math, 'clz32',
1723 function clz32(x) {
1724 function clz8(x) {
1725 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1726 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1727 }
1728 x = ToUint32(x);
1729 return x & 0xff000000 ? clz8(x >> 24) :
1730 x & 0xff0000 ? clz8(x >> 16) + 8 :
1731 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1732 });
1733
1734
1735
1736 // 20.2.2.12 Math.cos ( x )
1737
1738 // 20.2.2.13 Math.cosh ( x )
1739 define(
1740 Math, 'cosh',
1741 function cosh(x) {
1742 x = Number(x);
1743 return (pow(E, x) + pow(E, -x)) / 2;
1744 });
1745
1746 // 20.2.2.14 Math.exp ( x )
1747
1748 // 20.2.2.15 Math.expm1 ( x )
1749 define(
1750 Math, 'expm1',
1751 function expm1(x) {
1752 x = Number(x);
1753 // from: http://www.johndcook.com/cpp_log1p.html
1754 if (SameValue(x, -0)) {
1755 return -0;
1756 } else if (abs(x) < 1e-5) {
1757 return x + 0.5 * x * x; // two terms of Taylor expansion
1758 } else {
1759 return exp(x) - 1;
1760 }
1761 });
1762
1763 // 20.2.2.16 Math.floor ( x )
1764
1765 // 20.2.2.17 Math.fround ( x )
1766 define(
1767 Math, 'fround',
1768 function fround(x) {
1769 if ($isNaN(x)) {
1770 return NaN;
1771 }
1772 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1773 return x;
1774 }
1775 return (new Float32Array([x]))[0];
1776 });
1777
1778 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1779 define(
1780 Math, 'hypot',
1781 function hypot() {
1782 var values = [];
1783 var m = 0, sawNaN = false;
1784 for (var i = 0; i < arguments.length; ++i) {
1785 var n = abs(Number(arguments[i]));
1786 if (n === Infinity) return n;
1787 if (n !== n) sawNaN = true;
1788 if (n > m) m = n;
1789 values[i] = n;
1790 }
1791 if (sawNaN) return NaN;
1792 if (m === 0) return +0;
1793 var sum = +0;
1794 for (i = 0; i < values.length; ++i) {
1795 var r = values[i] / m;
1796 sum = sum + r * r;
1797 }
1798 return m * sqrt(sum);
1799 });
1800
1801 // 20.2.2.19 Math.imul ( x, y )
1802 define(
1803 Math, 'imul',
1804 function imul(x, y) {
1805 var a = ToUint32(x);
1806 var b = ToUint32(y);
1807 // (slow but accurate)
1808 var ah = (a >>> 16) & 0xffff;
1809 var al = a & 0xffff;
1810 var bh = (b >>> 16) & 0xffff;
1811 var bl = b & 0xffff;
1812 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
1813 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
1814 );
1815
1816 // 20.2.2.20 Math.log ( x )
1817
1818 // 20.2.2.21 Math.log1p ( x )
1819 define(
1820 Math, 'log1p',
1821 function log1p(x) {
1822 x = Number(x);
1823 // from: http://www.johndcook.com/cpp_expm1.html
1824 if (x < -1) {
1825 return NaN;
1826 } else if (SameValue(x, -0)) {
1827 return -0;
1828 } else if (abs(x) > 1e-4) {
1829 return log(1 + x);
1830 } else {
1831 return (-0.5 * x + 1) * x;
1832 }
1833 });
1834
1835 // 20.2.2.22 Math.log10 ( x )
1836 define(
1837 Math, 'log10',
1838 function log10(x) {
1839 x = Number(x);
1840 return log(x) * LOG10E;
1841 });
1842
1843 // 20.2.2.23 Math.log2 ( x )
1844 define(
1845 Math, 'log2',
1846 function log2(x) {
1847 x = Number(x);
1848 return log(x) * LOG2E;
1849 });
1850
1851 // 20.2.2.24 Math.max ( value1, value2 , ...values )
1852 // 20.2.2.25 Math.min ( value1, value2 , ...values )
1853 // 20.2.2.26 Math.pow ( x, y )
1854 // 20.2.2.27 Math.random ( )
1855 // 20.2.2.28 Math.round ( x )
1856
1857 // 20.2.2.29 Math.sign(x)
1858 define(
1859 Math, 'sign',
1860 function sign(x) {
1861 x = Number(x);
1862 return x < 0 ? -1 : x > 0 ? 1 : x;
1863 });
1864
1865 // 20.2.2.30 Math.sin ( x )
1866
1867 // 20.2.2.31 Math.sinh( x )
1868 define(
1869 Math, 'sinh',
1870 function sinh(x) {
1871 x = Number(x);
1872 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
1873 });
1874
1875 // 20.2.2.32 Math.sqrt ( x )
1876 // 20.2.2.33 Math.tan ( x )
1877
1878 // 20.2.2.34 Math.tanh ( x )
1879 define(
1880 Math, 'tanh',
1881 function tanh(x) {
1882 x = Number(x);
1883 var n = pow(E, 2 * x) - 1,
1884 d = pow(E, 2 * x) + 1;
1885 if (SameValue(x, -0))
1886 return x;
1887 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
1888 });
1889
1890 // 20.2.2.35 Math.trunc ( x )
1891 define(
1892 Math, 'trunc',
1893 function trunc(x) {
1894 x = Number(x);
1895 return $isNaN(x) ? NaN :
1896 x < 0 ? ceil(x) : floor(x);
1897 });
1898
1899 // ---------------------------------------
1900 // 20.3 Date Objects
1901 // ---------------------------------------
1902
1903 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
1904 // 20.3.1.1 Time Values and Time Range
1905 // 20.3.1.2 Day Number and Time within Day
1906 // 20.3.1.3 Year Number
1907 // 20.3.1.4 Month Number
1908 // 20.3.1.5 Date Number
1909 // 20.3.1.6 Week Day
1910 // 20.3.1.7 Local Time Zone Adjustment
1911 // 20.3.1.8 Daylight Saving Time Adjustment
1912 // 20.3.1.9 Local Time
1913 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
1914 // 20.3.1.11 MakeTime (hour, min, sec, ms)
1915 // 20.3.1.12 MakeDay (year, month, date)
1916 // 20.3.1.13 MakeDate (day, time)
1917 // 20.3.1.14 TimeClip (time)
1918 // 20.3.1.15 Date Time String Format
1919 // 20.3.1.15.1 Extended years
1920 // 20.3.2 The Date Constructor
1921 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1922 // 20.3.2.2 Date ( value )
1923 // 20.3.2.3 Date ( )
1924 // 20.3.3 Properties of the Date Constructor
1925 // 20.3.3.1 Date.now ( )
1926 // 20.3.3.2 Date.parse (string)
1927 // 20.3.3.3 Date.prototype
1928 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1929 // 20.3.4 Properties of the Date Prototype Object
1930 // 20.3.4.1 Date.prototype.constructor
1931 // 20.3.4.2 Date.prototype.getDate ( )
1932 // 20.3.4.3 Date.prototype.getDay ( )
1933 // 20.3.4.4 Date.prototype.getFullYear ( )
1934 // 20.3.4.5 Date.prototype.getHours ( )
1935 // 20.3.4.6 Date.prototype.getMilliseconds ( )
1936 // 20.3.4.7 Date.prototype.getMinutes ( )
1937 // 20.3.4.8 Date.prototype.getMonth ( )
1938 // 20.3.4.9 Date.prototype.getSeconds ( )
1939 // 20.3.4.10 Date.prototype.getTime ( )
1940 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
1941 // 20.3.4.12 Date.prototype.getUTCDate ( )
1942 // 20.3.4.13 Date.prototype.getUTCDay ( )
1943 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
1944 // 20.3.4.15 Date.prototype.getUTCHours ( )
1945 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
1946 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
1947 // 20.3.4.18 Date.prototype.getUTCMonth ( )
1948 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
1949 // 20.3.4.20 Date.prototype.setDate ( date )
1950 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
1951 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
1952 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
1953 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
1954 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
1955 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
1956 // 20.3.4.27 Date.prototype.setTime ( time )
1957 // 20.3.4.28 Date.prototype.setUTCDate ( date )
1958 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
1959 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
1960 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
1961 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
1962 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
1963 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
1964 // 20.3.4.35 Date.prototype.toDateString ( )
1965 // 20.3.4.36 Date.prototype.toISOString ( )
1966 // 20.3.4.37 Date.prototype.toJSON ( key )
1967 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
1968 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1969 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
1970 // 20.3.4.41 Date.prototype.toString ( )
1971 // 20.3.4.42 Date.prototype.toTimeString ( )
1972 // 20.3.4.43 Date.prototype.toUTCString ( )
1973 // 20.3.4.44 Date.prototype.valueOf ( )
1974 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
1975 // 20.3.5 Properties of Date Instances
1976
1977 // (No polyfillable changes from ES5)
1978
1979 // ---------------------------------------
1980 // 21 Text Processing
1981 // ---------------------------------------
1982
1983 var string_regexp_dispatch = (function() {
1984 var faux = {}, secret = Symbol();
1985 faux[Symbol.match] = function() { return secret; };
1986 return ("").match(faux) === secret;
1987 }());
1988
1989 // 21.1 String Objects
1990 // 21.1.1 The String Constructor
1991 // 21.1.1.1 String ( value )
1992 // 21.1.2 Properties of the String Constructor
1993 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
1994
1995 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
1996 define(
1997 String, 'fromCodePoint',
1998 function fromCodePoint(/*...codePoints*/) {
1999 var codePoints = arguments,
2000 length = codePoints.length,
2001 elements = [],
2002 nextIndex = 0;
2003 while (nextIndex < length) {
2004 var next = codePoints[nextIndex];
2005 var nextCP = Number(next);
2006 if (!SameValue(nextCP, ToInteger(nextCP)) ||
2007 nextCP < 0 || nextCP > 0x10FFFF) {
2008 throw RangeError('Invalid code point ' + nextCP);
2009 }
2010 if (nextCP < 0x10000) {
2011 elements.push(String.fromCharCode(nextCP));
2012 } else {
2013 nextCP -= 0x10000;
2014 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
2015 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
2016 }
2017 nextIndex += 1;
2018 }
2019 return elements.join('');
2020 });
2021
2022 // 21.1.2.3 String.prototype
2023
2024 // 21.1.2.4 String.raw ( template , ...substitutions )
2025 define(
2026 String, 'raw',
2027 function raw(template /*, ...substitutions*/) {
2028 var substitutions = [].slice.call(arguments, 1);
2029
2030 var cooked = Object(template);
2031 var rawValue = cooked['raw'];
2032 var raw = Object(rawValue);
2033 var len = raw['length'];
2034 var literalSegments = ToLength(len);
2035 if (literalSegments <= 0) return '';
2036 var stringElements = [];
2037 var nextIndex = 0;
2038 while (true) {
2039 var next = raw[nextIndex];
2040 var nextSeg = String(next);
2041 stringElements.push(nextSeg);
2042 if (nextIndex + 1 === literalSegments)
2043 return stringElements.join('');
2044 next = substitutions[nextIndex];
2045 var nextSub = String(next);
2046 stringElements.push(nextSub);
2047 nextIndex = nextIndex + 1;
2048 }
2049 });
2050
2051 // See https://githib.com/inexorabletash/uate for a more useful version.
2052
2053 // 21.1.3 Properties of the String Prototype Object
2054 // 21.1.3.1 String.prototype.charAt ( pos )
2055 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2056
2057 // 21.1.3.3 String.prototype.codePointAt ( pos )
2058 define(
2059 String.prototype, 'codePointAt',
2060 function codePointAt(pos) {
2061 var o = strict(this);
2062 var s = String(o);
2063 var position = ToInteger(pos);
2064 var size = s.length;
2065 if (position < 0 || position >= size) return undefined;
2066 var first = s.charCodeAt(position);
2067 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2068 var second = s.charCodeAt(position + 1);
2069 if (second < 0xDC00 || second > 0xDFFF) return first;
2070 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2071 });
2072
2073 // 21.1.3.4 String.prototype.concat ( ...args )
2074 // 21.1.3.5 String.prototype.constructor
2075
2076 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2077 define(
2078 String.prototype, 'endsWith',
2079 function endsWith(searchString) {
2080 var endPosition = arguments[1];
2081
2082 var o = strict(this);
2083 var s = String(o);
2084 var searchStr = String(searchString);
2085 var len = s.length;
2086 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2087 var end = min(max(pos, 0), len);
2088 var searchLength = searchStr.length;
2089 var start = end - searchLength;
2090 if (start < 0) return false;
2091 if (s.substring(start, start + searchLength) === searchStr) return true;
2092 return false;
2093 });
2094
2095 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2096 define(
2097 String.prototype, 'includes',
2098 function includes(searchString) {
2099 var position = arguments[1];
2100
2101 var o = strict(this);
2102 var s = String(o);
2103 var searchStr = String(searchString);
2104 var pos = ToInteger(position);
2105 var len = s.length;
2106 var start = min(max(pos, 0), len);
2107 return s.indexOf(searchStr, start) !== -1;
2108 });
2109
2110 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2111 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2112 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2113 // 21.1.3.11 String.prototype.match ( regexp )
2114 define(
2115 String.prototype, 'match',
2116 function match(regexp) {
2117 var o = strict(this);
2118 var s = String(o);
2119 if (HasProperty(regexp, $$match)) var rx = regexp;
2120 else rx = new RegExp(regexp);
2121 return rx[$$match](s);
2122 }, !string_regexp_dispatch);
2123
2124 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2125
2126 // Not practical due to table sizes; if needed, pull in:
2127 // https://github.com/walling/unorm/
2128
2129 // 21.1.3.13 String.prototype.repeat ( count )
2130 define(
2131 String.prototype, 'repeat',
2132 function repeat(count) {
2133 var o = strict(this);
2134 var s = String(o);
2135 var n = ToInteger(count);
2136 if (n < 0) throw RangeError();
2137 if (n === Infinity) throw RangeError();
2138 var t = new Array(n + 1).join(s);
2139 return t;
2140 });
2141
2142 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2143 define(
2144 String.prototype, 'replace',
2145 function replace(searchValue, replaceValue) {
2146 var o = strict(this);
2147 if (HasProperty(searchValue, $$replace))
2148 return searchValue[$$replace](o, replaceValue);
2149 return orig_replace.call(o, searchValue, replaceValue);
2150 }, !string_regexp_dispatch);
2151
2152 // 21.1.3.15 String.prototype.search ( regexp )
2153 define(
2154 String.prototype, 'search',
2155 function search(regexp) {
2156 var o = strict(this);
2157 var string = String(o);
2158 if (HasProperty(regexp, $$search)) var rx = regexp;
2159 else rx = new RegExp(regexp);
2160 return rx[$$search](string);
2161 }, !string_regexp_dispatch);
2162
2163 // 21.1.3.16 String.prototype.slice ( start, end )
2164 // 21.1.3.17 String.prototype.split ( separator, limit )
2165 define(
2166 String.prototype, 'split',
2167 function split(separator, limit) {
2168 var o = strict(this);
2169 if (HasProperty(separator, $$split))
2170 return separator[$$split](o, limit);
2171 return orig_split.call(o, separator, limit);
2172 }, !string_regexp_dispatch);
2173
2174 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2175 define(
2176 String.prototype, 'startsWith',
2177 function startsWith(searchString) {
2178 var position = arguments[1];
2179
2180 var o = strict(this);
2181 var s = String(o);
2182 var searchStr = String(searchString);
2183 var pos = ToInteger(position);
2184 var len = s.length;
2185 var start = min(max(pos, 0), len);
2186 var searchLength = searchStr.length;
2187 if (searchLength + start > len) return false;
2188 if (s.substring(start, start + searchLength) === searchStr) return true;
2189 return false;
2190 });
2191
2192 // 21.1.3.19 String.prototype.substring ( start, end )
2193 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2194 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2195 // 21.1.3.22 String.prototype.toLowerCase ( )
2196 // 21.1.3.23 String.prototype.toString ( )
2197 // 21.1.3.24 String.prototype.toUpperCase ( )
2198 // 21.1.3.25 String.prototype.trim ( )
2199 // 21.1.3.26 String.prototype.valueOf ( )
2200
2201 // 21.1.3.27 String.prototype [ @@iterator ]( )
2202 define(
2203 String.prototype, $$iterator,
2204 function entries() {
2205 return CreateStringIterator(this, 'value');
2206 });
2207
2208 // 21.1.4 Properties of String Instances
2209 // 21.1.4.1 length
2210
2211 // 21.1.5 String Iterator Objects
2212 /** @constructor */
2213 function StringIterator() {}
2214
2215 // 21.1.5.1 CreateStringIterator Abstract Operation
2216 function CreateStringIterator(string, kind) {
2217 var s = String(string);
2218 var iterator = new StringIterator;
2219 set_internal(iterator, '[[IteratedString]]', s);
2220 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2221 set_internal(iterator, '[[StringIterationKind]]', kind);
2222 return iterator;
2223 }
2224
2225 // 21.1.5.2 The %StringIteratorPrototype% Object
2226 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2227 StringIterator.prototype = $StringIteratorPrototype$;
2228
2229 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2230 define(
2231 $StringIteratorPrototype$, 'next',
2232 function next() {
2233 var o = ToObject(this);
2234 var s = String(o['[[IteratedString]]']),
2235 index = o['[[StringIteratorNextIndex]]'],
2236 len = s.length;
2237 if (index >= len) {
2238 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2239 return CreateIterResultObject(undefined, true);
2240 }
2241 var cp = s.codePointAt(index);
2242 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2243 return CreateIterResultObject(String.fromCodePoint(cp), false);
2244 });
2245
2246 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2247 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2248
2249 // 21.1.5.3 Properties of String Iterator Instances
2250
2251 // ---------------------------------------
2252 // 21.2 RegExp (Regular Expression) Objects
2253 // ---------------------------------------
2254
2255 // 21.2.1 Patterns
2256 // 21.2.2 Pattern Semantics
2257 // 21.2.2.1 Notation
2258 // 21.2.2.2 Pattern
2259 // 21.2.2.3 Disjunction
2260 // 21.2.2.4 Alternative
2261 // 21.2.2.5 Term
2262 // 21.2.2.6 Assertion
2263 // 21.2.2.7 Quantifier
2264 // 21.2.2.8 Atom
2265 // 21.2.2.9 AtomEscape
2266 // 21.2.2.10 CharacterEscape
2267 // 21.2.2.11 DecimalEscape
2268 // 21.2.2.12 CharacterClassEscape
2269 // 21.2.2.13 CharacterClass
2270 // 21.2.2.14 ClassRanges
2271 // 21.2.2.15 NonemptyClassRanges
2272 // 21.2.2.16 NonemptyClassRangesNoDash
2273 // 21.2.2.17 ClassAtom
2274 // 21.2.2.18 ClassAtomNoDash
2275 // 21.2.2.19 ClassEscape
2276 // 21.2.3 The RegExp Constructor
2277 // 21.2.3.1 RegExp ( pattern, flags )
2278 // 21.2.3.2 new RegExp( ...argumentsList )
2279 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2280 // 21.2.4 Properties of the RegExp Constructor
2281 // 21.2.4.1 RegExp.prototype
2282 // 21.2.5 Properties of the RegExp Prototype Object
2283 // 21.2.5.1 RegExp.prototype.constructor
2284 // 21.2.5.2 RegExp.prototype.exec ( string )
2285
2286 // 21.2.5.3 get RegExp.prototype.flags
2287 if (!('flags' in RegExp.prototype)) {
2288 Object.defineProperty(
2289 RegExp.prototype, 'flags', {
2290 get: function() {
2291 var s = String(this);
2292 return s.substring(s.lastIndexOf('/') + 1);
2293 }
2294 });
2295 }
2296
2297 // 21.2.5.4 get RegExp.prototype.global
2298 // 21.2.5.5 get RegExp.prototype.ignoreCase
2299
2300 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2301 define(RegExp.prototype, $$match, function(string) {
2302 var o = strict(this);
2303 return orig_match.call(string, o);
2304 });
2305
2306 // 21.2.5.7 get RegExp.prototype.multiline
2307
2308 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2309 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2310 var o = strict(this);
2311 return orig_replace.call(string, o, replaceValue);
2312 });
2313
2314 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2315 define(RegExp.prototype, $$search, function(string) {
2316 var o = strict(this);
2317 return orig_search.call(string, o);
2318 });
2319
2320 // 21.2.5.10 get RegExp.prototype.source
2321
2322 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2323 define(RegExp.prototype, $$split, function(string, limit) {
2324 var o = strict(this);
2325 return orig_split.call(string, o, limit);
2326 });
2327
2328 // 21.2.5.12 get RegExp.prototype.sticky
2329 // 21.2.5.13 RegExp.prototype.test( S )
2330 // 21.2.5.14 RegExp.prototype.toString ( )
2331 // 21.2.5.15 get RegExp.prototype.unicode
2332
2333 // 21.2.6 Properties of RegExp Instances
2334 // 21.2.6.1 lastIndex
2335
2336 // (No polyfillable changes from ES5)
2337
2338 // ---------------------------------------
2339 // 22 Indexed Collections
2340 // ---------------------------------------
2341
2342 // ---------------------------------------
2343 // 22.1 Array Objects
2344 // ---------------------------------------
2345
2346 // 22.1.1 The Array Constructor
2347 // 22.1.1.1 Array ( )
2348 // 22.1.1.2 Array (len)
2349 // 22.1.1.3 Array (...items )
2350
2351 // 22.1.2 Properties of the Array Constructor
2352
2353 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2354 define(
2355 Array, 'from',
2356 function from(items) {
2357 var mapfn = arguments[1];
2358 var thisArg = arguments[2];
2359
2360 var c = strict(this);
2361 if (mapfn === undefined) {
2362 var mapping = false;
2363 } else {
2364 if (!IsCallable(mapfn)) throw TypeError();
2365 var t = thisArg;
2366 mapping = true;
2367 }
2368 var usingIterator = GetMethod(items, $$iterator);
2369 if (usingIterator !== undefined) {
2370 if (IsConstructor(c)) {
2371 var a = new c();
2372 } else {
2373 a = new Array(0);
2374 }
2375 var iterator = GetIterator(items, usingIterator);
2376 var k = 0;
2377 while (true) {
2378 var next = IteratorStep(iterator);
2379 if (next === false) {
2380 a.length = k;
2381 return a;
2382 }
2383 var nextValue = IteratorValue(next);
2384 if (mapping)
2385 var mappedValue = mapfn.call(t, nextValue);
2386 else
2387 mappedValue = nextValue;
2388 a[k] = mappedValue;
2389 k += 1;
2390 }
2391 }
2392 var arrayLike = ToObject(items);
2393 var lenValue = arrayLike.length;
2394 var len = ToLength(lenValue);
2395 if (IsConstructor(c)) {
2396 a = new c(len);
2397 } else {
2398 a = new Array(len);
2399 }
2400 k = 0;
2401 while (k < len) {
2402 var kValue = arrayLike[k];
2403 if (mapping)
2404 mappedValue = mapfn.call(t, kValue, k);
2405 else
2406 mappedValue = kValue;
2407 a[k] = mappedValue;
2408 k += 1;
2409 }
2410 a.length = len;
2411 return a;
2412 });
2413
2414 // 22.1.2.2 Array.isArray ( arg )
2415
2416 // 22.1.2.3 Array.of ( ...items )
2417 define(
2418 Array, 'of',
2419 function of() {
2420 var items = arguments;
2421
2422 var lenValue = items.length;
2423 var len = ToUint32(lenValue);
2424 var c = strict(this), a;
2425 if (IsConstructor(c)) {
2426 a = new c(len);
2427 a = ToObject(a);
2428 } else {
2429 a = new Array(len);
2430 }
2431 var k = 0;
2432 while (k < len) {
2433 a[k] = items[k];
2434 k += 1;
2435 }
2436 a.length = len;
2437 return a;
2438 });
2439
2440 // 22.1.2.4 Array.prototype
2441 // 22.1.2.5 get Array [ @@species ]
2442 // 22.1.3 Properties of the Array Prototype Object
2443 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2444 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2445 // 22.1.3.2 Array.prototype.constructor
2446 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2447 define(
2448 Array.prototype, 'copyWithin',
2449 function copyWithin(target, start/*, end*/) {
2450 var end = arguments[2];
2451
2452 var o = ToObject(this);
2453 var lenVal = o.length;
2454 var len = ToLength(lenVal);
2455 len = max(len, 0);
2456 var relativeTarget = ToInteger(target);
2457 var to;
2458 if (relativeTarget < 0)
2459 to = max(len + relativeTarget, 0);
2460 else
2461 to = min(relativeTarget, len);
2462 var relativeStart = ToInteger(start);
2463 var from;
2464 if (relativeStart < 0)
2465 from = max(len + relativeStart, 0);
2466 else
2467 from = min(relativeStart, len);
2468 var relativeEnd;
2469 if (end === undefined)
2470 relativeEnd = len;
2471 else
2472 relativeEnd = ToInteger(end);
2473 var final;
2474 if (relativeEnd < 0)
2475 final = max(len + relativeEnd, 0);
2476 else
2477 final = min(relativeEnd, len);
2478 var count = min(final - from, len - to);
2479 var direction;
2480 if (from < to && to < from + count) {
2481 direction = -1;
2482 from = from + count - 1;
2483 to = to + count - 1;
2484 } else {
2485 direction = 1;
2486 }
2487 while (count > 0) {
2488 var fromKey = String(from);
2489 var toKey = String(to);
2490 var fromPresent = HasProperty(o, fromKey);
2491 if (fromPresent) {
2492 var fromVal = o[fromKey];
2493 o[toKey] = fromVal;
2494 } else {
2495 delete o[toKey];
2496 }
2497 from = from + direction;
2498 to = to + direction;
2499 count = count - 1;
2500 }
2501 return o;
2502 });
2503
2504 // 22.1.3.4 Array.prototype.entries ( )
2505 var nativeArrayIteratorMethods =
2506 ('entries' in Array.prototype && 'next' in [].entries());
2507
2508 define(
2509 Array.prototype, 'entries',
2510 function entries() {
2511 return CreateArrayIterator(this, 'key+value');
2512 }, !nativeArrayIteratorMethods);
2513
2514 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2515
2516 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2517 define(
2518 Array.prototype, 'fill',
2519 function fill(value/*, start, end*/) {
2520 var start = arguments[1],
2521 end = arguments[2];
2522
2523 var o = ToObject(this);
2524 var lenVal = o.length;
2525 var len = ToLength(lenVal);
2526 len = max(len, 0);
2527 var relativeStart = ToInteger(start);
2528 var k;
2529 if (relativeStart < 0)
2530 k = max((len + relativeStart), 0);
2531 else
2532 k = min(relativeStart, len);
2533 var relativeEnd;
2534 if (end === undefined)
2535 relativeEnd = len;
2536 else
2537 relativeEnd = ToInteger(end);
2538 var final;
2539 if (relativeEnd < 0)
2540 final = max((len + relativeEnd), 0);
2541 else
2542 final = min(relativeEnd, len);
2543 while (k < final) {
2544 var pk = String(k);
2545 o[pk] = value;
2546 k += 1;
2547 }
2548 return o;
2549 });
2550
2551 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2552
2553 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2554 define(
2555 Array.prototype, 'find',
2556 function find(predicate) {
2557 var o = ToObject(this);
2558 var lenValue = o.length;
2559 var len = ToInteger(lenValue);
2560 if (!IsCallable(predicate)) throw TypeError();
2561 var t = arguments.length > 1 ? arguments[1] : undefined;
2562 var k = 0;
2563 while (k < len) {
2564 var pk = String(k);
2565 var kPresent = HasProperty(o, pk);
2566 if (kPresent) {
2567 var kValue = o[pk];
2568 var testResult = predicate.call(t, kValue, k, o);
2569 if (Boolean(testResult)) {
2570 return kValue;
2571 }
2572 }
2573 ++k;
2574 }
2575 return undefined;
2576 });
2577
2578 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2579 define(
2580 Array.prototype, 'findIndex',
2581 function findIndex(predicate) {
2582 var o = ToObject(this);
2583 var lenValue = o.length;
2584 var len = ToLength(lenValue);
2585 if (!IsCallable(predicate)) throw TypeError();
2586 var t = arguments.length > 1 ? arguments[1] : undefined;
2587 var k = 0;
2588 while (k < len) {
2589 var pk = String(k);
2590 var kPresent = HasProperty(o, pk);
2591 if (kPresent) {
2592 var kValue = o[pk];
2593 var testResult = predicate.call(t, kValue, k, o);
2594 if (Boolean(testResult)) {
2595 return k;
2596 }
2597 }
2598 ++k;
2599 }
2600 return -1;
2601 });
2602
2603 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2604 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2605 // 22.1.3.12 Array.prototype.join (separator)
2606
2607 // 22.1.3.13 Array.prototype.keys ( )
2608 define(
2609 Array.prototype, 'keys',
2610 function keys() {
2611 return CreateArrayIterator(this, 'key');
2612 }, !nativeArrayIteratorMethods);
2613
2614 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2615 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2616 // 22.1.3.16 Array.prototype.pop ( )
2617 // 22.1.3.17 Array.prototype.push ( ...items )
2618 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2619 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2620 // 22.1.3.20 Array.prototype.reverse ( )
2621 // 22.1.3.21 Array.prototype.shift ( )
2622 // 22.1.3.22 Array.prototype.slice (start, end)
2623 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2624 // 22.1.3.24 Array.prototype.sort (comparefn)
2625 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2626 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2627 // 22.1.3.27 Array.prototype.toString ( )
2628 // 22.1.3.28 Array.prototype.unshift ( ...items )
2629
2630 // 22.1.3.29 Array.prototype.values ( )
2631 define(
2632 Array.prototype, 'values',
2633 function values() {
2634 return CreateArrayIterator(this, 'value');
2635 }, !nativeArrayIteratorMethods);
2636
2637 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2638 define(
2639 Array.prototype, $$iterator,
2640 Array.prototype.values
2641 );
2642
2643 // 22.1.3.31 Array.prototype [ @@unscopables ]
2644 // 22.1.4 Properties of Array Instances
2645 // 22.1.4.1 length
2646
2647 // 22.1.5 Array Iterator Objects
2648 function ArrayIterator() {}
2649
2650 // 22.1.5.1 CreateArrayIterator Abstract Operation
2651 function CreateArrayIterator(array, kind) {
2652 var o = ToObject(array);
2653 var iterator = new ArrayIterator;
2654 set_internal(iterator, '[[IteratedObject]]', o);
2655 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2656 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2657 return iterator;
2658 }
2659
2660 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2661 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
2662 ArrayIterator.prototype = $ArrayIteratorPrototype$;
2663
2664 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
2665 define(
2666 $ArrayIteratorPrototype$, 'next',
2667 function next() {
2668 var o = strict(this);
2669 if (Type(o) !== 'object') throw TypeError();
2670 var a = o['[[IteratedObject]]'],
2671 index = o['[[ArrayIteratorNextIndex]]'],
2672 itemKind = o['[[ArrayIterationKind]]'],
2673 lenValue = a.length,
2674 len = ToUint32(lenValue),
2675 elementKey,
2676 elementValue;
2677 if (itemKind.indexOf('sparse') !== -1) {
2678 var found = false;
2679 while (!found && index < len) {
2680 elementKey = String(index);
2681 found = HasProperty(a, elementKey);
2682 if (!found) {
2683 index += 1;
2684 }
2685 }
2686 }
2687 if (index >= len) {
2688 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2689 return CreateIterResultObject(undefined, true);
2690 }
2691 elementKey = index;
2692 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2693 if (itemKind.indexOf('value') !== -1)
2694 elementValue = a[elementKey];
2695 if (itemKind.indexOf('key+value') !== -1)
2696 return CreateIterResultObject([elementKey, elementValue], false);
2697 if (itemKind.indexOf('key') !== -1)
2698 return CreateIterResultObject(elementKey, false);
2699 if (itemKind === 'value')
2700 return CreateIterResultObject(elementValue, false);
2701 throw Error('Internal error');
2702 });
2703
2704 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2705 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2706
2707 // 22.1.5.3 Properties of Array Iterator Instances
2708
2709
2710 // ---------------------------------------
2711 // 22.2 TypedArray Objects
2712 // ---------------------------------------
2713
2714 // See typedarray.js for TypedArray polyfill
2715
2716 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2717 'Int16Array', 'Uint16Array',
2718 'Int32Array', 'Uint32Array',
2719 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2720 if (!($TypedArrayName$ in global))
2721 return;
2722 var $TypedArray$ = global[$TypedArrayName$];
2723
2724 // 22.2.1 The %TypedArray% Intrinsic Object
2725 // 22.2.1.1 %TypedArray% ( length )
2726 // 22.2.1.2 %TypedArray% ( typedArray )
2727 // 22.2.1.3 %TypedArray% ( object )
2728 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2729 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2730 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2731
2732 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2733 define(
2734 $TypedArray$, 'from',
2735 function from(source) {
2736 var mapfn = arguments[1];
2737 var thisArg = arguments[2];
2738
2739 var c = strict(this);
2740 if (!IsConstructor(c)) throw TypeError();
2741 if (mapfn === undefined) {
2742 var mapping = false;
2743 } else {
2744 if (IsCallable(mapfn)) throw TypeError();
2745 var t = thisArg;
2746 mapping = true;
2747 }
2748 var usingIterator = GetMethod(source, $$iterator);
2749 if (usingIterator !== undefined) {
2750 var iterator = GetIterator(source, usingIterator);
2751 var values = [];
2752 var next = true;
2753 while (next !== false) {
2754 next = IteratorStep(iterator);
2755 if (next !== false) {
2756 var nextValue = IteratorValue(next);
2757 values.push(nextValue);
2758 }
2759 }
2760 var len = values.length;
2761 var newObj = new c(len);
2762 var k = 0;
2763 while (k < len) {
2764 var kValue = values.shift();
2765 if (mapping) {
2766 var mappedValue = mapfn.call(t, kValue);
2767 } else {
2768 mappedValue = kValue;
2769 }
2770 newObj[k] = mappedValue;
2771 ++k;
2772 }
2773 console.assert(values.length === 0);
2774 return newObj;
2775 }
2776 var arrayLike = ToObject(source);
2777 var lenValue = arrayLike.length;
2778 len = ToLength(lenValue);
2779 newObj = new c(len);
2780 k = 0;
2781 while (k < len) {
2782 kValue = arrayLike[k];
2783 if (mapping) {
2784 mappedValue = mapfn.call(t, kValue, k);
2785 } else {
2786 mappedValue = kValue;
2787 }
2788 newObj[k] = mappedValue;
2789 ++k;
2790 }
2791 return newObj;
2792 });
2793
2794 // 22.2.2.2 %TypedArray%.of ( ...items )
2795 define(
2796 $TypedArray$, 'of',
2797 function of() {
2798 var items = arguments;
2799
2800 var len = items.length;
2801 var c = strict(this);
2802 var newObj = new c(len);
2803 var k = 0;
2804 while (k < len) {
2805 newObj[k] = items[k];
2806 ++k;
2807 }
2808 return newObj;
2809 });
2810
2811 // 22.2.2.3 %TypedArray%.prototype
2812 // 22.2.2.4 get %TypedArray% [ @@species ]
2813 // 22.2.3 Properties of the %TypedArrayPrototype% Object
2814 // 22.2.3.1 get %TypedArray%.prototype.buffer
2815 // 22.2.3.2 get %TypedArray%.prototype.byteLength
2816 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
2817 // 22.2.3.4 %TypedArray%.prototype.constructor
2818
2819 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
2820 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
2821
2822 // 22.2.3.6 %TypedArray%.prototype.entries ( )
2823 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
2824
2825 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
2826 define($TypedArray$.prototype, 'every', Array.prototype.every);
2827
2828 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
2829 define(
2830 $TypedArray$.prototype, 'fill',
2831 //Array.prototype.fill // Doesn't work in Safari 7
2832 function fill(value/*, start, end*/) {
2833 var start = arguments[1],
2834 end = arguments[2];
2835
2836 var o = ToObject(this);
2837 var lenVal = o.length;
2838 var len = ToLength(lenVal);
2839 len = max(len, 0);
2840 var relativeStart = ToInteger(start);
2841 var k;
2842 if (relativeStart < 0) k = max((len + relativeStart), 0);
2843 else k = min(relativeStart, len);
2844 var relativeEnd;
2845 if (end === undefined) relativeEnd = len;
2846 else relativeEnd = ToInteger(end);
2847 var final;
2848 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
2849 else final = min(relativeEnd, len);
2850 while (k < final) {
2851 var pk = String(k);
2852 o[pk] = value;
2853 k += 1;
2854 }
2855 return o;
2856 });
2857
2858 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
2859 define(
2860 $TypedArray$.prototype, 'filter',
2861 function filter(callbackfn) {
2862 var thisArg = arguments[1];
2863
2864 var o = ToObject(this);
2865 var lenVal = o.length;
2866 var len = ToLength(lenVal);
2867 if (!IsCallable(callbackfn)) throw TypeError();
2868 var t = thisArg;
2869 var c = o.constructor;
2870 var kept = [];
2871 var k = 0;
2872 var captured = 0;
2873 while (k < len) {
2874 var kValue = o[k];
2875 var selected = callbackfn.call(t, kValue, k, o);
2876 if (selected) {
2877 kept.push(kValue);
2878 ++captured;
2879 }
2880 ++k;
2881 }
2882 var a = new c(captured);
2883 var n = 0;
2884 for (var i = 0; i < kept.length; ++i) {
2885 var e = kept[i];
2886 a[n] = e;
2887 ++n;
2888 }
2889 return a;
2890 });
2891
2892 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
2893 define($TypedArray$.prototype, 'find', Array.prototype.find);
2894
2895 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
2896 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
2897
2898 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
2899 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
2900
2901 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
2902 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
2903
2904 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
2905 define($TypedArray$.prototype, 'join', Array.prototype.join);
2906
2907 // 22.2.3.15 %TypedArray%.prototype.keys ( )
2908 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
2909
2910 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2911 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
2912
2913 // 22.2.3.17 get %TypedArray%.prototype.length
2914
2915 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
2916 define(
2917 $TypedArray$.prototype, 'map',
2918 function map(callbackfn) {
2919 var thisArg = arguments[1];
2920
2921 var o = ToObject(this);
2922 var lenValue = o.length;
2923 var len = ToLength(lenValue);
2924 if (!IsCallable(callbackfn)) throw TypeError();
2925 var t = thisArg;
2926 var a = undefined;
2927 var c = o.constructor;
2928 if (IsConstructor(c))
2929 a = new c(len);
2930 if (a === undefined)
2931 a = new Array(len);
2932 var k = 0;
2933 while (k < len) {
2934 var kPresent = HasProperty(o, k);
2935 if (kPresent) {
2936 var kValue = o[k];
2937 var mappedValue = callbackfn.call(t, kValue, k, o);
2938 a[k] = mappedValue;
2939 }
2940 ++k;
2941 }
2942 return a;
2943 });
2944
2945 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
2946 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
2947
2948 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
2949 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
2950
2951 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
2952 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
2953
2954 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
2955 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
2956 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
2957
2958 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
2959 define(
2960 $TypedArray$.prototype, 'slice',
2961 function slice(start, end) {
2962 var o = ToObject(this);
2963 var lenVal = o.length;
2964 var len = ToLength(lenVal);
2965 var relativeStart = ToInteger(start);
2966 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
2967 var relativeEnd = (end === undefined) ? len : ToInteger(end);
2968 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
2969 var count = final - k;
2970 var c = o.constructor;
2971 if (IsConstructor(c)) {
2972 var a = new c(count);
2973 } else {
2974 throw TypeError();
2975 }
2976 var n = 0;
2977 while (k < final) {
2978 var kValue = o[k];
2979 a[n] = kValue;
2980 ++k;
2981 ++n;
2982 }
2983 return a;
2984 });
2985
2986 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
2987 define($TypedArray$.prototype, 'some', Array.prototype.some);
2988
2989 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
2990 define(
2991 $TypedArray$.prototype, 'sort',
2992 function sort() {
2993 var comparefn = arguments[0];
2994
2995 function sortCompare(x, y) {
2996 console.assert(Type(x) === 'number' && Type(y) === 'number');
2997 if (x !== x && y !== y) return +0;
2998 if (x !== x) return 1;
2999 if (y !== y) return -1;
3000 if (comparefn !== undefined) {
3001 return comparefn(x, y);
3002 }
3003 if (x < y) return -1;
3004 if (x > y) return 1;
3005 return +0;
3006 }
3007 return Array.prototype.sort.call(this, sortCompare);
3008 });
3009
3010 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
3011 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
3012 // 22.2.3.28 %TypedArray%.prototype.toString ( )
3013
3014 // 22.2.3.29 %TypedArray%.prototype.values ( )
3015 define($TypedArray$.prototype, 'values', Array.prototype.values);
3016
3017 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
3018 define(
3019 $TypedArray$.prototype, $$iterator,
3020 $TypedArray$.prototype.values
3021 );
3022
3023 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3024 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3025
3026 // 22.2.4 The TypedArray Constructors
3027 // 22.2.4.1TypedArray( ... argumentsList)
3028 // 22.2.5 Properties of the TypedArray Constructors
3029 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3030 // 22.2.5.2 TypedArray.prototype
3031 // 22.2.6 Properties of TypedArray Prototype Objects
3032 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3033 // 22.2.6.2 TypedArray.prototype.constructor
3034 // 22.2.7 Properties of TypedArray Instances
3035 });
3036
3037 // ---------------------------------------
3038 // 23 Keyed Collection
3039 // ---------------------------------------
3040
3041 // ---------------------------------------
3042 // 23.1 Map Objects
3043 // ---------------------------------------
3044
3045 (function() {
3046 // 23.1.1 The Map Constructor
3047
3048 // 23.1.1.1 Map ( [ iterable ] )
3049 /** @constructor */
3050 function Map(/*iterable*/) {
3051 var map = strict(this);
3052 var iterable = arguments[0];
3053
3054 if (Type(map) !== 'object') throw TypeError();
3055 if ('[[MapData]]' in map) throw TypeError();
3056
3057 if (iterable !== undefined) {
3058 var adder = map['set'];
3059 if (!IsCallable(adder)) throw TypeError();
3060 var iter = GetIterator(ToObject(iterable));
3061 }
3062 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3063 if (iter === undefined) return map;
3064 while (true) {
3065 var next = IteratorStep(iter);
3066 if (next === false)
3067 return map;
3068 var nextItem = IteratorValue(next);
3069 if (Type(nextItem) !== 'object') throw TypeError();
3070 var k = nextItem[0];
3071 var v = nextItem[1];
3072 adder.call(map, k, v);
3073 }
3074
3075 return map;
3076 }
3077
3078 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3079 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3080 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3081 (new global.Map([['a', 1]]).size !== 1))
3082 global.Map = Map;
3083
3084
3085 function MapDataIndexOf(mapData, key) {
3086 var i;
3087 if (key === key) return mapData.keys.indexOf(key);
3088 // Slow case for NaN
3089 for (i = 0; i < mapData.keys.length; i += 1)
3090 if (SameValueZero(mapData.keys[i], key)) return i;
3091 return -1;
3092 }
3093
3094 // 23.1.1.2 new Map ( ... argumentsList )
3095 // 23.1.2 Properties of the Map Constructor
3096 // 23.1.2.1 Map.prototype
3097 var $MapPrototype$ = {};
3098 Map.prototype = $MapPrototype$;
3099
3100 // 23.1.2.2 get Map [ @@species ]
3101
3102 // 23.1.3 Properties of the Map Prototype Object
3103 // 23.1.3.1 Map.prototype.clear ()
3104 define(
3105 Map.prototype, 'clear',
3106 function clear() {
3107 var m = strict(this);
3108 if (Type(m) !== 'object') throw TypeError();
3109 if (!('[[MapData]]' in m)) throw TypeError();
3110 if (m['[[MapData]]'] === undefined) throw TypeError();
3111 var entries = m['[[MapData]]'];
3112 entries.keys.length = 0;
3113 entries.values.length = 0;
3114 return undefined;
3115 });
3116
3117 // 23.1.3.2 Map.prototype.constructor
3118
3119 // 23.1.3.3 Map.prototype.delete ( key )
3120 define(
3121 Map.prototype, 'delete',
3122 function delete_(key) {
3123 var m = strict(this);
3124 if (Type(m) !== 'object') throw TypeError();
3125 if (!('[[MapData]]' in m)) throw TypeError();
3126 if (m['[[MapData]]'] === undefined) throw TypeError();
3127 var entries = m['[[MapData]]'];
3128 var i = MapDataIndexOf(entries, key);
3129 if (i < 0) return false;
3130 entries.keys[i] = empty;
3131 entries.values[i] = empty;
3132 return true;
3133 });
3134
3135 // 23.1.3.4 Map.prototype.entries ( )
3136 define(
3137 Map.prototype, 'entries',
3138 function entries() {
3139 var m = strict(this);
3140 if (Type(m) !== 'object') throw TypeError();
3141 return CreateMapIterator(m, 'key+value');
3142 });
3143
3144 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3145 define(
3146 Map.prototype, 'forEach',
3147 function forEach(callbackfn /*, thisArg*/) {
3148 var thisArg = arguments[1];
3149
3150 var m = strict(this);
3151 if (Type(m) !== 'object') throw TypeError();
3152 if (!('[[MapData]]' in m)) throw TypeError();
3153 if (m['[[MapData]]'] === undefined) throw TypeError();
3154 var entries = m['[[MapData]]'];
3155
3156 if (!IsCallable(callbackfn)) {
3157 throw TypeError('First argument to forEach is not callable.');
3158 }
3159 for (var i = 0; i < entries.keys.length; ++i) {
3160 if (entries.keys[i] !== empty) {
3161 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3162 }
3163 }
3164 return undefined;
3165 });
3166
3167 // 23.1.3.6 Map.prototype.get ( key )
3168 define(
3169 Map.prototype, 'get',
3170 function get(key) {
3171 var m = strict(this);
3172 if (Type(m) !== 'object') throw TypeError();
3173 if (!('[[MapData]]' in m)) throw TypeError();
3174 if (m['[[MapData]]'] === undefined) throw TypeError();
3175 var entries = m['[[MapData]]'];
3176 var i = MapDataIndexOf(entries, key);
3177 if (i >= 0) return entries.values[i];
3178 return undefined;
3179 });
3180
3181 // 23.1.3.7 Map.prototype.has ( key )
3182 define(
3183 Map.prototype, 'has',
3184 function has(key) {
3185 var m = strict(this);
3186 if (Type(m) !== 'object') throw TypeError();
3187 if (!('[[MapData]]' in m)) throw TypeError();
3188 if (m['[[MapData]]'] === undefined) throw TypeError();
3189 var entries = m['[[MapData]]'];
3190 if (MapDataIndexOf(entries, key) >= 0) return true;
3191 return false;
3192 });
3193
3194 // 23.1.3.8 Map.prototype.keys ( )
3195 define(
3196 Map.prototype, 'keys',
3197 function keys() {
3198 var m = strict(this);
3199 if (Type(m) !== 'object') throw TypeError();
3200 return CreateMapIterator(m, 'key');
3201 });
3202
3203 // 23.1.3.9 Map.prototype.set ( key , value )
3204 define(
3205 Map.prototype, 'set',
3206 function set(key, value) {
3207 var m = strict(this);
3208 if (Type(m) !== 'object') throw TypeError();
3209 if (!('[[MapData]]' in m)) throw TypeError();
3210 if (m['[[MapData]]'] === undefined) throw TypeError();
3211 var entries = m['[[MapData]]'];
3212 var i = MapDataIndexOf(entries, key);
3213 if (i < 0) i = entries.keys.length;
3214 if (SameValue(key, -0)) key = 0;
3215 entries.keys[i] = key;
3216 entries.values[i] = value;
3217 return m;
3218 });
3219
3220 // 23.1.3.10 get Map.prototype.size
3221 Object.defineProperty(
3222 Map.prototype, 'size', {
3223 get: function() {
3224 var m = strict(this);
3225 if (Type(m) !== 'object') throw TypeError();
3226 if (!('[[MapData]]' in m)) throw TypeError();
3227 if (m['[[MapData]]'] === undefined) throw TypeError();
3228 var entries = m['[[MapData]]'];
3229 var count = 0;
3230 for (var i = 0; i < entries.keys.length; ++i) {
3231 if (entries.keys[i] !== empty)
3232 count = count + 1;
3233 }
3234 return count;
3235 }
3236 });
3237
3238 // 23.1.3.11 Map.prototype.values ( )
3239 define(
3240 Map.prototype, 'values',
3241 function values() {
3242 var m = strict(this);
3243 if (Type(m) !== 'object') throw TypeError();
3244 return CreateMapIterator(m, 'value');
3245 });
3246
3247 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3248 define(
3249 Map.prototype, $$iterator,
3250 function() {
3251 var m = strict(this);
3252 if (Type(m) !== 'object') throw TypeError();
3253 return CreateMapIterator(m, 'key+value');
3254 });
3255
3256 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3257 define(global.Map.prototype, $$toStringTag, 'Map');
3258
3259 // 23.1.4 Properties of Map Instances
3260 // 23.1.5 Map Iterator Objects
3261
3262 /** @constructor */
3263 function MapIterator() {}
3264
3265 // 23.1.5.1 CreateMapIterator Abstract Operation
3266 function CreateMapIterator(map, kind) {
3267 if (Type(map) !== 'object') throw TypeError();
3268 if (!('[[MapData]]' in map)) throw TypeError();
3269 if (map['[[MapData]]'] === undefined) throw TypeError();
3270 var iterator = new MapIterator;
3271 set_internal(iterator, '[[Map]]', map);
3272 set_internal(iterator, '[[MapNextIndex]]', 0);
3273 set_internal(iterator, '[[MapIterationKind]]', kind);
3274 return iterator;
3275 }
3276
3277 // 23.1.5.2 The %MapIteratorPrototype% Object
3278 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3279 MapIterator.prototype = $MapIteratorPrototype$;
3280
3281 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3282 define(
3283 $MapIteratorPrototype$, 'next',
3284 function next() {
3285 var o = strict(this);
3286 if (Type(o) !== 'object') throw TypeError();
3287 var m = o['[[Map]]'],
3288 index = o['[[MapNextIndex]]'],
3289 itemKind = o['[[MapIterationKind]]'],
3290 entries = m['[[MapData]]'];
3291 while (index < entries.keys.length) {
3292 var e = {key: entries.keys[index], value: entries.values[index]};
3293 index = index += 1;
3294 set_internal(o, '[[MapNextIndex]]', index);
3295 if (e.key !== empty) {
3296 if (itemKind === 'key') {
3297 return CreateIterResultObject(e.key, false);
3298 } else if (itemKind === 'value') {
3299 return CreateIterResultObject(e.value, false);
3300 } else {
3301 return CreateIterResultObject([e.key, e.value], false);
3302 }
3303 }
3304 }
3305 return CreateIterResultObject(undefined, true);
3306 });
3307
3308 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3309 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3310
3311 // 23.1.5.3 Properties of Map Iterator Instances
3312 }());
3313
3314 // ---------------------------------------
3315 // 23.2 Set Objects
3316 // ---------------------------------------
3317
3318 (function() {
3319 // 23.2.1 The Set Constructor
3320 // 23.2.1.1 Set ( [ iterable ] )
3321
3322 /** @constructor */
3323 function Set(/*iterable*/) {
3324 var set = strict(this);
3325 var iterable = arguments[0];
3326
3327 if (Type(set) !== 'object') throw TypeError();
3328 if ('[[SetData]]' in set) throw TypeError();
3329
3330 if (iterable !== undefined) {
3331 var adder = set['add'];
3332 if (!IsCallable(adder)) throw TypeError();
3333 var iter = GetIterator(ToObject(iterable));
3334 }
3335 set_internal(set, '[[SetData]]', []);
3336 if (iter === undefined) return set;
3337 while (true) {
3338 var next = IteratorStep(iter);
3339 if (next === false)
3340 return set;
3341 var nextValue = IteratorValue(next);
3342 adder.call(set, nextValue);
3343 }
3344
3345 return set;
3346 }
3347
3348 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3349 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3350 (new global.Set([1]).size !== 1))
3351 global.Set = Set;
3352
3353 function SetDataIndexOf(setData, key) {
3354 var i;
3355 if (key === key)
3356 return setData.indexOf(key);
3357 // Slow case for NaN
3358 for (i = 0; i < setData.length; i += 1)
3359 if (SameValueZero(setData[i], key)) return i;
3360 return -1;
3361 }
3362
3363 // 23.2.1.2 new Set ( ...argumentsList )
3364 // 23.2.2 Properties of the Set Constructor
3365
3366 // 23.2.2.1 Set.prototype
3367 var $SetPrototype$ = {};
3368 Set.prototype = $SetPrototype$;
3369
3370 // 23.2.2.2 get Set [ @@species ]
3371 // 23.2.3 Properties of the Set Prototype Object
3372
3373 // 23.2.3.1 Set.prototype.add (value )
3374 define(
3375 Set.prototype, 'add',
3376 function add(value) {
3377 var s = strict(this);
3378 if (Type(s) !== 'object') throw TypeError();
3379 if (!('[[SetData]]' in s)) throw TypeError();
3380 if (s['[[SetData]]'] === undefined) throw TypeError();
3381 if (SameValue(value, -0)) value = 0;
3382 var entries = s['[[SetData]]'];
3383 var i = SetDataIndexOf(entries, value);
3384 if (i < 0) i = s['[[SetData]]'].length;
3385 s['[[SetData]]'][i] = value;
3386
3387 return s;
3388 });
3389
3390 // 23.2.3.2 Set.prototype.clear ()
3391 define(
3392 Set.prototype, 'clear',
3393 function clear() {
3394 var s = strict(this);
3395 if (Type(s) !== 'object') throw TypeError();
3396 if (!('[[SetData]]' in s)) throw TypeError();
3397 if (s['[[SetData]]'] === undefined) throw TypeError();
3398 var entries = s['[[SetData]]'];
3399 entries.length = 0;
3400 return undefined;
3401 });
3402
3403 // 23.2.3.3 Set.prototype.constructor
3404 // 23.2.3.4 Set.prototype.delete ( value )
3405 define(
3406 Set.prototype, 'delete',
3407 function delete_(value) {
3408 var s = strict(this);
3409 if (Type(s) !== 'object') throw TypeError();
3410 if (!('[[SetData]]' in s)) throw TypeError();
3411 if (s['[[SetData]]'] === undefined) throw TypeError();
3412 var entries = s['[[SetData]]'];
3413 var i = SetDataIndexOf(entries, value);
3414 if (i < 0) return false;
3415 entries[i] = empty;
3416 return true;
3417 });
3418
3419 // 23.2.3.5 Set.prototype.entries ( )
3420 define(
3421 Set.prototype, 'entries',
3422 function entries() {
3423 var s = strict(this);
3424 if (Type(s) !== 'object') throw TypeError();
3425 return CreateSetIterator(s, 'key+value');
3426 });
3427
3428 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3429 define(
3430 Set.prototype, 'forEach',
3431 function forEach(callbackfn/*, thisArg*/) {
3432 var thisArg = arguments[1];
3433
3434 var s = strict(this);
3435 if (Type(s) !== 'object') throw TypeError();
3436 if (!('[[SetData]]' in s)) throw TypeError();
3437 if (s['[[SetData]]'] === undefined) throw TypeError();
3438 var entries = s['[[SetData]]'];
3439
3440 if (!IsCallable(callbackfn)) {
3441 throw TypeError('First argument to forEach is not callable.');
3442 }
3443 for (var i = 0; i < entries.length; ++i) {
3444 if (entries[i] !== empty) {
3445 callbackfn.call(thisArg, entries[i], entries[i], s);
3446 }
3447 }
3448 });
3449
3450 // 23.2.3.7 Set.prototype.has ( value )
3451 define(
3452 Set.prototype, 'has',
3453 function has(key) {
3454 var s = strict(this);
3455 if (Type(s) !== 'object') throw TypeError();
3456 if (!('[[SetData]]' in s)) throw TypeError();
3457 if (s['[[SetData]]'] === undefined) throw TypeError();
3458 var entries = s['[[SetData]]'];
3459 return SetDataIndexOf(entries, key) !== -1;
3460 });
3461
3462 // 23.2.3.8 Set.prototype.keys ( )
3463 // See Set.prototype.values
3464
3465 // 23.2.3.9 get Set.prototype.size
3466 Object.defineProperty(
3467 Set.prototype, 'size', {
3468 get: function() {
3469 var s = strict(this);
3470 if (Type(s) !== 'object') throw TypeError();
3471 if (!('[[SetData]]' in s)) throw TypeError();
3472 if (s['[[SetData]]'] === undefined) throw TypeError();
3473 var entries = s['[[SetData]]'];
3474 var count = 0;
3475 for (var i = 0; i < entries.length; ++i) {
3476 if (entries[i] !== empty)
3477 count = count + 1;
3478 }
3479 return count;
3480 }
3481 });
3482
3483 // 23.2.3.10 Set.prototype.values ( )
3484 define(
3485 Set.prototype, 'values',
3486 function values() {
3487 var s = strict(this);
3488 if (Type(s) !== 'object') throw TypeError();
3489 return CreateSetIterator(s, 'value');
3490 });
3491 // NOTE: function name is still 'values':
3492 Set.prototype.keys = Set.prototype.values;
3493
3494 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3495 define(
3496 Set.prototype, $$iterator,
3497 function() {
3498 var s = strict(this);
3499 if (Type(s) !== 'object') throw TypeError();
3500 return CreateSetIterator(s);
3501 });
3502
3503 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3504 define(global.Set.prototype, $$toStringTag, 'Set');
3505
3506 // 23.2.4 Properties of Set Instances
3507 // 23.2.5 Set Iterator Objects
3508 /** @constructor */
3509 function SetIterator() {}
3510
3511 // 23.2.5.1 CreateSetIterator Abstract Operation
3512 function CreateSetIterator(set, kind) {
3513 if (Type(set) !== 'object') throw TypeError();
3514 if (!('[[SetData]]' in set)) throw TypeError();
3515 if (set['[[SetData]]'] === undefined) throw TypeError();
3516 var iterator = new SetIterator;
3517 set_internal(iterator, '[[IteratedSet]]', set);
3518 set_internal(iterator, '[[SetNextIndex]]', 0);
3519 set_internal(iterator, '[[SetIterationKind]]', kind);
3520 return iterator;
3521 }
3522
3523 // 23.2.5.2 The %SetIteratorPrototype% Object
3524 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3525 SetIterator.prototype = $SetIteratorPrototype$;
3526
3527 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3528 define(
3529 $SetIteratorPrototype$, 'next',
3530 function next() {
3531 var o = strict(this);
3532 if (Type(o) !== 'object') throw TypeError();
3533 var s = o['[[IteratedSet]]'],
3534 index = o['[[SetNextIndex]]'],
3535 itemKind = o['[[SetIterationKind]]'],
3536 entries = s['[[SetData]]'];
3537 while (index < entries.length) {
3538 var e = entries[index];
3539 index = index += 1;
3540 set_internal(o, '[[SetNextIndex]]', index);
3541 if (e !== empty) {
3542 if (itemKind === 'key+value')
3543 return CreateIterResultObject([e, e], false);
3544 return CreateIterResultObject(e, false);
3545 }
3546 }
3547 return CreateIterResultObject(undefined, true);
3548 });
3549
3550 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3551 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3552
3553 // 23.2.5.3 Properties of Set Iterator Instances
3554
3555 }());
3556
3557 // ---------------------------------------
3558 // 23.3 WeakMap Objects
3559 // ---------------------------------------
3560
3561 (function() {
3562 // 23.3.1 The WeakMap Constructor
3563 // 23.3.1.1 WeakMap ( [ iterable ] )
3564 /** @constructor */
3565 function WeakMap(/*iterable*/) {
3566 var map = strict(this);
3567 var iterable = arguments[0];
3568
3569 if (Type(map) !== 'object') throw TypeError();
3570 if ('[[WeakMapData]]' in map) throw TypeError();
3571
3572 if (iterable !== undefined) {
3573 var adder = map['set'];
3574 if (!IsCallable(adder)) throw TypeError();
3575 var iter = GetIterator(ToObject(iterable));
3576 }
3577 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3578 if (iter === undefined) return map;
3579 while (true) {
3580 var next = IteratorStep(iter);
3581 if (next === false)
3582 return map;
3583 var nextValue = IteratorValue(next);
3584 if (Type(nextValue) !== 'object') throw TypeError();
3585 var k = nextValue[0];
3586 var v = nextValue[1];
3587 adder.call(map, k, v);
3588 }
3589
3590 return map;
3591 }
3592
3593 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3594 global.WeakMap = WeakMap;
3595
3596 // 23.3.2 Properties of the WeakMap Constructor
3597 // 23.3.2.1 WeakMap.prototype
3598 var $WeakMapPrototype$ = {};
3599 WeakMap.prototype = $WeakMapPrototype$;
3600
3601
3602
3603 // 23.3.2.2 WeakMap[ @@create ] ( )
3604 // 23.3.3 Properties of the WeakMap Prototype Object
3605
3606 // 23.3.3.1 WeakMap.prototype.constructor
3607
3608 // 23.3.3.2 WeakMap.prototype.delete ( key )
3609 define(
3610 WeakMap.prototype, 'delete',
3611 function delete_(key) {
3612 var M = strict(this);
3613 if (Type(M) !== 'object') throw TypeError();
3614 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3615 if (Type(key) !== 'object') throw TypeError('Expected object');
3616 return M['[[WeakMapData]]'].remove(key);
3617 });
3618
3619 // 23.3.3.3 WeakMap.prototype.get ( key )
3620 define(
3621 WeakMap.prototype, 'get',
3622 function get(key, defaultValue) {
3623 var M = strict(this);
3624 if (Type(M) !== 'object') throw TypeError();
3625 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3626 if (Type(key) !== 'object') throw TypeError('Expected object');
3627 return M['[[WeakMapData]]'].get(key, defaultValue);
3628 });
3629
3630 // 23.3.3.4 WeakMap.prototype.has ( key )
3631 define(
3632 WeakMap.prototype, 'has',
3633 function has(key) {
3634 var M = strict(this);
3635 if (Type(M) !== 'object') throw TypeError();
3636 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3637 if (Type(key) !== 'object') throw TypeError('Expected object');
3638 return M['[[WeakMapData]]'].has(key);
3639 });
3640
3641 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3642 define(
3643 WeakMap.prototype, 'set',
3644 function set(key, value) {
3645 var M = strict(this);
3646 if (Type(M) !== 'object') throw TypeError();
3647 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3648 if (Type(key) !== 'object') throw TypeError('Expected object');
3649 M['[[WeakMapData]]'].set(key, value);
3650 return M;
3651 });
3652
3653 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3654 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3655
3656 // 23.3.4 Properties of WeakMap Instances
3657
3658 // Polyfills for incomplete native implementations:
3659 (function() {
3660 var wm = new global.WeakMap();
3661 var orig = global.WeakMap.prototype.set;
3662 define(global.WeakMap.prototype, 'set', function set() {
3663 orig.apply(this, arguments);
3664 return this;
3665 }, wm.set({}, 0) !== wm);
3666 }());
3667 }());
3668
3669 // ---------------------------------------
3670 // 23.4 WeakSet Objects
3671 // ---------------------------------------
3672
3673 (function() {
3674 // 23.4.1 The WeakSet Constructor
3675 // 23.4.1.1 WeakSet ( [ iterable ] )
3676 /** @constructor */
3677 function WeakSet(/*iterable*/) {
3678 var set = strict(this);
3679 var iterable = arguments[0];
3680
3681 if (Type(set) !== 'object') throw TypeError();
3682 if ('[[WeakSetData]]' in set) throw TypeError();
3683
3684 if (iterable !== undefined) {
3685 var adder = set['add'];
3686 if (!IsCallable(adder)) throw TypeError();
3687 var iter = GetIterator(ToObject(iterable));
3688 }
3689 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3690 if (iter === undefined) return set;
3691 while (true) {
3692 var next = IteratorStep(iter);
3693 if (next === false)
3694 return set;
3695 var nextValue = IteratorValue(next);
3696 adder.call(set, nextValue);
3697 }
3698
3699 return set;
3700 }
3701
3702 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3703 global.WeakSet = WeakSet;
3704
3705 // 23.4.2 Properties of the WeakSet Constructor
3706 // 23.4.2.1 WeakSet.prototype
3707 var $WeakSetPrototype$ = {};
3708 WeakSet.prototype = $WeakSetPrototype$;
3709
3710 // 23.4.3 Properties of the WeakSet Prototype Object
3711 // 23.4.3.1 WeakSet.prototype.add (value )
3712 define(
3713 WeakSet.prototype, 'add',
3714 function add(value) {
3715 var S = strict(this);
3716 if (Type(S) !== 'object') throw TypeError();
3717 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3718 if (Type(value) !== 'object') throw TypeError('Expected object');
3719 S['[[WeakSetData]]'].set(value, true);
3720 return S;
3721 });
3722
3723 // 23.4.3.2 WeakSet.prototype.constructor
3724 // 23.4.3.3 WeakSet.prototype.delete ( value )
3725 define(
3726 WeakSet.prototype, 'delete',
3727 function delete_(value) {
3728 var S = strict(this);
3729 if (Type(S) !== 'object') throw TypeError();
3730 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3731 if (Type(value) !== 'object') throw TypeError('Expected object');
3732 return S['[[WeakSetData]]'].remove(value);
3733 });
3734
3735 // 23.4.3.4 WeakSet.prototype.has ( value )
3736 define(
3737 WeakSet.prototype, 'has',
3738 function has(key) {
3739 var S = strict(this);
3740 if (Type(S) !== 'object') throw TypeError();
3741 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3742 if (Type(key) !== 'object') throw TypeError('Expected object');
3743 return S['[[WeakSetData]]'].has(key);
3744 });
3745
3746 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3747 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3748
3749 // 23.4.4 Properties of WeakSet Instances
3750
3751 // Polyfills for incomplete native implementations:
3752 (function() {
3753 var ws = new global.WeakSet();
3754 var orig = global.WeakSet.prototype.add;
3755 define(global.WeakSet.prototype, 'add', function add() {
3756 orig.apply(this, arguments);
3757 return this;
3758 }, ws.add({}) !== ws);
3759 }());
3760 }());
3761
3762 // ---------------------------------------
3763 // 24 Structured Data
3764 // ---------------------------------------
3765
3766 // ---------------------------------------
3767 // 24.1 ArrayBuffer Objects
3768 // ---------------------------------------
3769
3770 // See typedarray.js for TypedArray polyfill
3771
3772 (function() {
3773 if (!('ArrayBuffer' in global))
3774 return;
3775
3776 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3777 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3778 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3779 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3780 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3781 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3782 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3783 // 24.1.2 The ArrayBuffer Constructor
3784 // 24.1.2.1 ArrayBuffer( length )
3785 // 24.1.3 Properties of the ArrayBuffer Constructor
3786
3787 // 24.1.3.1 ArrayBuffer.isView ( arg )
3788 define(
3789 ArrayBuffer, 'isView',
3790 function isView(arg) {
3791 if (Type(arg) !== 'object') return false;
3792 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3793 return false;
3794 });
3795
3796 // 24.1.3.2 ArrayBuffer.prototype
3797 // 24.1.3.3 get ArrayBuffer [ @@species ]
3798 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3799 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3800 // 24.1.4.2 ArrayBuffer.prototype.constructor
3801 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3802
3803 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3804 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3805
3806 // 24.1.5 Properties of the ArrayBuffer Instances
3807 }());
3808
3809 // ---------------------------------------
3810 // 24.2 DataView Objects
3811 // ---------------------------------------
3812
3813 // See typedarray.js for TypedArray polyfill
3814
3815 (function() {
3816 if (!('DataView' in global))
3817 return;
3818
3819 // 24.2.1 Abstract Operations For DataView Objects
3820 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
3821 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
3822 // 24.2.2 The DataView Constructor
3823 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
3824 // 24.2.3 Properties of the DataView Constructor
3825 // 24.2.3.1 DataView.prototype
3826 // 24.2.4 Properties of the DataView Prototype Object
3827 // 24.2.4.1 get DataView.prototype.buffer
3828 // 24.2.4.2 get DataView.prototype.byteLength
3829 // 24.2.4.3 get DataView.prototype.byteOffset
3830 // 24.2.4.4 DataView.prototype.constructor
3831 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
3832 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
3833 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
3834 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
3835 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
3836 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
3837 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
3838 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
3839 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
3840 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
3841 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
3842 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
3843 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
3844 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
3845 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
3846 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
3847
3848 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
3849 define(DataView.prototype, $$toStringTag, 'DataView');
3850
3851 // 24.2.5 Properties of DataView Instances
3852 }());
3853
3854 // ---------------------------------------
3855 // 24.3 The JSON Object
3856 // ---------------------------------------
3857
3858 // 24.3.1 JSON.parse ( text [ , reviver ] )
3859 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
3860 // 24.3.3 JSON [ @@toStringTag ]
3861 define(JSON, $$toStringTag, 'JSON');
3862
3863 // ---------------------------------------
3864 // 25.1 Iteration
3865 // ---------------------------------------
3866
3867 // 25.1.1 Common Iteration Interfaces
3868 // 25.1.1.1 The Iterable Interface
3869 // 25.1.1.2 The Iterator Interface
3870 // 25.1.1.3 The IteratorResult Interface
3871
3872 // 25.1.2 The %IteratorPrototype% Object
3873 // Defined earlier, so other prototypes can reference it.
3874 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
3875 define($IteratorPrototype$, $$iterator, function() {
3876 return this;
3877 });
3878
3879
3880 // ---------------------------------------
3881 // 25.4 Promise Objects
3882 // ---------------------------------------
3883
3884 (function() {
3885 // 25.4 Promise Objects
3886
3887 // 25.4.1 Promise Abstract Operations
3888
3889 // 25.4.1.1 PromiseCapability Records
3890 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
3891
3892 function IfAbruptRejectPromise(value, capability) {
3893 var rejectResult = capability['[[Reject]]'].call(undefined, value);
3894 return capability['[[Promise]]'];
3895 }
3896
3897 // 25.4.1.2 PromiseReaction Records
3898
3899 // 25.4.1.3 CreateResolvingFunctions ( promise )
3900
3901 function CreateResolvingFunctions(promise) {
3902 var alreadyResolved = {'[[value]]': false};
3903 var resolve = PromiseResolveFunction();
3904 set_internal(resolve, '[[Promise]]', promise);
3905 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
3906 var reject = PromiseRejectFunction();
3907 set_internal(reject, '[[Promise]]', promise);
3908 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
3909 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
3910 }
3911
3912 // 25.4.1.3.1 Promise Reject Functions
3913
3914 function PromiseRejectFunction() {
3915 var F = function(reason) {
3916 console.assert(Type(F['[[Promise]]']) === 'object');
3917 var promise = F['[[Promise]]'];
3918 var alreadyResolved = F['[[AlreadyResolved]]'];
3919 if (alreadyResolved['[[value]]']) return undefined;
3920 set_internal(alreadyResolved, '[[value]]', true);
3921 return RejectPromise(promise, reason);
3922 };
3923 return F;
3924 }
3925
3926 // 25.4.1.3.2 Promise Resolve Functions
3927
3928 function PromiseResolveFunction() {
3929 var F = function(resolution) {
3930 console.assert(Type(F['[[Promise]]']) === 'object');
3931 var promise = F['[[Promise]]'];
3932 var alreadyResolved = F['[[AlreadyResolved]]'];
3933 if (alreadyResolved['[[value]]']) return undefined;
3934 set_internal(alreadyResolved, '[[value]]', true);
3935
3936 if (SameValue(resolution, promise)) {
3937 var selfResolutionError = TypeError();
3938 return RejectPromise(promise, selfResolutionError);
3939 }
3940 if (Type(resolution) !== 'object')
3941 return FulfillPromise(promise, resolution);
3942 try {
3943 var then = resolution['then'];
3944 } catch(then) {
3945 return RejectPromise(promise, then);
3946 }
3947 if (!IsCallable(then))
3948 return FulfillPromise(promise, resolution);
3949 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
3950 return undefined;
3951 };
3952 return F;
3953 }
3954
3955 // 25.4.1.4 FulfillPromise ( promise, value )
3956
3957 function FulfillPromise(promise, value) {
3958 console.assert(promise['[[PromiseState]]'] === 'pending');
3959 var reactions = promise['[[PromiseFulfillReactions]]'];
3960 set_internal(promise, '[[PromiseResult]]', value);
3961 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
3962 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
3963 set_internal(promise, '[[PromiseState]]', 'fulfilled');
3964 return TriggerPromiseReactions(reactions, value);
3965 }
3966
3967 // 25.4.1.5 NewPromiseCapability ( C )
3968
3969 function NewPromiseCapability(c) {
3970 // To keep Promise hermetic, this doesn't look much like the spec.
3971 return CreatePromiseCapabilityRecord(undefined, c);
3972 }
3973
3974 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
3975
3976 function CreatePromiseCapabilityRecord(promise, constructor) {
3977 // To keep Promise hermetic, this doesn't look much like the spec.
3978 console.assert(IsConstructor(constructor));
3979 var promiseCapability = {};
3980 set_internal(promiseCapability, '[[Promise]]', promise);
3981 set_internal(promiseCapability, '[[Resolve]]', undefined);
3982 set_internal(promiseCapability, '[[Reject]]', undefined);
3983 var executor = GetCapabilitiesExecutor();
3984 set_internal(executor, '[[Capability]]', promiseCapability);
3985
3986 // NOTE: Differs from spec; object is constructed here
3987 var constructorResult = promise = new constructor(executor);
3988 set_internal(promiseCapability, '[[Promise]]', promise);
3989
3990 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
3991 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
3992 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
3993 return promiseCapability;
3994 }
3995
3996 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
3997
3998 function GetCapabilitiesExecutor() {
3999 var F = function(resolve, reject) {
4000 console.assert(F['[[Capability]]']);
4001 var promiseCapability = F['[[Capability]]'];
4002 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
4003 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
4004 set_internal(promiseCapability, '[[Resolve]]', resolve);
4005 set_internal(promiseCapability, '[[Reject]]', reject);
4006 return undefined;
4007 };
4008 return F;
4009 }
4010
4011 // 25.4.1.6 IsPromise ( x )
4012
4013 function IsPromise(x) {
4014 if (Type(x) !== 'object') return false;
4015 if (!('[[PromiseState]]' in x)) return false;
4016 if (x['[[PromiseState]]'] === undefined) return false;
4017 return true;
4018 }
4019
4020 // 25.4.1.7 RejectPromise ( promise, reason )
4021
4022 function RejectPromise(promise, reason) {
4023 console.assert(promise['[[PromiseState]]'] === 'pending');
4024 var reactions = promise['[[PromiseRejectReactions]]'];
4025 set_internal(promise, '[[PromiseResult]]', reason);
4026 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4027 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4028 set_internal(promise, '[[PromiseState]]', 'rejected');
4029 return TriggerPromiseReactions(reactions, reason);
4030 }
4031
4032 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4033
4034 function TriggerPromiseReactions(reactions, argument) {
4035 for (var i = 0, len = reactions.length; i < len; ++i)
4036 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4037 return undefined;
4038 }
4039
4040 // 25.4.2 Promise Jobs
4041
4042 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4043
4044 function PromiseReactionJob(reaction, argument) {
4045 var promiseCapability = reaction['[[Capabilities]]'];
4046 var handler = reaction['[[Handler]]'];
4047 var handlerResult, status;
4048 try {
4049 if (handler === 'Identity') handlerResult = argument;
4050 else if (handler === 'Thrower') throw argument;
4051 else handlerResult = handler.call(undefined, argument);
4052 } catch (handlerResult) {
4053 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4054 NextJob(status); return;
4055 }
4056 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4057 NextJob(status);
4058 }
4059
4060 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4061
4062 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4063 // SPEC BUG: promise vs. promiseToResolve
4064 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4065 try {
4066 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4067 resolvingFunctions['[[Reject]]']);
4068 } catch (thenCallResult) {
4069 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4070 NextJob(status); return;
4071 }
4072 NextJob(thenCallResult);
4073 }
4074
4075 // 25.4.3 The Promise Constructor
4076
4077 // 25.4.3.1 Promise ( executor )
4078
4079 function Promise(executor) {
4080 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4081 Object.defineProperty(this, '[[PromiseState]]', config);
4082 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4083 Object.defineProperty(this, '[[PromiseResult]]', config);
4084 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4085 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4086
4087 var promise = this;
4088 if (Type(promise) !== 'object') throw new TypeError();
4089 if (!('[[PromiseState]]' in promise)) throw TypeError();
4090 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4091 if (!IsCallable(executor)) throw TypeError();
4092
4093 set_internal(promise, '[[PromiseConstructor]]', Promise);
4094
4095 return InitializePromise(promise, executor);
4096 }
4097
4098 // 25.4.3.1.1 InitializePromise ( promise, executor )
4099
4100 function InitializePromise(promise, executor) {
4101 console.assert('[[PromiseState]]' in promise);
4102 console.assert(IsCallable(executor));
4103 set_internal(promise, '[[PromiseState]]', 'pending');
4104 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4105 set_internal(promise, '[[PromiseRejectReactions]]', []);
4106 var resolvingFunctions = CreateResolvingFunctions(promise);
4107 try {
4108 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4109 resolvingFunctions['[[Reject]]']);
4110 } catch (completion) {
4111 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4112 }
4113 return promise;
4114 }
4115
4116 // 25.4.4 Properties of the Promise Constructor
4117 // 25.4.4.1 Promise.all ( iterable )
4118
4119 define(Promise, 'all', function all(iterable) {
4120 var c = strict(this);
4121 var promiseCapability = NewPromiseCapability(c);
4122 try {
4123 var iterator = GetIterator(iterable);
4124 } catch (value) {
4125 promiseCapability['[[Reject]]'].call(undefined, value);
4126 return promiseCapability['[[Promise]]'];
4127 }
4128 var values = [];
4129 var remainingElementsCount = { value: 1 };
4130 var index = 0;
4131 while (true) {
4132 try {
4133 var next = IteratorStep(iterator);
4134 } catch (value) {
4135 promiseCapability['[[Reject]]'].call(undefined, value);
4136 return promiseCapability['[[Promise]]'];
4137 }
4138 if (!next) {
4139 remainingElementsCount.value -= 1;
4140 if (remainingElementsCount.value === 0) {
4141 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4142
4143
4144 }
4145 return promiseCapability['[[Promise]]'];
4146 }
4147 try {
4148 var nextValue = IteratorValue(next);
4149 } catch (value) {
4150 promiseCapability['[[Reject]]'].call(undefined, value);
4151 return promiseCapability['[[Promise]]'];
4152 }
4153 try {
4154 var nextPromise = c.resolve(nextValue);
4155 } catch (value) {
4156 promiseCapability['[[Reject]]'].call(undefined, value);
4157 return promiseCapability['[[Promise]]'];
4158 }
4159 var resolveElement = PromiseAllResolveElementFunction();
4160 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4161 set_internal(resolveElement, '[[Index]]', index);
4162 set_internal(resolveElement, '[[Values]]', values);
4163 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4164 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4165 remainingElementsCount.value += 1;
4166 try {
4167 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4168 } catch (value) {
4169 promiseCapability['[[Reject]]'].call(undefined, value);
4170 return promiseCapability['[[Promise]]'];
4171 }
4172 index += 1;
4173 }
4174 });
4175
4176 // 25.4.4.1.1 Promise.all Resolve Element Functions
4177
4178 function PromiseAllResolveElementFunction() {
4179 var F = function(x) {
4180 var alreadyCalled = F['[[AlreadyCalled]]'];
4181 if (alreadyCalled.value) return undefined;
4182 alreadyCalled.value = true;
4183 var index = F['[[Index]]'];
4184 var values = F['[[Values]]'];
4185 var promiseCapability = F['[[Capabilities]]'];
4186 var remainingElementsCount = F['[[RemainingElements]]'];
4187 try {
4188 values[index] = x;
4189 } catch (result) {
4190 promiseCapability['[[Reject]]'].call(undefined, result);
4191 return promiseCapability['[[Promise]]'];
4192 }
4193 remainingElementsCount.value -= 1;
4194 if (remainingElementsCount.value === 0)
4195 return promiseCapability['[[Resolve]]'].call(undefined, values);
4196 return undefined;
4197 };
4198 return F;
4199 }
4200
4201 // 25.4.4.2 Promise.prototype
4202
4203 Promise.prototype = {};
4204
4205 // 25.4.4.3 Promise.race ( iterable )
4206
4207 define(Promise, 'race', function race(iterable) {
4208 var c = strict(this);
4209 var promiseCapability = NewPromiseCapability(c);
4210 try {
4211 var iterator = GetIterator(iterable);
4212 } catch (value) {
4213 promiseCapability['[[Reject]]'].call(undefined, value);
4214 return promiseCapability['[[Promise]]'];
4215 }
4216 while (true) {
4217 try {
4218 var next = IteratorStep(iterator);
4219 } catch (value) {
4220 promiseCapability['[[Reject]]'].call(undefined, value);
4221 return promiseCapability['[[Promise]]'];
4222 }
4223 if (!next) return promiseCapability['[[Promise]]'];
4224 try {
4225 var nextValue = IteratorValue(next);
4226 } catch (value) {
4227 promiseCapability['[[Reject]]'].call(undefined, value);
4228 return promiseCapability['[[Promise]]'];
4229 }
4230 try {
4231 var nextPromise = c.resolve(nextValue);
4232 } catch (value) {
4233 promiseCapability['[[Reject]]'].call(undefined, value);
4234 return promiseCapability['[[Promise]]'];
4235 }
4236 try {
4237 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4238 } catch (value) {
4239 promiseCapability['[[Reject]]'].call(undefined, value);
4240 return promiseCapability['[[Promise]]'];
4241 }
4242 }
4243 });
4244
4245 // 25.4.4.4 Promise.reject ( r )
4246
4247 define(Promise, 'reject', function reject(r) {
4248 var c = strict(this);
4249 var promiseCapability = NewPromiseCapability(c);
4250 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4251 return promiseCapability['[[Promise]]'];
4252 });
4253
4254 // 25.4.4.5 Promise.resolve ( x )
4255
4256 define(Promise, 'resolve', function resolve(x) {
4257 var c = strict(this);
4258 if (IsPromise(x)) {
4259 var constructor = x['[[PromiseConstructor]]'];
4260 if (SameValue(constructor, c)) return x;
4261 }
4262 var promiseCapability = NewPromiseCapability(c);
4263 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4264 return promiseCapability['[[Promise]]'];
4265 });
4266
4267 // 25.4.4.6 Promise [ @@create ] ( )
4268 // 25.4.4.6.1 AllocatePromise ( constructor )
4269 // 25.4.5 Properties of the Promise Prototype Object
4270 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4271
4272 define(Promise.prototype, 'catch', function catch_(onRejected) {
4273 var promise = this;
4274 return promise.then(undefined, onRejected);
4275 });
4276
4277 // 25.4.5.2 Promise.prototype.constructor
4278
4279 Promise.prototype.constructor = Promise;
4280
4281 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4282
4283 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4284 var promise = this;
4285 if (!IsPromise(promise)) throw TypeError();
4286 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4287 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4288 var c = promise.constructor;
4289 var promiseCapability = NewPromiseCapability(c);
4290 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4291 '[[Handler]]': onFulfilled };
4292 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4293 '[[Handler]]': onRejected };
4294 if (promise['[[PromiseState]]'] === 'pending') {
4295 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4296 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4297 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4298 var value = promise['[[PromiseResult]]'];
4299 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4300 } else if (promise['[[PromiseState]]'] === 'rejected') {
4301 var reason = promise['[[PromiseResult]]'];
4302 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4303 }
4304 return promiseCapability['[[Promise]]'];
4305 });
4306
4307 // 25.4.6 Properties of Promise Instances
4308
4309 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4310 global.Promise = Promise;
4311
4312 // Patch early Promise.cast vs. Promise.resolve implementations
4313 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4314 }());
4315
4316 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4317 define(Promise.prototype, $$toStringTag, 'Promise');
4318
4319 // ---------------------------------------
4320 // 26 Reflection
4321 // ---------------------------------------
4322
4323 (function() {
4324 // 26.1 The Reflect Object
4325 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4326 global.Reflect = {};
4327
4328 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4329 define(
4330 Reflect, 'apply',
4331 function apply(target, thisArgument, argumentsList) {
4332 if (!IsCallable(target)) throw TypeError();
4333 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4334 });
4335
4336 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4337 define(
4338 Reflect, 'construct',
4339 function construct(target, argumentsList) {
4340 return __cons(target, argumentsList);
4341 });
4342
4343 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4344 define(
4345 Reflect, 'defineProperty',
4346 function defineProperty(target, propertyKey, attributes) {
4347 try {
4348 Object.defineProperty(target, propertyKey, attributes);
4349 return true;
4350 } catch (_) {
4351 return false;
4352 }
4353 });
4354
4355 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4356 define(
4357 Reflect, 'deleteProperty',
4358 function deleteProperty(target,name) {
4359 try {
4360 delete target[name];
4361 return !HasOwnProperty(target, name);
4362 } catch (_) {
4363 return false;
4364 }
4365 });
4366
4367 // 26.1.5 Reflect.enumerate ( target )
4368 define(
4369 Reflect, 'enumerate',
4370 function enumerate(target) {
4371 target = ToObject(target);
4372 var iterator = Enumerate(target);
4373 return iterator;
4374 });
4375
4376 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4377 define(
4378 Reflect, 'get',
4379 function get(target, name, receiver) {
4380 target = ToObject(target);
4381 name = String(name);
4382 receiver = (receiver === undefined) ? target : ToObject(receiver);
4383 var desc = getPropertyDescriptor(target, name);
4384 if (desc && 'get' in desc)
4385 return Function.prototype.call.call(desc['get'], receiver);
4386 return target[name];
4387 });
4388
4389 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4390 define(
4391 Reflect, 'getOwnPropertyDescriptor',
4392 Object.getOwnPropertyDescriptor);
4393
4394 // 26.1.8 Reflect.getPrototypeOf ( target )
4395 define(
4396 Reflect, 'getPrototypeOf',
4397 Object.getPrototypeOf);
4398
4399 // 26.1.9 Reflect.has ( target, propertyKey )
4400 define(
4401 Reflect, 'has',
4402 function has(target,name) {
4403 return String(name) in ToObject(target);
4404 });
4405
4406 // 26.1.10 Reflect.isExtensible (target)
4407 define(
4408 Reflect, 'isExtensible',
4409 Object.isExtensible);
4410
4411 // 26.1.11 Reflect.ownKeys ( target )
4412 define(
4413 Reflect, 'ownKeys',
4414 function ownKeys(target) {
4415 var obj = ToObject(target);
4416 return Object.getOwnPropertyNames(obj);
4417 });
4418
4419 // 26.1.12 Reflect.preventExtensions ( target )
4420 define(
4421 Reflect, 'preventExtensions',
4422 function preventExtensions(target) {
4423 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4424 });
4425
4426 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4427 define(
4428 Reflect, 'set',
4429 function set(target, name, value, receiver) {
4430 target = ToObject(target);
4431 name = String(name);
4432 receiver = (receiver === undefined) ? target : ToObject(receiver);
4433 var desc = getPropertyDescriptor(target, name);
4434 try {
4435 if (desc && 'set' in desc)
4436 Function.prototype.call.call(desc['set'], receiver, value);
4437 else
4438 target[name] = value;
4439 return true;
4440 } catch (_) {
4441 return false;
4442 }
4443 });
4444
4445 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4446 define(
4447 Reflect, 'setPrototypeOf',
4448 function setPrototypeOf(target, proto) {
4449 try {
4450 target.__proto__ = proto;
4451 return Reflect.getPrototypeOf(target) === proto;
4452 } catch(_) {
4453 return false;
4454 }
4455 });
4456
4457 }());
4458
4459 // ---------------------------------------
4460 // 26.2 Proxy Objects
4461 // ---------------------------------------
4462
4463 // Not polyfillable.
4464
4465 }(self));
4466
4467 // This helper is defined outside the main scope so that the use of
4468 // 'eval' does not taint the scope for minifiers.
4469 function __cons(t, a) {
4470 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4471 }
4472 </script>
4473 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
4474 !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)
4475 },_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))
4476 },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});
4477 </script>
4478 <script>/*!
4479 * Bootstrap v3.2.0 (http://getbootstrap.com)
4480 * Copyright 2011-2014 Twitter, Inc.
4481 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
4482 */
4483 if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);</script>
4484 <script>(function() {
4485 'use strict';
4486
4487 /**
4488 * Extend an Object with another Object's properties.
4489 *
4490 * The source objects are specified as additional arguments.
4491 *
4492 * @param dst Object the object to extend.
4493 *
4494 * @return Object the final object.
4495 */
4496 var _extend = function(dst) {
4497 var sources = Array.prototype.slice.call(arguments, 1);
4498 for (var i=0; i<sources.length; ++i) {
4499 var src = sources[i];
4500 for (var p in src) {
4501 if (src.hasOwnProperty(p)) dst[p] = src[p];
4502 }
4503 }
4504 return dst;
4505 };
4506
4507
4508 /**
4509 * Defer execution of given function.
4510 * @param {Function} func
4511 */
4512 var _defer = function(func) {
4513 if (typeof setImmediate === 'function') {
4514 return setImmediate(func);
4515 } else {
4516 return setTimeout(func, 0);
4517 }
4518 };
4519
4520 /**
4521 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
4522 */
4523 var Levenshtein = {
4524 /**
4525 * Calculate levenshtein distance of the two strings.
4526 *
4527 * @param str1 String the first string.
4528 * @param str2 String the second string.
4529 * @return Integer the levenshtein distance (0 and above).
4530 */
4531 get: function(str1, str2) {
4532 // base cases
4533 if (str1 === str2) return 0;
4534 if (str1.length === 0) return str2.length;
4535 if (str2.length === 0) return str1.length;
4536
4537 // two rows
4538 var prevRow = new Array(str2.length + 1),
4539 curCol, nextCol, i, j, tmp;
4540
4541 // initialise previous row
4542 for (i=0; i<prevRow.length; ++i) {
4543 prevRow[i] = i;
4544 }
4545
4546 // calculate current row distance from previous row
4547 for (i=0; i<str1.length; ++i) {
4548 nextCol = i + 1;
4549
4550 for (j=0; j<str2.length; ++j) {
4551 curCol = nextCol;
4552
4553 // substution
4554 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
4555 // insertion
4556 tmp = curCol + 1;
4557 if (nextCol > tmp) {
4558 nextCol = tmp;
4559 }
4560 // deletion
4561 tmp = prevRow[j + 1] + 1;
4562 if (nextCol > tmp) {
4563 nextCol = tmp;
4564 }
4565
4566 // copy current col value into previous (in preparation for next iteration)
4567 prevRow[j] = curCol;
4568 }
4569
4570 // copy last col value into previous (in preparation for next iteration)
4571 prevRow[j] = nextCol;
4572 }
4573
4574 return nextCol;
4575 },
4576
4577 /**
4578 * Asynchronously calculate levenshtein distance of the two strings.
4579 *
4580 * @param str1 String the first string.
4581 * @param str2 String the second string.
4582 * @param cb Function callback function with signature: function(Error err, int distance)
4583 * @param [options] Object additional options.
4584 * @param [options.progress] Function progress callback with signature: function(percentComplete)
4585 */
4586 getAsync: function(str1, str2, cb, options) {
4587 options = _extend({}, {
4588 progress: null
4589 }, options);
4590
4591 // base cases
4592 if (str1 === str2) return cb(null, 0);
4593 if (str1.length === 0) return cb(null, str2.length);
4594 if (str2.length === 0) return cb(null, str1.length);
4595
4596 // two rows
4597 var prevRow = new Array(str2.length + 1),
4598 curCol, nextCol,
4599 i, j, tmp,
4600 startTime, currentTime;
4601
4602 // initialise previous row
4603 for (i=0; i<prevRow.length; ++i) {
4604 prevRow[i] = i;
4605 }
4606
4607 nextCol = 1;
4608 i = 0;
4609 j = -1;
4610
4611 var __calculate = function() {
4612 // reset timer
4613 startTime = new Date().valueOf();
4614 currentTime = startTime;
4615
4616 // keep going until one second has elapsed
4617 while (currentTime - startTime < 1000) {
4618 // reached end of current row?
4619 if (str2.length <= (++j)) {
4620 // copy current into previous (in preparation for next iteration)
4621 prevRow[j] = nextCol;
4622
4623 // if already done all chars
4624 if (str1.length <= (++i)) {
4625 return cb(null, nextCol);
4626 }
4627 // else if we have more left to do
4628 else {
4629 nextCol = i + 1;
4630 j = 0;
4631 }
4632 }
4633
4634 // calculation
4635 curCol = nextCol;
4636
4637 // substution
4638 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
4639 // insertion
4640 tmp = curCol + 1;
4641 if (nextCol > tmp) {
4642 nextCol = tmp;
4643 }
4644 // deletion
4645 tmp = prevRow[j + 1] + 1;
4646 if (nextCol > tmp) {
4647 nextCol = tmp;
4648 }
4649
4650 // copy current into previous (in preparation for next iteration)
4651 prevRow[j] = curCol;
4652
4653 // get current time
4654 currentTime = new Date().valueOf();
4655 }
4656
4657 // send a progress update?
4658 if (null !== options.progress) {
4659 try {
4660 options.progress.call(null, (i * 100.0/ str1.length));
4661 } catch (err) {
4662 return cb('Progress callback: ' + err.toString());
4663 }
4664 }
4665
4666 // next iteration
4667 _defer(__calculate);
4668 };
4669
4670 __calculate();
4671 }
4672
4673 };
4674
4675 // amd
4676 if (typeof define !== "undefined" && define !== null && define.amd) {
4677 define(function() {
4678 return Levenshtein;
4679 });
4680 }
4681 // commonjs
4682 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
4683 module.exports = Levenshtein;
4684 }
4685 // web worker
4686 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
4687 self.Levenshtein = Levenshtein;
4688 }
4689 // browser main thread
4690 else if (typeof window !== "undefined" && window !== null) {
4691 window.Levenshtein = Levenshtein;
4692 }
4693 }());
4694
4695 </script>
4696 <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},
4697 write: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;
4698 for(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-
4699 7,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]=
4700 0<=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},
4701 setupTimingPattern: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=
4702 j.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-
4703 b-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,
4704 c),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=
4705 0,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&&
4706 (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,
4707 78,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)-
4708 j.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:"+
4709 a);}},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:"+
4710 a);}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+
4711 2)&&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),
4712 LOG_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>
4713 this.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],
4714 [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,
4715 116],[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,
4716 43,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,
4717 3,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,
4718 55,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,
4719 45,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*
4720 (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,
4721 correctLevel:2,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),
4722 j=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",
4723 d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;$(a).appendTo(this)})}})($);
4724 </script>
4725 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoin = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
4726 // (public) Constructor
4727 function BigInteger(a, b, c) {
4728 if (!(this instanceof BigInteger))
4729 return new BigInteger(a, b, c)
4730
4731 if (a != null) {
4732 if ("number" == typeof a) this.fromNumber(a, b, c)
4733 else if (b == null && "string" != typeof a) this.fromString(a, 256)
4734 else this.fromString(a, b)
4735 }
4736 }
4737
4738 var proto = BigInteger.prototype
4739
4740 // duck-typed isBigInteger
4741 proto.__bigi = require('../package.json').version
4742 BigInteger.isBigInteger = function (obj, check_ver) {
4743 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
4744 }
4745
4746 // Bits per digit
4747 var dbits
4748
4749 // am: Compute w_j += (x*this_i), propagate carries,
4750 // c is initial carry, returns final carry.
4751 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
4752 // We need to select the fastest one that works in this environment.
4753
4754 // am1: use a single mult and divide to get the high bits,
4755 // max digit bits should be 26 because
4756 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
4757 function am1(i, x, w, j, c, n) {
4758 while (--n >= 0) {
4759 var v = x * this[i++] + w[j] + c
4760 c = Math.floor(v / 0x4000000)
4761 w[j++] = v & 0x3ffffff
4762 }
4763 return c
4764 }
4765 // am2 avoids a big mult-and-extract completely.
4766 // Max digit bits should be <= 30 because we do bitwise ops
4767 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
4768 function am2(i, x, w, j, c, n) {
4769 var xl = x & 0x7fff,
4770 xh = x >> 15
4771 while (--n >= 0) {
4772 var l = this[i] & 0x7fff
4773 var h = this[i++] >> 15
4774 var m = xh * l + h * xl
4775 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
4776 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
4777 w[j++] = l & 0x3fffffff
4778 }
4779 return c
4780 }
4781 // Alternately, set max digit bits to 28 since some
4782 // browsers slow down when dealing with 32-bit numbers.
4783 function am3(i, x, w, j, c, n) {
4784 var xl = x & 0x3fff,
4785 xh = x >> 14
4786 while (--n >= 0) {
4787 var l = this[i] & 0x3fff
4788 var h = this[i++] >> 14
4789 var m = xh * l + h * xl
4790 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
4791 c = (l >> 28) + (m >> 14) + xh * h
4792 w[j++] = l & 0xfffffff
4793 }
4794 return c
4795 }
4796
4797 // wtf?
4798 BigInteger.prototype.am = am1
4799 dbits = 26
4800
4801 BigInteger.prototype.DB = dbits
4802 BigInteger.prototype.DM = ((1 << dbits) - 1)
4803 var DV = BigInteger.prototype.DV = (1 << dbits)
4804
4805 var BI_FP = 52
4806 BigInteger.prototype.FV = Math.pow(2, BI_FP)
4807 BigInteger.prototype.F1 = BI_FP - dbits
4808 BigInteger.prototype.F2 = 2 * dbits - BI_FP
4809
4810 // Digit conversions
4811 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
4812 var BI_RC = new Array()
4813 var rr, vv
4814 rr = "0".charCodeAt(0)
4815 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
4816 rr = "a".charCodeAt(0)
4817 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
4818 rr = "A".charCodeAt(0)
4819 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
4820
4821 function int2char(n) {
4822 return BI_RM.charAt(n)
4823 }
4824
4825 function intAt(s, i) {
4826 var c = BI_RC[s.charCodeAt(i)]
4827 return (c == null) ? -1 : c
4828 }
4829
4830 // (protected) copy this to r
4831 function bnpCopyTo(r) {
4832 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
4833 r.t = this.t
4834 r.s = this.s
4835 }
4836
4837 // (protected) set from integer value x, -DV <= x < DV
4838 function bnpFromInt(x) {
4839 this.t = 1
4840 this.s = (x < 0) ? -1 : 0
4841 if (x > 0) this[0] = x
4842 else if (x < -1) this[0] = x + DV
4843 else this.t = 0
4844 }
4845
4846 // return bigint initialized to value
4847 function nbv(i) {
4848 var r = new BigInteger()
4849 r.fromInt(i)
4850 return r
4851 }
4852
4853 // (protected) set from string and radix
4854 function bnpFromString(s, b) {
4855 var self = this
4856
4857 var k
4858 if (b == 16) k = 4
4859 else if (b == 8) k = 3
4860 else if (b == 256) k = 8; // byte array
4861 else if (b == 2) k = 1
4862 else if (b == 32) k = 5
4863 else if (b == 4) k = 2
4864 else {
4865 self.fromRadix(s, b)
4866 return
4867 }
4868 self.t = 0
4869 self.s = 0
4870 var i = s.length,
4871 mi = false,
4872 sh = 0
4873 while (--i >= 0) {
4874 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
4875 if (x < 0) {
4876 if (s.charAt(i) == "-") mi = true
4877 continue
4878 }
4879 mi = false
4880 if (sh == 0)
4881 self[self.t++] = x
4882 else if (sh + k > self.DB) {
4883 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
4884 self[self.t++] = (x >> (self.DB - sh))
4885 } else
4886 self[self.t - 1] |= x << sh
4887 sh += k
4888 if (sh >= self.DB) sh -= self.DB
4889 }
4890 if (k == 8 && (s[0] & 0x80) != 0) {
4891 self.s = -1
4892 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
4893 }
4894 self.clamp()
4895 if (mi) BigInteger.ZERO.subTo(self, self)
4896 }
4897
4898 // (protected) clamp off excess high words
4899 function bnpClamp() {
4900 var c = this.s & this.DM
4901 while (this.t > 0 && this[this.t - 1] == c)--this.t
4902 }
4903
4904 // (public) return string representation in given radix
4905 function bnToString(b) {
4906 var self = this
4907 if (self.s < 0) return "-" + self.negate()
4908 .toString(b)
4909 var k
4910 if (b == 16) k = 4
4911 else if (b == 8) k = 3
4912 else if (b == 2) k = 1
4913 else if (b == 32) k = 5
4914 else if (b == 4) k = 2
4915 else return self.toRadix(b)
4916 var km = (1 << k) - 1,
4917 d, m = false,
4918 r = "",
4919 i = self.t
4920 var p = self.DB - (i * self.DB) % k
4921 if (i-- > 0) {
4922 if (p < self.DB && (d = self[i] >> p) > 0) {
4923 m = true
4924 r = int2char(d)
4925 }
4926 while (i >= 0) {
4927 if (p < k) {
4928 d = (self[i] & ((1 << p) - 1)) << (k - p)
4929 d |= self[--i] >> (p += self.DB - k)
4930 } else {
4931 d = (self[i] >> (p -= k)) & km
4932 if (p <= 0) {
4933 p += self.DB
4934 --i
4935 }
4936 }
4937 if (d > 0) m = true
4938 if (m) r += int2char(d)
4939 }
4940 }
4941 return m ? r : "0"
4942 }
4943
4944 // (public) -this
4945 function bnNegate() {
4946 var r = new BigInteger()
4947 BigInteger.ZERO.subTo(this, r)
4948 return r
4949 }
4950
4951 // (public) |this|
4952 function bnAbs() {
4953 return (this.s < 0) ? this.negate() : this
4954 }
4955
4956 // (public) return + if this > a, - if this < a, 0 if equal
4957 function bnCompareTo(a) {
4958 var r = this.s - a.s
4959 if (r != 0) return r
4960 var i = this.t
4961 r = i - a.t
4962 if (r != 0) return (this.s < 0) ? -r : r
4963 while (--i >= 0)
4964 if ((r = this[i] - a[i]) != 0) return r
4965 return 0
4966 }
4967
4968 // returns bit length of the integer x
4969 function nbits(x) {
4970 var r = 1,
4971 t
4972 if ((t = x >>> 16) != 0) {
4973 x = t
4974 r += 16
4975 }
4976 if ((t = x >> 8) != 0) {
4977 x = t
4978 r += 8
4979 }
4980 if ((t = x >> 4) != 0) {
4981 x = t
4982 r += 4
4983 }
4984 if ((t = x >> 2) != 0) {
4985 x = t
4986 r += 2
4987 }
4988 if ((t = x >> 1) != 0) {
4989 x = t
4990 r += 1
4991 }
4992 return r
4993 }
4994
4995 // (public) return the number of bits in "this"
4996 function bnBitLength() {
4997 if (this.t <= 0) return 0
4998 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
4999 }
5000
5001 // (public) return the number of bytes in "this"
5002 function bnByteLength() {
5003 return this.bitLength() >> 3
5004 }
5005
5006 // (protected) r = this << n*DB
5007 function bnpDLShiftTo(n, r) {
5008 var i
5009 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
5010 for (i = n - 1; i >= 0; --i) r[i] = 0
5011 r.t = this.t + n
5012 r.s = this.s
5013 }
5014
5015 // (protected) r = this >> n*DB
5016 function bnpDRShiftTo(n, r) {
5017 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
5018 r.t = Math.max(this.t - n, 0)
5019 r.s = this.s
5020 }
5021
5022 // (protected) r = this << n
5023 function bnpLShiftTo(n, r) {
5024 var self = this
5025 var bs = n % self.DB
5026 var cbs = self.DB - bs
5027 var bm = (1 << cbs) - 1
5028 var ds = Math.floor(n / self.DB),
5029 c = (self.s << bs) & self.DM,
5030 i
5031 for (i = self.t - 1; i >= 0; --i) {
5032 r[i + ds + 1] = (self[i] >> cbs) | c
5033 c = (self[i] & bm) << bs
5034 }
5035 for (i = ds - 1; i >= 0; --i) r[i] = 0
5036 r[ds] = c
5037 r.t = self.t + ds + 1
5038 r.s = self.s
5039 r.clamp()
5040 }
5041
5042 // (protected) r = this >> n
5043 function bnpRShiftTo(n, r) {
5044 var self = this
5045 r.s = self.s
5046 var ds = Math.floor(n / self.DB)
5047 if (ds >= self.t) {
5048 r.t = 0
5049 return
5050 }
5051 var bs = n % self.DB
5052 var cbs = self.DB - bs
5053 var bm = (1 << bs) - 1
5054 r[0] = self[ds] >> bs
5055 for (var i = ds + 1; i < self.t; ++i) {
5056 r[i - ds - 1] |= (self[i] & bm) << cbs
5057 r[i - ds] = self[i] >> bs
5058 }
5059 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
5060 r.t = self.t - ds
5061 r.clamp()
5062 }
5063
5064 // (protected) r = this - a
5065 function bnpSubTo(a, r) {
5066 var self = this
5067 var i = 0,
5068 c = 0,
5069 m = Math.min(a.t, self.t)
5070 while (i < m) {
5071 c += self[i] - a[i]
5072 r[i++] = c & self.DM
5073 c >>= self.DB
5074 }
5075 if (a.t < self.t) {
5076 c -= a.s
5077 while (i < self.t) {
5078 c += self[i]
5079 r[i++] = c & self.DM
5080 c >>= self.DB
5081 }
5082 c += self.s
5083 } else {
5084 c += self.s
5085 while (i < a.t) {
5086 c -= a[i]
5087 r[i++] = c & self.DM
5088 c >>= self.DB
5089 }
5090 c -= a.s
5091 }
5092 r.s = (c < 0) ? -1 : 0
5093 if (c < -1) r[i++] = self.DV + c
5094 else if (c > 0) r[i++] = c
5095 r.t = i
5096 r.clamp()
5097 }
5098
5099 // (protected) r = this * a, r != this,a (HAC 14.12)
5100 // "this" should be the larger one if appropriate.
5101 function bnpMultiplyTo(a, r) {
5102 var x = this.abs(),
5103 y = a.abs()
5104 var i = x.t
5105 r.t = i + y.t
5106 while (--i >= 0) r[i] = 0
5107 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
5108 r.s = 0
5109 r.clamp()
5110 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
5111 }
5112
5113 // (protected) r = this^2, r != this (HAC 14.16)
5114 function bnpSquareTo(r) {
5115 var x = this.abs()
5116 var i = r.t = 2 * x.t
5117 while (--i >= 0) r[i] = 0
5118 for (i = 0; i < x.t - 1; ++i) {
5119 var c = x.am(i, x[i], r, 2 * i, 0, 1)
5120 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
5121 r[i + x.t] -= x.DV
5122 r[i + x.t + 1] = 1
5123 }
5124 }
5125 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
5126 r.s = 0
5127 r.clamp()
5128 }
5129
5130 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
5131 // r != q, this != m. q or r may be null.
5132 function bnpDivRemTo(m, q, r) {
5133 var self = this
5134 var pm = m.abs()
5135 if (pm.t <= 0) return
5136 var pt = self.abs()
5137 if (pt.t < pm.t) {
5138 if (q != null) q.fromInt(0)
5139 if (r != null) self.copyTo(r)
5140 return
5141 }
5142 if (r == null) r = new BigInteger()
5143 var y = new BigInteger(),
5144 ts = self.s,
5145 ms = m.s
5146 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
5147 if (nsh > 0) {
5148 pm.lShiftTo(nsh, y)
5149 pt.lShiftTo(nsh, r)
5150 } else {
5151 pm.copyTo(y)
5152 pt.copyTo(r)
5153 }
5154 var ys = y.t
5155 var y0 = y[ys - 1]
5156 if (y0 == 0) return
5157 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
5158 var d1 = self.FV / yt,
5159 d2 = (1 << self.F1) / yt,
5160 e = 1 << self.F2
5161 var i = r.t,
5162 j = i - ys,
5163 t = (q == null) ? new BigInteger() : q
5164 y.dlShiftTo(j, t)
5165 if (r.compareTo(t) >= 0) {
5166 r[r.t++] = 1
5167 r.subTo(t, r)
5168 }
5169 BigInteger.ONE.dlShiftTo(ys, t)
5170 t.subTo(y, y); // "negative" y so we can replace sub with am later
5171 while (y.t < ys) y[y.t++] = 0
5172 while (--j >= 0) {
5173 // Estimate quotient digit
5174 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
5175 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
5176 y.dlShiftTo(j, t)
5177 r.subTo(t, r)
5178 while (r[i] < --qd) r.subTo(t, r)
5179 }
5180 }
5181 if (q != null) {
5182 r.drShiftTo(ys, q)
5183 if (ts != ms) BigInteger.ZERO.subTo(q, q)
5184 }
5185 r.t = ys
5186 r.clamp()
5187 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
5188 if (ts < 0) BigInteger.ZERO.subTo(r, r)
5189 }
5190
5191 // (public) this mod a
5192 function bnMod(a) {
5193 var r = new BigInteger()
5194 this.abs()
5195 .divRemTo(a, null, r)
5196 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
5197 return r
5198 }
5199
5200 // Modular reduction using "classic" algorithm
5201 function Classic(m) {
5202 this.m = m
5203 }
5204
5205 function cConvert(x) {
5206 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
5207 else return x
5208 }
5209
5210 function cRevert(x) {
5211 return x
5212 }
5213
5214 function cReduce(x) {
5215 x.divRemTo(this.m, null, x)
5216 }
5217
5218 function cMulTo(x, y, r) {
5219 x.multiplyTo(y, r)
5220 this.reduce(r)
5221 }
5222
5223 function cSqrTo(x, r) {
5224 x.squareTo(r)
5225 this.reduce(r)
5226 }
5227
5228 Classic.prototype.convert = cConvert
5229 Classic.prototype.revert = cRevert
5230 Classic.prototype.reduce = cReduce
5231 Classic.prototype.mulTo = cMulTo
5232 Classic.prototype.sqrTo = cSqrTo
5233
5234 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
5235 // justification:
5236 // xy == 1 (mod m)
5237 // xy = 1+km
5238 // xy(2-xy) = (1+km)(1-km)
5239 // x[y(2-xy)] = 1-k^2m^2
5240 // x[y(2-xy)] == 1 (mod m^2)
5241 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
5242 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
5243 // JS multiply "overflows" differently from C/C++, so care is needed here.
5244 function bnpInvDigit() {
5245 if (this.t < 1) return 0
5246 var x = this[0]
5247 if ((x & 1) == 0) return 0
5248 var y = x & 3; // y == 1/x mod 2^2
5249 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
5250 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
5251 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
5252 // last step - calculate inverse mod DV directly
5253 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
5254 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
5255 // we really want the negative inverse, and -DV < y < DV
5256 return (y > 0) ? this.DV - y : -y
5257 }
5258
5259 // Montgomery reduction
5260 function Montgomery(m) {
5261 this.m = m
5262 this.mp = m.invDigit()
5263 this.mpl = this.mp & 0x7fff
5264 this.mph = this.mp >> 15
5265 this.um = (1 << (m.DB - 15)) - 1
5266 this.mt2 = 2 * m.t
5267 }
5268
5269 // xR mod m
5270 function montConvert(x) {
5271 var r = new BigInteger()
5272 x.abs()
5273 .dlShiftTo(this.m.t, r)
5274 r.divRemTo(this.m, null, r)
5275 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
5276 return r
5277 }
5278
5279 // x/R mod m
5280 function montRevert(x) {
5281 var r = new BigInteger()
5282 x.copyTo(r)
5283 this.reduce(r)
5284 return r
5285 }
5286
5287 // x = x/R mod m (HAC 14.32)
5288 function montReduce(x) {
5289 while (x.t <= this.mt2) // pad x so am has enough room later
5290 x[x.t++] = 0
5291 for (var i = 0; i < this.m.t; ++i) {
5292 // faster way of calculating u0 = x[i]*mp mod DV
5293 var j = x[i] & 0x7fff
5294 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
5295 // use am to combine the multiply-shift-add into one call
5296 j = i + this.m.t
5297 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
5298 // propagate carry
5299 while (x[j] >= x.DV) {
5300 x[j] -= x.DV
5301 x[++j]++
5302 }
5303 }
5304 x.clamp()
5305 x.drShiftTo(this.m.t, x)
5306 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
5307 }
5308
5309 // r = "x^2/R mod m"; x != r
5310 function montSqrTo(x, r) {
5311 x.squareTo(r)
5312 this.reduce(r)
5313 }
5314
5315 // r = "xy/R mod m"; x,y != r
5316 function montMulTo(x, y, r) {
5317 x.multiplyTo(y, r)
5318 this.reduce(r)
5319 }
5320
5321 Montgomery.prototype.convert = montConvert
5322 Montgomery.prototype.revert = montRevert
5323 Montgomery.prototype.reduce = montReduce
5324 Montgomery.prototype.mulTo = montMulTo
5325 Montgomery.prototype.sqrTo = montSqrTo
5326
5327 // (protected) true iff this is even
5328 function bnpIsEven() {
5329 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
5330 }
5331
5332 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
5333 function bnpExp(e, z) {
5334 if (e > 0xffffffff || e < 1) return BigInteger.ONE
5335 var r = new BigInteger(),
5336 r2 = new BigInteger(),
5337 g = z.convert(this),
5338 i = nbits(e) - 1
5339 g.copyTo(r)
5340 while (--i >= 0) {
5341 z.sqrTo(r, r2)
5342 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
5343 else {
5344 var t = r
5345 r = r2
5346 r2 = t
5347 }
5348 }
5349 return z.revert(r)
5350 }
5351
5352 // (public) this^e % m, 0 <= e < 2^32
5353 function bnModPowInt(e, m) {
5354 var z
5355 if (e < 256 || m.isEven()) z = new Classic(m)
5356 else z = new Montgomery(m)
5357 return this.exp(e, z)
5358 }
5359
5360 // protected
5361 proto.copyTo = bnpCopyTo
5362 proto.fromInt = bnpFromInt
5363 proto.fromString = bnpFromString
5364 proto.clamp = bnpClamp
5365 proto.dlShiftTo = bnpDLShiftTo
5366 proto.drShiftTo = bnpDRShiftTo
5367 proto.lShiftTo = bnpLShiftTo
5368 proto.rShiftTo = bnpRShiftTo
5369 proto.subTo = bnpSubTo
5370 proto.multiplyTo = bnpMultiplyTo
5371 proto.squareTo = bnpSquareTo
5372 proto.divRemTo = bnpDivRemTo
5373 proto.invDigit = bnpInvDigit
5374 proto.isEven = bnpIsEven
5375 proto.exp = bnpExp
5376
5377 // public
5378 proto.toString = bnToString
5379 proto.negate = bnNegate
5380 proto.abs = bnAbs
5381 proto.compareTo = bnCompareTo
5382 proto.bitLength = bnBitLength
5383 proto.byteLength = bnByteLength
5384 proto.mod = bnMod
5385 proto.modPowInt = bnModPowInt
5386
5387 // (public)
5388 function bnClone() {
5389 var r = new BigInteger()
5390 this.copyTo(r)
5391 return r
5392 }
5393
5394 // (public) return value as integer
5395 function bnIntValue() {
5396 if (this.s < 0) {
5397 if (this.t == 1) return this[0] - this.DV
5398 else if (this.t == 0) return -1
5399 } else if (this.t == 1) return this[0]
5400 else if (this.t == 0) return 0
5401 // assumes 16 < DB < 32
5402 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
5403 }
5404
5405 // (public) return value as byte
5406 function bnByteValue() {
5407 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
5408 }
5409
5410 // (public) return value as short (assumes DB>=16)
5411 function bnShortValue() {
5412 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
5413 }
5414
5415 // (protected) return x s.t. r^x < DV
5416 function bnpChunkSize(r) {
5417 return Math.floor(Math.LN2 * this.DB / Math.log(r))
5418 }
5419
5420 // (public) 0 if this == 0, 1 if this > 0
5421 function bnSigNum() {
5422 if (this.s < 0) return -1
5423 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
5424 else return 1
5425 }
5426
5427 // (protected) convert to radix string
5428 function bnpToRadix(b) {
5429 if (b == null) b = 10
5430 if (this.signum() == 0 || b < 2 || b > 36) return "0"
5431 var cs = this.chunkSize(b)
5432 var a = Math.pow(b, cs)
5433 var d = nbv(a),
5434 y = new BigInteger(),
5435 z = new BigInteger(),
5436 r = ""
5437 this.divRemTo(d, y, z)
5438 while (y.signum() > 0) {
5439 r = (a + z.intValue())
5440 .toString(b)
5441 .substr(1) + r
5442 y.divRemTo(d, y, z)
5443 }
5444 return z.intValue()
5445 .toString(b) + r
5446 }
5447
5448 // (protected) convert from radix string
5449 function bnpFromRadix(s, b) {
5450 var self = this
5451 self.fromInt(0)
5452 if (b == null) b = 10
5453 var cs = self.chunkSize(b)
5454 var d = Math.pow(b, cs),
5455 mi = false,
5456 j = 0,
5457 w = 0
5458 for (var i = 0; i < s.length; ++i) {
5459 var x = intAt(s, i)
5460 if (x < 0) {
5461 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
5462 continue
5463 }
5464 w = b * w + x
5465 if (++j >= cs) {
5466 self.dMultiply(d)
5467 self.dAddOffset(w, 0)
5468 j = 0
5469 w = 0
5470 }
5471 }
5472 if (j > 0) {
5473 self.dMultiply(Math.pow(b, j))
5474 self.dAddOffset(w, 0)
5475 }
5476 if (mi) BigInteger.ZERO.subTo(self, self)
5477 }
5478
5479 // (protected) alternate constructor
5480 function bnpFromNumber(a, b, c) {
5481 var self = this
5482 if ("number" == typeof b) {
5483 // new BigInteger(int,int,RNG)
5484 if (a < 2) self.fromInt(1)
5485 else {
5486 self.fromNumber(a, c)
5487 if (!self.testBit(a - 1)) // force MSB set
5488 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
5489 if (self.isEven()) self.dAddOffset(1, 0); // force odd
5490 while (!self.isProbablePrime(b)) {
5491 self.dAddOffset(2, 0)
5492 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
5493 }
5494 }
5495 } else {
5496 // new BigInteger(int,RNG)
5497 var x = new Array(),
5498 t = a & 7
5499 x.length = (a >> 3) + 1
5500 b.nextBytes(x)
5501 if (t > 0) x[0] &= ((1 << t) - 1)
5502 else x[0] = 0
5503 self.fromString(x, 256)
5504 }
5505 }
5506
5507 // (public) convert to bigendian byte array
5508 function bnToByteArray() {
5509 var self = this
5510 var i = self.t,
5511 r = new Array()
5512 r[0] = self.s
5513 var p = self.DB - (i * self.DB) % 8,
5514 d, k = 0
5515 if (i-- > 0) {
5516 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
5517 r[k++] = d | (self.s << (self.DB - p))
5518 while (i >= 0) {
5519 if (p < 8) {
5520 d = (self[i] & ((1 << p) - 1)) << (8 - p)
5521 d |= self[--i] >> (p += self.DB - 8)
5522 } else {
5523 d = (self[i] >> (p -= 8)) & 0xff
5524 if (p <= 0) {
5525 p += self.DB
5526 --i
5527 }
5528 }
5529 if ((d & 0x80) != 0) d |= -256
5530 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
5531 if (k > 0 || d != self.s) r[k++] = d
5532 }
5533 }
5534 return r
5535 }
5536
5537 function bnEquals(a) {
5538 return (this.compareTo(a) == 0)
5539 }
5540
5541 function bnMin(a) {
5542 return (this.compareTo(a) < 0) ? this : a
5543 }
5544
5545 function bnMax(a) {
5546 return (this.compareTo(a) > 0) ? this : a
5547 }
5548
5549 // (protected) r = this op a (bitwise)
5550 function bnpBitwiseTo(a, op, r) {
5551 var self = this
5552 var i, f, m = Math.min(a.t, self.t)
5553 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
5554 if (a.t < self.t) {
5555 f = a.s & self.DM
5556 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
5557 r.t = self.t
5558 } else {
5559 f = self.s & self.DM
5560 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
5561 r.t = a.t
5562 }
5563 r.s = op(self.s, a.s)
5564 r.clamp()
5565 }
5566
5567 // (public) this & a
5568 function op_and(x, y) {
5569 return x & y
5570 }
5571
5572 function bnAnd(a) {
5573 var r = new BigInteger()
5574 this.bitwiseTo(a, op_and, r)
5575 return r
5576 }
5577
5578 // (public) this | a
5579 function op_or(x, y) {
5580 return x | y
5581 }
5582
5583 function bnOr(a) {
5584 var r = new BigInteger()
5585 this.bitwiseTo(a, op_or, r)
5586 return r
5587 }
5588
5589 // (public) this ^ a
5590 function op_xor(x, y) {
5591 return x ^ y
5592 }
5593
5594 function bnXor(a) {
5595 var r = new BigInteger()
5596 this.bitwiseTo(a, op_xor, r)
5597 return r
5598 }
5599
5600 // (public) this & ~a
5601 function op_andnot(x, y) {
5602 return x & ~y
5603 }
5604
5605 function bnAndNot(a) {
5606 var r = new BigInteger()
5607 this.bitwiseTo(a, op_andnot, r)
5608 return r
5609 }
5610
5611 // (public) ~this
5612 function bnNot() {
5613 var r = new BigInteger()
5614 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
5615 r.t = this.t
5616 r.s = ~this.s
5617 return r
5618 }
5619
5620 // (public) this << n
5621 function bnShiftLeft(n) {
5622 var r = new BigInteger()
5623 if (n < 0) this.rShiftTo(-n, r)
5624 else this.lShiftTo(n, r)
5625 return r
5626 }
5627
5628 // (public) this >> n
5629 function bnShiftRight(n) {
5630 var r = new BigInteger()
5631 if (n < 0) this.lShiftTo(-n, r)
5632 else this.rShiftTo(n, r)
5633 return r
5634 }
5635
5636 // return index of lowest 1-bit in x, x < 2^31
5637 function lbit(x) {
5638 if (x == 0) return -1
5639 var r = 0
5640 if ((x & 0xffff) == 0) {
5641 x >>= 16
5642 r += 16
5643 }
5644 if ((x & 0xff) == 0) {
5645 x >>= 8
5646 r += 8
5647 }
5648 if ((x & 0xf) == 0) {
5649 x >>= 4
5650 r += 4
5651 }
5652 if ((x & 3) == 0) {
5653 x >>= 2
5654 r += 2
5655 }
5656 if ((x & 1) == 0)++r
5657 return r
5658 }
5659
5660 // (public) returns index of lowest 1-bit (or -1 if none)
5661 function bnGetLowestSetBit() {
5662 for (var i = 0; i < this.t; ++i)
5663 if (this[i] != 0) return i * this.DB + lbit(this[i])
5664 if (this.s < 0) return this.t * this.DB
5665 return -1
5666 }
5667
5668 // return number of 1 bits in x
5669 function cbit(x) {
5670 var r = 0
5671 while (x != 0) {
5672 x &= x - 1
5673 ++r
5674 }
5675 return r
5676 }
5677
5678 // (public) return number of set bits
5679 function bnBitCount() {
5680 var r = 0,
5681 x = this.s & this.DM
5682 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
5683 return r
5684 }
5685
5686 // (public) true iff nth bit is set
5687 function bnTestBit(n) {
5688 var j = Math.floor(n / this.DB)
5689 if (j >= this.t) return (this.s != 0)
5690 return ((this[j] & (1 << (n % this.DB))) != 0)
5691 }
5692
5693 // (protected) this op (1<<n)
5694 function bnpChangeBit(n, op) {
5695 var r = BigInteger.ONE.shiftLeft(n)
5696 this.bitwiseTo(r, op, r)
5697 return r
5698 }
5699
5700 // (public) this | (1<<n)
5701 function bnSetBit(n) {
5702 return this.changeBit(n, op_or)
5703 }
5704
5705 // (public) this & ~(1<<n)
5706 function bnClearBit(n) {
5707 return this.changeBit(n, op_andnot)
5708 }
5709
5710 // (public) this ^ (1<<n)
5711 function bnFlipBit(n) {
5712 return this.changeBit(n, op_xor)
5713 }
5714
5715 // (protected) r = this + a
5716 function bnpAddTo(a, r) {
5717 var self = this
5718
5719 var i = 0,
5720 c = 0,
5721 m = Math.min(a.t, self.t)
5722 while (i < m) {
5723 c += self[i] + a[i]
5724 r[i++] = c & self.DM
5725 c >>= self.DB
5726 }
5727 if (a.t < self.t) {
5728 c += a.s
5729 while (i < self.t) {
5730 c += self[i]
5731 r[i++] = c & self.DM
5732 c >>= self.DB
5733 }
5734 c += self.s
5735 } else {
5736 c += self.s
5737 while (i < a.t) {
5738 c += a[i]
5739 r[i++] = c & self.DM
5740 c >>= self.DB
5741 }
5742 c += a.s
5743 }
5744 r.s = (c < 0) ? -1 : 0
5745 if (c > 0) r[i++] = c
5746 else if (c < -1) r[i++] = self.DV + c
5747 r.t = i
5748 r.clamp()
5749 }
5750
5751 // (public) this + a
5752 function bnAdd(a) {
5753 var r = new BigInteger()
5754 this.addTo(a, r)
5755 return r
5756 }
5757
5758 // (public) this - a
5759 function bnSubtract(a) {
5760 var r = new BigInteger()
5761 this.subTo(a, r)
5762 return r
5763 }
5764
5765 // (public) this * a
5766 function bnMultiply(a) {
5767 var r = new BigInteger()
5768 this.multiplyTo(a, r)
5769 return r
5770 }
5771
5772 // (public) this^2
5773 function bnSquare() {
5774 var r = new BigInteger()
5775 this.squareTo(r)
5776 return r
5777 }
5778
5779 // (public) this / a
5780 function bnDivide(a) {
5781 var r = new BigInteger()
5782 this.divRemTo(a, r, null)
5783 return r
5784 }
5785
5786 // (public) this % a
5787 function bnRemainder(a) {
5788 var r = new BigInteger()
5789 this.divRemTo(a, null, r)
5790 return r
5791 }
5792
5793 // (public) [this/a,this%a]
5794 function bnDivideAndRemainder(a) {
5795 var q = new BigInteger(),
5796 r = new BigInteger()
5797 this.divRemTo(a, q, r)
5798 return new Array(q, r)
5799 }
5800
5801 // (protected) this *= n, this >= 0, 1 < n < DV
5802 function bnpDMultiply(n) {
5803 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
5804 ++this.t
5805 this.clamp()
5806 }
5807
5808 // (protected) this += n << w words, this >= 0
5809 function bnpDAddOffset(n, w) {
5810 if (n == 0) return
5811 while (this.t <= w) this[this.t++] = 0
5812 this[w] += n
5813 while (this[w] >= this.DV) {
5814 this[w] -= this.DV
5815 if (++w >= this.t) this[this.t++] = 0
5816 ++this[w]
5817 }
5818 }
5819
5820 // A "null" reducer
5821 function NullExp() {}
5822
5823 function nNop(x) {
5824 return x
5825 }
5826
5827 function nMulTo(x, y, r) {
5828 x.multiplyTo(y, r)
5829 }
5830
5831 function nSqrTo(x, r) {
5832 x.squareTo(r)
5833 }
5834
5835 NullExp.prototype.convert = nNop
5836 NullExp.prototype.revert = nNop
5837 NullExp.prototype.mulTo = nMulTo
5838 NullExp.prototype.sqrTo = nSqrTo
5839
5840 // (public) this^e
5841 function bnPow(e) {
5842 return this.exp(e, new NullExp())
5843 }
5844
5845 // (protected) r = lower n words of "this * a", a.t <= n
5846 // "this" should be the larger one if appropriate.
5847 function bnpMultiplyLowerTo(a, n, r) {
5848 var i = Math.min(this.t + a.t, n)
5849 r.s = 0; // assumes a,this >= 0
5850 r.t = i
5851 while (i > 0) r[--i] = 0
5852 var j
5853 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
5854 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
5855 r.clamp()
5856 }
5857
5858 // (protected) r = "this * a" without lower n words, n > 0
5859 // "this" should be the larger one if appropriate.
5860 function bnpMultiplyUpperTo(a, n, r) {
5861 --n
5862 var i = r.t = this.t + a.t - n
5863 r.s = 0; // assumes a,this >= 0
5864 while (--i >= 0) r[i] = 0
5865 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
5866 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
5867 r.clamp()
5868 r.drShiftTo(1, r)
5869 }
5870
5871 // Barrett modular reduction
5872 function Barrett(m) {
5873 // setup Barrett
5874 this.r2 = new BigInteger()
5875 this.q3 = new BigInteger()
5876 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
5877 this.mu = this.r2.divide(m)
5878 this.m = m
5879 }
5880
5881 function barrettConvert(x) {
5882 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
5883 else if (x.compareTo(this.m) < 0) return x
5884 else {
5885 var r = new BigInteger()
5886 x.copyTo(r)
5887 this.reduce(r)
5888 return r
5889 }
5890 }
5891
5892 function barrettRevert(x) {
5893 return x
5894 }
5895
5896 // x = x mod m (HAC 14.42)
5897 function barrettReduce(x) {
5898 var self = this
5899 x.drShiftTo(self.m.t - 1, self.r2)
5900 if (x.t > self.m.t + 1) {
5901 x.t = self.m.t + 1
5902 x.clamp()
5903 }
5904 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
5905 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
5906 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
5907 x.subTo(self.r2, x)
5908 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
5909 }
5910
5911 // r = x^2 mod m; x != r
5912 function barrettSqrTo(x, r) {
5913 x.squareTo(r)
5914 this.reduce(r)
5915 }
5916
5917 // r = x*y mod m; x,y != r
5918 function barrettMulTo(x, y, r) {
5919 x.multiplyTo(y, r)
5920 this.reduce(r)
5921 }
5922
5923 Barrett.prototype.convert = barrettConvert
5924 Barrett.prototype.revert = barrettRevert
5925 Barrett.prototype.reduce = barrettReduce
5926 Barrett.prototype.mulTo = barrettMulTo
5927 Barrett.prototype.sqrTo = barrettSqrTo
5928
5929 // (public) this^e % m (HAC 14.85)
5930 function bnModPow(e, m) {
5931 var i = e.bitLength(),
5932 k, r = nbv(1),
5933 z
5934 if (i <= 0) return r
5935 else if (i < 18) k = 1
5936 else if (i < 48) k = 3
5937 else if (i < 144) k = 4
5938 else if (i < 768) k = 5
5939 else k = 6
5940 if (i < 8)
5941 z = new Classic(m)
5942 else if (m.isEven())
5943 z = new Barrett(m)
5944 else
5945 z = new Montgomery(m)
5946
5947 // precomputation
5948 var g = new Array(),
5949 n = 3,
5950 k1 = k - 1,
5951 km = (1 << k) - 1
5952 g[1] = z.convert(this)
5953 if (k > 1) {
5954 var g2 = new BigInteger()
5955 z.sqrTo(g[1], g2)
5956 while (n <= km) {
5957 g[n] = new BigInteger()
5958 z.mulTo(g2, g[n - 2], g[n])
5959 n += 2
5960 }
5961 }
5962
5963 var j = e.t - 1,
5964 w, is1 = true,
5965 r2 = new BigInteger(),
5966 t
5967 i = nbits(e[j]) - 1
5968 while (j >= 0) {
5969 if (i >= k1) w = (e[j] >> (i - k1)) & km
5970 else {
5971 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
5972 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
5973 }
5974
5975 n = k
5976 while ((w & 1) == 0) {
5977 w >>= 1
5978 --n
5979 }
5980 if ((i -= n) < 0) {
5981 i += this.DB
5982 --j
5983 }
5984 if (is1) { // ret == 1, don't bother squaring or multiplying it
5985 g[w].copyTo(r)
5986 is1 = false
5987 } else {
5988 while (n > 1) {
5989 z.sqrTo(r, r2)
5990 z.sqrTo(r2, r)
5991 n -= 2
5992 }
5993 if (n > 0) z.sqrTo(r, r2)
5994 else {
5995 t = r
5996 r = r2
5997 r2 = t
5998 }
5999 z.mulTo(r2, g[w], r)
6000 }
6001
6002 while (j >= 0 && (e[j] & (1 << i)) == 0) {
6003 z.sqrTo(r, r2)
6004 t = r
6005 r = r2
6006 r2 = t
6007 if (--i < 0) {
6008 i = this.DB - 1
6009 --j
6010 }
6011 }
6012 }
6013 return z.revert(r)
6014 }
6015
6016 // (public) gcd(this,a) (HAC 14.54)
6017 function bnGCD(a) {
6018 var x = (this.s < 0) ? this.negate() : this.clone()
6019 var y = (a.s < 0) ? a.negate() : a.clone()
6020 if (x.compareTo(y) < 0) {
6021 var t = x
6022 x = y
6023 y = t
6024 }
6025 var i = x.getLowestSetBit(),
6026 g = y.getLowestSetBit()
6027 if (g < 0) return x
6028 if (i < g) g = i
6029 if (g > 0) {
6030 x.rShiftTo(g, x)
6031 y.rShiftTo(g, y)
6032 }
6033 while (x.signum() > 0) {
6034 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
6035 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
6036 if (x.compareTo(y) >= 0) {
6037 x.subTo(y, x)
6038 x.rShiftTo(1, x)
6039 } else {
6040 y.subTo(x, y)
6041 y.rShiftTo(1, y)
6042 }
6043 }
6044 if (g > 0) y.lShiftTo(g, y)
6045 return y
6046 }
6047
6048 // (protected) this % n, n < 2^26
6049 function bnpModInt(n) {
6050 if (n <= 0) return 0
6051 var d = this.DV % n,
6052 r = (this.s < 0) ? n - 1 : 0
6053 if (this.t > 0)
6054 if (d == 0) r = this[0] % n
6055 else
6056 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
6057 return r
6058 }
6059
6060 // (public) 1/this % m (HAC 14.61)
6061 function bnModInverse(m) {
6062 var ac = m.isEven()
6063 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
6064 var u = m.clone(),
6065 v = this.clone()
6066 var a = nbv(1),
6067 b = nbv(0),
6068 c = nbv(0),
6069 d = nbv(1)
6070 while (u.signum() != 0) {
6071 while (u.isEven()) {
6072 u.rShiftTo(1, u)
6073 if (ac) {
6074 if (!a.isEven() || !b.isEven()) {
6075 a.addTo(this, a)
6076 b.subTo(m, b)
6077 }
6078 a.rShiftTo(1, a)
6079 } else if (!b.isEven()) b.subTo(m, b)
6080 b.rShiftTo(1, b)
6081 }
6082 while (v.isEven()) {
6083 v.rShiftTo(1, v)
6084 if (ac) {
6085 if (!c.isEven() || !d.isEven()) {
6086 c.addTo(this, c)
6087 d.subTo(m, d)
6088 }
6089 c.rShiftTo(1, c)
6090 } else if (!d.isEven()) d.subTo(m, d)
6091 d.rShiftTo(1, d)
6092 }
6093 if (u.compareTo(v) >= 0) {
6094 u.subTo(v, u)
6095 if (ac) a.subTo(c, a)
6096 b.subTo(d, b)
6097 } else {
6098 v.subTo(u, v)
6099 if (ac) c.subTo(a, c)
6100 d.subTo(b, d)
6101 }
6102 }
6103 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
6104 if (d.compareTo(m) >= 0) return d.subtract(m)
6105 if (d.signum() < 0) d.addTo(m, d)
6106 else return d
6107 if (d.signum() < 0) return d.add(m)
6108 else return d
6109 }
6110
6111 var lowprimes = [
6112 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
6113 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
6114 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
6115 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
6116 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
6117 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
6118 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
6119 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
6120 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
6121 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
6122 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
6123 ]
6124
6125 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
6126
6127 // (public) test primality with certainty >= 1-.5^t
6128 function bnIsProbablePrime(t) {
6129 var i, x = this.abs()
6130 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
6131 for (i = 0; i < lowprimes.length; ++i)
6132 if (x[0] == lowprimes[i]) return true
6133 return false
6134 }
6135 if (x.isEven()) return false
6136 i = 1
6137 while (i < lowprimes.length) {
6138 var m = lowprimes[i],
6139 j = i + 1
6140 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
6141 m = x.modInt(m)
6142 while (i < j) if (m % lowprimes[i++] == 0) return false
6143 }
6144 return x.millerRabin(t)
6145 }
6146
6147 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
6148 function bnpMillerRabin(t) {
6149 var n1 = this.subtract(BigInteger.ONE)
6150 var k = n1.getLowestSetBit()
6151 if (k <= 0) return false
6152 var r = n1.shiftRight(k)
6153 t = (t + 1) >> 1
6154 if (t > lowprimes.length) t = lowprimes.length
6155 var a = new BigInteger(null)
6156 var j, bases = []
6157 for (var i = 0; i < t; ++i) {
6158 for (;;) {
6159 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
6160 if (bases.indexOf(j) == -1) break
6161 }
6162 bases.push(j)
6163 a.fromInt(j)
6164 var y = a.modPow(r, this)
6165 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
6166 var j = 1
6167 while (j++ < k && y.compareTo(n1) != 0) {
6168 y = y.modPowInt(2, this)
6169 if (y.compareTo(BigInteger.ONE) == 0) return false
6170 }
6171 if (y.compareTo(n1) != 0) return false
6172 }
6173 }
6174 return true
6175 }
6176
6177 // protected
6178 proto.chunkSize = bnpChunkSize
6179 proto.toRadix = bnpToRadix
6180 proto.fromRadix = bnpFromRadix
6181 proto.fromNumber = bnpFromNumber
6182 proto.bitwiseTo = bnpBitwiseTo
6183 proto.changeBit = bnpChangeBit
6184 proto.addTo = bnpAddTo
6185 proto.dMultiply = bnpDMultiply
6186 proto.dAddOffset = bnpDAddOffset
6187 proto.multiplyLowerTo = bnpMultiplyLowerTo
6188 proto.multiplyUpperTo = bnpMultiplyUpperTo
6189 proto.modInt = bnpModInt
6190 proto.millerRabin = bnpMillerRabin
6191
6192 // public
6193 proto.clone = bnClone
6194 proto.intValue = bnIntValue
6195 proto.byteValue = bnByteValue
6196 proto.shortValue = bnShortValue
6197 proto.signum = bnSigNum
6198 proto.toByteArray = bnToByteArray
6199 proto.equals = bnEquals
6200 proto.min = bnMin
6201 proto.max = bnMax
6202 proto.and = bnAnd
6203 proto.or = bnOr
6204 proto.xor = bnXor
6205 proto.andNot = bnAndNot
6206 proto.not = bnNot
6207 proto.shiftLeft = bnShiftLeft
6208 proto.shiftRight = bnShiftRight
6209 proto.getLowestSetBit = bnGetLowestSetBit
6210 proto.bitCount = bnBitCount
6211 proto.testBit = bnTestBit
6212 proto.setBit = bnSetBit
6213 proto.clearBit = bnClearBit
6214 proto.flipBit = bnFlipBit
6215 proto.add = bnAdd
6216 proto.subtract = bnSubtract
6217 proto.multiply = bnMultiply
6218 proto.divide = bnDivide
6219 proto.remainder = bnRemainder
6220 proto.divideAndRemainder = bnDivideAndRemainder
6221 proto.modPow = bnModPow
6222 proto.modInverse = bnModInverse
6223 proto.pow = bnPow
6224 proto.gcd = bnGCD
6225 proto.isProbablePrime = bnIsProbablePrime
6226
6227 // JSBN-specific extension
6228 proto.square = bnSquare
6229
6230 // constants
6231 BigInteger.ZERO = nbv(0)
6232 BigInteger.ONE = nbv(1)
6233 BigInteger.valueOf = nbv
6234
6235 module.exports = BigInteger
6236
6237 },{"../package.json":4}],2:[function(require,module,exports){
6238 (function (Buffer){
6239 // FIXME: Kind of a weird way to throw exceptions, consider removing
6240 var assert = require('assert')
6241 var BigInteger = require('./bigi')
6242
6243 /**
6244 * Turns a byte array into a big integer.
6245 *
6246 * This function will interpret a byte array as a big integer in big
6247 * endian notation.
6248 */
6249 BigInteger.fromByteArrayUnsigned = function(byteArray) {
6250 // BigInteger expects a DER integer conformant byte array
6251 if (byteArray[0] & 0x80) {
6252 return new BigInteger([0].concat(byteArray))
6253 }
6254
6255 return new BigInteger(byteArray)
6256 }
6257
6258 /**
6259 * Returns a byte array representation of the big integer.
6260 *
6261 * This returns the absolute of the contained value in big endian
6262 * form. A value of zero results in an empty array.
6263 */
6264 BigInteger.prototype.toByteArrayUnsigned = function() {
6265 var byteArray = this.toByteArray()
6266 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
6267 }
6268
6269 BigInteger.fromDERInteger = function(byteArray) {
6270 return new BigInteger(byteArray)
6271 }
6272
6273 /*
6274 * Converts BigInteger to a DER integer representation.
6275 *
6276 * The format for this value uses the most significant bit as a sign
6277 * bit. If the most significant bit is already set and the integer is
6278 * positive, a 0x00 is prepended.
6279 *
6280 * Examples:
6281 *
6282 * 0 => 0x00
6283 * 1 => 0x01
6284 * -1 => 0xff
6285 * 127 => 0x7f
6286 * -127 => 0x81
6287 * 128 => 0x0080
6288 * -128 => 0x80
6289 * 255 => 0x00ff
6290 * -255 => 0xff01
6291 * 16300 => 0x3fac
6292 * -16300 => 0xc054
6293 * 62300 => 0x00f35c
6294 * -62300 => 0xff0ca4
6295 */
6296 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
6297
6298 BigInteger.fromBuffer = function(buffer) {
6299 // BigInteger expects a DER integer conformant byte array
6300 if (buffer[0] & 0x80) {
6301 var byteArray = Array.prototype.slice.call(buffer)
6302
6303 return new BigInteger([0].concat(byteArray))
6304 }
6305
6306 return new BigInteger(buffer)
6307 }
6308
6309 BigInteger.fromHex = function(hex) {
6310 if (hex === '') return BigInteger.ZERO
6311
6312 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
6313 assert.equal(hex.length % 2, 0, 'Incomplete hex')
6314 return new BigInteger(hex, 16)
6315 }
6316
6317 BigInteger.prototype.toBuffer = function(size) {
6318 var byteArray = this.toByteArrayUnsigned()
6319 var zeros = []
6320
6321 var padding = size - byteArray.length
6322 while (zeros.length < padding) zeros.push(0)
6323
6324 return new Buffer(zeros.concat(byteArray))
6325 }
6326
6327 BigInteger.prototype.toHex = function(size) {
6328 return this.toBuffer(size).toString('hex')
6329 }
6330
6331 }).call(this,require("buffer").Buffer)
6332 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
6333 var BigInteger = require('./bigi')
6334
6335 //addons
6336 require('./convert')
6337
6338 module.exports = BigInteger
6339 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
6340 module.exports={
6341 "name": "bigi",
6342 "version": "1.4.0",
6343 "description": "Big integers.",
6344 "keywords": [
6345 "cryptography",
6346 "math",
6347 "bitcoin",
6348 "arbitrary",
6349 "precision",
6350 "arithmetic",
6351 "big",
6352 "integer",
6353 "int",
6354 "number",
6355 "biginteger",
6356 "bigint",
6357 "bignumber",
6358 "decimal",
6359 "float"
6360 ],
6361 "devDependencies": {
6362 "mocha": "^1.20.1",
6363 "jshint": "^2.5.1",
6364 "coveralls": "^2.10.0",
6365 "istanbul": "^0.2.11"
6366 },
6367 "repository": {
6368 "url": "https://github.com/cryptocoinjs/bigi",
6369 "type": "git"
6370 },
6371 "main": "./lib/index.js",
6372 "scripts": {
6373 "test": "_mocha -- test/*.js",
6374 "jshint": "jshint --config jshint.json lib/*.js ; true",
6375 "unit": "mocha",
6376 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
6377 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
6378 },
6379 "dependencies": {},
6380 "testling": {
6381 "files": "test/*.js",
6382 "harness": "mocha",
6383 "browsers": [
6384 "ie/9..latest",
6385 "firefox/latest",
6386 "chrome/latest",
6387 "safari/6.0..latest",
6388 "iphone/6.0..latest",
6389 "android-browser/4.2..latest"
6390 ]
6391 },
6392 "bugs": {
6393 "url": "https://github.com/cryptocoinjs/bigi/issues"
6394 },
6395 "homepage": "https://github.com/cryptocoinjs/bigi",
6396 "_id": "bigi@1.4.0",
6397 "dist": {
6398 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
6399 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
6400 },
6401 "_from": "bigi@^1.4.0",
6402 "_npmVersion": "1.4.3",
6403 "_npmUser": {
6404 "name": "jp",
6405 "email": "jprichardson@gmail.com"
6406 },
6407 "maintainers": [
6408 {
6409 "name": "jp",
6410 "email": "jprichardson@gmail.com"
6411 },
6412 {
6413 "name": "midnightlightning",
6414 "email": "boydb@midnightdesign.ws"
6415 },
6416 {
6417 "name": "sidazhang",
6418 "email": "sidazhang89@gmail.com"
6419 },
6420 {
6421 "name": "nadav",
6422 "email": "npm@shesek.info"
6423 }
6424 ],
6425 "directories": {},
6426 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
6427 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
6428 }
6429
6430 },{}],5:[function(require,module,exports){
6431 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
6432 //
6433 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
6434 //
6435 // Originally from narwhal.js (http://narwhaljs.org)
6436 // Copyright (c) 2009 Thomas Robinson <280north.com>
6437 //
6438 // Permission is hereby granted, free of charge, to any person obtaining a copy
6439 // of this software and associated documentation files (the 'Software'), to
6440 // deal in the Software without restriction, including without limitation the
6441 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
6442 // sell copies of the Software, and to permit persons to whom the Software is
6443 // furnished to do so, subject to the following conditions:
6444 //
6445 // The above copyright notice and this permission notice shall be included in
6446 // all copies or substantial portions of the Software.
6447 //
6448 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
6449 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
6450 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
6451 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
6452 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
6453 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
6454
6455 // when used in node, this will actually load the util module we depend on
6456 // versus loading the builtin util module as happens otherwise
6457 // this is a bug in node module loading as far as I am concerned
6458 var util = require('util/');
6459
6460 var pSlice = Array.prototype.slice;
6461 var hasOwn = Object.prototype.hasOwnProperty;
6462
6463 // 1. The assert module provides functions that throw
6464 // AssertionError's when particular conditions are not met. The
6465 // assert module must conform to the following interface.
6466
6467 var assert = module.exports = ok;
6468
6469 // 2. The AssertionError is defined in assert.
6470 // new assert.AssertionError({ message: message,
6471 // actual: actual,
6472 // expected: expected })
6473
6474 assert.AssertionError = function AssertionError(options) {
6475 this.name = 'AssertionError';
6476 this.actual = options.actual;
6477 this.expected = options.expected;
6478 this.operator = options.operator;
6479 if (options.message) {
6480 this.message = options.message;
6481 this.generatedMessage = false;
6482 } else {
6483 this.message = getMessage(this);
6484 this.generatedMessage = true;
6485 }
6486 var stackStartFunction = options.stackStartFunction || fail;
6487
6488 if (Error.captureStackTrace) {
6489 Error.captureStackTrace(this, stackStartFunction);
6490 }
6491 else {
6492 // non v8 browsers so we can have a stacktrace
6493 var err = new Error();
6494 if (err.stack) {
6495 var out = err.stack;
6496
6497 // try to strip useless frames
6498 var fn_name = stackStartFunction.name;
6499 var idx = out.indexOf('\n' + fn_name);
6500 if (idx >= 0) {
6501 // once we have located the function frame
6502 // we need to strip out everything before it (and its line)
6503 var next_line = out.indexOf('\n', idx + 1);
6504 out = out.substring(next_line + 1);
6505 }
6506
6507 this.stack = out;
6508 }
6509 }
6510 };
6511
6512 // assert.AssertionError instanceof Error
6513 util.inherits(assert.AssertionError, Error);
6514
6515 function replacer(key, value) {
6516 if (util.isUndefined(value)) {
6517 return '' + value;
6518 }
6519 if (util.isNumber(value) && !isFinite(value)) {
6520 return value.toString();
6521 }
6522 if (util.isFunction(value) || util.isRegExp(value)) {
6523 return value.toString();
6524 }
6525 return value;
6526 }
6527
6528 function truncate(s, n) {
6529 if (util.isString(s)) {
6530 return s.length < n ? s : s.slice(0, n);
6531 } else {
6532 return s;
6533 }
6534 }
6535
6536 function getMessage(self) {
6537 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
6538 self.operator + ' ' +
6539 truncate(JSON.stringify(self.expected, replacer), 128);
6540 }
6541
6542 // At present only the three keys mentioned above are used and
6543 // understood by the spec. Implementations or sub modules can pass
6544 // other keys to the AssertionError's constructor - they will be
6545 // ignored.
6546
6547 // 3. All of the following functions must throw an AssertionError
6548 // when a corresponding condition is not met, with a message that
6549 // may be undefined if not provided. All assertion methods provide
6550 // both the actual and expected values to the assertion error for
6551 // display purposes.
6552
6553 function fail(actual, expected, message, operator, stackStartFunction) {
6554 throw new assert.AssertionError({
6555 message: message,
6556 actual: actual,
6557 expected: expected,
6558 operator: operator,
6559 stackStartFunction: stackStartFunction
6560 });
6561 }
6562
6563 // EXTENSION! allows for well behaved errors defined elsewhere.
6564 assert.fail = fail;
6565
6566 // 4. Pure assertion tests whether a value is truthy, as determined
6567 // by !!guard.
6568 // assert.ok(guard, message_opt);
6569 // This statement is equivalent to assert.equal(true, !!guard,
6570 // message_opt);. To test strictly for the value true, use
6571 // assert.strictEqual(true, guard, message_opt);.
6572
6573 function ok(value, message) {
6574 if (!value) fail(value, true, message, '==', assert.ok);
6575 }
6576 assert.ok = ok;
6577
6578 // 5. The equality assertion tests shallow, coercive equality with
6579 // ==.
6580 // assert.equal(actual, expected, message_opt);
6581
6582 assert.equal = function equal(actual, expected, message) {
6583 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
6584 };
6585
6586 // 6. The non-equality assertion tests for whether two objects are not equal
6587 // with != assert.notEqual(actual, expected, message_opt);
6588
6589 assert.notEqual = function notEqual(actual, expected, message) {
6590 if (actual == expected) {
6591 fail(actual, expected, message, '!=', assert.notEqual);
6592 }
6593 };
6594
6595 // 7. The equivalence assertion tests a deep equality relation.
6596 // assert.deepEqual(actual, expected, message_opt);
6597
6598 assert.deepEqual = function deepEqual(actual, expected, message) {
6599 if (!_deepEqual(actual, expected)) {
6600 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
6601 }
6602 };
6603
6604 function _deepEqual(actual, expected) {
6605 // 7.1. All identical values are equivalent, as determined by ===.
6606 if (actual === expected) {
6607 return true;
6608
6609 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
6610 if (actual.length != expected.length) return false;
6611
6612 for (var i = 0; i < actual.length; i++) {
6613 if (actual[i] !== expected[i]) return false;
6614 }
6615
6616 return true;
6617
6618 // 7.2. If the expected value is a Date object, the actual value is
6619 // equivalent if it is also a Date object that refers to the same time.
6620 } else if (util.isDate(actual) && util.isDate(expected)) {
6621 return actual.getTime() === expected.getTime();
6622
6623 // 7.3 If the expected value is a RegExp object, the actual value is
6624 // equivalent if it is also a RegExp object with the same source and
6625 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
6626 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
6627 return actual.source === expected.source &&
6628 actual.global === expected.global &&
6629 actual.multiline === expected.multiline &&
6630 actual.lastIndex === expected.lastIndex &&
6631 actual.ignoreCase === expected.ignoreCase;
6632
6633 // 7.4. Other pairs that do not both pass typeof value == 'object',
6634 // equivalence is determined by ==.
6635 } else if (!util.isObject(actual) && !util.isObject(expected)) {
6636 return actual == expected;
6637
6638 // 7.5 For all other Object pairs, including Array objects, equivalence is
6639 // determined by having the same number of owned properties (as verified
6640 // with Object.prototype.hasOwnProperty.call), the same set of keys
6641 // (although not necessarily the same order), equivalent values for every
6642 // corresponding key, and an identical 'prototype' property. Note: this
6643 // accounts for both named and indexed properties on Arrays.
6644 } else {
6645 return objEquiv(actual, expected);
6646 }
6647 }
6648
6649 function isArguments(object) {
6650 return Object.prototype.toString.call(object) == '[object Arguments]';
6651 }
6652
6653 function objEquiv(a, b) {
6654 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
6655 return false;
6656 // an identical 'prototype' property.
6657 if (a.prototype !== b.prototype) return false;
6658 // if one is a primitive, the other must be same
6659 if (util.isPrimitive(a) || util.isPrimitive(b)) {
6660 return a === b;
6661 }
6662 var aIsArgs = isArguments(a),
6663 bIsArgs = isArguments(b);
6664 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
6665 return false;
6666 if (aIsArgs) {
6667 a = pSlice.call(a);
6668 b = pSlice.call(b);
6669 return _deepEqual(a, b);
6670 }
6671 var ka = objectKeys(a),
6672 kb = objectKeys(b),
6673 key, i;
6674 // having the same number of owned properties (keys incorporates
6675 // hasOwnProperty)
6676 if (ka.length != kb.length)
6677 return false;
6678 //the same set of keys (although not necessarily the same order),
6679 ka.sort();
6680 kb.sort();
6681 //~~~cheap key test
6682 for (i = ka.length - 1; i >= 0; i--) {
6683 if (ka[i] != kb[i])
6684 return false;
6685 }
6686 //equivalent values for every corresponding key, and
6687 //~~~possibly expensive deep test
6688 for (i = ka.length - 1; i >= 0; i--) {
6689 key = ka[i];
6690 if (!_deepEqual(a[key], b[key])) return false;
6691 }
6692 return true;
6693 }
6694
6695 // 8. The non-equivalence assertion tests for any deep inequality.
6696 // assert.notDeepEqual(actual, expected, message_opt);
6697
6698 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
6699 if (_deepEqual(actual, expected)) {
6700 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
6701 }
6702 };
6703
6704 // 9. The strict equality assertion tests strict equality, as determined by ===.
6705 // assert.strictEqual(actual, expected, message_opt);
6706
6707 assert.strictEqual = function strictEqual(actual, expected, message) {
6708 if (actual !== expected) {
6709 fail(actual, expected, message, '===', assert.strictEqual);
6710 }
6711 };
6712
6713 // 10. The strict non-equality assertion tests for strict inequality, as
6714 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
6715
6716 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
6717 if (actual === expected) {
6718 fail(actual, expected, message, '!==', assert.notStrictEqual);
6719 }
6720 };
6721
6722 function expectedException(actual, expected) {
6723 if (!actual || !expected) {
6724 return false;
6725 }
6726
6727 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
6728 return expected.test(actual);
6729 } else if (actual instanceof expected) {
6730 return true;
6731 } else if (expected.call({}, actual) === true) {
6732 return true;
6733 }
6734
6735 return false;
6736 }
6737
6738 function _throws(shouldThrow, block, expected, message) {
6739 var actual;
6740
6741 if (util.isString(expected)) {
6742 message = expected;
6743 expected = null;
6744 }
6745
6746 try {
6747 block();
6748 } catch (e) {
6749 actual = e;
6750 }
6751
6752 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
6753 (message ? ' ' + message : '.');
6754
6755 if (shouldThrow && !actual) {
6756 fail(actual, expected, 'Missing expected exception' + message);
6757 }
6758
6759 if (!shouldThrow && expectedException(actual, expected)) {
6760 fail(actual, expected, 'Got unwanted exception' + message);
6761 }
6762
6763 if ((shouldThrow && actual && expected &&
6764 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
6765 throw actual;
6766 }
6767 }
6768
6769 // 11. Expected to throw an error:
6770 // assert.throws(block, Error_opt, message_opt);
6771
6772 assert.throws = function(block, /*optional*/error, /*optional*/message) {
6773 _throws.apply(this, [true].concat(pSlice.call(arguments)));
6774 };
6775
6776 // EXTENSION! This is annoying to write outside this module.
6777 assert.doesNotThrow = function(block, /*optional*/message) {
6778 _throws.apply(this, [false].concat(pSlice.call(arguments)));
6779 };
6780
6781 assert.ifError = function(err) { if (err) {throw err;}};
6782
6783 var objectKeys = Object.keys || function (obj) {
6784 var keys = [];
6785 for (var key in obj) {
6786 if (hasOwn.call(obj, key)) keys.push(key);
6787 }
6788 return keys;
6789 };
6790
6791 },{"util/":29}],6:[function(require,module,exports){
6792
6793 },{}],7:[function(require,module,exports){
6794 /*!
6795 * The buffer module from node.js, for the browser.
6796 *
6797 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
6798 * @license MIT
6799 */
6800
6801 var base64 = require('base64-js')
6802 var ieee754 = require('ieee754')
6803 var isArray = require('is-array')
6804
6805 exports.Buffer = Buffer
6806 exports.SlowBuffer = SlowBuffer
6807 exports.INSPECT_MAX_BYTES = 50
6808 Buffer.poolSize = 8192 // not used by this implementation
6809
6810 var rootParent = {}
6811
6812 /**
6813 * If `Buffer.TYPED_ARRAY_SUPPORT`:
6814 * === true Use Uint8Array implementation (fastest)
6815 * === false Use Object implementation (most compatible, even IE6)
6816 *
6817 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
6818 * Opera 11.6+, iOS 4.2+.
6819 *
6820 * Due to various browser bugs, sometimes the Object implementation will be used even
6821 * when the browser supports typed arrays.
6822 *
6823 * Note:
6824 *
6825 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
6826 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
6827 *
6828 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
6829 * on objects.
6830 *
6831 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
6832 *
6833 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
6834 * incorrect length in some situations.
6835
6836 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
6837 * get the Object implementation, which is slower but behaves correctly.
6838 */
6839 Buffer.TYPED_ARRAY_SUPPORT = (function () {
6840 function Bar () {}
6841 try {
6842 var arr = new Uint8Array(1)
6843 arr.foo = function () { return 42 }
6844 arr.constructor = Bar
6845 return arr.foo() === 42 && // typed array instances can be augmented
6846 arr.constructor === Bar && // constructor can be set
6847 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
6848 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
6849 } catch (e) {
6850 return false
6851 }
6852 })()
6853
6854 function kMaxLength () {
6855 return Buffer.TYPED_ARRAY_SUPPORT
6856 ? 0x7fffffff
6857 : 0x3fffffff
6858 }
6859
6860 /**
6861 * Class: Buffer
6862 * =============
6863 *
6864 * The Buffer constructor returns instances of `Uint8Array` that are augmented
6865 * with function properties for all the node `Buffer` API functions. We use
6866 * `Uint8Array` so that square bracket notation works as expected -- it returns
6867 * a single octet.
6868 *
6869 * By augmenting the instances, we can avoid modifying the `Uint8Array`
6870 * prototype.
6871 */
6872 function Buffer (arg) {
6873 if (!(this instanceof Buffer)) {
6874 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
6875 if (arguments.length > 1) return new Buffer(arg, arguments[1])
6876 return new Buffer(arg)
6877 }
6878
6879 this.length = 0
6880 this.parent = undefined
6881
6882 // Common case.
6883 if (typeof arg === 'number') {
6884 return fromNumber(this, arg)
6885 }
6886
6887 // Slightly less common case.
6888 if (typeof arg === 'string') {
6889 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
6890 }
6891
6892 // Unusual.
6893 return fromObject(this, arg)
6894 }
6895
6896 function fromNumber (that, length) {
6897 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
6898 if (!Buffer.TYPED_ARRAY_SUPPORT) {
6899 for (var i = 0; i < length; i++) {
6900 that[i] = 0
6901 }
6902 }
6903 return that
6904 }
6905
6906 function fromString (that, string, encoding) {
6907 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
6908
6909 // Assumption: byteLength() return value is always < kMaxLength.
6910 var length = byteLength(string, encoding) | 0
6911 that = allocate(that, length)
6912
6913 that.write(string, encoding)
6914 return that
6915 }
6916
6917 function fromObject (that, object) {
6918 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
6919
6920 if (isArray(object)) return fromArray(that, object)
6921
6922 if (object == null) {
6923 throw new TypeError('must start with number, buffer, array or string')
6924 }
6925
6926 if (typeof ArrayBuffer !== 'undefined') {
6927 if (object.buffer instanceof ArrayBuffer) {
6928 return fromTypedArray(that, object)
6929 }
6930 if (object instanceof ArrayBuffer) {
6931 return fromArrayBuffer(that, object)
6932 }
6933 }
6934
6935 if (object.length) return fromArrayLike(that, object)
6936
6937 return fromJsonObject(that, object)
6938 }
6939
6940 function fromBuffer (that, buffer) {
6941 var length = checked(buffer.length) | 0
6942 that = allocate(that, length)
6943 buffer.copy(that, 0, 0, length)
6944 return that
6945 }
6946
6947 function fromArray (that, array) {
6948 var length = checked(array.length) | 0
6949 that = allocate(that, length)
6950 for (var i = 0; i < length; i += 1) {
6951 that[i] = array[i] & 255
6952 }
6953 return that
6954 }
6955
6956 // Duplicate of fromArray() to keep fromArray() monomorphic.
6957 function fromTypedArray (that, array) {
6958 var length = checked(array.length) | 0
6959 that = allocate(that, length)
6960 // Truncating the elements is probably not what people expect from typed
6961 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
6962 // of the old Buffer constructor.
6963 for (var i = 0; i < length; i += 1) {
6964 that[i] = array[i] & 255
6965 }
6966 return that
6967 }
6968
6969 function fromArrayBuffer (that, array) {
6970 if (Buffer.TYPED_ARRAY_SUPPORT) {
6971 // Return an augmented `Uint8Array` instance, for best performance
6972 array.byteLength
6973 that = Buffer._augment(new Uint8Array(array))
6974 } else {
6975 // Fallback: Return an object instance of the Buffer class
6976 that = fromTypedArray(that, new Uint8Array(array))
6977 }
6978 return that
6979 }
6980
6981 function fromArrayLike (that, array) {
6982 var length = checked(array.length) | 0
6983 that = allocate(that, length)
6984 for (var i = 0; i < length; i += 1) {
6985 that[i] = array[i] & 255
6986 }
6987 return that
6988 }
6989
6990 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
6991 // Returns a zero-length buffer for inputs that don't conform to the spec.
6992 function fromJsonObject (that, object) {
6993 var array
6994 var length = 0
6995
6996 if (object.type === 'Buffer' && isArray(object.data)) {
6997 array = object.data
6998 length = checked(array.length) | 0
6999 }
7000 that = allocate(that, length)
7001
7002 for (var i = 0; i < length; i += 1) {
7003 that[i] = array[i] & 255
7004 }
7005 return that
7006 }
7007
7008 function allocate (that, length) {
7009 if (Buffer.TYPED_ARRAY_SUPPORT) {
7010 // Return an augmented `Uint8Array` instance, for best performance
7011 that = Buffer._augment(new Uint8Array(length))
7012 } else {
7013 // Fallback: Return an object instance of the Buffer class
7014 that.length = length
7015 that._isBuffer = true
7016 }
7017
7018 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
7019 if (fromPool) that.parent = rootParent
7020
7021 return that
7022 }
7023
7024 function checked (length) {
7025 // Note: cannot use `length < kMaxLength` here because that fails when
7026 // length is NaN (which is otherwise coerced to zero.)
7027 if (length >= kMaxLength()) {
7028 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
7029 'size: 0x' + kMaxLength().toString(16) + ' bytes')
7030 }
7031 return length | 0
7032 }
7033
7034 function SlowBuffer (subject, encoding) {
7035 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
7036
7037 var buf = new Buffer(subject, encoding)
7038 delete buf.parent
7039 return buf
7040 }
7041
7042 Buffer.isBuffer = function isBuffer (b) {
7043 return !!(b != null && b._isBuffer)
7044 }
7045
7046 Buffer.compare = function compare (a, b) {
7047 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
7048 throw new TypeError('Arguments must be Buffers')
7049 }
7050
7051 if (a === b) return 0
7052
7053 var x = a.length
7054 var y = b.length
7055
7056 var i = 0
7057 var len = Math.min(x, y)
7058 while (i < len) {
7059 if (a[i] !== b[i]) break
7060
7061 ++i
7062 }
7063
7064 if (i !== len) {
7065 x = a[i]
7066 y = b[i]
7067 }
7068
7069 if (x < y) return -1
7070 if (y < x) return 1
7071 return 0
7072 }
7073
7074 Buffer.isEncoding = function isEncoding (encoding) {
7075 switch (String(encoding).toLowerCase()) {
7076 case 'hex':
7077 case 'utf8':
7078 case 'utf-8':
7079 case 'ascii':
7080 case 'binary':
7081 case 'base64':
7082 case 'raw':
7083 case 'ucs2':
7084 case 'ucs-2':
7085 case 'utf16le':
7086 case 'utf-16le':
7087 return true
7088 default:
7089 return false
7090 }
7091 }
7092
7093 Buffer.concat = function concat (list, length) {
7094 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
7095
7096 if (list.length === 0) {
7097 return new Buffer(0)
7098 }
7099
7100 var i
7101 if (length === undefined) {
7102 length = 0
7103 for (i = 0; i < list.length; i++) {
7104 length += list[i].length
7105 }
7106 }
7107
7108 var buf = new Buffer(length)
7109 var pos = 0
7110 for (i = 0; i < list.length; i++) {
7111 var item = list[i]
7112 item.copy(buf, pos)
7113 pos += item.length
7114 }
7115 return buf
7116 }
7117
7118 function byteLength (string, encoding) {
7119 if (typeof string !== 'string') string = '' + string
7120
7121 var len = string.length
7122 if (len === 0) return 0
7123
7124 // Use a for loop to avoid recursion
7125 var loweredCase = false
7126 for (;;) {
7127 switch (encoding) {
7128 case 'ascii':
7129 case 'binary':
7130 // Deprecated
7131 case 'raw':
7132 case 'raws':
7133 return len
7134 case 'utf8':
7135 case 'utf-8':
7136 return utf8ToBytes(string).length
7137 case 'ucs2':
7138 case 'ucs-2':
7139 case 'utf16le':
7140 case 'utf-16le':
7141 return len * 2
7142 case 'hex':
7143 return len >>> 1
7144 case 'base64':
7145 return base64ToBytes(string).length
7146 default:
7147 if (loweredCase) return utf8ToBytes(string).length // assume utf8
7148 encoding = ('' + encoding).toLowerCase()
7149 loweredCase = true
7150 }
7151 }
7152 }
7153 Buffer.byteLength = byteLength
7154
7155 // pre-set for values that may exist in the future
7156 Buffer.prototype.length = undefined
7157 Buffer.prototype.parent = undefined
7158
7159 function slowToString (encoding, start, end) {
7160 var loweredCase = false
7161
7162 start = start | 0
7163 end = end === undefined || end === Infinity ? this.length : end | 0
7164
7165 if (!encoding) encoding = 'utf8'
7166 if (start < 0) start = 0
7167 if (end > this.length) end = this.length
7168 if (end <= start) return ''
7169
7170 while (true) {
7171 switch (encoding) {
7172 case 'hex':
7173 return hexSlice(this, start, end)
7174
7175 case 'utf8':
7176 case 'utf-8':
7177 return utf8Slice(this, start, end)
7178
7179 case 'ascii':
7180 return asciiSlice(this, start, end)
7181
7182 case 'binary':
7183 return binarySlice(this, start, end)
7184
7185 case 'base64':
7186 return base64Slice(this, start, end)
7187
7188 case 'ucs2':
7189 case 'ucs-2':
7190 case 'utf16le':
7191 case 'utf-16le':
7192 return utf16leSlice(this, start, end)
7193
7194 default:
7195 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
7196 encoding = (encoding + '').toLowerCase()
7197 loweredCase = true
7198 }
7199 }
7200 }
7201
7202 Buffer.prototype.toString = function toString () {
7203 var length = this.length | 0
7204 if (length === 0) return ''
7205 if (arguments.length === 0) return utf8Slice(this, 0, length)
7206 return slowToString.apply(this, arguments)
7207 }
7208
7209 Buffer.prototype.equals = function equals (b) {
7210 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
7211 if (this === b) return true
7212 return Buffer.compare(this, b) === 0
7213 }
7214
7215 Buffer.prototype.inspect = function inspect () {
7216 var str = ''
7217 var max = exports.INSPECT_MAX_BYTES
7218 if (this.length > 0) {
7219 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
7220 if (this.length > max) str += ' ... '
7221 }
7222 return '<Buffer ' + str + '>'
7223 }
7224
7225 Buffer.prototype.compare = function compare (b) {
7226 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
7227 if (this === b) return 0
7228 return Buffer.compare(this, b)
7229 }
7230
7231 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
7232 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
7233 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
7234 byteOffset >>= 0
7235
7236 if (this.length === 0) return -1
7237 if (byteOffset >= this.length) return -1
7238
7239 // Negative offsets start from the end of the buffer
7240 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
7241
7242 if (typeof val === 'string') {
7243 if (val.length === 0) return -1 // special case: looking for empty string always fails
7244 return String.prototype.indexOf.call(this, val, byteOffset)
7245 }
7246 if (Buffer.isBuffer(val)) {
7247 return arrayIndexOf(this, val, byteOffset)
7248 }
7249 if (typeof val === 'number') {
7250 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
7251 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
7252 }
7253 return arrayIndexOf(this, [ val ], byteOffset)
7254 }
7255
7256 function arrayIndexOf (arr, val, byteOffset) {
7257 var foundIndex = -1
7258 for (var i = 0; byteOffset + i < arr.length; i++) {
7259 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
7260 if (foundIndex === -1) foundIndex = i
7261 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
7262 } else {
7263 foundIndex = -1
7264 }
7265 }
7266 return -1
7267 }
7268
7269 throw new TypeError('val must be string, number or Buffer')
7270 }
7271
7272 // `get` is deprecated
7273 Buffer.prototype.get = function get (offset) {
7274 console.log('.get() is deprecated. Access using array indexes instead.')
7275 return this.readUInt8(offset)
7276 }
7277
7278 // `set` is deprecated
7279 Buffer.prototype.set = function set (v, offset) {
7280 console.log('.set() is deprecated. Access using array indexes instead.')
7281 return this.writeUInt8(v, offset)
7282 }
7283
7284 function hexWrite (buf, string, offset, length) {
7285 offset = Number(offset) || 0
7286 var remaining = buf.length - offset
7287 if (!length) {
7288 length = remaining
7289 } else {
7290 length = Number(length)
7291 if (length > remaining) {
7292 length = remaining
7293 }
7294 }
7295
7296 // must be an even number of digits
7297 var strLen = string.length
7298 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
7299
7300 if (length > strLen / 2) {
7301 length = strLen / 2
7302 }
7303 for (var i = 0; i < length; i++) {
7304 var parsed = parseInt(string.substr(i * 2, 2), 16)
7305 if (isNaN(parsed)) throw new Error('Invalid hex string')
7306 buf[offset + i] = parsed
7307 }
7308 return i
7309 }
7310
7311 function utf8Write (buf, string, offset, length) {
7312 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
7313 }
7314
7315 function asciiWrite (buf, string, offset, length) {
7316 return blitBuffer(asciiToBytes(string), buf, offset, length)
7317 }
7318
7319 function binaryWrite (buf, string, offset, length) {
7320 return asciiWrite(buf, string, offset, length)
7321 }
7322
7323 function base64Write (buf, string, offset, length) {
7324 return blitBuffer(base64ToBytes(string), buf, offset, length)
7325 }
7326
7327 function ucs2Write (buf, string, offset, length) {
7328 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
7329 }
7330
7331 Buffer.prototype.write = function write (string, offset, length, encoding) {
7332 // Buffer#write(string)
7333 if (offset === undefined) {
7334 encoding = 'utf8'
7335 length = this.length
7336 offset = 0
7337 // Buffer#write(string, encoding)
7338 } else if (length === undefined && typeof offset === 'string') {
7339 encoding = offset
7340 length = this.length
7341 offset = 0
7342 // Buffer#write(string, offset[, length][, encoding])
7343 } else if (isFinite(offset)) {
7344 offset = offset | 0
7345 if (isFinite(length)) {
7346 length = length | 0
7347 if (encoding === undefined) encoding = 'utf8'
7348 } else {
7349 encoding = length
7350 length = undefined
7351 }
7352 // legacy write(string, encoding, offset, length) - remove in v0.13
7353 } else {
7354 var swap = encoding
7355 encoding = offset
7356 offset = length | 0
7357 length = swap
7358 }
7359
7360 var remaining = this.length - offset
7361 if (length === undefined || length > remaining) length = remaining
7362
7363 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
7364 throw new RangeError('attempt to write outside buffer bounds')
7365 }
7366
7367 if (!encoding) encoding = 'utf8'
7368
7369 var loweredCase = false
7370 for (;;) {
7371 switch (encoding) {
7372 case 'hex':
7373 return hexWrite(this, string, offset, length)
7374
7375 case 'utf8':
7376 case 'utf-8':
7377 return utf8Write(this, string, offset, length)
7378
7379 case 'ascii':
7380 return asciiWrite(this, string, offset, length)
7381
7382 case 'binary':
7383 return binaryWrite(this, string, offset, length)
7384
7385 case 'base64':
7386 // Warning: maxLength not taken into account in base64Write
7387 return base64Write(this, string, offset, length)
7388
7389 case 'ucs2':
7390 case 'ucs-2':
7391 case 'utf16le':
7392 case 'utf-16le':
7393 return ucs2Write(this, string, offset, length)
7394
7395 default:
7396 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
7397 encoding = ('' + encoding).toLowerCase()
7398 loweredCase = true
7399 }
7400 }
7401 }
7402
7403 Buffer.prototype.toJSON = function toJSON () {
7404 return {
7405 type: 'Buffer',
7406 data: Array.prototype.slice.call(this._arr || this, 0)
7407 }
7408 }
7409
7410 function base64Slice (buf, start, end) {
7411 if (start === 0 && end === buf.length) {
7412 return base64.fromByteArray(buf)
7413 } else {
7414 return base64.fromByteArray(buf.slice(start, end))
7415 }
7416 }
7417
7418 function utf8Slice (buf, start, end) {
7419 end = Math.min(buf.length, end)
7420 var firstByte
7421 var secondByte
7422 var thirdByte
7423 var fourthByte
7424 var bytesPerSequence
7425 var tempCodePoint
7426 var codePoint
7427 var res = []
7428 var i = start
7429
7430 for (; i < end; i += bytesPerSequence) {
7431 firstByte = buf[i]
7432 codePoint = 0xFFFD
7433
7434 if (firstByte > 0xEF) {
7435 bytesPerSequence = 4
7436 } else if (firstByte > 0xDF) {
7437 bytesPerSequence = 3
7438 } else if (firstByte > 0xBF) {
7439 bytesPerSequence = 2
7440 } else {
7441 bytesPerSequence = 1
7442 }
7443
7444 if (i + bytesPerSequence <= end) {
7445 switch (bytesPerSequence) {
7446 case 1:
7447 if (firstByte < 0x80) {
7448 codePoint = firstByte
7449 }
7450 break
7451 case 2:
7452 secondByte = buf[i + 1]
7453 if ((secondByte & 0xC0) === 0x80) {
7454 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
7455 if (tempCodePoint > 0x7F) {
7456 codePoint = tempCodePoint
7457 }
7458 }
7459 break
7460 case 3:
7461 secondByte = buf[i + 1]
7462 thirdByte = buf[i + 2]
7463 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
7464 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
7465 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
7466 codePoint = tempCodePoint
7467 }
7468 }
7469 break
7470 case 4:
7471 secondByte = buf[i + 1]
7472 thirdByte = buf[i + 2]
7473 fourthByte = buf[i + 3]
7474 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
7475 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
7476 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
7477 codePoint = tempCodePoint
7478 }
7479 }
7480 }
7481 }
7482
7483 if (codePoint === 0xFFFD) {
7484 // we generated an invalid codePoint so make sure to only advance by 1 byte
7485 bytesPerSequence = 1
7486 } else if (codePoint > 0xFFFF) {
7487 // encode to utf16 (surrogate pair dance)
7488 codePoint -= 0x10000
7489 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
7490 codePoint = 0xDC00 | codePoint & 0x3FF
7491 }
7492
7493 res.push(codePoint)
7494 }
7495
7496 return String.fromCharCode.apply(String, res)
7497 }
7498
7499 function asciiSlice (buf, start, end) {
7500 var ret = ''
7501 end = Math.min(buf.length, end)
7502
7503 for (var i = start; i < end; i++) {
7504 ret += String.fromCharCode(buf[i] & 0x7F)
7505 }
7506 return ret
7507 }
7508
7509 function binarySlice (buf, start, end) {
7510 var ret = ''
7511 end = Math.min(buf.length, end)
7512
7513 for (var i = start; i < end; i++) {
7514 ret += String.fromCharCode(buf[i])
7515 }
7516 return ret
7517 }
7518
7519 function hexSlice (buf, start, end) {
7520 var len = buf.length
7521
7522 if (!start || start < 0) start = 0
7523 if (!end || end < 0 || end > len) end = len
7524
7525 var out = ''
7526 for (var i = start; i < end; i++) {
7527 out += toHex(buf[i])
7528 }
7529 return out
7530 }
7531
7532 function utf16leSlice (buf, start, end) {
7533 var bytes = buf.slice(start, end)
7534 var res = ''
7535 for (var i = 0; i < bytes.length; i += 2) {
7536 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
7537 }
7538 return res
7539 }
7540
7541 Buffer.prototype.slice = function slice (start, end) {
7542 var len = this.length
7543 start = ~~start
7544 end = end === undefined ? len : ~~end
7545
7546 if (start < 0) {
7547 start += len
7548 if (start < 0) start = 0
7549 } else if (start > len) {
7550 start = len
7551 }
7552
7553 if (end < 0) {
7554 end += len
7555 if (end < 0) end = 0
7556 } else if (end > len) {
7557 end = len
7558 }
7559
7560 if (end < start) end = start
7561
7562 var newBuf
7563 if (Buffer.TYPED_ARRAY_SUPPORT) {
7564 newBuf = Buffer._augment(this.subarray(start, end))
7565 } else {
7566 var sliceLen = end - start
7567 newBuf = new Buffer(sliceLen, undefined)
7568 for (var i = 0; i < sliceLen; i++) {
7569 newBuf[i] = this[i + start]
7570 }
7571 }
7572
7573 if (newBuf.length) newBuf.parent = this.parent || this
7574
7575 return newBuf
7576 }
7577
7578 /*
7579 * Need to make sure that buffer isn't trying to write out of bounds.
7580 */
7581 function checkOffset (offset, ext, length) {
7582 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
7583 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
7584 }
7585
7586 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
7587 offset = offset | 0
7588 byteLength = byteLength | 0
7589 if (!noAssert) checkOffset(offset, byteLength, this.length)
7590
7591 var val = this[offset]
7592 var mul = 1
7593 var i = 0
7594 while (++i < byteLength && (mul *= 0x100)) {
7595 val += this[offset + i] * mul
7596 }
7597
7598 return val
7599 }
7600
7601 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
7602 offset = offset | 0
7603 byteLength = byteLength | 0
7604 if (!noAssert) {
7605 checkOffset(offset, byteLength, this.length)
7606 }
7607
7608 var val = this[offset + --byteLength]
7609 var mul = 1
7610 while (byteLength > 0 && (mul *= 0x100)) {
7611 val += this[offset + --byteLength] * mul
7612 }
7613
7614 return val
7615 }
7616
7617 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
7618 if (!noAssert) checkOffset(offset, 1, this.length)
7619 return this[offset]
7620 }
7621
7622 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
7623 if (!noAssert) checkOffset(offset, 2, this.length)
7624 return this[offset] | (this[offset + 1] << 8)
7625 }
7626
7627 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
7628 if (!noAssert) checkOffset(offset, 2, this.length)
7629 return (this[offset] << 8) | this[offset + 1]
7630 }
7631
7632 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
7633 if (!noAssert) checkOffset(offset, 4, this.length)
7634
7635 return ((this[offset]) |
7636 (this[offset + 1] << 8) |
7637 (this[offset + 2] << 16)) +
7638 (this[offset + 3] * 0x1000000)
7639 }
7640
7641 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
7642 if (!noAssert) checkOffset(offset, 4, this.length)
7643
7644 return (this[offset] * 0x1000000) +
7645 ((this[offset + 1] << 16) |
7646 (this[offset + 2] << 8) |
7647 this[offset + 3])
7648 }
7649
7650 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
7651 offset = offset | 0
7652 byteLength = byteLength | 0
7653 if (!noAssert) checkOffset(offset, byteLength, this.length)
7654
7655 var val = this[offset]
7656 var mul = 1
7657 var i = 0
7658 while (++i < byteLength && (mul *= 0x100)) {
7659 val += this[offset + i] * mul
7660 }
7661 mul *= 0x80
7662
7663 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
7664
7665 return val
7666 }
7667
7668 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
7669 offset = offset | 0
7670 byteLength = byteLength | 0
7671 if (!noAssert) checkOffset(offset, byteLength, this.length)
7672
7673 var i = byteLength
7674 var mul = 1
7675 var val = this[offset + --i]
7676 while (i > 0 && (mul *= 0x100)) {
7677 val += this[offset + --i] * mul
7678 }
7679 mul *= 0x80
7680
7681 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
7682
7683 return val
7684 }
7685
7686 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
7687 if (!noAssert) checkOffset(offset, 1, this.length)
7688 if (!(this[offset] & 0x80)) return (this[offset])
7689 return ((0xff - this[offset] + 1) * -1)
7690 }
7691
7692 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
7693 if (!noAssert) checkOffset(offset, 2, this.length)
7694 var val = this[offset] | (this[offset + 1] << 8)
7695 return (val & 0x8000) ? val | 0xFFFF0000 : val
7696 }
7697
7698 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
7699 if (!noAssert) checkOffset(offset, 2, this.length)
7700 var val = this[offset + 1] | (this[offset] << 8)
7701 return (val & 0x8000) ? val | 0xFFFF0000 : val
7702 }
7703
7704 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
7705 if (!noAssert) checkOffset(offset, 4, this.length)
7706
7707 return (this[offset]) |
7708 (this[offset + 1] << 8) |
7709 (this[offset + 2] << 16) |
7710 (this[offset + 3] << 24)
7711 }
7712
7713 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
7714 if (!noAssert) checkOffset(offset, 4, this.length)
7715
7716 return (this[offset] << 24) |
7717 (this[offset + 1] << 16) |
7718 (this[offset + 2] << 8) |
7719 (this[offset + 3])
7720 }
7721
7722 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
7723 if (!noAssert) checkOffset(offset, 4, this.length)
7724 return ieee754.read(this, offset, true, 23, 4)
7725 }
7726
7727 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
7728 if (!noAssert) checkOffset(offset, 4, this.length)
7729 return ieee754.read(this, offset, false, 23, 4)
7730 }
7731
7732 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
7733 if (!noAssert) checkOffset(offset, 8, this.length)
7734 return ieee754.read(this, offset, true, 52, 8)
7735 }
7736
7737 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
7738 if (!noAssert) checkOffset(offset, 8, this.length)
7739 return ieee754.read(this, offset, false, 52, 8)
7740 }
7741
7742 function checkInt (buf, value, offset, ext, max, min) {
7743 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
7744 if (value > max || value < min) throw new RangeError('value is out of bounds')
7745 if (offset + ext > buf.length) throw new RangeError('index out of range')
7746 }
7747
7748 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
7749 value = +value
7750 offset = offset | 0
7751 byteLength = byteLength | 0
7752 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
7753
7754 var mul = 1
7755 var i = 0
7756 this[offset] = value & 0xFF
7757 while (++i < byteLength && (mul *= 0x100)) {
7758 this[offset + i] = (value / mul) & 0xFF
7759 }
7760
7761 return offset + byteLength
7762 }
7763
7764 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
7765 value = +value
7766 offset = offset | 0
7767 byteLength = byteLength | 0
7768 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
7769
7770 var i = byteLength - 1
7771 var mul = 1
7772 this[offset + i] = value & 0xFF
7773 while (--i >= 0 && (mul *= 0x100)) {
7774 this[offset + i] = (value / mul) & 0xFF
7775 }
7776
7777 return offset + byteLength
7778 }
7779
7780 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
7781 value = +value
7782 offset = offset | 0
7783 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
7784 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
7785 this[offset] = value
7786 return offset + 1
7787 }
7788
7789 function objectWriteUInt16 (buf, value, offset, littleEndian) {
7790 if (value < 0) value = 0xffff + value + 1
7791 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
7792 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
7793 (littleEndian ? i : 1 - i) * 8
7794 }
7795 }
7796
7797 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
7798 value = +value
7799 offset = offset | 0
7800 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
7801 if (Buffer.TYPED_ARRAY_SUPPORT) {
7802 this[offset] = value
7803 this[offset + 1] = (value >>> 8)
7804 } else {
7805 objectWriteUInt16(this, value, offset, true)
7806 }
7807 return offset + 2
7808 }
7809
7810 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
7811 value = +value
7812 offset = offset | 0
7813 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
7814 if (Buffer.TYPED_ARRAY_SUPPORT) {
7815 this[offset] = (value >>> 8)
7816 this[offset + 1] = value
7817 } else {
7818 objectWriteUInt16(this, value, offset, false)
7819 }
7820 return offset + 2
7821 }
7822
7823 function objectWriteUInt32 (buf, value, offset, littleEndian) {
7824 if (value < 0) value = 0xffffffff + value + 1
7825 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
7826 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
7827 }
7828 }
7829
7830 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
7831 value = +value
7832 offset = offset | 0
7833 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
7834 if (Buffer.TYPED_ARRAY_SUPPORT) {
7835 this[offset + 3] = (value >>> 24)
7836 this[offset + 2] = (value >>> 16)
7837 this[offset + 1] = (value >>> 8)
7838 this[offset] = value
7839 } else {
7840 objectWriteUInt32(this, value, offset, true)
7841 }
7842 return offset + 4
7843 }
7844
7845 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
7846 value = +value
7847 offset = offset | 0
7848 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
7849 if (Buffer.TYPED_ARRAY_SUPPORT) {
7850 this[offset] = (value >>> 24)
7851 this[offset + 1] = (value >>> 16)
7852 this[offset + 2] = (value >>> 8)
7853 this[offset + 3] = value
7854 } else {
7855 objectWriteUInt32(this, value, offset, false)
7856 }
7857 return offset + 4
7858 }
7859
7860 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
7861 value = +value
7862 offset = offset | 0
7863 if (!noAssert) {
7864 var limit = Math.pow(2, 8 * byteLength - 1)
7865
7866 checkInt(this, value, offset, byteLength, limit - 1, -limit)
7867 }
7868
7869 var i = 0
7870 var mul = 1
7871 var sub = value < 0 ? 1 : 0
7872 this[offset] = value & 0xFF
7873 while (++i < byteLength && (mul *= 0x100)) {
7874 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
7875 }
7876
7877 return offset + byteLength
7878 }
7879
7880 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
7881 value = +value
7882 offset = offset | 0
7883 if (!noAssert) {
7884 var limit = Math.pow(2, 8 * byteLength - 1)
7885
7886 checkInt(this, value, offset, byteLength, limit - 1, -limit)
7887 }
7888
7889 var i = byteLength - 1
7890 var mul = 1
7891 var sub = value < 0 ? 1 : 0
7892 this[offset + i] = value & 0xFF
7893 while (--i >= 0 && (mul *= 0x100)) {
7894 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
7895 }
7896
7897 return offset + byteLength
7898 }
7899
7900 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
7901 value = +value
7902 offset = offset | 0
7903 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
7904 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
7905 if (value < 0) value = 0xff + value + 1
7906 this[offset] = value
7907 return offset + 1
7908 }
7909
7910 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
7911 value = +value
7912 offset = offset | 0
7913 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
7914 if (Buffer.TYPED_ARRAY_SUPPORT) {
7915 this[offset] = value
7916 this[offset + 1] = (value >>> 8)
7917 } else {
7918 objectWriteUInt16(this, value, offset, true)
7919 }
7920 return offset + 2
7921 }
7922
7923 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
7924 value = +value
7925 offset = offset | 0
7926 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
7927 if (Buffer.TYPED_ARRAY_SUPPORT) {
7928 this[offset] = (value >>> 8)
7929 this[offset + 1] = value
7930 } else {
7931 objectWriteUInt16(this, value, offset, false)
7932 }
7933 return offset + 2
7934 }
7935
7936 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
7937 value = +value
7938 offset = offset | 0
7939 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
7940 if (Buffer.TYPED_ARRAY_SUPPORT) {
7941 this[offset] = value
7942 this[offset + 1] = (value >>> 8)
7943 this[offset + 2] = (value >>> 16)
7944 this[offset + 3] = (value >>> 24)
7945 } else {
7946 objectWriteUInt32(this, value, offset, true)
7947 }
7948 return offset + 4
7949 }
7950
7951 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
7952 value = +value
7953 offset = offset | 0
7954 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
7955 if (value < 0) value = 0xffffffff + value + 1
7956 if (Buffer.TYPED_ARRAY_SUPPORT) {
7957 this[offset] = (value >>> 24)
7958 this[offset + 1] = (value >>> 16)
7959 this[offset + 2] = (value >>> 8)
7960 this[offset + 3] = value
7961 } else {
7962 objectWriteUInt32(this, value, offset, false)
7963 }
7964 return offset + 4
7965 }
7966
7967 function checkIEEE754 (buf, value, offset, ext, max, min) {
7968 if (value > max || value < min) throw new RangeError('value is out of bounds')
7969 if (offset + ext > buf.length) throw new RangeError('index out of range')
7970 if (offset < 0) throw new RangeError('index out of range')
7971 }
7972
7973 function writeFloat (buf, value, offset, littleEndian, noAssert) {
7974 if (!noAssert) {
7975 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
7976 }
7977 ieee754.write(buf, value, offset, littleEndian, 23, 4)
7978 return offset + 4
7979 }
7980
7981 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
7982 return writeFloat(this, value, offset, true, noAssert)
7983 }
7984
7985 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
7986 return writeFloat(this, value, offset, false, noAssert)
7987 }
7988
7989 function writeDouble (buf, value, offset, littleEndian, noAssert) {
7990 if (!noAssert) {
7991 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
7992 }
7993 ieee754.write(buf, value, offset, littleEndian, 52, 8)
7994 return offset + 8
7995 }
7996
7997 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
7998 return writeDouble(this, value, offset, true, noAssert)
7999 }
8000
8001 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
8002 return writeDouble(this, value, offset, false, noAssert)
8003 }
8004
8005 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
8006 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
8007 if (!start) start = 0
8008 if (!end && end !== 0) end = this.length
8009 if (targetStart >= target.length) targetStart = target.length
8010 if (!targetStart) targetStart = 0
8011 if (end > 0 && end < start) end = start
8012
8013 // Copy 0 bytes; we're done
8014 if (end === start) return 0
8015 if (target.length === 0 || this.length === 0) return 0
8016
8017 // Fatal error conditions
8018 if (targetStart < 0) {
8019 throw new RangeError('targetStart out of bounds')
8020 }
8021 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
8022 if (end < 0) throw new RangeError('sourceEnd out of bounds')
8023
8024 // Are we oob?
8025 if (end > this.length) end = this.length
8026 if (target.length - targetStart < end - start) {
8027 end = target.length - targetStart + start
8028 }
8029
8030 var len = end - start
8031 var i
8032
8033 if (this === target && start < targetStart && targetStart < end) {
8034 // descending copy from end
8035 for (i = len - 1; i >= 0; i--) {
8036 target[i + targetStart] = this[i + start]
8037 }
8038 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
8039 // ascending copy from start
8040 for (i = 0; i < len; i++) {
8041 target[i + targetStart] = this[i + start]
8042 }
8043 } else {
8044 target._set(this.subarray(start, start + len), targetStart)
8045 }
8046
8047 return len
8048 }
8049
8050 // fill(value, start=0, end=buffer.length)
8051 Buffer.prototype.fill = function fill (value, start, end) {
8052 if (!value) value = 0
8053 if (!start) start = 0
8054 if (!end) end = this.length
8055
8056 if (end < start) throw new RangeError('end < start')
8057
8058 // Fill 0 bytes; we're done
8059 if (end === start) return
8060 if (this.length === 0) return
8061
8062 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
8063 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
8064
8065 var i
8066 if (typeof value === 'number') {
8067 for (i = start; i < end; i++) {
8068 this[i] = value
8069 }
8070 } else {
8071 var bytes = utf8ToBytes(value.toString())
8072 var len = bytes.length
8073 for (i = start; i < end; i++) {
8074 this[i] = bytes[i % len]
8075 }
8076 }
8077
8078 return this
8079 }
8080
8081 /**
8082 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
8083 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
8084 */
8085 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
8086 if (typeof Uint8Array !== 'undefined') {
8087 if (Buffer.TYPED_ARRAY_SUPPORT) {
8088 return (new Buffer(this)).buffer
8089 } else {
8090 var buf = new Uint8Array(this.length)
8091 for (var i = 0, len = buf.length; i < len; i += 1) {
8092 buf[i] = this[i]
8093 }
8094 return buf.buffer
8095 }
8096 } else {
8097 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
8098 }
8099 }
8100
8101 // HELPER FUNCTIONS
8102 // ================
8103
8104 var BP = Buffer.prototype
8105
8106 /**
8107 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
8108 */
8109 Buffer._augment = function _augment (arr) {
8110 arr.constructor = Buffer
8111 arr._isBuffer = true
8112
8113 // save reference to original Uint8Array set method before overwriting
8114 arr._set = arr.set
8115
8116 // deprecated
8117 arr.get = BP.get
8118 arr.set = BP.set
8119
8120 arr.write = BP.write
8121 arr.toString = BP.toString
8122 arr.toLocaleString = BP.toString
8123 arr.toJSON = BP.toJSON
8124 arr.equals = BP.equals
8125 arr.compare = BP.compare
8126 arr.indexOf = BP.indexOf
8127 arr.copy = BP.copy
8128 arr.slice = BP.slice
8129 arr.readUIntLE = BP.readUIntLE
8130 arr.readUIntBE = BP.readUIntBE
8131 arr.readUInt8 = BP.readUInt8
8132 arr.readUInt16LE = BP.readUInt16LE
8133 arr.readUInt16BE = BP.readUInt16BE
8134 arr.readUInt32LE = BP.readUInt32LE
8135 arr.readUInt32BE = BP.readUInt32BE
8136 arr.readIntLE = BP.readIntLE
8137 arr.readIntBE = BP.readIntBE
8138 arr.readInt8 = BP.readInt8
8139 arr.readInt16LE = BP.readInt16LE
8140 arr.readInt16BE = BP.readInt16BE
8141 arr.readInt32LE = BP.readInt32LE
8142 arr.readInt32BE = BP.readInt32BE
8143 arr.readFloatLE = BP.readFloatLE
8144 arr.readFloatBE = BP.readFloatBE
8145 arr.readDoubleLE = BP.readDoubleLE
8146 arr.readDoubleBE = BP.readDoubleBE
8147 arr.writeUInt8 = BP.writeUInt8
8148 arr.writeUIntLE = BP.writeUIntLE
8149 arr.writeUIntBE = BP.writeUIntBE
8150 arr.writeUInt16LE = BP.writeUInt16LE
8151 arr.writeUInt16BE = BP.writeUInt16BE
8152 arr.writeUInt32LE = BP.writeUInt32LE
8153 arr.writeUInt32BE = BP.writeUInt32BE
8154 arr.writeIntLE = BP.writeIntLE
8155 arr.writeIntBE = BP.writeIntBE
8156 arr.writeInt8 = BP.writeInt8
8157 arr.writeInt16LE = BP.writeInt16LE
8158 arr.writeInt16BE = BP.writeInt16BE
8159 arr.writeInt32LE = BP.writeInt32LE
8160 arr.writeInt32BE = BP.writeInt32BE
8161 arr.writeFloatLE = BP.writeFloatLE
8162 arr.writeFloatBE = BP.writeFloatBE
8163 arr.writeDoubleLE = BP.writeDoubleLE
8164 arr.writeDoubleBE = BP.writeDoubleBE
8165 arr.fill = BP.fill
8166 arr.inspect = BP.inspect
8167 arr.toArrayBuffer = BP.toArrayBuffer
8168
8169 return arr
8170 }
8171
8172 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
8173
8174 function base64clean (str) {
8175 // Node strips out invalid characters like \n and \t from the string, base64-js does not
8176 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
8177 // Node converts strings with length < 2 to ''
8178 if (str.length < 2) return ''
8179 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
8180 while (str.length % 4 !== 0) {
8181 str = str + '='
8182 }
8183 return str
8184 }
8185
8186 function stringtrim (str) {
8187 if (str.trim) return str.trim()
8188 return str.replace(/^\s+|\s+$/g, '')
8189 }
8190
8191 function toHex (n) {
8192 if (n < 16) return '0' + n.toString(16)
8193 return n.toString(16)
8194 }
8195
8196 function utf8ToBytes (string, units) {
8197 units = units || Infinity
8198 var codePoint
8199 var length = string.length
8200 var leadSurrogate = null
8201 var bytes = []
8202
8203 for (var i = 0; i < length; i++) {
8204 codePoint = string.charCodeAt(i)
8205
8206 // is surrogate component
8207 if (codePoint > 0xD7FF && codePoint < 0xE000) {
8208 // last char was a lead
8209 if (!leadSurrogate) {
8210 // no lead yet
8211 if (codePoint > 0xDBFF) {
8212 // unexpected trail
8213 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8214 continue
8215
8216 } else if (i + 1 === length) {
8217 // unpaired lead
8218 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8219 continue
8220 }
8221
8222 // valid lead
8223 leadSurrogate = codePoint
8224
8225 continue
8226 }
8227
8228 // 2 leads in a row
8229 if (codePoint < 0xDC00) {
8230 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8231 leadSurrogate = codePoint
8232 continue
8233 }
8234
8235 // valid surrogate pair
8236 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
8237
8238 } else if (leadSurrogate) {
8239 // valid bmp char, but last char was a lead
8240 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8241 }
8242
8243 leadSurrogate = null
8244
8245 // encode utf8
8246 if (codePoint < 0x80) {
8247 if ((units -= 1) < 0) break
8248 bytes.push(codePoint)
8249 } else if (codePoint < 0x800) {
8250 if ((units -= 2) < 0) break
8251 bytes.push(
8252 codePoint >> 0x6 | 0xC0,
8253 codePoint & 0x3F | 0x80
8254 )
8255 } else if (codePoint < 0x10000) {
8256 if ((units -= 3) < 0) break
8257 bytes.push(
8258 codePoint >> 0xC | 0xE0,
8259 codePoint >> 0x6 & 0x3F | 0x80,
8260 codePoint & 0x3F | 0x80
8261 )
8262 } else if (codePoint < 0x110000) {
8263 if ((units -= 4) < 0) break
8264 bytes.push(
8265 codePoint >> 0x12 | 0xF0,
8266 codePoint >> 0xC & 0x3F | 0x80,
8267 codePoint >> 0x6 & 0x3F | 0x80,
8268 codePoint & 0x3F | 0x80
8269 )
8270 } else {
8271 throw new Error('Invalid code point')
8272 }
8273 }
8274
8275 return bytes
8276 }
8277
8278 function asciiToBytes (str) {
8279 var byteArray = []
8280 for (var i = 0; i < str.length; i++) {
8281 // Node's code seems to be doing this and not & 0x7F..
8282 byteArray.push(str.charCodeAt(i) & 0xFF)
8283 }
8284 return byteArray
8285 }
8286
8287 function utf16leToBytes (str, units) {
8288 var c, hi, lo
8289 var byteArray = []
8290 for (var i = 0; i < str.length; i++) {
8291 if ((units -= 2) < 0) break
8292
8293 c = str.charCodeAt(i)
8294 hi = c >> 8
8295 lo = c % 256
8296 byteArray.push(lo)
8297 byteArray.push(hi)
8298 }
8299
8300 return byteArray
8301 }
8302
8303 function base64ToBytes (str) {
8304 return base64.toByteArray(base64clean(str))
8305 }
8306
8307 function blitBuffer (src, dst, offset, length) {
8308 for (var i = 0; i < length; i++) {
8309 if ((i + offset >= dst.length) || (i >= src.length)) break
8310 dst[i + offset] = src[i]
8311 }
8312 return i
8313 }
8314
8315 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
8316 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
8317
8318 ;(function (exports) {
8319 'use strict';
8320
8321 var Arr = (typeof Uint8Array !== 'undefined')
8322 ? Uint8Array
8323 : Array
8324
8325 var PLUS = '+'.charCodeAt(0)
8326 var SLASH = '/'.charCodeAt(0)
8327 var NUMBER = '0'.charCodeAt(0)
8328 var LOWER = 'a'.charCodeAt(0)
8329 var UPPER = 'A'.charCodeAt(0)
8330 var PLUS_URL_SAFE = '-'.charCodeAt(0)
8331 var SLASH_URL_SAFE = '_'.charCodeAt(0)
8332
8333 function decode (elt) {
8334 var code = elt.charCodeAt(0)
8335 if (code === PLUS ||
8336 code === PLUS_URL_SAFE)
8337 return 62 // '+'
8338 if (code === SLASH ||
8339 code === SLASH_URL_SAFE)
8340 return 63 // '/'
8341 if (code < NUMBER)
8342 return -1 //no match
8343 if (code < NUMBER + 10)
8344 return code - NUMBER + 26 + 26
8345 if (code < UPPER + 26)
8346 return code - UPPER
8347 if (code < LOWER + 26)
8348 return code - LOWER + 26
8349 }
8350
8351 function b64ToByteArray (b64) {
8352 var i, j, l, tmp, placeHolders, arr
8353
8354 if (b64.length % 4 > 0) {
8355 throw new Error('Invalid string. Length must be a multiple of 4')
8356 }
8357
8358 // the number of equal signs (place holders)
8359 // if there are two placeholders, than the two characters before it
8360 // represent one byte
8361 // if there is only one, then the three characters before it represent 2 bytes
8362 // this is just a cheap hack to not do indexOf twice
8363 var len = b64.length
8364 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
8365
8366 // base64 is 4/3 + up to two characters of the original data
8367 arr = new Arr(b64.length * 3 / 4 - placeHolders)
8368
8369 // if there are placeholders, only get up to the last complete 4 chars
8370 l = placeHolders > 0 ? b64.length - 4 : b64.length
8371
8372 var L = 0
8373
8374 function push (v) {
8375 arr[L++] = v
8376 }
8377
8378 for (i = 0, j = 0; i < l; i += 4, j += 3) {
8379 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
8380 push((tmp & 0xFF0000) >> 16)
8381 push((tmp & 0xFF00) >> 8)
8382 push(tmp & 0xFF)
8383 }
8384
8385 if (placeHolders === 2) {
8386 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
8387 push(tmp & 0xFF)
8388 } else if (placeHolders === 1) {
8389 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
8390 push((tmp >> 8) & 0xFF)
8391 push(tmp & 0xFF)
8392 }
8393
8394 return arr
8395 }
8396
8397 function uint8ToBase64 (uint8) {
8398 var i,
8399 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
8400 output = "",
8401 temp, length
8402
8403 function encode (num) {
8404 return lookup.charAt(num)
8405 }
8406
8407 function tripletToBase64 (num) {
8408 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
8409 }
8410
8411 // go through the array every three bytes, we'll deal with trailing stuff later
8412 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
8413 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
8414 output += tripletToBase64(temp)
8415 }
8416
8417 // pad the end with zeros, but make sure to not forget the extra bytes
8418 switch (extraBytes) {
8419 case 1:
8420 temp = uint8[uint8.length - 1]
8421 output += encode(temp >> 2)
8422 output += encode((temp << 4) & 0x3F)
8423 output += '=='
8424 break
8425 case 2:
8426 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
8427 output += encode(temp >> 10)
8428 output += encode((temp >> 4) & 0x3F)
8429 output += encode((temp << 2) & 0x3F)
8430 output += '='
8431 break
8432 }
8433
8434 return output
8435 }
8436
8437 exports.toByteArray = b64ToByteArray
8438 exports.fromByteArray = uint8ToBase64
8439 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
8440
8441 },{}],9:[function(require,module,exports){
8442 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
8443 var e, m
8444 var eLen = nBytes * 8 - mLen - 1
8445 var eMax = (1 << eLen) - 1
8446 var eBias = eMax >> 1
8447 var nBits = -7
8448 var i = isLE ? (nBytes - 1) : 0
8449 var d = isLE ? -1 : 1
8450 var s = buffer[offset + i]
8451
8452 i += d
8453
8454 e = s & ((1 << (-nBits)) - 1)
8455 s >>= (-nBits)
8456 nBits += eLen
8457 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8458
8459 m = e & ((1 << (-nBits)) - 1)
8460 e >>= (-nBits)
8461 nBits += mLen
8462 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8463
8464 if (e === 0) {
8465 e = 1 - eBias
8466 } else if (e === eMax) {
8467 return m ? NaN : ((s ? -1 : 1) * Infinity)
8468 } else {
8469 m = m + Math.pow(2, mLen)
8470 e = e - eBias
8471 }
8472 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
8473 }
8474
8475 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
8476 var e, m, c
8477 var eLen = nBytes * 8 - mLen - 1
8478 var eMax = (1 << eLen) - 1
8479 var eBias = eMax >> 1
8480 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
8481 var i = isLE ? 0 : (nBytes - 1)
8482 var d = isLE ? 1 : -1
8483 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
8484
8485 value = Math.abs(value)
8486
8487 if (isNaN(value) || value === Infinity) {
8488 m = isNaN(value) ? 1 : 0
8489 e = eMax
8490 } else {
8491 e = Math.floor(Math.log(value) / Math.LN2)
8492 if (value * (c = Math.pow(2, -e)) < 1) {
8493 e--
8494 c *= 2
8495 }
8496 if (e + eBias >= 1) {
8497 value += rt / c
8498 } else {
8499 value += rt * Math.pow(2, 1 - eBias)
8500 }
8501 if (value * c >= 2) {
8502 e++
8503 c /= 2
8504 }
8505
8506 if (e + eBias >= eMax) {
8507 m = 0
8508 e = eMax
8509 } else if (e + eBias >= 1) {
8510 m = (value * c - 1) * Math.pow(2, mLen)
8511 e = e + eBias
8512 } else {
8513 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
8514 e = 0
8515 }
8516 }
8517
8518 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
8519
8520 e = (e << mLen) | m
8521 eLen += mLen
8522 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
8523
8524 buffer[offset + i - d] |= s * 128
8525 }
8526
8527 },{}],10:[function(require,module,exports){
8528
8529 /**
8530 * isArray
8531 */
8532
8533 var isArray = Array.isArray;
8534
8535 /**
8536 * toString
8537 */
8538
8539 var str = Object.prototype.toString;
8540
8541 /**
8542 * Whether or not the given `val`
8543 * is an array.
8544 *
8545 * example:
8546 *
8547 * isArray([]);
8548 * // > true
8549 * isArray(arguments);
8550 * // > false
8551 * isArray('');
8552 * // > false
8553 *
8554 * @param {mixed} val
8555 * @return {bool}
8556 */
8557
8558 module.exports = isArray || function (val) {
8559 return !! val && '[object Array]' == str.call(val);
8560 };
8561
8562 },{}],11:[function(require,module,exports){
8563 // Copyright Joyent, Inc. and other Node contributors.
8564 //
8565 // Permission is hereby granted, free of charge, to any person obtaining a
8566 // copy of this software and associated documentation files (the
8567 // "Software"), to deal in the Software without restriction, including
8568 // without limitation the rights to use, copy, modify, merge, publish,
8569 // distribute, sublicense, and/or sell copies of the Software, and to permit
8570 // persons to whom the Software is furnished to do so, subject to the
8571 // following conditions:
8572 //
8573 // The above copyright notice and this permission notice shall be included
8574 // in all copies or substantial portions of the Software.
8575 //
8576 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
8577 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
8578 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
8579 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
8580 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
8581 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
8582 // USE OR OTHER DEALINGS IN THE SOFTWARE.
8583
8584 function EventEmitter() {
8585 this._events = this._events || {};
8586 this._maxListeners = this._maxListeners || undefined;
8587 }
8588 module.exports = EventEmitter;
8589
8590 // Backwards-compat with node 0.10.x
8591 EventEmitter.EventEmitter = EventEmitter;
8592
8593 EventEmitter.prototype._events = undefined;
8594 EventEmitter.prototype._maxListeners = undefined;
8595
8596 // By default EventEmitters will print a warning if more than 10 listeners are
8597 // added to it. This is a useful default which helps finding memory leaks.
8598 EventEmitter.defaultMaxListeners = 10;
8599
8600 // Obviously not all Emitters should be limited to 10. This function allows
8601 // that to be increased. Set to zero for unlimited.
8602 EventEmitter.prototype.setMaxListeners = function(n) {
8603 if (!isNumber(n) || n < 0 || isNaN(n))
8604 throw TypeError('n must be a positive number');
8605 this._maxListeners = n;
8606 return this;
8607 };
8608
8609 EventEmitter.prototype.emit = function(type) {
8610 var er, handler, len, args, i, listeners;
8611
8612 if (!this._events)
8613 this._events = {};
8614
8615 // If there is no 'error' event listener then throw.
8616 if (type === 'error') {
8617 if (!this._events.error ||
8618 (isObject(this._events.error) && !this._events.error.length)) {
8619 er = arguments[1];
8620 if (er instanceof Error) {
8621 throw er; // Unhandled 'error' event
8622 }
8623 throw TypeError('Uncaught, unspecified "error" event.');
8624 }
8625 }
8626
8627 handler = this._events[type];
8628
8629 if (isUndefined(handler))
8630 return false;
8631
8632 if (isFunction(handler)) {
8633 switch (arguments.length) {
8634 // fast cases
8635 case 1:
8636 handler.call(this);
8637 break;
8638 case 2:
8639 handler.call(this, arguments[1]);
8640 break;
8641 case 3:
8642 handler.call(this, arguments[1], arguments[2]);
8643 break;
8644 // slower
8645 default:
8646 len = arguments.length;
8647 args = new Array(len - 1);
8648 for (i = 1; i < len; i++)
8649 args[i - 1] = arguments[i];
8650 handler.apply(this, args);
8651 }
8652 } else if (isObject(handler)) {
8653 len = arguments.length;
8654 args = new Array(len - 1);
8655 for (i = 1; i < len; i++)
8656 args[i - 1] = arguments[i];
8657
8658 listeners = handler.slice();
8659 len = listeners.length;
8660 for (i = 0; i < len; i++)
8661 listeners[i].apply(this, args);
8662 }
8663
8664 return true;
8665 };
8666
8667 EventEmitter.prototype.addListener = function(type, listener) {
8668 var m;
8669
8670 if (!isFunction(listener))
8671 throw TypeError('listener must be a function');
8672
8673 if (!this._events)
8674 this._events = {};
8675
8676 // To avoid recursion in the case that type === "newListener"! Before
8677 // adding it to the listeners, first emit "newListener".
8678 if (this._events.newListener)
8679 this.emit('newListener', type,
8680 isFunction(listener.listener) ?
8681 listener.listener : listener);
8682
8683 if (!this._events[type])
8684 // Optimize the case of one listener. Don't need the extra array object.
8685 this._events[type] = listener;
8686 else if (isObject(this._events[type]))
8687 // If we've already got an array, just append.
8688 this._events[type].push(listener);
8689 else
8690 // Adding the second element, need to change to array.
8691 this._events[type] = [this._events[type], listener];
8692
8693 // Check for listener leak
8694 if (isObject(this._events[type]) && !this._events[type].warned) {
8695 var m;
8696 if (!isUndefined(this._maxListeners)) {
8697 m = this._maxListeners;
8698 } else {
8699 m = EventEmitter.defaultMaxListeners;
8700 }
8701
8702 if (m && m > 0 && this._events[type].length > m) {
8703 this._events[type].warned = true;
8704 console.error('(node) warning: possible EventEmitter memory ' +
8705 'leak detected. %d listeners added. ' +
8706 'Use emitter.setMaxListeners() to increase limit.',
8707 this._events[type].length);
8708 if (typeof console.trace === 'function') {
8709 // not supported in IE 10
8710 console.trace();
8711 }
8712 }
8713 }
8714
8715 return this;
8716 };
8717
8718 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
8719
8720 EventEmitter.prototype.once = function(type, listener) {
8721 if (!isFunction(listener))
8722 throw TypeError('listener must be a function');
8723
8724 var fired = false;
8725
8726 function g() {
8727 this.removeListener(type, g);
8728
8729 if (!fired) {
8730 fired = true;
8731 listener.apply(this, arguments);
8732 }
8733 }
8734
8735 g.listener = listener;
8736 this.on(type, g);
8737
8738 return this;
8739 };
8740
8741 // emits a 'removeListener' event iff the listener was removed
8742 EventEmitter.prototype.removeListener = function(type, listener) {
8743 var list, position, length, i;
8744
8745 if (!isFunction(listener))
8746 throw TypeError('listener must be a function');
8747
8748 if (!this._events || !this._events[type])
8749 return this;
8750
8751 list = this._events[type];
8752 length = list.length;
8753 position = -1;
8754
8755 if (list === listener ||
8756 (isFunction(list.listener) && list.listener === listener)) {
8757 delete this._events[type];
8758 if (this._events.removeListener)
8759 this.emit('removeListener', type, listener);
8760
8761 } else if (isObject(list)) {
8762 for (i = length; i-- > 0;) {
8763 if (list[i] === listener ||
8764 (list[i].listener && list[i].listener === listener)) {
8765 position = i;
8766 break;
8767 }
8768 }
8769
8770 if (position < 0)
8771 return this;
8772
8773 if (list.length === 1) {
8774 list.length = 0;
8775 delete this._events[type];
8776 } else {
8777 list.splice(position, 1);
8778 }
8779
8780 if (this._events.removeListener)
8781 this.emit('removeListener', type, listener);
8782 }
8783
8784 return this;
8785 };
8786
8787 EventEmitter.prototype.removeAllListeners = function(type) {
8788 var key, listeners;
8789
8790 if (!this._events)
8791 return this;
8792
8793 // not listening for removeListener, no need to emit
8794 if (!this._events.removeListener) {
8795 if (arguments.length === 0)
8796 this._events = {};
8797 else if (this._events[type])
8798 delete this._events[type];
8799 return this;
8800 }
8801
8802 // emit removeListener for all listeners on all events
8803 if (arguments.length === 0) {
8804 for (key in this._events) {
8805 if (key === 'removeListener') continue;
8806 this.removeAllListeners(key);
8807 }
8808 this.removeAllListeners('removeListener');
8809 this._events = {};
8810 return this;
8811 }
8812
8813 listeners = this._events[type];
8814
8815 if (isFunction(listeners)) {
8816 this.removeListener(type, listeners);
8817 } else {
8818 // LIFO order
8819 while (listeners.length)
8820 this.removeListener(type, listeners[listeners.length - 1]);
8821 }
8822 delete this._events[type];
8823
8824 return this;
8825 };
8826
8827 EventEmitter.prototype.listeners = function(type) {
8828 var ret;
8829 if (!this._events || !this._events[type])
8830 ret = [];
8831 else if (isFunction(this._events[type]))
8832 ret = [this._events[type]];
8833 else
8834 ret = this._events[type].slice();
8835 return ret;
8836 };
8837
8838 EventEmitter.listenerCount = function(emitter, type) {
8839 var ret;
8840 if (!emitter._events || !emitter._events[type])
8841 ret = 0;
8842 else if (isFunction(emitter._events[type]))
8843 ret = 1;
8844 else
8845 ret = emitter._events[type].length;
8846 return ret;
8847 };
8848
8849 function isFunction(arg) {
8850 return typeof arg === 'function';
8851 }
8852
8853 function isNumber(arg) {
8854 return typeof arg === 'number';
8855 }
8856
8857 function isObject(arg) {
8858 return typeof arg === 'object' && arg !== null;
8859 }
8860
8861 function isUndefined(arg) {
8862 return arg === void 0;
8863 }
8864
8865 },{}],12:[function(require,module,exports){
8866 if (typeof Object.create === 'function') {
8867 // implementation from standard node.js 'util' module
8868 module.exports = function inherits(ctor, superCtor) {
8869 ctor.super_ = superCtor
8870 ctor.prototype = Object.create(superCtor.prototype, {
8871 constructor: {
8872 value: ctor,
8873 enumerable: false,
8874 writable: true,
8875 configurable: true
8876 }
8877 });
8878 };
8879 } else {
8880 // old school shim for old browsers
8881 module.exports = function inherits(ctor, superCtor) {
8882 ctor.super_ = superCtor
8883 var TempCtor = function () {}
8884 TempCtor.prototype = superCtor.prototype
8885 ctor.prototype = new TempCtor()
8886 ctor.prototype.constructor = ctor
8887 }
8888 }
8889
8890 },{}],13:[function(require,module,exports){
8891 module.exports = Array.isArray || function (arr) {
8892 return Object.prototype.toString.call(arr) == '[object Array]';
8893 };
8894
8895 },{}],14:[function(require,module,exports){
8896 // shim for using process in browser
8897
8898 var process = module.exports = {};
8899 var queue = [];
8900 var draining = false;
8901 var currentQueue;
8902 var queueIndex = -1;
8903
8904 function cleanUpNextTick() {
8905 draining = false;
8906 if (currentQueue.length) {
8907 queue = currentQueue.concat(queue);
8908 } else {
8909 queueIndex = -1;
8910 }
8911 if (queue.length) {
8912 drainQueue();
8913 }
8914 }
8915
8916 function drainQueue() {
8917 if (draining) {
8918 return;
8919 }
8920 var timeout = setTimeout(cleanUpNextTick);
8921 draining = true;
8922
8923 var len = queue.length;
8924 while(len) {
8925 currentQueue = queue;
8926 queue = [];
8927 while (++queueIndex < len) {
8928 currentQueue[queueIndex].run();
8929 }
8930 queueIndex = -1;
8931 len = queue.length;
8932 }
8933 currentQueue = null;
8934 draining = false;
8935 clearTimeout(timeout);
8936 }
8937
8938 process.nextTick = function (fun) {
8939 var args = new Array(arguments.length - 1);
8940 if (arguments.length > 1) {
8941 for (var i = 1; i < arguments.length; i++) {
8942 args[i - 1] = arguments[i];
8943 }
8944 }
8945 queue.push(new Item(fun, args));
8946 if (queue.length === 1 && !draining) {
8947 setTimeout(drainQueue, 0);
8948 }
8949 };
8950
8951 // v8 likes predictible objects
8952 function Item(fun, array) {
8953 this.fun = fun;
8954 this.array = array;
8955 }
8956 Item.prototype.run = function () {
8957 this.fun.apply(null, this.array);
8958 };
8959 process.title = 'browser';
8960 process.browser = true;
8961 process.env = {};
8962 process.argv = [];
8963 process.version = ''; // empty string to avoid regexp issues
8964 process.versions = {};
8965
8966 function noop() {}
8967
8968 process.on = noop;
8969 process.addListener = noop;
8970 process.once = noop;
8971 process.off = noop;
8972 process.removeListener = noop;
8973 process.removeAllListeners = noop;
8974 process.emit = noop;
8975
8976 process.binding = function (name) {
8977 throw new Error('process.binding is not supported');
8978 };
8979
8980 // TODO(shtylman)
8981 process.cwd = function () { return '/' };
8982 process.chdir = function (dir) {
8983 throw new Error('process.chdir is not supported');
8984 };
8985 process.umask = function() { return 0; };
8986
8987 },{}],15:[function(require,module,exports){
8988 module.exports = require("./lib/_stream_duplex.js")
8989
8990 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
8991 (function (process){
8992 // Copyright Joyent, Inc. and other Node contributors.
8993 //
8994 // Permission is hereby granted, free of charge, to any person obtaining a
8995 // copy of this software and associated documentation files (the
8996 // "Software"), to deal in the Software without restriction, including
8997 // without limitation the rights to use, copy, modify, merge, publish,
8998 // distribute, sublicense, and/or sell copies of the Software, and to permit
8999 // persons to whom the Software is furnished to do so, subject to the
9000 // following conditions:
9001 //
9002 // The above copyright notice and this permission notice shall be included
9003 // in all copies or substantial portions of the Software.
9004 //
9005 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9006 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9007 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9008 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9009 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9010 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9011 // USE OR OTHER DEALINGS IN THE SOFTWARE.
9012
9013 // a duplex stream is just a stream that is both readable and writable.
9014 // Since JS doesn't have multiple prototypal inheritance, this class
9015 // prototypally inherits from Readable, and then parasitically from
9016 // Writable.
9017
9018 module.exports = Duplex;
9019
9020 /*<replacement>*/
9021 var objectKeys = Object.keys || function (obj) {
9022 var keys = [];
9023 for (var key in obj) keys.push(key);
9024 return keys;
9025 }
9026 /*</replacement>*/
9027
9028
9029 /*<replacement>*/
9030 var util = require('core-util-is');
9031 util.inherits = require('inherits');
9032 /*</replacement>*/
9033
9034 var Readable = require('./_stream_readable');
9035 var Writable = require('./_stream_writable');
9036
9037 util.inherits(Duplex, Readable);
9038
9039 forEach(objectKeys(Writable.prototype), function(method) {
9040 if (!Duplex.prototype[method])
9041 Duplex.prototype[method] = Writable.prototype[method];
9042 });
9043
9044 function Duplex(options) {
9045 if (!(this instanceof Duplex))
9046 return new Duplex(options);
9047
9048 Readable.call(this, options);
9049 Writable.call(this, options);
9050
9051 if (options && options.readable === false)
9052 this.readable = false;
9053
9054 if (options && options.writable === false)
9055 this.writable = false;
9056
9057 this.allowHalfOpen = true;
9058 if (options && options.allowHalfOpen === false)
9059 this.allowHalfOpen = false;
9060
9061 this.once('end', onend);
9062 }
9063
9064 // the no-half-open enforcer
9065 function onend() {
9066 // if we allow half-open state, or if the writable side ended,
9067 // then we're ok.
9068 if (this.allowHalfOpen || this._writableState.ended)
9069 return;
9070
9071 // no more data can be written.
9072 // But allow more writes to happen in this tick.
9073 process.nextTick(this.end.bind(this));
9074 }
9075
9076 function forEach (xs, f) {
9077 for (var i = 0, l = xs.length; i < l; i++) {
9078 f(xs[i], i);
9079 }
9080 }
9081
9082 }).call(this,require('_process'))
9083 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
9084 // Copyright Joyent, Inc. and other Node contributors.
9085 //
9086 // Permission is hereby granted, free of charge, to any person obtaining a
9087 // copy of this software and associated documentation files (the
9088 // "Software"), to deal in the Software without restriction, including
9089 // without limitation the rights to use, copy, modify, merge, publish,
9090 // distribute, sublicense, and/or sell copies of the Software, and to permit
9091 // persons to whom the Software is furnished to do so, subject to the
9092 // following conditions:
9093 //
9094 // The above copyright notice and this permission notice shall be included
9095 // in all copies or substantial portions of the Software.
9096 //
9097 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9098 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9099 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9100 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9101 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9102 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9103 // USE OR OTHER DEALINGS IN THE SOFTWARE.
9104
9105 // a passthrough stream.
9106 // basically just the most minimal sort of Transform stream.
9107 // Every written chunk gets output as-is.
9108
9109 module.exports = PassThrough;
9110
9111 var Transform = require('./_stream_transform');
9112
9113 /*<replacement>*/
9114 var util = require('core-util-is');
9115 util.inherits = require('inherits');
9116 /*</replacement>*/
9117
9118 util.inherits(PassThrough, Transform);
9119
9120 function PassThrough(options) {
9121 if (!(this instanceof PassThrough))
9122 return new PassThrough(options);
9123
9124 Transform.call(this, options);
9125 }
9126
9127 PassThrough.prototype._transform = function(chunk, encoding, cb) {
9128 cb(null, chunk);
9129 };
9130
9131 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
9132 (function (process){
9133 // Copyright Joyent, Inc. and other Node contributors.
9134 //
9135 // Permission is hereby granted, free of charge, to any person obtaining a
9136 // copy of this software and associated documentation files (the
9137 // "Software"), to deal in the Software without restriction, including
9138 // without limitation the rights to use, copy, modify, merge, publish,
9139 // distribute, sublicense, and/or sell copies of the Software, and to permit
9140 // persons to whom the Software is furnished to do so, subject to the
9141 // following conditions:
9142 //
9143 // The above copyright notice and this permission notice shall be included
9144 // in all copies or substantial portions of the Software.
9145 //
9146 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9147 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9148 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9149 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9150 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9151 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9152 // USE OR OTHER DEALINGS IN THE SOFTWARE.
9153
9154 module.exports = Readable;
9155
9156 /*<replacement>*/
9157 var isArray = require('isarray');
9158 /*</replacement>*/
9159
9160
9161 /*<replacement>*/
9162 var Buffer = require('buffer').Buffer;
9163 /*</replacement>*/
9164
9165 Readable.ReadableState = ReadableState;
9166
9167 var EE = require('events').EventEmitter;
9168
9169 /*<replacement>*/
9170 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
9171 return emitter.listeners(type).length;
9172 };
9173 /*</replacement>*/
9174
9175 var Stream = require('stream');
9176
9177 /*<replacement>*/
9178 var util = require('core-util-is');
9179 util.inherits = require('inherits');
9180 /*</replacement>*/
9181
9182 var StringDecoder;
9183
9184
9185 /*<replacement>*/
9186 var debug = require('util');
9187 if (debug && debug.debuglog) {
9188 debug = debug.debuglog('stream');
9189 } else {
9190 debug = function () {};
9191 }
9192 /*</replacement>*/
9193
9194
9195 util.inherits(Readable, Stream);
9196
9197 function ReadableState(options, stream) {
9198 var Duplex = require('./_stream_duplex');
9199
9200 options = options || {};
9201
9202 // the point at which it stops calling _read() to fill the buffer
9203 // Note: 0 is a valid value, means "don't call _read preemptively ever"
9204 var hwm = options.highWaterMark;
9205 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
9206 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
9207
9208 // cast to ints.
9209 this.highWaterMark = ~~this.highWaterMark;
9210
9211 this.buffer = [];
9212 this.length = 0;
9213 this.pipes = null;
9214 this.pipesCount = 0;
9215 this.flowing = null;
9216 this.ended = false;
9217 this.endEmitted = false;
9218 this.reading = false;
9219
9220 // a flag to be able to tell if the onwrite cb is called immediately,
9221 // or on a later tick. We set this to true at first, because any
9222 // actions that shouldn't happen until "later" should generally also
9223 // not happen before the first write call.
9224 this.sync = true;
9225
9226 // whenever we return null, then we set a flag to say
9227 // that we're awaiting a 'readable' event emission.
9228 this.needReadable = false;
9229 this.emittedReadable = false;
9230 this.readableListening = false;
9231
9232
9233 // object stream flag. Used to make read(n) ignore n and to
9234 // make all the buffer merging and length checks go away
9235 this.objectMode = !!options.objectMode;
9236
9237 if (stream instanceof Duplex)
9238 this.objectMode = this.objectMode || !!options.readableObjectMode;
9239
9240 // Crypto is kind of old and crusty. Historically, its default string
9241 // encoding is 'binary' so we have to make this configurable.
9242 // Everything else in the universe uses 'utf8', though.
9243 this.defaultEncoding = options.defaultEncoding || 'utf8';
9244
9245 // when piping, we only care about 'readable' events that happen
9246 // after read()ing all the bytes and not getting any pushback.
9247 this.ranOut = false;
9248
9249 // the number of writers that are awaiting a drain event in .pipe()s
9250 this.awaitDrain = 0;
9251
9252 // if true, a maybeReadMore has been scheduled
9253 this.readingMore = false;
9254
9255 this.decoder = null;
9256 this.encoding = null;
9257 if (options.encoding) {
9258 if (!StringDecoder)
9259 StringDecoder = require('string_decoder/').StringDecoder;
9260 this.decoder = new StringDecoder(options.encoding);
9261 this.encoding = options.encoding;
9262 }
9263 }
9264
9265 function Readable(options) {
9266 var Duplex = require('./_stream_duplex');
9267
9268 if (!(this instanceof Readable))
9269 return new Readable(options);
9270
9271 this._readableState = new ReadableState(options, this);
9272
9273 // legacy
9274 this.readable = true;
9275
9276 Stream.call(this);
9277 }
9278
9279 // Manually shove something into the read() buffer.
9280 // This returns true if the highWaterMark has not been hit yet,
9281 // similar to how Writable.write() returns true if you should
9282 // write() some more.
9283 Readable.prototype.push = function(chunk, encoding) {
9284 var state = this._readableState;
9285
9286 if (util.isString(chunk) && !state.objectMode) {
9287 encoding = encoding || state.defaultEncoding;
9288 if (encoding !== state.encoding) {
9289 chunk = new Buffer(chunk, encoding);
9290 encoding = '';
9291 }
9292 }
9293
9294 return readableAddChunk(this, state, chunk, encoding, false);
9295 };
9296
9297 // Unshift should *always* be something directly out of read()
9298 Readable.prototype.unshift = function(chunk) {
9299 var state = this._readableState;
9300 return readableAddChunk(this, state, chunk, '', true);
9301 };
9302
9303 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
9304 var er = chunkInvalid(state, chunk);
9305 if (er) {
9306 stream.emit('error', er);
9307 } else if (util.isNullOrUndefined(chunk)) {
9308 state.reading = false;
9309 if (!state.ended)
9310 onEofChunk(stream, state);
9311 } else if (state.objectMode || chunk && chunk.length > 0) {
9312 if (state.ended && !addToFront) {
9313 var e = new Error('stream.push() after EOF');
9314 stream.emit('error', e);
9315 } else if (state.endEmitted && addToFront) {
9316 var e = new Error('stream.unshift() after end event');
9317 stream.emit('error', e);
9318 } else {
9319 if (state.decoder && !addToFront && !encoding)
9320 chunk = state.decoder.write(chunk);
9321
9322 if (!addToFront)
9323 state.reading = false;
9324
9325 // if we want the data now, just emit it.
9326 if (state.flowing && state.length === 0 && !state.sync) {
9327 stream.emit('data', chunk);
9328 stream.read(0);
9329 } else {
9330 // update the buffer info.
9331 state.length += state.objectMode ? 1 : chunk.length;
9332 if (addToFront)
9333 state.buffer.unshift(chunk);
9334 else
9335 state.buffer.push(chunk);
9336
9337 if (state.needReadable)
9338 emitReadable(stream);
9339 }
9340
9341 maybeReadMore(stream, state);
9342 }
9343 } else if (!addToFront) {
9344 state.reading = false;
9345 }
9346
9347 return needMoreData(state);
9348 }
9349
9350
9351
9352 // if it's past the high water mark, we can push in some more.
9353 // Also, if we have no data yet, we can stand some
9354 // more bytes. This is to work around cases where hwm=0,
9355 // such as the repl. Also, if the push() triggered a
9356 // readable event, and the user called read(largeNumber) such that
9357 // needReadable was set, then we ought to push more, so that another
9358 // 'readable' event will be triggered.
9359 function needMoreData(state) {
9360 return !state.ended &&
9361 (state.needReadable ||
9362 state.length < state.highWaterMark ||
9363 state.length === 0);
9364 }
9365
9366 // backwards compatibility.
9367 Readable.prototype.setEncoding = function(enc) {
9368 if (!StringDecoder)
9369 StringDecoder = require('string_decoder/').StringDecoder;
9370 this._readableState.decoder = new StringDecoder(enc);
9371 this._readableState.encoding = enc;
9372 return this;
9373 };
9374
9375 // Don't raise the hwm > 128MB
9376 var MAX_HWM = 0x800000;
9377 function roundUpToNextPowerOf2(n) {
9378 if (n >= MAX_HWM) {
9379 n = MAX_HWM;
9380 } else {
9381 // Get the next highest power of 2
9382 n--;
9383 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
9384 n++;
9385 }
9386 return n;
9387 }
9388
9389 function howMuchToRead(n, state) {
9390 if (state.length === 0 && state.ended)
9391 return 0;
9392
9393 if (state.objectMode)
9394 return n === 0 ? 0 : 1;
9395
9396 if (isNaN(n) || util.isNull(n)) {
9397 // only flow one buffer at a time
9398 if (state.flowing && state.buffer.length)
9399 return state.buffer[0].length;
9400 else
9401 return state.length;
9402 }
9403
9404 if (n <= 0)
9405 return 0;
9406
9407 // If we're asking for more than the target buffer level,
9408 // then raise the water mark. Bump up to the next highest
9409 // power of 2, to prevent increasing it excessively in tiny
9410 // amounts.
9411 if (n > state.highWaterMark)
9412 state.highWaterMark = roundUpToNextPowerOf2(n);
9413
9414 // don't have that much. return null, unless we've ended.
9415 if (n > state.length) {
9416 if (!state.ended) {
9417 state.needReadable = true;
9418 return 0;
9419 } else
9420 return state.length;
9421 }
9422
9423 return n;
9424 }
9425
9426 // you can override either this method, or the async _read(n) below.
9427 Readable.prototype.read = function(n) {
9428 debug('read', n);
9429 var state = this._readableState;
9430 var nOrig = n;
9431
9432 if (!util.isNumber(n) || n > 0)
9433 state.emittedReadable = false;
9434
9435 // if we're doing read(0) to trigger a readable event, but we
9436 // already have a bunch of data in the buffer, then just trigger
9437 // the 'readable' event and move on.
9438 if (n === 0 &&
9439 state.needReadable &&
9440 (state.length >= state.highWaterMark || state.ended)) {
9441 debug('read: emitReadable', state.length, state.ended);
9442 if (state.length === 0 && state.ended)
9443 endReadable(this);
9444 else
9445 emitReadable(this);
9446 return null;
9447 }
9448
9449 n = howMuchToRead(n, state);
9450
9451 // if we've ended, and we're now clear, then finish it up.
9452 if (n === 0 && state.ended) {
9453 if (state.length === 0)
9454 endReadable(this);
9455 return null;
9456 }
9457
9458 // All the actual chunk generation logic needs to be
9459 // *below* the call to _read. The reason is that in certain
9460 // synthetic stream cases, such as passthrough streams, _read
9461 // may be a completely synchronous operation which may change
9462 // the state of the read buffer, providing enough data when
9463 // before there was *not* enough.
9464 //
9465 // So, the steps are:
9466 // 1. Figure out what the state of things will be after we do
9467 // a read from the buffer.
9468 //
9469 // 2. If that resulting state will trigger a _read, then call _read.
9470 // Note that this may be asynchronous, or synchronous. Yes, it is
9471 // deeply ugly to write APIs this way, but that still doesn't mean
9472 // that the Readable class should behave improperly, as streams are
9473 // designed to be sync/async agnostic.
9474 // Take note if the _read call is sync or async (ie, if the read call
9475 // has returned yet), so that we know whether or not it's safe to emit
9476 // 'readable' etc.
9477 //
9478 // 3. Actually pull the requested chunks out of the buffer and return.
9479
9480 // if we need a readable event, then we need to do some reading.
9481 var doRead = state.needReadable;
9482 debug('need readable', doRead);
9483
9484 // if we currently have less than the highWaterMark, then also read some
9485 if (state.length === 0 || state.length - n < state.highWaterMark) {
9486 doRead = true;
9487 debug('length less than watermark', doRead);
9488 }
9489
9490 // however, if we've ended, then there's no point, and if we're already
9491 // reading, then it's unnecessary.
9492 if (state.ended || state.reading) {
9493 doRead = false;
9494 debug('reading or ended', doRead);
9495 }
9496
9497 if (doRead) {
9498 debug('do read');
9499 state.reading = true;
9500 state.sync = true;
9501 // if the length is currently zero, then we *need* a readable event.
9502 if (state.length === 0)
9503 state.needReadable = true;
9504 // call internal read method
9505 this._read(state.highWaterMark);
9506 state.sync = false;
9507 }
9508
9509 // If _read pushed data synchronously, then `reading` will be false,
9510 // and we need to re-evaluate how much data we can return to the user.
9511 if (doRead && !state.reading)
9512 n = howMuchToRead(nOrig, state);
9513
9514 var ret;
9515 if (n > 0)
9516 ret = fromList(n, state);
9517 else
9518 ret = null;
9519
9520 if (util.isNull(ret)) {
9521 state.needReadable = true;
9522 n = 0;
9523 }
9524
9525 state.length -= n;
9526
9527 // If we have nothing in the buffer, then we want to know
9528 // as soon as we *do* get something into the buffer.
9529 if (state.length === 0 && !state.ended)
9530 state.needReadable = true;
9531
9532 // If we tried to read() past the EOF, then emit end on the next tick.
9533 if (nOrig !== n && state.ended && state.length === 0)
9534 endReadable(this);
9535
9536 if (!util.isNull(ret))
9537 this.emit('data', ret);
9538
9539 return ret;
9540 };
9541
9542 function chunkInvalid(state, chunk) {
9543 var er = null;
9544 if (!util.isBuffer(chunk) &&
9545 !util.isString(chunk) &&
9546 !util.isNullOrUndefined(chunk) &&
9547 !state.objectMode) {
9548 er = new TypeError('Invalid non-string/buffer chunk');
9549 }
9550 return er;
9551 }
9552
9553
9554 function onEofChunk(stream, state) {
9555 if (state.decoder && !state.ended) {
9556 var chunk = state.decoder.end();
9557 if (chunk && chunk.length) {
9558 state.buffer.push(chunk);
9559 state.length += state.objectMode ? 1 : chunk.length;
9560 }
9561 }
9562 state.ended = true;
9563
9564 // emit 'readable' now to make sure it gets picked up.
9565 emitReadable(stream);
9566 }
9567
9568 // Don't emit readable right away in sync mode, because this can trigger
9569 // another read() call => stack overflow. This way, it might trigger
9570 // a nextTick recursion warning, but that's not so bad.
9571 function emitReadable(stream) {
9572 var state = stream._readableState;
9573 state.needReadable = false;
9574 if (!state.emittedReadable) {
9575 debug('emitReadable', state.flowing);
9576 state.emittedReadable = true;
9577 if (state.sync)
9578 process.nextTick(function() {
9579 emitReadable_(stream);
9580 });
9581 else
9582 emitReadable_(stream);
9583 }
9584 }
9585
9586 function emitReadable_(stream) {
9587 debug('emit readable');
9588 stream.emit('readable');
9589 flow(stream);
9590 }
9591
9592
9593 // at this point, the user has presumably seen the 'readable' event,
9594 // and called read() to consume some data. that may have triggered
9595 // in turn another _read(n) call, in which case reading = true if
9596 // it's in progress.
9597 // However, if we're not ended, or reading, and the length < hwm,
9598 // then go ahead and try to read some more preemptively.
9599 function maybeReadMore(stream, state) {
9600 if (!state.readingMore) {
9601 state.readingMore = true;
9602 process.nextTick(function() {
9603 maybeReadMore_(stream, state);
9604 });
9605 }
9606 }
9607
9608 function maybeReadMore_(stream, state) {
9609 var len = state.length;
9610 while (!state.reading && !state.flowing && !state.ended &&
9611 state.length < state.highWaterMark) {
9612 debug('maybeReadMore read 0');
9613 stream.read(0);
9614 if (len === state.length)
9615 // didn't get any data, stop spinning.
9616 break;
9617 else
9618 len = state.length;
9619 }
9620 state.readingMore = false;
9621 }
9622
9623 // abstract method. to be overridden in specific implementation classes.
9624 // call cb(er, data) where data is <= n in length.
9625 // for virtual (non-string, non-buffer) streams, "length" is somewhat
9626 // arbitrary, and perhaps not very meaningful.
9627 Readable.prototype._read = function(n) {
9628 this.emit('error', new Error('not implemented'));
9629 };
9630
9631 Readable.prototype.pipe = function(dest, pipeOpts) {
9632 var src = this;
9633 var state = this._readableState;
9634
9635 switch (state.pipesCount) {
9636 case 0:
9637 state.pipes = dest;
9638 break;
9639 case 1:
9640 state.pipes = [state.pipes, dest];
9641 break;
9642 default:
9643 state.pipes.push(dest);
9644 break;
9645 }
9646 state.pipesCount += 1;
9647 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
9648
9649 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
9650 dest !== process.stdout &&
9651 dest !== process.stderr;
9652
9653 var endFn = doEnd ? onend : cleanup;
9654 if (state.endEmitted)
9655 process.nextTick(endFn);
9656 else
9657 src.once('end', endFn);
9658
9659 dest.on('unpipe', onunpipe);
9660 function onunpipe(readable) {
9661 debug('onunpipe');
9662 if (readable === src) {
9663 cleanup();
9664 }
9665 }
9666
9667 function onend() {
9668 debug('onend');
9669 dest.end();
9670 }
9671
9672 // when the dest drains, it reduces the awaitDrain counter
9673 // on the source. This would be more elegant with a .once()
9674 // handler in flow(), but adding and removing repeatedly is
9675 // too slow.
9676 var ondrain = pipeOnDrain(src);
9677 dest.on('drain', ondrain);
9678
9679 function cleanup() {
9680 debug('cleanup');
9681 // cleanup event handlers once the pipe is broken
9682 dest.removeListener('close', onclose);
9683 dest.removeListener('finish', onfinish);
9684 dest.removeListener('drain', ondrain);
9685 dest.removeListener('error', onerror);
9686 dest.removeListener('unpipe', onunpipe);
9687 src.removeListener('end', onend);
9688 src.removeListener('end', cleanup);
9689 src.removeListener('data', ondata);
9690
9691 // if the reader is waiting for a drain event from this
9692 // specific writer, then it would cause it to never start
9693 // flowing again.
9694 // So, if this is awaiting a drain, then we just call it now.
9695 // If we don't know, then assume that we are waiting for one.
9696 if (state.awaitDrain &&
9697 (!dest._writableState || dest._writableState.needDrain))
9698 ondrain();
9699 }
9700
9701 src.on('data', ondata);
9702 function ondata(chunk) {
9703 debug('ondata');
9704 var ret = dest.write(chunk);
9705 if (false === ret) {
9706 debug('false write response, pause',
9707 src._readableState.awaitDrain);
9708 src._readableState.awaitDrain++;
9709 src.pause();
9710 }
9711 }
9712
9713 // if the dest has an error, then stop piping into it.
9714 // however, don't suppress the throwing behavior for this.
9715 function onerror(er) {
9716 debug('onerror', er);
9717 unpipe();
9718 dest.removeListener('error', onerror);
9719 if (EE.listenerCount(dest, 'error') === 0)
9720 dest.emit('error', er);
9721 }
9722 // This is a brutally ugly hack to make sure that our error handler
9723 // is attached before any userland ones. NEVER DO THIS.
9724 if (!dest._events || !dest._events.error)
9725 dest.on('error', onerror);
9726 else if (isArray(dest._events.error))
9727 dest._events.error.unshift(onerror);
9728 else
9729 dest._events.error = [onerror, dest._events.error];
9730
9731
9732
9733 // Both close and finish should trigger unpipe, but only once.
9734 function onclose() {
9735 dest.removeListener('finish', onfinish);
9736 unpipe();
9737 }
9738 dest.once('close', onclose);
9739 function onfinish() {
9740 debug('onfinish');
9741 dest.removeListener('close', onclose);
9742 unpipe();
9743 }
9744 dest.once('finish', onfinish);
9745
9746 function unpipe() {
9747 debug('unpipe');
9748 src.unpipe(dest);
9749 }
9750
9751 // tell the dest that it's being piped to
9752 dest.emit('pipe', src);
9753
9754 // start the flow if it hasn't been started already.
9755 if (!state.flowing) {
9756 debug('pipe resume');
9757 src.resume();
9758 }
9759
9760 return dest;
9761 };
9762
9763 function pipeOnDrain(src) {
9764 return function() {
9765 var state = src._readableState;
9766 debug('pipeOnDrain', state.awaitDrain);
9767 if (state.awaitDrain)
9768 state.awaitDrain--;
9769 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
9770 state.flowing = true;
9771 flow(src);
9772 }
9773 };
9774 }
9775
9776
9777 Readable.prototype.unpipe = function(dest) {
9778 var state = this._readableState;
9779
9780 // if we're not piping anywhere, then do nothing.
9781 if (state.pipesCount === 0)
9782 return this;
9783
9784 // just one destination. most common case.
9785 if (state.pipesCount === 1) {
9786 // passed in one, but it's not the right one.
9787 if (dest && dest !== state.pipes)
9788 return this;
9789
9790 if (!dest)
9791 dest = state.pipes;
9792
9793 // got a match.
9794 state.pipes = null;
9795 state.pipesCount = 0;
9796 state.flowing = false;
9797 if (dest)
9798 dest.emit('unpipe', this);
9799 return this;
9800 }
9801
9802 // slow case. multiple pipe destinations.
9803
9804 if (!dest) {
9805 // remove all.
9806 var dests = state.pipes;
9807 var len = state.pipesCount;
9808 state.pipes = null;
9809 state.pipesCount = 0;
9810 state.flowing = false;
9811
9812 for (var i = 0; i < len; i++)
9813 dests[i].emit('unpipe', this);
9814 return this;
9815 }
9816
9817 // try to find the right one.
9818 var i = indexOf(state.pipes, dest);
9819 if (i === -1)
9820 return this;
9821
9822 state.pipes.splice(i, 1);
9823 state.pipesCount -= 1;
9824 if (state.pipesCount === 1)
9825 state.pipes = state.pipes[0];
9826
9827 dest.emit('unpipe', this);
9828
9829 return this;
9830 };
9831
9832 // set up data events if they are asked for
9833 // Ensure readable listeners eventually get something
9834 Readable.prototype.on = function(ev, fn) {
9835 var res = Stream.prototype.on.call(this, ev, fn);
9836
9837 // If listening to data, and it has not explicitly been paused,
9838 // then call resume to start the flow of data on the next tick.
9839 if (ev === 'data' && false !== this._readableState.flowing) {
9840 this.resume();
9841 }
9842
9843 if (ev === 'readable' && this.readable) {
9844 var state = this._readableState;
9845 if (!state.readableListening) {
9846 state.readableListening = true;
9847 state.emittedReadable = false;
9848 state.needReadable = true;
9849 if (!state.reading) {
9850 var self = this;
9851 process.nextTick(function() {
9852 debug('readable nexttick read 0');
9853 self.read(0);
9854 });
9855 } else if (state.length) {
9856 emitReadable(this, state);
9857 }
9858 }
9859 }
9860
9861 return res;
9862 };
9863 Readable.prototype.addListener = Readable.prototype.on;
9864
9865 // pause() and resume() are remnants of the legacy readable stream API
9866 // If the user uses them, then switch into old mode.
9867 Readable.prototype.resume = function() {
9868 var state = this._readableState;
9869 if (!state.flowing) {
9870 debug('resume');
9871 state.flowing = true;
9872 if (!state.reading) {
9873 debug('resume read 0');
9874 this.read(0);
9875 }
9876 resume(this, state);
9877 }
9878 return this;
9879 };
9880
9881 function resume(stream, state) {
9882 if (!state.resumeScheduled) {
9883 state.resumeScheduled = true;
9884 process.nextTick(function() {
9885 resume_(stream, state);
9886 });
9887 }
9888 }
9889
9890 function resume_(stream, state) {
9891 state.resumeScheduled = false;
9892 stream.emit('resume');
9893 flow(stream);
9894 if (state.flowing && !state.reading)
9895 stream.read(0);
9896 }
9897
9898 Readable.prototype.pause = function() {
9899 debug('call pause flowing=%j', this._readableState.flowing);
9900 if (false !== this._readableState.flowing) {
9901 debug('pause');
9902 this._readableState.flowing = false;
9903 this.emit('pause');
9904 }
9905 return this;
9906 };
9907
9908 function flow(stream) {
9909 var state = stream._readableState;
9910 debug('flow', state.flowing);
9911 if (state.flowing) {
9912 do {
9913 var chunk = stream.read();
9914 } while (null !== chunk && state.flowing);
9915 }
9916 }
9917
9918 // wrap an old-style stream as the async data source.
9919 // This is *not* part of the readable stream interface.
9920 // It is an ugly unfortunate mess of history.
9921 Readable.prototype.wrap = function(stream) {
9922 var state = this._readableState;
9923 var paused = false;
9924
9925 var self = this;
9926 stream.on('end', function() {
9927 debug('wrapped end');
9928 if (state.decoder && !state.ended) {
9929 var chunk = state.decoder.end();
9930 if (chunk && chunk.length)
9931 self.push(chunk);
9932 }
9933
9934 self.push(null);
9935 });
9936
9937 stream.on('data', function(chunk) {
9938 debug('wrapped data');
9939 if (state.decoder)
9940 chunk = state.decoder.write(chunk);
9941 if (!chunk || !state.objectMode && !chunk.length)
9942 return;
9943
9944 var ret = self.push(chunk);
9945 if (!ret) {
9946 paused = true;
9947 stream.pause();
9948 }
9949 });
9950
9951 // proxy all the other methods.
9952 // important when wrapping filters and duplexes.
9953 for (var i in stream) {
9954 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
9955 this[i] = function(method) { return function() {
9956 return stream[method].apply(stream, arguments);
9957 }}(i);
9958 }
9959 }
9960
9961 // proxy certain important events.
9962 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
9963 forEach(events, function(ev) {
9964 stream.on(ev, self.emit.bind(self, ev));
9965 });
9966
9967 // when we try to consume some more bytes, simply unpause the
9968 // underlying stream.
9969 self._read = function(n) {
9970 debug('wrapped _read', n);
9971 if (paused) {
9972 paused = false;
9973 stream.resume();
9974 }
9975 };
9976
9977 return self;
9978 };
9979
9980
9981
9982 // exposed for testing purposes only.
9983 Readable._fromList = fromList;
9984
9985 // Pluck off n bytes from an array of buffers.
9986 // Length is the combined lengths of all the buffers in the list.
9987 function fromList(n, state) {
9988 var list = state.buffer;
9989 var length = state.length;
9990 var stringMode = !!state.decoder;
9991 var objectMode = !!state.objectMode;
9992 var ret;
9993
9994 // nothing in the list, definitely empty.
9995 if (list.length === 0)
9996 return null;
9997
9998 if (length === 0)
9999 ret = null;
10000 else if (objectMode)
10001 ret = list.shift();
10002 else if (!n || n >= length) {
10003 // read it all, truncate the array.
10004 if (stringMode)
10005 ret = list.join('');
10006 else
10007 ret = Buffer.concat(list, length);
10008 list.length = 0;
10009 } else {
10010 // read just some of it.
10011 if (n < list[0].length) {
10012 // just take a part of the first list item.
10013 // slice is the same for buffers and strings.
10014 var buf = list[0];
10015 ret = buf.slice(0, n);
10016 list[0] = buf.slice(n);
10017 } else if (n === list[0].length) {
10018 // first list is a perfect match
10019 ret = list.shift();
10020 } else {
10021 // complex case.
10022 // we have enough to cover it, but it spans past the first buffer.
10023 if (stringMode)
10024 ret = '';
10025 else
10026 ret = new Buffer(n);
10027
10028 var c = 0;
10029 for (var i = 0, l = list.length; i < l && c < n; i++) {
10030 var buf = list[0];
10031 var cpy = Math.min(n - c, buf.length);
10032
10033 if (stringMode)
10034 ret += buf.slice(0, cpy);
10035 else
10036 buf.copy(ret, c, 0, cpy);
10037
10038 if (cpy < buf.length)
10039 list[0] = buf.slice(cpy);
10040 else
10041 list.shift();
10042
10043 c += cpy;
10044 }
10045 }
10046 }
10047
10048 return ret;
10049 }
10050
10051 function endReadable(stream) {
10052 var state = stream._readableState;
10053
10054 // If we get here before consuming all the bytes, then that is a
10055 // bug in node. Should never happen.
10056 if (state.length > 0)
10057 throw new Error('endReadable called on non-empty stream');
10058
10059 if (!state.endEmitted) {
10060 state.ended = true;
10061 process.nextTick(function() {
10062 // Check that we didn't get one last unshift.
10063 if (!state.endEmitted && state.length === 0) {
10064 state.endEmitted = true;
10065 stream.readable = false;
10066 stream.emit('end');
10067 }
10068 });
10069 }
10070 }
10071
10072 function forEach (xs, f) {
10073 for (var i = 0, l = xs.length; i < l; i++) {
10074 f(xs[i], i);
10075 }
10076 }
10077
10078 function indexOf (xs, x) {
10079 for (var i = 0, l = xs.length; i < l; i++) {
10080 if (xs[i] === x) return i;
10081 }
10082 return -1;
10083 }
10084
10085 }).call(this,require('_process'))
10086 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"events":11,"inherits":12,"isarray":13,"stream":26,"string_decoder/":27,"util":6}],19:[function(require,module,exports){
10087 // Copyright Joyent, Inc. and other Node contributors.
10088 //
10089 // Permission is hereby granted, free of charge, to any person obtaining a
10090 // copy of this software and associated documentation files (the
10091 // "Software"), to deal in the Software without restriction, including
10092 // without limitation the rights to use, copy, modify, merge, publish,
10093 // distribute, sublicense, and/or sell copies of the Software, and to permit
10094 // persons to whom the Software is furnished to do so, subject to the
10095 // following conditions:
10096 //
10097 // The above copyright notice and this permission notice shall be included
10098 // in all copies or substantial portions of the Software.
10099 //
10100 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10101 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10102 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10103 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10104 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10105 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10106 // USE OR OTHER DEALINGS IN THE SOFTWARE.
10107
10108
10109 // a transform stream is a readable/writable stream where you do
10110 // something with the data. Sometimes it's called a "filter",
10111 // but that's not a great name for it, since that implies a thing where
10112 // some bits pass through, and others are simply ignored. (That would
10113 // be a valid example of a transform, of course.)
10114 //
10115 // While the output is causally related to the input, it's not a
10116 // necessarily symmetric or synchronous transformation. For example,
10117 // a zlib stream might take multiple plain-text writes(), and then
10118 // emit a single compressed chunk some time in the future.
10119 //
10120 // Here's how this works:
10121 //
10122 // The Transform stream has all the aspects of the readable and writable
10123 // stream classes. When you write(chunk), that calls _write(chunk,cb)
10124 // internally, and returns false if there's a lot of pending writes
10125 // buffered up. When you call read(), that calls _read(n) until
10126 // there's enough pending readable data buffered up.
10127 //
10128 // In a transform stream, the written data is placed in a buffer. When
10129 // _read(n) is called, it transforms the queued up data, calling the
10130 // buffered _write cb's as it consumes chunks. If consuming a single
10131 // written chunk would result in multiple output chunks, then the first
10132 // outputted bit calls the readcb, and subsequent chunks just go into
10133 // the read buffer, and will cause it to emit 'readable' if necessary.
10134 //
10135 // This way, back-pressure is actually determined by the reading side,
10136 // since _read has to be called to start processing a new chunk. However,
10137 // a pathological inflate type of transform can cause excessive buffering
10138 // here. For example, imagine a stream where every byte of input is
10139 // interpreted as an integer from 0-255, and then results in that many
10140 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
10141 // 1kb of data being output. In this case, you could write a very small
10142 // amount of input, and end up with a very large amount of output. In
10143 // such a pathological inflating mechanism, there'd be no way to tell
10144 // the system to stop doing the transform. A single 4MB write could
10145 // cause the system to run out of memory.
10146 //
10147 // However, even in such a pathological case, only a single written chunk
10148 // would be consumed, and then the rest would wait (un-transformed) until
10149 // the results of the previous transformed chunk were consumed.
10150
10151 module.exports = Transform;
10152
10153 var Duplex = require('./_stream_duplex');
10154
10155 /*<replacement>*/
10156 var util = require('core-util-is');
10157 util.inherits = require('inherits');
10158 /*</replacement>*/
10159
10160 util.inherits(Transform, Duplex);
10161
10162
10163 function TransformState(options, stream) {
10164 this.afterTransform = function(er, data) {
10165 return afterTransform(stream, er, data);
10166 };
10167
10168 this.needTransform = false;
10169 this.transforming = false;
10170 this.writecb = null;
10171 this.writechunk = null;
10172 }
10173
10174 function afterTransform(stream, er, data) {
10175 var ts = stream._transformState;
10176 ts.transforming = false;
10177
10178 var cb = ts.writecb;
10179
10180 if (!cb)
10181 return stream.emit('error', new Error('no writecb in Transform class'));
10182
10183 ts.writechunk = null;
10184 ts.writecb = null;
10185
10186 if (!util.isNullOrUndefined(data))
10187 stream.push(data);
10188
10189 if (cb)
10190 cb(er);
10191
10192 var rs = stream._readableState;
10193 rs.reading = false;
10194 if (rs.needReadable || rs.length < rs.highWaterMark) {
10195 stream._read(rs.highWaterMark);
10196 }
10197 }
10198
10199
10200 function Transform(options) {
10201 if (!(this instanceof Transform))
10202 return new Transform(options);
10203
10204 Duplex.call(this, options);
10205
10206 this._transformState = new TransformState(options, this);
10207
10208 // when the writable side finishes, then flush out anything remaining.
10209 var stream = this;
10210
10211 // start out asking for a readable event once data is transformed.
10212 this._readableState.needReadable = true;
10213
10214 // we have implemented the _read method, and done the other things
10215 // that Readable wants before the first _read call, so unset the
10216 // sync guard flag.
10217 this._readableState.sync = false;
10218
10219 this.once('prefinish', function() {
10220 if (util.isFunction(this._flush))
10221 this._flush(function(er) {
10222 done(stream, er);
10223 });
10224 else
10225 done(stream);
10226 });
10227 }
10228
10229 Transform.prototype.push = function(chunk, encoding) {
10230 this._transformState.needTransform = false;
10231 return Duplex.prototype.push.call(this, chunk, encoding);
10232 };
10233
10234 // This is the part where you do stuff!
10235 // override this function in implementation classes.
10236 // 'chunk' is an input chunk.
10237 //
10238 // Call `push(newChunk)` to pass along transformed output
10239 // to the readable side. You may call 'push' zero or more times.
10240 //
10241 // Call `cb(err)` when you are done with this chunk. If you pass
10242 // an error, then that'll put the hurt on the whole operation. If you
10243 // never call cb(), then you'll never get another chunk.
10244 Transform.prototype._transform = function(chunk, encoding, cb) {
10245 throw new Error('not implemented');
10246 };
10247
10248 Transform.prototype._write = function(chunk, encoding, cb) {
10249 var ts = this._transformState;
10250 ts.writecb = cb;
10251 ts.writechunk = chunk;
10252 ts.writeencoding = encoding;
10253 if (!ts.transforming) {
10254 var rs = this._readableState;
10255 if (ts.needTransform ||
10256 rs.needReadable ||
10257 rs.length < rs.highWaterMark)
10258 this._read(rs.highWaterMark);
10259 }
10260 };
10261
10262 // Doesn't matter what the args are here.
10263 // _transform does all the work.
10264 // That we got here means that the readable side wants more data.
10265 Transform.prototype._read = function(n) {
10266 var ts = this._transformState;
10267
10268 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
10269 ts.transforming = true;
10270 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
10271 } else {
10272 // mark that we need a transform, so that any data that comes in
10273 // will get processed, now that we've asked for it.
10274 ts.needTransform = true;
10275 }
10276 };
10277
10278
10279 function done(stream, er) {
10280 if (er)
10281 return stream.emit('error', er);
10282
10283 // if there's nothing in the write buffer, then that means
10284 // that nothing more will ever be provided
10285 var ws = stream._writableState;
10286 var ts = stream._transformState;
10287
10288 if (ws.length)
10289 throw new Error('calling transform done when ws.length != 0');
10290
10291 if (ts.transforming)
10292 throw new Error('calling transform done when still transforming');
10293
10294 return stream.push(null);
10295 }
10296
10297 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
10298 (function (process){
10299 // Copyright Joyent, Inc. and other Node contributors.
10300 //
10301 // Permission is hereby granted, free of charge, to any person obtaining a
10302 // copy of this software and associated documentation files (the
10303 // "Software"), to deal in the Software without restriction, including
10304 // without limitation the rights to use, copy, modify, merge, publish,
10305 // distribute, sublicense, and/or sell copies of the Software, and to permit
10306 // persons to whom the Software is furnished to do so, subject to the
10307 // following conditions:
10308 //
10309 // The above copyright notice and this permission notice shall be included
10310 // in all copies or substantial portions of the Software.
10311 //
10312 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10313 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10314 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10315 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10316 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10317 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10318 // USE OR OTHER DEALINGS IN THE SOFTWARE.
10319
10320 // A bit simpler than readable streams.
10321 // Implement an async ._write(chunk, cb), and it'll handle all
10322 // the drain event emission and buffering.
10323
10324 module.exports = Writable;
10325
10326 /*<replacement>*/
10327 var Buffer = require('buffer').Buffer;
10328 /*</replacement>*/
10329
10330 Writable.WritableState = WritableState;
10331
10332
10333 /*<replacement>*/
10334 var util = require('core-util-is');
10335 util.inherits = require('inherits');
10336 /*</replacement>*/
10337
10338 var Stream = require('stream');
10339
10340 util.inherits(Writable, Stream);
10341
10342 function WriteReq(chunk, encoding, cb) {
10343 this.chunk = chunk;
10344 this.encoding = encoding;
10345 this.callback = cb;
10346 }
10347
10348 function WritableState(options, stream) {
10349 var Duplex = require('./_stream_duplex');
10350
10351 options = options || {};
10352
10353 // the point at which write() starts returning false
10354 // Note: 0 is a valid value, means that we always return false if
10355 // the entire buffer is not flushed immediately on write()
10356 var hwm = options.highWaterMark;
10357 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
10358 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
10359
10360 // object stream flag to indicate whether or not this stream
10361 // contains buffers or objects.
10362 this.objectMode = !!options.objectMode;
10363
10364 if (stream instanceof Duplex)
10365 this.objectMode = this.objectMode || !!options.writableObjectMode;
10366
10367 // cast to ints.
10368 this.highWaterMark = ~~this.highWaterMark;
10369
10370 this.needDrain = false;
10371 // at the start of calling end()
10372 this.ending = false;
10373 // when end() has been called, and returned
10374 this.ended = false;
10375 // when 'finish' is emitted
10376 this.finished = false;
10377
10378 // should we decode strings into buffers before passing to _write?
10379 // this is here so that some node-core streams can optimize string
10380 // handling at a lower level.
10381 var noDecode = options.decodeStrings === false;
10382 this.decodeStrings = !noDecode;
10383
10384 // Crypto is kind of old and crusty. Historically, its default string
10385 // encoding is 'binary' so we have to make this configurable.
10386 // Everything else in the universe uses 'utf8', though.
10387 this.defaultEncoding = options.defaultEncoding || 'utf8';
10388
10389 // not an actual buffer we keep track of, but a measurement
10390 // of how much we're waiting to get pushed to some underlying
10391 // socket or file.
10392 this.length = 0;
10393
10394 // a flag to see when we're in the middle of a write.
10395 this.writing = false;
10396
10397 // when true all writes will be buffered until .uncork() call
10398 this.corked = 0;
10399
10400 // a flag to be able to tell if the onwrite cb is called immediately,
10401 // or on a later tick. We set this to true at first, because any
10402 // actions that shouldn't happen until "later" should generally also
10403 // not happen before the first write call.
10404 this.sync = true;
10405
10406 // a flag to know if we're processing previously buffered items, which
10407 // may call the _write() callback in the same tick, so that we don't
10408 // end up in an overlapped onwrite situation.
10409 this.bufferProcessing = false;
10410
10411 // the callback that's passed to _write(chunk,cb)
10412 this.onwrite = function(er) {
10413 onwrite(stream, er);
10414 };
10415
10416 // the callback that the user supplies to write(chunk,encoding,cb)
10417 this.writecb = null;
10418
10419 // the amount that is being written when _write is called.
10420 this.writelen = 0;
10421
10422 this.buffer = [];
10423
10424 // number of pending user-supplied write callbacks
10425 // this must be 0 before 'finish' can be emitted
10426 this.pendingcb = 0;
10427
10428 // emit prefinish if the only thing we're waiting for is _write cbs
10429 // This is relevant for synchronous Transform streams
10430 this.prefinished = false;
10431
10432 // True if the error was already emitted and should not be thrown again
10433 this.errorEmitted = false;
10434 }
10435
10436 function Writable(options) {
10437 var Duplex = require('./_stream_duplex');
10438
10439 // Writable ctor is applied to Duplexes, though they're not
10440 // instanceof Writable, they're instanceof Readable.
10441 if (!(this instanceof Writable) && !(this instanceof Duplex))
10442 return new Writable(options);
10443
10444 this._writableState = new WritableState(options, this);
10445
10446 // legacy.
10447 this.writable = true;
10448
10449 Stream.call(this);
10450 }
10451
10452 // Otherwise people can pipe Writable streams, which is just wrong.
10453 Writable.prototype.pipe = function() {
10454 this.emit('error', new Error('Cannot pipe. Not readable.'));
10455 };
10456
10457
10458 function writeAfterEnd(stream, state, cb) {
10459 var er = new Error('write after end');
10460 // TODO: defer error events consistently everywhere, not just the cb
10461 stream.emit('error', er);
10462 process.nextTick(function() {
10463 cb(er);
10464 });
10465 }
10466
10467 // If we get something that is not a buffer, string, null, or undefined,
10468 // and we're not in objectMode, then that's an error.
10469 // Otherwise stream chunks are all considered to be of length=1, and the
10470 // watermarks determine how many objects to keep in the buffer, rather than
10471 // how many bytes or characters.
10472 function validChunk(stream, state, chunk, cb) {
10473 var valid = true;
10474 if (!util.isBuffer(chunk) &&
10475 !util.isString(chunk) &&
10476 !util.isNullOrUndefined(chunk) &&
10477 !state.objectMode) {
10478 var er = new TypeError('Invalid non-string/buffer chunk');
10479 stream.emit('error', er);
10480 process.nextTick(function() {
10481 cb(er);
10482 });
10483 valid = false;
10484 }
10485 return valid;
10486 }
10487
10488 Writable.prototype.write = function(chunk, encoding, cb) {
10489 var state = this._writableState;
10490 var ret = false;
10491
10492 if (util.isFunction(encoding)) {
10493 cb = encoding;
10494 encoding = null;
10495 }
10496
10497 if (util.isBuffer(chunk))
10498 encoding = 'buffer';
10499 else if (!encoding)
10500 encoding = state.defaultEncoding;
10501
10502 if (!util.isFunction(cb))
10503 cb = function() {};
10504
10505 if (state.ended)
10506 writeAfterEnd(this, state, cb);
10507 else if (validChunk(this, state, chunk, cb)) {
10508 state.pendingcb++;
10509 ret = writeOrBuffer(this, state, chunk, encoding, cb);
10510 }
10511
10512 return ret;
10513 };
10514
10515 Writable.prototype.cork = function() {
10516 var state = this._writableState;
10517
10518 state.corked++;
10519 };
10520
10521 Writable.prototype.uncork = function() {
10522 var state = this._writableState;
10523
10524 if (state.corked) {
10525 state.corked--;
10526
10527 if (!state.writing &&
10528 !state.corked &&
10529 !state.finished &&
10530 !state.bufferProcessing &&
10531 state.buffer.length)
10532 clearBuffer(this, state);
10533 }
10534 };
10535
10536 function decodeChunk(state, chunk, encoding) {
10537 if (!state.objectMode &&
10538 state.decodeStrings !== false &&
10539 util.isString(chunk)) {
10540 chunk = new Buffer(chunk, encoding);
10541 }
10542 return chunk;
10543 }
10544
10545 // if we're already writing something, then just put this
10546 // in the queue, and wait our turn. Otherwise, call _write
10547 // If we return false, then we need a drain event, so set that flag.
10548 function writeOrBuffer(stream, state, chunk, encoding, cb) {
10549 chunk = decodeChunk(state, chunk, encoding);
10550 if (util.isBuffer(chunk))
10551 encoding = 'buffer';
10552 var len = state.objectMode ? 1 : chunk.length;
10553
10554 state.length += len;
10555
10556 var ret = state.length < state.highWaterMark;
10557 // we must ensure that previous needDrain will not be reset to false.
10558 if (!ret)
10559 state.needDrain = true;
10560
10561 if (state.writing || state.corked)
10562 state.buffer.push(new WriteReq(chunk, encoding, cb));
10563 else
10564 doWrite(stream, state, false, len, chunk, encoding, cb);
10565
10566 return ret;
10567 }
10568
10569 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
10570 state.writelen = len;
10571 state.writecb = cb;
10572 state.writing = true;
10573 state.sync = true;
10574 if (writev)
10575 stream._writev(chunk, state.onwrite);
10576 else
10577 stream._write(chunk, encoding, state.onwrite);
10578 state.sync = false;
10579 }
10580
10581 function onwriteError(stream, state, sync, er, cb) {
10582 if (sync)
10583 process.nextTick(function() {
10584 state.pendingcb--;
10585 cb(er);
10586 });
10587 else {
10588 state.pendingcb--;
10589 cb(er);
10590 }
10591
10592 stream._writableState.errorEmitted = true;
10593 stream.emit('error', er);
10594 }
10595
10596 function onwriteStateUpdate(state) {
10597 state.writing = false;
10598 state.writecb = null;
10599 state.length -= state.writelen;
10600 state.writelen = 0;
10601 }
10602
10603 function onwrite(stream, er) {
10604 var state = stream._writableState;
10605 var sync = state.sync;
10606 var cb = state.writecb;
10607
10608 onwriteStateUpdate(state);
10609
10610 if (er)
10611 onwriteError(stream, state, sync, er, cb);
10612 else {
10613 // Check if we're actually ready to finish, but don't emit yet
10614 var finished = needFinish(stream, state);
10615
10616 if (!finished &&
10617 !state.corked &&
10618 !state.bufferProcessing &&
10619 state.buffer.length) {
10620 clearBuffer(stream, state);
10621 }
10622
10623 if (sync) {
10624 process.nextTick(function() {
10625 afterWrite(stream, state, finished, cb);
10626 });
10627 } else {
10628 afterWrite(stream, state, finished, cb);
10629 }
10630 }
10631 }
10632
10633 function afterWrite(stream, state, finished, cb) {
10634 if (!finished)
10635 onwriteDrain(stream, state);
10636 state.pendingcb--;
10637 cb();
10638 finishMaybe(stream, state);
10639 }
10640
10641 // Must force callback to be called on nextTick, so that we don't
10642 // emit 'drain' before the write() consumer gets the 'false' return
10643 // value, and has a chance to attach a 'drain' listener.
10644 function onwriteDrain(stream, state) {
10645 if (state.length === 0 && state.needDrain) {
10646 state.needDrain = false;
10647 stream.emit('drain');
10648 }
10649 }
10650
10651
10652 // if there's something in the buffer waiting, then process it
10653 function clearBuffer(stream, state) {
10654 state.bufferProcessing = true;
10655
10656 if (stream._writev && state.buffer.length > 1) {
10657 // Fast case, write everything using _writev()
10658 var cbs = [];
10659 for (var c = 0; c < state.buffer.length; c++)
10660 cbs.push(state.buffer[c].callback);
10661
10662 // count the one we are adding, as well.
10663 // TODO(isaacs) clean this up
10664 state.pendingcb++;
10665 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
10666 for (var i = 0; i < cbs.length; i++) {
10667 state.pendingcb--;
10668 cbs[i](err);
10669 }
10670 });
10671
10672 // Clear buffer
10673 state.buffer = [];
10674 } else {
10675 // Slow case, write chunks one-by-one
10676 for (var c = 0; c < state.buffer.length; c++) {
10677 var entry = state.buffer[c];
10678 var chunk = entry.chunk;
10679 var encoding = entry.encoding;
10680 var cb = entry.callback;
10681 var len = state.objectMode ? 1 : chunk.length;
10682
10683 doWrite(stream, state, false, len, chunk, encoding, cb);
10684
10685 // if we didn't call the onwrite immediately, then
10686 // it means that we need to wait until it does.
10687 // also, that means that the chunk and cb are currently
10688 // being processed, so move the buffer counter past them.
10689 if (state.writing) {
10690 c++;
10691 break;
10692 }
10693 }
10694
10695 if (c < state.buffer.length)
10696 state.buffer = state.buffer.slice(c);
10697 else
10698 state.buffer.length = 0;
10699 }
10700
10701 state.bufferProcessing = false;
10702 }
10703
10704 Writable.prototype._write = function(chunk, encoding, cb) {
10705 cb(new Error('not implemented'));
10706
10707 };
10708
10709 Writable.prototype._writev = null;
10710
10711 Writable.prototype.end = function(chunk, encoding, cb) {
10712 var state = this._writableState;
10713
10714 if (util.isFunction(chunk)) {
10715 cb = chunk;
10716 chunk = null;
10717 encoding = null;
10718 } else if (util.isFunction(encoding)) {
10719 cb = encoding;
10720 encoding = null;
10721 }
10722
10723 if (!util.isNullOrUndefined(chunk))
10724 this.write(chunk, encoding);
10725
10726 // .end() fully uncorks
10727 if (state.corked) {
10728 state.corked = 1;
10729 this.uncork();
10730 }
10731
10732 // ignore unnecessary end() calls.
10733 if (!state.ending && !state.finished)
10734 endWritable(this, state, cb);
10735 };
10736
10737
10738 function needFinish(stream, state) {
10739 return (state.ending &&
10740 state.length === 0 &&
10741 !state.finished &&
10742 !state.writing);
10743 }
10744
10745 function prefinish(stream, state) {
10746 if (!state.prefinished) {
10747 state.prefinished = true;
10748 stream.emit('prefinish');
10749 }
10750 }
10751
10752 function finishMaybe(stream, state) {
10753 var need = needFinish(stream, state);
10754 if (need) {
10755 if (state.pendingcb === 0) {
10756 prefinish(stream, state);
10757 state.finished = true;
10758 stream.emit('finish');
10759 } else
10760 prefinish(stream, state);
10761 }
10762 return need;
10763 }
10764
10765 function endWritable(stream, state, cb) {
10766 state.ending = true;
10767 finishMaybe(stream, state);
10768 if (cb) {
10769 if (state.finished)
10770 process.nextTick(cb);
10771 else
10772 stream.once('finish', cb);
10773 }
10774 state.ended = true;
10775 }
10776
10777 }).call(this,require('_process'))
10778 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
10779 (function (Buffer){
10780 // Copyright Joyent, Inc. and other Node contributors.
10781 //
10782 // Permission is hereby granted, free of charge, to any person obtaining a
10783 // copy of this software and associated documentation files (the
10784 // "Software"), to deal in the Software without restriction, including
10785 // without limitation the rights to use, copy, modify, merge, publish,
10786 // distribute, sublicense, and/or sell copies of the Software, and to permit
10787 // persons to whom the Software is furnished to do so, subject to the
10788 // following conditions:
10789 //
10790 // The above copyright notice and this permission notice shall be included
10791 // in all copies or substantial portions of the Software.
10792 //
10793 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10794 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10795 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10796 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10797 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10798 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10799 // USE OR OTHER DEALINGS IN THE SOFTWARE.
10800
10801 // NOTE: These type checking functions intentionally don't use `instanceof`
10802 // because it is fragile and can be easily faked with `Object.create()`.
10803 function isArray(ar) {
10804 return Array.isArray(ar);
10805 }
10806 exports.isArray = isArray;
10807
10808 function isBoolean(arg) {
10809 return typeof arg === 'boolean';
10810 }
10811 exports.isBoolean = isBoolean;
10812
10813 function isNull(arg) {
10814 return arg === null;
10815 }
10816 exports.isNull = isNull;
10817
10818 function isNullOrUndefined(arg) {
10819 return arg == null;
10820 }
10821 exports.isNullOrUndefined = isNullOrUndefined;
10822
10823 function isNumber(arg) {
10824 return typeof arg === 'number';
10825 }
10826 exports.isNumber = isNumber;
10827
10828 function isString(arg) {
10829 return typeof arg === 'string';
10830 }
10831 exports.isString = isString;
10832
10833 function isSymbol(arg) {
10834 return typeof arg === 'symbol';
10835 }
10836 exports.isSymbol = isSymbol;
10837
10838 function isUndefined(arg) {
10839 return arg === void 0;
10840 }
10841 exports.isUndefined = isUndefined;
10842
10843 function isRegExp(re) {
10844 return isObject(re) && objectToString(re) === '[object RegExp]';
10845 }
10846 exports.isRegExp = isRegExp;
10847
10848 function isObject(arg) {
10849 return typeof arg === 'object' && arg !== null;
10850 }
10851 exports.isObject = isObject;
10852
10853 function isDate(d) {
10854 return isObject(d) && objectToString(d) === '[object Date]';
10855 }
10856 exports.isDate = isDate;
10857
10858 function isError(e) {
10859 return isObject(e) &&
10860 (objectToString(e) === '[object Error]' || e instanceof Error);
10861 }
10862 exports.isError = isError;
10863
10864 function isFunction(arg) {
10865 return typeof arg === 'function';
10866 }
10867 exports.isFunction = isFunction;
10868
10869 function isPrimitive(arg) {
10870 return arg === null ||
10871 typeof arg === 'boolean' ||
10872 typeof arg === 'number' ||
10873 typeof arg === 'string' ||
10874 typeof arg === 'symbol' || // ES6 symbol
10875 typeof arg === 'undefined';
10876 }
10877 exports.isPrimitive = isPrimitive;
10878
10879 function isBuffer(arg) {
10880 return Buffer.isBuffer(arg);
10881 }
10882 exports.isBuffer = isBuffer;
10883
10884 function objectToString(o) {
10885 return Object.prototype.toString.call(o);
10886 }
10887 }).call(this,require("buffer").Buffer)
10888 },{"buffer":7}],22:[function(require,module,exports){
10889 module.exports = require("./lib/_stream_passthrough.js")
10890
10891 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
10892 exports = module.exports = require('./lib/_stream_readable.js');
10893 exports.Stream = require('stream');
10894 exports.Readable = exports;
10895 exports.Writable = require('./lib/_stream_writable.js');
10896 exports.Duplex = require('./lib/_stream_duplex.js');
10897 exports.Transform = require('./lib/_stream_transform.js');
10898 exports.PassThrough = require('./lib/_stream_passthrough.js');
10899
10900 },{"./lib/_stream_duplex.js":16,"./lib/_stream_passthrough.js":17,"./lib/_stream_readable.js":18,"./lib/_stream_transform.js":19,"./lib/_stream_writable.js":20,"stream":26}],24:[function(require,module,exports){
10901 module.exports = require("./lib/_stream_transform.js")
10902
10903 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
10904 module.exports = require("./lib/_stream_writable.js")
10905
10906 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
10907 // Copyright Joyent, Inc. and other Node contributors.
10908 //
10909 // Permission is hereby granted, free of charge, to any person obtaining a
10910 // copy of this software and associated documentation files (the
10911 // "Software"), to deal in the Software without restriction, including
10912 // without limitation the rights to use, copy, modify, merge, publish,
10913 // distribute, sublicense, and/or sell copies of the Software, and to permit
10914 // persons to whom the Software is furnished to do so, subject to the
10915 // following conditions:
10916 //
10917 // The above copyright notice and this permission notice shall be included
10918 // in all copies or substantial portions of the Software.
10919 //
10920 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10921 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10922 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10923 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10924 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10925 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10926 // USE OR OTHER DEALINGS IN THE SOFTWARE.
10927
10928 module.exports = Stream;
10929
10930 var EE = require('events').EventEmitter;
10931 var inherits = require('inherits');
10932
10933 inherits(Stream, EE);
10934 Stream.Readable = require('readable-stream/readable.js');
10935 Stream.Writable = require('readable-stream/writable.js');
10936 Stream.Duplex = require('readable-stream/duplex.js');
10937 Stream.Transform = require('readable-stream/transform.js');
10938 Stream.PassThrough = require('readable-stream/passthrough.js');
10939
10940 // Backwards-compat with node 0.4.x
10941 Stream.Stream = Stream;
10942
10943
10944
10945 // old-style streams. Note that the pipe method (the only relevant
10946 // part of this class) is overridden in the Readable class.
10947
10948 function Stream() {
10949 EE.call(this);
10950 }
10951
10952 Stream.prototype.pipe = function(dest, options) {
10953 var source = this;
10954
10955 function ondata(chunk) {
10956 if (dest.writable) {
10957 if (false === dest.write(chunk) && source.pause) {
10958 source.pause();
10959 }
10960 }
10961 }
10962
10963 source.on('data', ondata);
10964
10965 function ondrain() {
10966 if (source.readable && source.resume) {
10967 source.resume();
10968 }
10969 }
10970
10971 dest.on('drain', ondrain);
10972
10973 // If the 'end' option is not supplied, dest.end() will be called when
10974 // source gets the 'end' or 'close' events. Only dest.end() once.
10975 if (!dest._isStdio && (!options || options.end !== false)) {
10976 source.on('end', onend);
10977 source.on('close', onclose);
10978 }
10979
10980 var didOnEnd = false;
10981 function onend() {
10982 if (didOnEnd) return;
10983 didOnEnd = true;
10984
10985 dest.end();
10986 }
10987
10988
10989 function onclose() {
10990 if (didOnEnd) return;
10991 didOnEnd = true;
10992
10993 if (typeof dest.destroy === 'function') dest.destroy();
10994 }
10995
10996 // don't leave dangling pipes when there are errors.
10997 function onerror(er) {
10998 cleanup();
10999 if (EE.listenerCount(this, 'error') === 0) {
11000 throw er; // Unhandled stream error in pipe.
11001 }
11002 }
11003
11004 source.on('error', onerror);
11005 dest.on('error', onerror);
11006
11007 // remove all the event listeners that were added.
11008 function cleanup() {
11009 source.removeListener('data', ondata);
11010 dest.removeListener('drain', ondrain);
11011
11012 source.removeListener('end', onend);
11013 source.removeListener('close', onclose);
11014
11015 source.removeListener('error', onerror);
11016 dest.removeListener('error', onerror);
11017
11018 source.removeListener('end', cleanup);
11019 source.removeListener('close', cleanup);
11020
11021 dest.removeListener('close', cleanup);
11022 }
11023
11024 source.on('end', cleanup);
11025 source.on('close', cleanup);
11026
11027 dest.on('close', cleanup);
11028
11029 dest.emit('pipe', source);
11030
11031 // Allow for unix-like usage: A.pipe(B).pipe(C)
11032 return dest;
11033 };
11034
11035 },{"events":11,"inherits":12,"readable-stream/duplex.js":15,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],27:[function(require,module,exports){
11036 // Copyright Joyent, Inc. and other Node contributors.
11037 //
11038 // Permission is hereby granted, free of charge, to any person obtaining a
11039 // copy of this software and associated documentation files (the
11040 // "Software"), to deal in the Software without restriction, including
11041 // without limitation the rights to use, copy, modify, merge, publish,
11042 // distribute, sublicense, and/or sell copies of the Software, and to permit
11043 // persons to whom the Software is furnished to do so, subject to the
11044 // following conditions:
11045 //
11046 // The above copyright notice and this permission notice shall be included
11047 // in all copies or substantial portions of the Software.
11048 //
11049 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11050 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11051 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11052 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11053 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11054 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11055 // USE OR OTHER DEALINGS IN THE SOFTWARE.
11056
11057 var Buffer = require('buffer').Buffer;
11058
11059 var isBufferEncoding = Buffer.isEncoding
11060 || function(encoding) {
11061 switch (encoding && encoding.toLowerCase()) {
11062 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;
11063 default: return false;
11064 }
11065 }
11066
11067
11068 function assertEncoding(encoding) {
11069 if (encoding && !isBufferEncoding(encoding)) {
11070 throw new Error('Unknown encoding: ' + encoding);
11071 }
11072 }
11073
11074 // StringDecoder provides an interface for efficiently splitting a series of
11075 // buffers into a series of JS strings without breaking apart multi-byte
11076 // characters. CESU-8 is handled as part of the UTF-8 encoding.
11077 //
11078 // @TODO Handling all encodings inside a single object makes it very difficult
11079 // to reason about this code, so it should be split up in the future.
11080 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
11081 // points as used by CESU-8.
11082 var StringDecoder = exports.StringDecoder = function(encoding) {
11083 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
11084 assertEncoding(encoding);
11085 switch (this.encoding) {
11086 case 'utf8':
11087 // CESU-8 represents each of Surrogate Pair by 3-bytes
11088 this.surrogateSize = 3;
11089 break;
11090 case 'ucs2':
11091 case 'utf16le':
11092 // UTF-16 represents each of Surrogate Pair by 2-bytes
11093 this.surrogateSize = 2;
11094 this.detectIncompleteChar = utf16DetectIncompleteChar;
11095 break;
11096 case 'base64':
11097 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
11098 this.surrogateSize = 3;
11099 this.detectIncompleteChar = base64DetectIncompleteChar;
11100 break;
11101 default:
11102 this.write = passThroughWrite;
11103 return;
11104 }
11105
11106 // Enough space to store all bytes of a single character. UTF-8 needs 4
11107 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
11108 this.charBuffer = new Buffer(6);
11109 // Number of bytes received for the current incomplete multi-byte character.
11110 this.charReceived = 0;
11111 // Number of bytes expected for the current incomplete multi-byte character.
11112 this.charLength = 0;
11113 };
11114
11115
11116 // write decodes the given buffer and returns it as JS string that is
11117 // guaranteed to not contain any partial multi-byte characters. Any partial
11118 // character found at the end of the buffer is buffered up, and will be
11119 // returned when calling write again with the remaining bytes.
11120 //
11121 // Note: Converting a Buffer containing an orphan surrogate to a String
11122 // currently works, but converting a String to a Buffer (via `new Buffer`, or
11123 // Buffer#write) will replace incomplete surrogates with the unicode
11124 // replacement character. See https://codereview.chromium.org/121173009/ .
11125 StringDecoder.prototype.write = function(buffer) {
11126 var charStr = '';
11127 // if our last write ended with an incomplete multibyte character
11128 while (this.charLength) {
11129 // determine how many remaining bytes this buffer has to offer for this char
11130 var available = (buffer.length >= this.charLength - this.charReceived) ?
11131 this.charLength - this.charReceived :
11132 buffer.length;
11133
11134 // add the new bytes to the char buffer
11135 buffer.copy(this.charBuffer, this.charReceived, 0, available);
11136 this.charReceived += available;
11137
11138 if (this.charReceived < this.charLength) {
11139 // still not enough chars in this buffer? wait for more ...
11140 return '';
11141 }
11142
11143 // remove bytes belonging to the current character from the buffer
11144 buffer = buffer.slice(available, buffer.length);
11145
11146 // get the character that was split
11147 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
11148
11149 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
11150 var charCode = charStr.charCodeAt(charStr.length - 1);
11151 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
11152 this.charLength += this.surrogateSize;
11153 charStr = '';
11154 continue;
11155 }
11156 this.charReceived = this.charLength = 0;
11157
11158 // if there are no more bytes in this buffer, just emit our char
11159 if (buffer.length === 0) {
11160 return charStr;
11161 }
11162 break;
11163 }
11164
11165 // determine and set charLength / charReceived
11166 this.detectIncompleteChar(buffer);
11167
11168 var end = buffer.length;
11169 if (this.charLength) {
11170 // buffer the incomplete character bytes we got
11171 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
11172 end -= this.charReceived;
11173 }
11174
11175 charStr += buffer.toString(this.encoding, 0, end);
11176
11177 var end = charStr.length - 1;
11178 var charCode = charStr.charCodeAt(end);
11179 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
11180 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
11181 var size = this.surrogateSize;
11182 this.charLength += size;
11183 this.charReceived += size;
11184 this.charBuffer.copy(this.charBuffer, size, 0, size);
11185 buffer.copy(this.charBuffer, 0, 0, size);
11186 return charStr.substring(0, end);
11187 }
11188
11189 // or just emit the charStr
11190 return charStr;
11191 };
11192
11193 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
11194 // the end of the given buffer. If so, it sets this.charLength to the byte
11195 // length that character, and sets this.charReceived to the number of bytes
11196 // that are available for this character.
11197 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
11198 // determine how many bytes we have to check at the end of this buffer
11199 var i = (buffer.length >= 3) ? 3 : buffer.length;
11200
11201 // Figure out if one of the last i bytes of our buffer announces an
11202 // incomplete char.
11203 for (; i > 0; i--) {
11204 var c = buffer[buffer.length - i];
11205
11206 // See http://en.wikipedia.org/wiki/UTF-8#Description
11207
11208 // 110XXXXX
11209 if (i == 1 && c >> 5 == 0x06) {
11210 this.charLength = 2;
11211 break;
11212 }
11213
11214 // 1110XXXX
11215 if (i <= 2 && c >> 4 == 0x0E) {
11216 this.charLength = 3;
11217 break;
11218 }
11219
11220 // 11110XXX
11221 if (i <= 3 && c >> 3 == 0x1E) {
11222 this.charLength = 4;
11223 break;
11224 }
11225 }
11226 this.charReceived = i;
11227 };
11228
11229 StringDecoder.prototype.end = function(buffer) {
11230 var res = '';
11231 if (buffer && buffer.length)
11232 res = this.write(buffer);
11233
11234 if (this.charReceived) {
11235 var cr = this.charReceived;
11236 var buf = this.charBuffer;
11237 var enc = this.encoding;
11238 res += buf.slice(0, cr).toString(enc);
11239 }
11240
11241 return res;
11242 };
11243
11244 function passThroughWrite(buffer) {
11245 return buffer.toString(this.encoding);
11246 }
11247
11248 function utf16DetectIncompleteChar(buffer) {
11249 this.charReceived = buffer.length % 2;
11250 this.charLength = this.charReceived ? 2 : 0;
11251 }
11252
11253 function base64DetectIncompleteChar(buffer) {
11254 this.charReceived = buffer.length % 3;
11255 this.charLength = this.charReceived ? 3 : 0;
11256 }
11257
11258 },{"buffer":7}],28:[function(require,module,exports){
11259 module.exports = function isBuffer(arg) {
11260 return arg && typeof arg === 'object'
11261 && typeof arg.copy === 'function'
11262 && typeof arg.fill === 'function'
11263 && typeof arg.readUInt8 === 'function';
11264 }
11265 },{}],29:[function(require,module,exports){
11266 (function (process,global){
11267 // Copyright Joyent, Inc. and other Node contributors.
11268 //
11269 // Permission is hereby granted, free of charge, to any person obtaining a
11270 // copy of this software and associated documentation files (the
11271 // "Software"), to deal in the Software without restriction, including
11272 // without limitation the rights to use, copy, modify, merge, publish,
11273 // distribute, sublicense, and/or sell copies of the Software, and to permit
11274 // persons to whom the Software is furnished to do so, subject to the
11275 // following conditions:
11276 //
11277 // The above copyright notice and this permission notice shall be included
11278 // in all copies or substantial portions of the Software.
11279 //
11280 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11281 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11282 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11283 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11284 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11285 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11286 // USE OR OTHER DEALINGS IN THE SOFTWARE.
11287
11288 var formatRegExp = /%[sdj%]/g;
11289 exports.format = function(f) {
11290 if (!isString(f)) {
11291 var objects = [];
11292 for (var i = 0; i < arguments.length; i++) {
11293 objects.push(inspect(arguments[i]));
11294 }
11295 return objects.join(' ');
11296 }
11297
11298 var i = 1;
11299 var args = arguments;
11300 var len = args.length;
11301 var str = String(f).replace(formatRegExp, function(x) {
11302 if (x === '%%') return '%';
11303 if (i >= len) return x;
11304 switch (x) {
11305 case '%s': return String(args[i++]);
11306 case '%d': return Number(args[i++]);
11307 case '%j':
11308 try {
11309 return JSON.stringify(args[i++]);
11310 } catch (_) {
11311 return '[Circular]';
11312 }
11313 default:
11314 return x;
11315 }
11316 });
11317 for (var x = args[i]; i < len; x = args[++i]) {
11318 if (isNull(x) || !isObject(x)) {
11319 str += ' ' + x;
11320 } else {
11321 str += ' ' + inspect(x);
11322 }
11323 }
11324 return str;
11325 };
11326
11327
11328 // Mark that a method should not be used.
11329 // Returns a modified function which warns once by default.
11330 // If --no-deprecation is set, then it is a no-op.
11331 exports.deprecate = function(fn, msg) {
11332 // Allow for deprecating things in the process of starting up.
11333 if (isUndefined(global.process)) {
11334 return function() {
11335 return exports.deprecate(fn, msg).apply(this, arguments);
11336 };
11337 }
11338
11339 if (process.noDeprecation === true) {
11340 return fn;
11341 }
11342
11343 var warned = false;
11344 function deprecated() {
11345 if (!warned) {
11346 if (process.throwDeprecation) {
11347 throw new Error(msg);
11348 } else if (process.traceDeprecation) {
11349 console.trace(msg);
11350 } else {
11351 console.error(msg);
11352 }
11353 warned = true;
11354 }
11355 return fn.apply(this, arguments);
11356 }
11357
11358 return deprecated;
11359 };
11360
11361
11362 var debugs = {};
11363 var debugEnviron;
11364 exports.debuglog = function(set) {
11365 if (isUndefined(debugEnviron))
11366 debugEnviron = process.env.NODE_DEBUG || '';
11367 set = set.toUpperCase();
11368 if (!debugs[set]) {
11369 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
11370 var pid = process.pid;
11371 debugs[set] = function() {
11372 var msg = exports.format.apply(exports, arguments);
11373 console.error('%s %d: %s', set, pid, msg);
11374 };
11375 } else {
11376 debugs[set] = function() {};
11377 }
11378 }
11379 return debugs[set];
11380 };
11381
11382
11383 /**
11384 * Echos the value of a value. Trys to print the value out
11385 * in the best way possible given the different types.
11386 *
11387 * @param {Object} obj The object to print out.
11388 * @param {Object} opts Optional options object that alters the output.
11389 */
11390 /* legacy: obj, showHidden, depth, colors*/
11391 function inspect(obj, opts) {
11392 // default options
11393 var ctx = {
11394 seen: [],
11395 stylize: stylizeNoColor
11396 };
11397 // legacy...
11398 if (arguments.length >= 3) ctx.depth = arguments[2];
11399 if (arguments.length >= 4) ctx.colors = arguments[3];
11400 if (isBoolean(opts)) {
11401 // legacy...
11402 ctx.showHidden = opts;
11403 } else if (opts) {
11404 // got an "options" object
11405 exports._extend(ctx, opts);
11406 }
11407 // set default options
11408 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
11409 if (isUndefined(ctx.depth)) ctx.depth = 2;
11410 if (isUndefined(ctx.colors)) ctx.colors = false;
11411 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
11412 if (ctx.colors) ctx.stylize = stylizeWithColor;
11413 return formatValue(ctx, obj, ctx.depth);
11414 }
11415 exports.inspect = inspect;
11416
11417
11418 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
11419 inspect.colors = {
11420 'bold' : [1, 22],
11421 'italic' : [3, 23],
11422 'underline' : [4, 24],
11423 'inverse' : [7, 27],
11424 'white' : [37, 39],
11425 'grey' : [90, 39],
11426 'black' : [30, 39],
11427 'blue' : [34, 39],
11428 'cyan' : [36, 39],
11429 'green' : [32, 39],
11430 'magenta' : [35, 39],
11431 'red' : [31, 39],
11432 'yellow' : [33, 39]
11433 };
11434
11435 // Don't use 'blue' not visible on cmd.exe
11436 inspect.styles = {
11437 'special': 'cyan',
11438 'number': 'yellow',
11439 'boolean': 'yellow',
11440 'undefined': 'grey',
11441 'null': 'bold',
11442 'string': 'green',
11443 'date': 'magenta',
11444 // "name": intentionally not styling
11445 'regexp': 'red'
11446 };
11447
11448
11449 function stylizeWithColor(str, styleType) {
11450 var style = inspect.styles[styleType];
11451
11452 if (style) {
11453 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
11454 '\u001b[' + inspect.colors[style][1] + 'm';
11455 } else {
11456 return str;
11457 }
11458 }
11459
11460
11461 function stylizeNoColor(str, styleType) {
11462 return str;
11463 }
11464
11465
11466 function arrayToHash(array) {
11467 var hash = {};
11468
11469 array.forEach(function(val, idx) {
11470 hash[val] = true;
11471 });
11472
11473 return hash;
11474 }
11475
11476
11477 function formatValue(ctx, value, recurseTimes) {
11478 // Provide a hook for user-specified inspect functions.
11479 // Check that value is an object with an inspect function on it
11480 if (ctx.customInspect &&
11481 value &&
11482 isFunction(value.inspect) &&
11483 // Filter out the util module, it's inspect function is special
11484 value.inspect !== exports.inspect &&
11485 // Also filter out any prototype objects using the circular check.
11486 !(value.constructor && value.constructor.prototype === value)) {
11487 var ret = value.inspect(recurseTimes, ctx);
11488 if (!isString(ret)) {
11489 ret = formatValue(ctx, ret, recurseTimes);
11490 }
11491 return ret;
11492 }
11493
11494 // Primitive types cannot have properties
11495 var primitive = formatPrimitive(ctx, value);
11496 if (primitive) {
11497 return primitive;
11498 }
11499
11500 // Look up the keys of the object.
11501 var keys = Object.keys(value);
11502 var visibleKeys = arrayToHash(keys);
11503
11504 if (ctx.showHidden) {
11505 keys = Object.getOwnPropertyNames(value);
11506 }
11507
11508 // IE doesn't make error fields non-enumerable
11509 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
11510 if (isError(value)
11511 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
11512 return formatError(value);
11513 }
11514
11515 // Some type of object without properties can be shortcutted.
11516 if (keys.length === 0) {
11517 if (isFunction(value)) {
11518 var name = value.name ? ': ' + value.name : '';
11519 return ctx.stylize('[Function' + name + ']', 'special');
11520 }
11521 if (isRegExp(value)) {
11522 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
11523 }
11524 if (isDate(value)) {
11525 return ctx.stylize(Date.prototype.toString.call(value), 'date');
11526 }
11527 if (isError(value)) {
11528 return formatError(value);
11529 }
11530 }
11531
11532 var base = '', array = false, braces = ['{', '}'];
11533
11534 // Make Array say that they are Array
11535 if (isArray(value)) {
11536 array = true;
11537 braces = ['[', ']'];
11538 }
11539
11540 // Make functions say that they are functions
11541 if (isFunction(value)) {
11542 var n = value.name ? ': ' + value.name : '';
11543 base = ' [Function' + n + ']';
11544 }
11545
11546 // Make RegExps say that they are RegExps
11547 if (isRegExp(value)) {
11548 base = ' ' + RegExp.prototype.toString.call(value);
11549 }
11550
11551 // Make dates with properties first say the date
11552 if (isDate(value)) {
11553 base = ' ' + Date.prototype.toUTCString.call(value);
11554 }
11555
11556 // Make error with message first say the error
11557 if (isError(value)) {
11558 base = ' ' + formatError(value);
11559 }
11560
11561 if (keys.length === 0 && (!array || value.length == 0)) {
11562 return braces[0] + base + braces[1];
11563 }
11564
11565 if (recurseTimes < 0) {
11566 if (isRegExp(value)) {
11567 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
11568 } else {
11569 return ctx.stylize('[Object]', 'special');
11570 }
11571 }
11572
11573 ctx.seen.push(value);
11574
11575 var output;
11576 if (array) {
11577 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
11578 } else {
11579 output = keys.map(function(key) {
11580 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
11581 });
11582 }
11583
11584 ctx.seen.pop();
11585
11586 return reduceToSingleString(output, base, braces);
11587 }
11588
11589
11590 function formatPrimitive(ctx, value) {
11591 if (isUndefined(value))
11592 return ctx.stylize('undefined', 'undefined');
11593 if (isString(value)) {
11594 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
11595 .replace(/'/g, "\\'")
11596 .replace(/\\"/g, '"') + '\'';
11597 return ctx.stylize(simple, 'string');
11598 }
11599 if (isNumber(value))
11600 return ctx.stylize('' + value, 'number');
11601 if (isBoolean(value))
11602 return ctx.stylize('' + value, 'boolean');
11603 // For some reason typeof null is "object", so special case here.
11604 if (isNull(value))
11605 return ctx.stylize('null', 'null');
11606 }
11607
11608
11609 function formatError(value) {
11610 return '[' + Error.prototype.toString.call(value) + ']';
11611 }
11612
11613
11614 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
11615 var output = [];
11616 for (var i = 0, l = value.length; i < l; ++i) {
11617 if (hasOwnProperty(value, String(i))) {
11618 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
11619 String(i), true));
11620 } else {
11621 output.push('');
11622 }
11623 }
11624 keys.forEach(function(key) {
11625 if (!key.match(/^\d+$/)) {
11626 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
11627 key, true));
11628 }
11629 });
11630 return output;
11631 }
11632
11633
11634 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
11635 var name, str, desc;
11636 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
11637 if (desc.get) {
11638 if (desc.set) {
11639 str = ctx.stylize('[Getter/Setter]', 'special');
11640 } else {
11641 str = ctx.stylize('[Getter]', 'special');
11642 }
11643 } else {
11644 if (desc.set) {
11645 str = ctx.stylize('[Setter]', 'special');
11646 }
11647 }
11648 if (!hasOwnProperty(visibleKeys, key)) {
11649 name = '[' + key + ']';
11650 }
11651 if (!str) {
11652 if (ctx.seen.indexOf(desc.value) < 0) {
11653 if (isNull(recurseTimes)) {
11654 str = formatValue(ctx, desc.value, null);
11655 } else {
11656 str = formatValue(ctx, desc.value, recurseTimes - 1);
11657 }
11658 if (str.indexOf('\n') > -1) {
11659 if (array) {
11660 str = str.split('\n').map(function(line) {
11661 return ' ' + line;
11662 }).join('\n').substr(2);
11663 } else {
11664 str = '\n' + str.split('\n').map(function(line) {
11665 return ' ' + line;
11666 }).join('\n');
11667 }
11668 }
11669 } else {
11670 str = ctx.stylize('[Circular]', 'special');
11671 }
11672 }
11673 if (isUndefined(name)) {
11674 if (array && key.match(/^\d+$/)) {
11675 return str;
11676 }
11677 name = JSON.stringify('' + key);
11678 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
11679 name = name.substr(1, name.length - 2);
11680 name = ctx.stylize(name, 'name');
11681 } else {
11682 name = name.replace(/'/g, "\\'")
11683 .replace(/\\"/g, '"')
11684 .replace(/(^"|"$)/g, "'");
11685 name = ctx.stylize(name, 'string');
11686 }
11687 }
11688
11689 return name + ': ' + str;
11690 }
11691
11692
11693 function reduceToSingleString(output, base, braces) {
11694 var numLinesEst = 0;
11695 var length = output.reduce(function(prev, cur) {
11696 numLinesEst++;
11697 if (cur.indexOf('\n') >= 0) numLinesEst++;
11698 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
11699 }, 0);
11700
11701 if (length > 60) {
11702 return braces[0] +
11703 (base === '' ? '' : base + '\n ') +
11704 ' ' +
11705 output.join(',\n ') +
11706 ' ' +
11707 braces[1];
11708 }
11709
11710 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
11711 }
11712
11713
11714 // NOTE: These type checking functions intentionally don't use `instanceof`
11715 // because it is fragile and can be easily faked with `Object.create()`.
11716 function isArray(ar) {
11717 return Array.isArray(ar);
11718 }
11719 exports.isArray = isArray;
11720
11721 function isBoolean(arg) {
11722 return typeof arg === 'boolean';
11723 }
11724 exports.isBoolean = isBoolean;
11725
11726 function isNull(arg) {
11727 return arg === null;
11728 }
11729 exports.isNull = isNull;
11730
11731 function isNullOrUndefined(arg) {
11732 return arg == null;
11733 }
11734 exports.isNullOrUndefined = isNullOrUndefined;
11735
11736 function isNumber(arg) {
11737 return typeof arg === 'number';
11738 }
11739 exports.isNumber = isNumber;
11740
11741 function isString(arg) {
11742 return typeof arg === 'string';
11743 }
11744 exports.isString = isString;
11745
11746 function isSymbol(arg) {
11747 return typeof arg === 'symbol';
11748 }
11749 exports.isSymbol = isSymbol;
11750
11751 function isUndefined(arg) {
11752 return arg === void 0;
11753 }
11754 exports.isUndefined = isUndefined;
11755
11756 function isRegExp(re) {
11757 return isObject(re) && objectToString(re) === '[object RegExp]';
11758 }
11759 exports.isRegExp = isRegExp;
11760
11761 function isObject(arg) {
11762 return typeof arg === 'object' && arg !== null;
11763 }
11764 exports.isObject = isObject;
11765
11766 function isDate(d) {
11767 return isObject(d) && objectToString(d) === '[object Date]';
11768 }
11769 exports.isDate = isDate;
11770
11771 function isError(e) {
11772 return isObject(e) &&
11773 (objectToString(e) === '[object Error]' || e instanceof Error);
11774 }
11775 exports.isError = isError;
11776
11777 function isFunction(arg) {
11778 return typeof arg === 'function';
11779 }
11780 exports.isFunction = isFunction;
11781
11782 function isPrimitive(arg) {
11783 return arg === null ||
11784 typeof arg === 'boolean' ||
11785 typeof arg === 'number' ||
11786 typeof arg === 'string' ||
11787 typeof arg === 'symbol' || // ES6 symbol
11788 typeof arg === 'undefined';
11789 }
11790 exports.isPrimitive = isPrimitive;
11791
11792 exports.isBuffer = require('./support/isBuffer');
11793
11794 function objectToString(o) {
11795 return Object.prototype.toString.call(o);
11796 }
11797
11798
11799 function pad(n) {
11800 return n < 10 ? '0' + n.toString(10) : n.toString(10);
11801 }
11802
11803
11804 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
11805 'Oct', 'Nov', 'Dec'];
11806
11807 // 26 Feb 16:19:34
11808 function timestamp() {
11809 var d = new Date();
11810 var time = [pad(d.getHours()),
11811 pad(d.getMinutes()),
11812 pad(d.getSeconds())].join(':');
11813 return [d.getDate(), months[d.getMonth()], time].join(' ');
11814 }
11815
11816
11817 // log is just a thin wrapper to console.log that prepends a timestamp
11818 exports.log = function() {
11819 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
11820 };
11821
11822
11823 /**
11824 * Inherit the prototype methods from one constructor into another.
11825 *
11826 * The Function.prototype.inherits from lang.js rewritten as a standalone
11827 * function (not on Function.prototype). NOTE: If this file is to be loaded
11828 * during bootstrapping this function needs to be rewritten using some native
11829 * functions as prototype setup using normal JavaScript does not work as
11830 * expected during bootstrapping (see mirror.js in r114903).
11831 *
11832 * @param {function} ctor Constructor function which needs to inherit the
11833 * prototype.
11834 * @param {function} superCtor Constructor function to inherit prototype from.
11835 */
11836 exports.inherits = require('inherits');
11837
11838 exports._extend = function(origin, add) {
11839 // Don't do anything if add isn't an object
11840 if (!add || !isObject(add)) return origin;
11841
11842 var keys = Object.keys(add);
11843 var i = keys.length;
11844 while (i--) {
11845 origin[keys[i]] = add[keys[i]];
11846 }
11847 return origin;
11848 };
11849
11850 function hasOwnProperty(obj, prop) {
11851 return Object.prototype.hasOwnProperty.call(obj, prop);
11852 }
11853
11854 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
11855 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
11856 // Base58 encoding/decoding
11857 // Originally written by Mike Hearn for BitcoinJ
11858 // Copyright (c) 2011 Google Inc
11859 // Ported to JavaScript by Stefan Thomas
11860 // Merged Buffer refactorings from base58-native by Stephen Pair
11861 // Copyright (c) 2013 BitPay Inc
11862
11863 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
11864 var ALPHABET_MAP = {}
11865 for(var i = 0; i < ALPHABET.length; i++) {
11866 ALPHABET_MAP[ALPHABET.charAt(i)] = i
11867 }
11868 var BASE = 58
11869
11870 function encode(buffer) {
11871 if (buffer.length === 0) return ''
11872
11873 var i, j, digits = [0]
11874 for (i = 0; i < buffer.length; i++) {
11875 for (j = 0; j < digits.length; j++) digits[j] <<= 8
11876
11877 digits[0] += buffer[i]
11878
11879 var carry = 0
11880 for (j = 0; j < digits.length; ++j) {
11881 digits[j] += carry
11882
11883 carry = (digits[j] / BASE) | 0
11884 digits[j] %= BASE
11885 }
11886
11887 while (carry) {
11888 digits.push(carry % BASE)
11889
11890 carry = (carry / BASE) | 0
11891 }
11892 }
11893
11894 // deal with leading zeros
11895 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
11896
11897 // convert digits to a string
11898 var stringOutput = ""
11899 for (var i = digits.length - 1; i >= 0; i--) {
11900 stringOutput = stringOutput + ALPHABET[digits[i]]
11901 }
11902 return stringOutput
11903 }
11904
11905 function decode(string) {
11906 if (string.length === 0) return []
11907
11908 var i, j, bytes = [0]
11909 for (i = 0; i < string.length; i++) {
11910 var c = string[i]
11911 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
11912
11913 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
11914 bytes[0] += ALPHABET_MAP[c]
11915
11916 var carry = 0
11917 for (j = 0; j < bytes.length; ++j) {
11918 bytes[j] += carry
11919
11920 carry = bytes[j] >> 8
11921 bytes[j] &= 0xff
11922 }
11923
11924 while (carry) {
11925 bytes.push(carry & 0xff)
11926
11927 carry >>= 8
11928 }
11929 }
11930
11931 // deal with leading zeros
11932 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
11933
11934 return bytes.reverse()
11935 }
11936
11937 module.exports = {
11938 encode: encode,
11939 decode: decode
11940 }
11941
11942 },{}],31:[function(require,module,exports){
11943 (function (Buffer){
11944 'use strict'
11945
11946 var base58 = require('bs58')
11947 var createHash = require('create-hash')
11948
11949 // SHA256(SHA256(buffer))
11950 function sha256x2 (buffer) {
11951 buffer = createHash('sha256').update(buffer).digest()
11952 return createHash('sha256').update(buffer).digest()
11953 }
11954
11955 // Encode a buffer as a base58-check encoded string
11956 function encode (payload) {
11957 var checksum = sha256x2(payload).slice(0, 4)
11958
11959 return base58.encode(Buffer.concat([
11960 payload,
11961 checksum
11962 ]))
11963 }
11964
11965 // Decode a base58-check encoded string to a buffer
11966 function decode (string) {
11967 var buffer = new Buffer(base58.decode(string))
11968
11969 var payload = buffer.slice(0, -4)
11970 var checksum = buffer.slice(-4)
11971 var newChecksum = sha256x2(payload).slice(0, 4)
11972
11973 for (var i = 0; i < newChecksum.length; ++i) {
11974 if (newChecksum[i] === checksum[i]) continue
11975
11976 throw new Error('Invalid checksum')
11977 }
11978
11979 return payload
11980 }
11981
11982 module.exports = {
11983 encode: encode,
11984 decode: decode
11985 }
11986
11987 }).call(this,require("buffer").Buffer)
11988 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
11989 (function (Buffer){
11990 'use strict';
11991 var inherits = require('inherits')
11992 var md5 = require('./md5')
11993 var rmd160 = require('ripemd160')
11994 var sha = require('sha.js')
11995
11996 var Transform = require('stream').Transform
11997
11998 function HashNoConstructor(hash) {
11999 Transform.call(this)
12000
12001 this._hash = hash
12002 this.buffers = []
12003 }
12004
12005 inherits(HashNoConstructor, Transform)
12006
12007 HashNoConstructor.prototype._transform = function (data, _, next) {
12008 this.buffers.push(data)
12009
12010 next()
12011 }
12012
12013 HashNoConstructor.prototype._flush = function (next) {
12014 this.push(this.digest())
12015 next()
12016 }
12017
12018 HashNoConstructor.prototype.update = function (data, enc) {
12019 if (typeof data === 'string') {
12020 data = new Buffer(data, enc)
12021 }
12022
12023 this.buffers.push(data)
12024 return this
12025 }
12026
12027 HashNoConstructor.prototype.digest = function (enc) {
12028 var buf = Buffer.concat(this.buffers)
12029 var r = this._hash(buf)
12030 this.buffers = null
12031
12032 return enc ? r.toString(enc) : r
12033 }
12034
12035 function Hash(hash) {
12036 Transform.call(this)
12037
12038 this._hash = hash
12039 }
12040
12041 inherits(Hash, Transform)
12042
12043 Hash.prototype._transform = function (data, enc, next) {
12044 if (enc) data = new Buffer(data, enc)
12045
12046 this._hash.update(data)
12047
12048 next()
12049 }
12050
12051 Hash.prototype._flush = function (next) {
12052 this.push(this._hash.digest())
12053 this._hash = null
12054
12055 next()
12056 }
12057
12058 Hash.prototype.update = function (data, enc) {
12059 if (typeof data === 'string') {
12060 data = new Buffer(data, enc)
12061 }
12062
12063 this._hash.update(data)
12064 return this
12065 }
12066
12067 Hash.prototype.digest = function (enc) {
12068 var outData = this._hash.digest()
12069
12070 return enc ? outData.toString(enc) : outData
12071 }
12072
12073 module.exports = function createHash (alg) {
12074 if ('md5' === alg) return new HashNoConstructor(md5)
12075 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
12076
12077 return new Hash(sha(alg))
12078 }
12079
12080 }).call(this,require("buffer").Buffer)
12081 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
12082 (function (Buffer){
12083 'use strict';
12084 var intSize = 4;
12085 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
12086 var chrsz = 8;
12087
12088 function toArray(buf, bigEndian) {
12089 if ((buf.length % intSize) !== 0) {
12090 var len = buf.length + (intSize - (buf.length % intSize));
12091 buf = Buffer.concat([buf, zeroBuffer], len);
12092 }
12093
12094 var arr = [];
12095 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
12096 for (var i = 0; i < buf.length; i += intSize) {
12097 arr.push(fn.call(buf, i));
12098 }
12099 return arr;
12100 }
12101
12102 function toBuffer(arr, size, bigEndian) {
12103 var buf = new Buffer(size);
12104 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
12105 for (var i = 0; i < arr.length; i++) {
12106 fn.call(buf, arr[i], i * 4, true);
12107 }
12108 return buf;
12109 }
12110
12111 function hash(buf, fn, hashSize, bigEndian) {
12112 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
12113 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
12114 return toBuffer(arr, hashSize, bigEndian);
12115 }
12116 exports.hash = hash;
12117 }).call(this,require("buffer").Buffer)
12118 },{"buffer":7}],34:[function(require,module,exports){
12119 'use strict';
12120 /*
12121 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
12122 * Digest Algorithm, as defined in RFC 1321.
12123 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
12124 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
12125 * Distributed under the BSD License
12126 * See http://pajhome.org.uk/crypt/md5 for more info.
12127 */
12128
12129 var helpers = require('./helpers');
12130
12131 /*
12132 * Calculate the MD5 of an array of little-endian words, and a bit length
12133 */
12134 function core_md5(x, len)
12135 {
12136 /* append padding */
12137 x[len >> 5] |= 0x80 << ((len) % 32);
12138 x[(((len + 64) >>> 9) << 4) + 14] = len;
12139
12140 var a = 1732584193;
12141 var b = -271733879;
12142 var c = -1732584194;
12143 var d = 271733878;
12144
12145 for(var i = 0; i < x.length; i += 16)
12146 {
12147 var olda = a;
12148 var oldb = b;
12149 var oldc = c;
12150 var oldd = d;
12151
12152 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
12153 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
12154 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
12155 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
12156 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
12157 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
12158 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
12159 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
12160 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
12161 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
12162 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
12163 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
12164 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
12165 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
12166 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
12167 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
12168
12169 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
12170 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
12171 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
12172 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
12173 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
12174 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
12175 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
12176 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
12177 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
12178 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
12179 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
12180 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
12181 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
12182 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
12183 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
12184 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
12185
12186 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
12187 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
12188 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
12189 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
12190 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
12191 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
12192 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
12193 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
12194 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
12195 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
12196 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
12197 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
12198 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
12199 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
12200 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
12201 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
12202
12203 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
12204 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
12205 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
12206 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
12207 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
12208 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
12209 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
12210 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
12211 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
12212 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
12213 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
12214 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
12215 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
12216 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
12217 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
12218 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
12219
12220 a = safe_add(a, olda);
12221 b = safe_add(b, oldb);
12222 c = safe_add(c, oldc);
12223 d = safe_add(d, oldd);
12224 }
12225 return Array(a, b, c, d);
12226
12227 }
12228
12229 /*
12230 * These functions implement the four basic operations the algorithm uses.
12231 */
12232 function md5_cmn(q, a, b, x, s, t)
12233 {
12234 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
12235 }
12236 function md5_ff(a, b, c, d, x, s, t)
12237 {
12238 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
12239 }
12240 function md5_gg(a, b, c, d, x, s, t)
12241 {
12242 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
12243 }
12244 function md5_hh(a, b, c, d, x, s, t)
12245 {
12246 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
12247 }
12248 function md5_ii(a, b, c, d, x, s, t)
12249 {
12250 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
12251 }
12252
12253 /*
12254 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
12255 * to work around bugs in some JS interpreters.
12256 */
12257 function safe_add(x, y)
12258 {
12259 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
12260 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
12261 return (msw << 16) | (lsw & 0xFFFF);
12262 }
12263
12264 /*
12265 * Bitwise rotate a 32-bit number to the left.
12266 */
12267 function bit_rol(num, cnt)
12268 {
12269 return (num << cnt) | (num >>> (32 - cnt));
12270 }
12271
12272 module.exports = function md5(buf) {
12273 return helpers.hash(buf, core_md5, 16);
12274 };
12275 },{"./helpers":33}],35:[function(require,module,exports){
12276 arguments[4][12][0].apply(exports,arguments)
12277 },{"dup":12}],36:[function(require,module,exports){
12278 (function (Buffer){
12279 /*
12280 CryptoJS v3.1.2
12281 code.google.com/p/crypto-js
12282 (c) 2009-2013 by Jeff Mott. All rights reserved.
12283 code.google.com/p/crypto-js/wiki/License
12284 */
12285 /** @preserve
12286 (c) 2012 by Cédric Mesnil. All rights reserved.
12287
12288 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
12289
12290 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
12291 - 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.
12292
12293 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
12294 */
12295
12296 // constants table
12297 var zl = [
12298 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
12299 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
12300 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
12301 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
12302 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
12303 ]
12304
12305 var zr = [
12306 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
12307 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
12308 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
12309 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
12310 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
12311 ]
12312
12313 var sl = [
12314 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
12315 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
12316 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
12317 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
12318 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
12319 ]
12320
12321 var sr = [
12322 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
12323 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
12324 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
12325 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
12326 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
12327 ]
12328
12329 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
12330 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
12331
12332 function bytesToWords (bytes) {
12333 var words = []
12334 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
12335 words[b >>> 5] |= bytes[i] << (24 - b % 32)
12336 }
12337 return words
12338 }
12339
12340 function wordsToBytes (words) {
12341 var bytes = []
12342 for (var b = 0; b < words.length * 32; b += 8) {
12343 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
12344 }
12345 return bytes
12346 }
12347
12348 function processBlock (H, M, offset) {
12349 // swap endian
12350 for (var i = 0; i < 16; i++) {
12351 var offset_i = offset + i
12352 var M_offset_i = M[offset_i]
12353
12354 // Swap
12355 M[offset_i] = (
12356 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
12357 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
12358 )
12359 }
12360
12361 // Working variables
12362 var al, bl, cl, dl, el
12363 var ar, br, cr, dr, er
12364
12365 ar = al = H[0]
12366 br = bl = H[1]
12367 cr = cl = H[2]
12368 dr = dl = H[3]
12369 er = el = H[4]
12370
12371 // computation
12372 var t
12373 for (i = 0; i < 80; i += 1) {
12374 t = (al + M[offset + zl[i]]) | 0
12375 if (i < 16) {
12376 t += f1(bl, cl, dl) + hl[0]
12377 } else if (i < 32) {
12378 t += f2(bl, cl, dl) + hl[1]
12379 } else if (i < 48) {
12380 t += f3(bl, cl, dl) + hl[2]
12381 } else if (i < 64) {
12382 t += f4(bl, cl, dl) + hl[3]
12383 } else {// if (i<80) {
12384 t += f5(bl, cl, dl) + hl[4]
12385 }
12386 t = t | 0
12387 t = rotl(t, sl[i])
12388 t = (t + el) | 0
12389 al = el
12390 el = dl
12391 dl = rotl(cl, 10)
12392 cl = bl
12393 bl = t
12394
12395 t = (ar + M[offset + zr[i]]) | 0
12396 if (i < 16) {
12397 t += f5(br, cr, dr) + hr[0]
12398 } else if (i < 32) {
12399 t += f4(br, cr, dr) + hr[1]
12400 } else if (i < 48) {
12401 t += f3(br, cr, dr) + hr[2]
12402 } else if (i < 64) {
12403 t += f2(br, cr, dr) + hr[3]
12404 } else {// if (i<80) {
12405 t += f1(br, cr, dr) + hr[4]
12406 }
12407
12408 t = t | 0
12409 t = rotl(t, sr[i])
12410 t = (t + er) | 0
12411 ar = er
12412 er = dr
12413 dr = rotl(cr, 10)
12414 cr = br
12415 br = t
12416 }
12417
12418 // intermediate hash value
12419 t = (H[1] + cl + dr) | 0
12420 H[1] = (H[2] + dl + er) | 0
12421 H[2] = (H[3] + el + ar) | 0
12422 H[3] = (H[4] + al + br) | 0
12423 H[4] = (H[0] + bl + cr) | 0
12424 H[0] = t
12425 }
12426
12427 function f1 (x, y, z) {
12428 return ((x) ^ (y) ^ (z))
12429 }
12430
12431 function f2 (x, y, z) {
12432 return (((x) & (y)) | ((~x) & (z)))
12433 }
12434
12435 function f3 (x, y, z) {
12436 return (((x) | (~(y))) ^ (z))
12437 }
12438
12439 function f4 (x, y, z) {
12440 return (((x) & (z)) | ((y) & (~(z))))
12441 }
12442
12443 function f5 (x, y, z) {
12444 return ((x) ^ ((y) | (~(z))))
12445 }
12446
12447 function rotl (x, n) {
12448 return (x << n) | (x >>> (32 - n))
12449 }
12450
12451 function ripemd160 (message) {
12452 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
12453
12454 if (typeof message === 'string') {
12455 message = new Buffer(message, 'utf8')
12456 }
12457
12458 var m = bytesToWords(message)
12459
12460 var nBitsLeft = message.length * 8
12461 var nBitsTotal = message.length * 8
12462
12463 // Add padding
12464 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
12465 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
12466 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
12467 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
12468 )
12469
12470 for (var i = 0; i < m.length; i += 16) {
12471 processBlock(H, m, i)
12472 }
12473
12474 // swap endian
12475 for (i = 0; i < 5; i++) {
12476 // shortcut
12477 var H_i = H[i]
12478
12479 // Swap
12480 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
12481 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
12482 }
12483
12484 var digestbytes = wordsToBytes(H)
12485 return new Buffer(digestbytes)
12486 }
12487
12488 module.exports = ripemd160
12489
12490 }).call(this,require("buffer").Buffer)
12491 },{"buffer":7}],37:[function(require,module,exports){
12492 (function (Buffer){
12493 // prototype class for hash functions
12494 function Hash (blockSize, finalSize) {
12495 this._block = new Buffer(blockSize)
12496 this._finalSize = finalSize
12497 this._blockSize = blockSize
12498 this._len = 0
12499 this._s = 0
12500 }
12501
12502 Hash.prototype.update = function (data, enc) {
12503 if (typeof data === 'string') {
12504 enc = enc || 'utf8'
12505 data = new Buffer(data, enc)
12506 }
12507
12508 var l = this._len += data.length
12509 var s = this._s || 0
12510 var f = 0
12511 var buffer = this._block
12512
12513 while (s < l) {
12514 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
12515 var ch = (t - f)
12516
12517 for (var i = 0; i < ch; i++) {
12518 buffer[(s % this._blockSize) + i] = data[i + f]
12519 }
12520
12521 s += ch
12522 f += ch
12523
12524 if ((s % this._blockSize) === 0) {
12525 this._update(buffer)
12526 }
12527 }
12528 this._s = s
12529
12530 return this
12531 }
12532
12533 Hash.prototype.digest = function (enc) {
12534 // Suppose the length of the message M, in bits, is l
12535 var l = this._len * 8
12536
12537 // Append the bit 1 to the end of the message
12538 this._block[this._len % this._blockSize] = 0x80
12539
12540 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
12541 this._block.fill(0, this._len % this._blockSize + 1)
12542
12543 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
12544 this._update(this._block)
12545 this._block.fill(0)
12546 }
12547
12548 // to this append the block which is equal to the number l written in binary
12549 // TODO: handle case where l is > Math.pow(2, 29)
12550 this._block.writeInt32BE(l, this._blockSize - 4)
12551
12552 var hash = this._update(this._block) || this._hash()
12553
12554 return enc ? hash.toString(enc) : hash
12555 }
12556
12557 Hash.prototype._update = function () {
12558 throw new Error('_update must be implemented by subclass')
12559 }
12560
12561 module.exports = Hash
12562
12563 }).call(this,require("buffer").Buffer)
12564 },{"buffer":7}],38:[function(require,module,exports){
12565 var exports = module.exports = function SHA (algorithm) {
12566 algorithm = algorithm.toLowerCase()
12567
12568 var Algorithm = exports[algorithm]
12569 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
12570
12571 return new Algorithm()
12572 }
12573
12574 exports.sha = require('./sha')
12575 exports.sha1 = require('./sha1')
12576 exports.sha224 = require('./sha224')
12577 exports.sha256 = require('./sha256')
12578 exports.sha384 = require('./sha384')
12579 exports.sha512 = require('./sha512')
12580
12581 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
12582 (function (Buffer){
12583 /*
12584 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
12585 * in FIPS PUB 180-1
12586 * This source code is derived from sha1.js of the same repository.
12587 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
12588 * operation was added.
12589 */
12590
12591 var inherits = require('inherits')
12592 var Hash = require('./hash')
12593
12594 var W = new Array(80)
12595
12596 function Sha () {
12597 this.init()
12598 this._w = W
12599
12600 Hash.call(this, 64, 56)
12601 }
12602
12603 inherits(Sha, Hash)
12604
12605 Sha.prototype.init = function () {
12606 this._a = 0x67452301 | 0
12607 this._b = 0xefcdab89 | 0
12608 this._c = 0x98badcfe | 0
12609 this._d = 0x10325476 | 0
12610 this._e = 0xc3d2e1f0 | 0
12611
12612 return this
12613 }
12614
12615 /*
12616 * Bitwise rotate a 32-bit number to the left.
12617 */
12618 function rol (num, cnt) {
12619 return (num << cnt) | (num >>> (32 - cnt))
12620 }
12621
12622 Sha.prototype._update = function (M) {
12623 var W = this._w
12624
12625 var a = this._a
12626 var b = this._b
12627 var c = this._c
12628 var d = this._d
12629 var e = this._e
12630
12631 var j = 0, k
12632
12633 /*
12634 * SHA-1 has a bitwise rotate left operation. But, SHA is not
12635 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
12636 */
12637 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
12638 function loop (w, f) {
12639 W[j] = w
12640
12641 var t = rol(a, 5) + f + e + w + k
12642
12643 e = d
12644 d = c
12645 c = rol(b, 30)
12646 b = a
12647 a = t
12648 j++
12649 }
12650
12651 k = 1518500249
12652 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
12653 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
12654 k = 1859775393
12655 while (j < 40) loop(calcW(), b ^ c ^ d)
12656 k = -1894007588
12657 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
12658 k = -899497514
12659 while (j < 80) loop(calcW(), b ^ c ^ d)
12660
12661 this._a = (a + this._a) | 0
12662 this._b = (b + this._b) | 0
12663 this._c = (c + this._c) | 0
12664 this._d = (d + this._d) | 0
12665 this._e = (e + this._e) | 0
12666 }
12667
12668 Sha.prototype._hash = function () {
12669 var H = new Buffer(20)
12670
12671 H.writeInt32BE(this._a | 0, 0)
12672 H.writeInt32BE(this._b | 0, 4)
12673 H.writeInt32BE(this._c | 0, 8)
12674 H.writeInt32BE(this._d | 0, 12)
12675 H.writeInt32BE(this._e | 0, 16)
12676
12677 return H
12678 }
12679
12680 module.exports = Sha
12681
12682
12683 }).call(this,require("buffer").Buffer)
12684 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
12685 (function (Buffer){
12686 /*
12687 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
12688 * in FIPS PUB 180-1
12689 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
12690 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
12691 * Distributed under the BSD License
12692 * See http://pajhome.org.uk/crypt/md5 for details.
12693 */
12694
12695 var inherits = require('inherits')
12696 var Hash = require('./hash')
12697
12698 var W = new Array(80)
12699
12700 function Sha1 () {
12701 this.init()
12702 this._w = W
12703
12704 Hash.call(this, 64, 56)
12705 }
12706
12707 inherits(Sha1, Hash)
12708
12709 Sha1.prototype.init = function () {
12710 this._a = 0x67452301 | 0
12711 this._b = 0xefcdab89 | 0
12712 this._c = 0x98badcfe | 0
12713 this._d = 0x10325476 | 0
12714 this._e = 0xc3d2e1f0 | 0
12715
12716 return this
12717 }
12718
12719 /*
12720 * Bitwise rotate a 32-bit number to the left.
12721 */
12722 function rol (num, cnt) {
12723 return (num << cnt) | (num >>> (32 - cnt))
12724 }
12725
12726 Sha1.prototype._update = function (M) {
12727 var W = this._w
12728
12729 var a = this._a
12730 var b = this._b
12731 var c = this._c
12732 var d = this._d
12733 var e = this._e
12734
12735 var j = 0, k
12736
12737 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
12738 function loop (w, f) {
12739 W[j] = w
12740
12741 var t = rol(a, 5) + f + e + w + k
12742
12743 e = d
12744 d = c
12745 c = rol(b, 30)
12746 b = a
12747 a = t
12748 j++
12749 }
12750
12751 k = 1518500249
12752 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
12753 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
12754 k = 1859775393
12755 while (j < 40) loop(calcW(), b ^ c ^ d)
12756 k = -1894007588
12757 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
12758 k = -899497514
12759 while (j < 80) loop(calcW(), b ^ c ^ d)
12760
12761 this._a = (a + this._a) | 0
12762 this._b = (b + this._b) | 0
12763 this._c = (c + this._c) | 0
12764 this._d = (d + this._d) | 0
12765 this._e = (e + this._e) | 0
12766 }
12767
12768 Sha1.prototype._hash = function () {
12769 var H = new Buffer(20)
12770
12771 H.writeInt32BE(this._a | 0, 0)
12772 H.writeInt32BE(this._b | 0, 4)
12773 H.writeInt32BE(this._c | 0, 8)
12774 H.writeInt32BE(this._d | 0, 12)
12775 H.writeInt32BE(this._e | 0, 16)
12776
12777 return H
12778 }
12779
12780 module.exports = Sha1
12781
12782 }).call(this,require("buffer").Buffer)
12783 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
12784 (function (Buffer){
12785 /**
12786 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
12787 * in FIPS 180-2
12788 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
12789 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
12790 *
12791 */
12792
12793 var inherits = require('inherits')
12794 var Sha256 = require('./sha256')
12795 var Hash = require('./hash')
12796
12797 var W = new Array(64)
12798
12799 function Sha224 () {
12800 this.init()
12801
12802 this._w = W // new Array(64)
12803
12804 Hash.call(this, 64, 56)
12805 }
12806
12807 inherits(Sha224, Sha256)
12808
12809 Sha224.prototype.init = function () {
12810 this._a = 0xc1059ed8 | 0
12811 this._b = 0x367cd507 | 0
12812 this._c = 0x3070dd17 | 0
12813 this._d = 0xf70e5939 | 0
12814 this._e = 0xffc00b31 | 0
12815 this._f = 0x68581511 | 0
12816 this._g = 0x64f98fa7 | 0
12817 this._h = 0xbefa4fa4 | 0
12818
12819 return this
12820 }
12821
12822 Sha224.prototype._hash = function () {
12823 var H = new Buffer(28)
12824
12825 H.writeInt32BE(this._a, 0)
12826 H.writeInt32BE(this._b, 4)
12827 H.writeInt32BE(this._c, 8)
12828 H.writeInt32BE(this._d, 12)
12829 H.writeInt32BE(this._e, 16)
12830 H.writeInt32BE(this._f, 20)
12831 H.writeInt32BE(this._g, 24)
12832
12833 return H
12834 }
12835
12836 module.exports = Sha224
12837
12838 }).call(this,require("buffer").Buffer)
12839 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
12840 (function (Buffer){
12841 /**
12842 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
12843 * in FIPS 180-2
12844 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
12845 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
12846 *
12847 */
12848
12849 var inherits = require('inherits')
12850 var Hash = require('./hash')
12851
12852 var K = [
12853 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
12854 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
12855 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
12856 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
12857 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
12858 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
12859 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
12860 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
12861 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
12862 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
12863 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
12864 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
12865 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
12866 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
12867 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
12868 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
12869 ]
12870
12871 var W = new Array(64)
12872
12873 function Sha256 () {
12874 this.init()
12875
12876 this._w = W // new Array(64)
12877
12878 Hash.call(this, 64, 56)
12879 }
12880
12881 inherits(Sha256, Hash)
12882
12883 Sha256.prototype.init = function () {
12884 this._a = 0x6a09e667 | 0
12885 this._b = 0xbb67ae85 | 0
12886 this._c = 0x3c6ef372 | 0
12887 this._d = 0xa54ff53a | 0
12888 this._e = 0x510e527f | 0
12889 this._f = 0x9b05688c | 0
12890 this._g = 0x1f83d9ab | 0
12891 this._h = 0x5be0cd19 | 0
12892
12893 return this
12894 }
12895
12896 function S (X, n) {
12897 return (X >>> n) | (X << (32 - n))
12898 }
12899
12900 function R (X, n) {
12901 return (X >>> n)
12902 }
12903
12904 function Ch (x, y, z) {
12905 return ((x & y) ^ ((~x) & z))
12906 }
12907
12908 function Maj (x, y, z) {
12909 return ((x & y) ^ (x & z) ^ (y & z))
12910 }
12911
12912 function Sigma0256 (x) {
12913 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
12914 }
12915
12916 function Sigma1256 (x) {
12917 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
12918 }
12919
12920 function Gamma0256 (x) {
12921 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
12922 }
12923
12924 function Gamma1256 (x) {
12925 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
12926 }
12927
12928 Sha256.prototype._update = function (M) {
12929 var W = this._w
12930
12931 var a = this._a | 0
12932 var b = this._b | 0
12933 var c = this._c | 0
12934 var d = this._d | 0
12935 var e = this._e | 0
12936 var f = this._f | 0
12937 var g = this._g | 0
12938 var h = this._h | 0
12939
12940 var j = 0
12941
12942 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
12943 function loop (w) {
12944 W[j] = w
12945
12946 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
12947 var T2 = Sigma0256(a) + Maj(a, b, c)
12948
12949 h = g
12950 g = f
12951 f = e
12952 e = d + T1
12953 d = c
12954 c = b
12955 b = a
12956 a = T1 + T2
12957
12958 j++
12959 }
12960
12961 while (j < 16) loop(M.readInt32BE(j * 4))
12962 while (j < 64) loop(calcW())
12963
12964 this._a = (a + this._a) | 0
12965 this._b = (b + this._b) | 0
12966 this._c = (c + this._c) | 0
12967 this._d = (d + this._d) | 0
12968 this._e = (e + this._e) | 0
12969 this._f = (f + this._f) | 0
12970 this._g = (g + this._g) | 0
12971 this._h = (h + this._h) | 0
12972 }
12973
12974 Sha256.prototype._hash = function () {
12975 var H = new Buffer(32)
12976
12977 H.writeInt32BE(this._a, 0)
12978 H.writeInt32BE(this._b, 4)
12979 H.writeInt32BE(this._c, 8)
12980 H.writeInt32BE(this._d, 12)
12981 H.writeInt32BE(this._e, 16)
12982 H.writeInt32BE(this._f, 20)
12983 H.writeInt32BE(this._g, 24)
12984 H.writeInt32BE(this._h, 28)
12985
12986 return H
12987 }
12988
12989 module.exports = Sha256
12990
12991 }).call(this,require("buffer").Buffer)
12992 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
12993 (function (Buffer){
12994 var inherits = require('inherits')
12995 var SHA512 = require('./sha512')
12996 var Hash = require('./hash')
12997
12998 var W = new Array(160)
12999
13000 function Sha384 () {
13001 this.init()
13002 this._w = W
13003
13004 Hash.call(this, 128, 112)
13005 }
13006
13007 inherits(Sha384, SHA512)
13008
13009 Sha384.prototype.init = function () {
13010 this._a = 0xcbbb9d5d | 0
13011 this._b = 0x629a292a | 0
13012 this._c = 0x9159015a | 0
13013 this._d = 0x152fecd8 | 0
13014 this._e = 0x67332667 | 0
13015 this._f = 0x8eb44a87 | 0
13016 this._g = 0xdb0c2e0d | 0
13017 this._h = 0x47b5481d | 0
13018
13019 this._al = 0xc1059ed8 | 0
13020 this._bl = 0x367cd507 | 0
13021 this._cl = 0x3070dd17 | 0
13022 this._dl = 0xf70e5939 | 0
13023 this._el = 0xffc00b31 | 0
13024 this._fl = 0x68581511 | 0
13025 this._gl = 0x64f98fa7 | 0
13026 this._hl = 0xbefa4fa4 | 0
13027
13028 return this
13029 }
13030
13031 Sha384.prototype._hash = function () {
13032 var H = new Buffer(48)
13033
13034 function writeInt64BE (h, l, offset) {
13035 H.writeInt32BE(h, offset)
13036 H.writeInt32BE(l, offset + 4)
13037 }
13038
13039 writeInt64BE(this._a, this._al, 0)
13040 writeInt64BE(this._b, this._bl, 8)
13041 writeInt64BE(this._c, this._cl, 16)
13042 writeInt64BE(this._d, this._dl, 24)
13043 writeInt64BE(this._e, this._el, 32)
13044 writeInt64BE(this._f, this._fl, 40)
13045
13046 return H
13047 }
13048
13049 module.exports = Sha384
13050
13051 }).call(this,require("buffer").Buffer)
13052 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
13053 (function (Buffer){
13054 var inherits = require('inherits')
13055 var Hash = require('./hash')
13056
13057 var K = [
13058 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
13059 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13060 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
13061 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13062 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
13063 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13064 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
13065 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13066 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
13067 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13068 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
13069 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13070 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
13071 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13072 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
13073 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13074 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
13075 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13076 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
13077 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13078 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
13079 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13080 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
13081 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13082 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
13083 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13084 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
13085 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13086 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
13087 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13088 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
13089 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13090 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
13091 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13092 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
13093 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13094 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
13095 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13096 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
13097 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
13098 ]
13099
13100 var W = new Array(160)
13101
13102 function Sha512 () {
13103 this.init()
13104 this._w = W
13105
13106 Hash.call(this, 128, 112)
13107 }
13108
13109 inherits(Sha512, Hash)
13110
13111 Sha512.prototype.init = function () {
13112 this._a = 0x6a09e667 | 0
13113 this._b = 0xbb67ae85 | 0
13114 this._c = 0x3c6ef372 | 0
13115 this._d = 0xa54ff53a | 0
13116 this._e = 0x510e527f | 0
13117 this._f = 0x9b05688c | 0
13118 this._g = 0x1f83d9ab | 0
13119 this._h = 0x5be0cd19 | 0
13120
13121 this._al = 0xf3bcc908 | 0
13122 this._bl = 0x84caa73b | 0
13123 this._cl = 0xfe94f82b | 0
13124 this._dl = 0x5f1d36f1 | 0
13125 this._el = 0xade682d1 | 0
13126 this._fl = 0x2b3e6c1f | 0
13127 this._gl = 0xfb41bd6b | 0
13128 this._hl = 0x137e2179 | 0
13129
13130 return this
13131 }
13132
13133 function S (X, Xl, n) {
13134 return (X >>> n) | (Xl << (32 - n))
13135 }
13136
13137 function Ch (x, y, z) {
13138 return ((x & y) ^ ((~x) & z))
13139 }
13140
13141 function Maj (x, y, z) {
13142 return ((x & y) ^ (x & z) ^ (y & z))
13143 }
13144
13145 Sha512.prototype._update = function (M) {
13146 var W = this._w
13147
13148 var a = this._a | 0
13149 var b = this._b | 0
13150 var c = this._c | 0
13151 var d = this._d | 0
13152 var e = this._e | 0
13153 var f = this._f | 0
13154 var g = this._g | 0
13155 var h = this._h | 0
13156
13157 var al = this._al | 0
13158 var bl = this._bl | 0
13159 var cl = this._cl | 0
13160 var dl = this._dl | 0
13161 var el = this._el | 0
13162 var fl = this._fl | 0
13163 var gl = this._gl | 0
13164 var hl = this._hl | 0
13165
13166 var i = 0, j = 0
13167 var Wi, Wil
13168 function calcW () {
13169 var x = W[j - 15 * 2]
13170 var xl = W[j - 15 * 2 + 1]
13171 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
13172 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
13173
13174 x = W[j - 2 * 2]
13175 xl = W[j - 2 * 2 + 1]
13176 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
13177 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
13178
13179 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
13180 var Wi7 = W[j - 7 * 2]
13181 var Wi7l = W[j - 7 * 2 + 1]
13182
13183 var Wi16 = W[j - 16 * 2]
13184 var Wi16l = W[j - 16 * 2 + 1]
13185
13186 Wil = gamma0l + Wi7l
13187 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
13188 Wil = Wil + gamma1l
13189 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
13190 Wil = Wil + Wi16l
13191 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
13192 }
13193
13194 function loop () {
13195 W[j] = Wi
13196 W[j + 1] = Wil
13197
13198 var maj = Maj(a, b, c)
13199 var majl = Maj(al, bl, cl)
13200
13201 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
13202 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
13203 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
13204 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
13205
13206 // t1 = h + sigma1 + ch + K[i] + W[i]
13207 var Ki = K[j]
13208 var Kil = K[j + 1]
13209
13210 var ch = Ch(e, f, g)
13211 var chl = Ch(el, fl, gl)
13212
13213 var t1l = hl + sigma1l
13214 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
13215 t1l = t1l + chl
13216 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
13217 t1l = t1l + Kil
13218 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
13219 t1l = t1l + Wil
13220 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
13221
13222 // t2 = sigma0 + maj
13223 var t2l = sigma0l + majl
13224 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
13225
13226 h = g
13227 hl = gl
13228 g = f
13229 gl = fl
13230 f = e
13231 fl = el
13232 el = (dl + t1l) | 0
13233 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
13234 d = c
13235 dl = cl
13236 c = b
13237 cl = bl
13238 b = a
13239 bl = al
13240 al = (t1l + t2l) | 0
13241 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
13242
13243 i++
13244 j += 2
13245 }
13246
13247 while (i < 16) {
13248 Wi = M.readInt32BE(j * 4)
13249 Wil = M.readInt32BE(j * 4 + 4)
13250
13251 loop()
13252 }
13253
13254 while (i < 80) {
13255 calcW()
13256 loop()
13257 }
13258
13259 this._al = (this._al + al) | 0
13260 this._bl = (this._bl + bl) | 0
13261 this._cl = (this._cl + cl) | 0
13262 this._dl = (this._dl + dl) | 0
13263 this._el = (this._el + el) | 0
13264 this._fl = (this._fl + fl) | 0
13265 this._gl = (this._gl + gl) | 0
13266 this._hl = (this._hl + hl) | 0
13267
13268 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
13269 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
13270 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
13271 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
13272 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
13273 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
13274 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
13275 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
13276 }
13277
13278 Sha512.prototype._hash = function () {
13279 var H = new Buffer(64)
13280
13281 function writeInt64BE (h, l, offset) {
13282 H.writeInt32BE(h, offset)
13283 H.writeInt32BE(l, offset + 4)
13284 }
13285
13286 writeInt64BE(this._a, this._al, 0)
13287 writeInt64BE(this._b, this._bl, 8)
13288 writeInt64BE(this._c, this._cl, 16)
13289 writeInt64BE(this._d, this._dl, 24)
13290 writeInt64BE(this._e, this._el, 32)
13291 writeInt64BE(this._f, this._fl, 40)
13292 writeInt64BE(this._g, this._gl, 48)
13293 writeInt64BE(this._h, this._hl, 56)
13294
13295 return H
13296 }
13297
13298 module.exports = Sha512
13299
13300 }).call(this,require("buffer").Buffer)
13301 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
13302 (function (Buffer){
13303 'use strict';
13304 var createHash = require('create-hash/browser');
13305 var inherits = require('inherits')
13306
13307 var Transform = require('stream').Transform
13308
13309 var ZEROS = new Buffer(128)
13310 ZEROS.fill(0)
13311
13312 function Hmac(alg, key) {
13313 Transform.call(this)
13314
13315 if (typeof key === 'string') {
13316 key = new Buffer(key)
13317 }
13318
13319 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
13320
13321 this._alg = alg
13322 this._key = key
13323
13324 if (key.length > blocksize) {
13325 key = createHash(alg).update(key).digest()
13326
13327 } else if (key.length < blocksize) {
13328 key = Buffer.concat([key, ZEROS], blocksize)
13329 }
13330
13331 var ipad = this._ipad = new Buffer(blocksize)
13332 var opad = this._opad = new Buffer(blocksize)
13333
13334 for (var i = 0; i < blocksize; i++) {
13335 ipad[i] = key[i] ^ 0x36
13336 opad[i] = key[i] ^ 0x5C
13337 }
13338
13339 this._hash = createHash(alg).update(ipad)
13340 }
13341
13342 inherits(Hmac, Transform)
13343
13344 Hmac.prototype.update = function (data, enc) {
13345 this._hash.update(data, enc)
13346
13347 return this
13348 }
13349
13350 Hmac.prototype._transform = function (data, _, next) {
13351 this._hash.update(data)
13352
13353 next()
13354 }
13355
13356 Hmac.prototype._flush = function (next) {
13357 this.push(this.digest())
13358
13359 next()
13360 }
13361
13362 Hmac.prototype.digest = function (enc) {
13363 var h = this._hash.digest()
13364
13365 return createHash(this._alg).update(this._opad).update(h).digest(enc)
13366 }
13367
13368 module.exports = function createHmac(alg, key) {
13369 return new Hmac(alg, key)
13370 }
13371
13372 }).call(this,require("buffer").Buffer)
13373 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
13374 arguments[4][12][0].apply(exports,arguments)
13375 },{"dup":12}],47:[function(require,module,exports){
13376 var assert = require('assert')
13377 var BigInteger = require('bigi')
13378
13379 var Point = require('./point')
13380
13381 function Curve(p, a, b, Gx, Gy, n, h) {
13382 this.p = p
13383 this.a = a
13384 this.b = b
13385 this.G = Point.fromAffine(this, Gx, Gy)
13386 this.n = n
13387 this.h = h
13388
13389 this.infinity = new Point(this, null, null, BigInteger.ZERO)
13390
13391 // result caching
13392 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
13393 }
13394
13395 Curve.prototype.pointFromX = function(isOdd, x) {
13396 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
13397 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
13398
13399 var y = beta
13400 if (beta.isEven() ^ !isOdd) {
13401 y = this.p.subtract(y) // -y % p
13402 }
13403
13404 return Point.fromAffine(this, x, y)
13405 }
13406
13407 Curve.prototype.isInfinity = function(Q) {
13408 if (Q === this.infinity) return true
13409
13410 return Q.z.signum() === 0 && Q.y.signum() !== 0
13411 }
13412
13413 Curve.prototype.isOnCurve = function(Q) {
13414 if (this.isInfinity(Q)) return true
13415
13416 var x = Q.affineX
13417 var y = Q.affineY
13418 var a = this.a
13419 var b = this.b
13420 var p = this.p
13421
13422 // Check that xQ and yQ are integers in the interval [0, p - 1]
13423 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
13424 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
13425
13426 // and check that y^2 = x^3 + ax + b (mod p)
13427 var lhs = y.square().mod(p)
13428 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
13429 return lhs.equals(rhs)
13430 }
13431
13432 /**
13433 * Validate an elliptic curve point.
13434 *
13435 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
13436 */
13437 Curve.prototype.validate = function(Q) {
13438 // Check Q != O
13439 assert(!this.isInfinity(Q), 'Point is at infinity')
13440 assert(this.isOnCurve(Q), 'Point is not on the curve')
13441
13442 // Check nQ = O (where Q is a scalar multiple of G)
13443 var nQ = Q.multiply(this.n)
13444 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
13445
13446 return true
13447 }
13448
13449 module.exports = Curve
13450
13451 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
13452 module.exports={
13453 "secp128r1": {
13454 "p": "fffffffdffffffffffffffffffffffff",
13455 "a": "fffffffdfffffffffffffffffffffffc",
13456 "b": "e87579c11079f43dd824993c2cee5ed3",
13457 "n": "fffffffe0000000075a30d1b9038a115",
13458 "h": "01",
13459 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
13460 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
13461 },
13462 "secp160k1": {
13463 "p": "fffffffffffffffffffffffffffffffeffffac73",
13464 "a": "00",
13465 "b": "07",
13466 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
13467 "h": "01",
13468 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
13469 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
13470 },
13471 "secp160r1": {
13472 "p": "ffffffffffffffffffffffffffffffff7fffffff",
13473 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
13474 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
13475 "n": "0100000000000000000001f4c8f927aed3ca752257",
13476 "h": "01",
13477 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
13478 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
13479 },
13480 "secp192k1": {
13481 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
13482 "a": "00",
13483 "b": "03",
13484 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
13485 "h": "01",
13486 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
13487 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
13488 },
13489 "secp192r1": {
13490 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
13491 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
13492 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
13493 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
13494 "h": "01",
13495 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
13496 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
13497 },
13498 "secp256k1": {
13499 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
13500 "a": "00",
13501 "b": "07",
13502 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
13503 "h": "01",
13504 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
13505 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
13506 },
13507 "secp256r1": {
13508 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
13509 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
13510 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
13511 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
13512 "h": "01",
13513 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
13514 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
13515 }
13516 }
13517
13518 },{}],49:[function(require,module,exports){
13519 var Point = require('./point')
13520 var Curve = require('./curve')
13521
13522 var getCurveByName = require('./names')
13523
13524 module.exports = {
13525 Curve: Curve,
13526 Point: Point,
13527 getCurveByName: getCurveByName
13528 }
13529
13530 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
13531 var BigInteger = require('bigi')
13532
13533 var curves = require('./curves')
13534 var Curve = require('./curve')
13535
13536 function getCurveByName(name) {
13537 var curve = curves[name]
13538 if (!curve) return null
13539
13540 var p = new BigInteger(curve.p, 16)
13541 var a = new BigInteger(curve.a, 16)
13542 var b = new BigInteger(curve.b, 16)
13543 var n = new BigInteger(curve.n, 16)
13544 var h = new BigInteger(curve.h, 16)
13545 var Gx = new BigInteger(curve.Gx, 16)
13546 var Gy = new BigInteger(curve.Gy, 16)
13547
13548 return new Curve(p, a, b, Gx, Gy, n, h)
13549 }
13550
13551 module.exports = getCurveByName
13552
13553 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
13554 (function (Buffer){
13555 var assert = require('assert')
13556 var BigInteger = require('bigi')
13557
13558 var THREE = BigInteger.valueOf(3)
13559
13560 function Point(curve, x, y, z) {
13561 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
13562
13563 this.curve = curve
13564 this.x = x
13565 this.y = y
13566 this.z = z
13567 this._zInv = null
13568
13569 this.compressed = true
13570 }
13571
13572 Object.defineProperty(Point.prototype, 'zInv', {
13573 get: function() {
13574 if (this._zInv === null) {
13575 this._zInv = this.z.modInverse(this.curve.p)
13576 }
13577
13578 return this._zInv
13579 }
13580 })
13581
13582 Object.defineProperty(Point.prototype, 'affineX', {
13583 get: function() {
13584 return this.x.multiply(this.zInv).mod(this.curve.p)
13585 }
13586 })
13587
13588 Object.defineProperty(Point.prototype, 'affineY', {
13589 get: function() {
13590 return this.y.multiply(this.zInv).mod(this.curve.p)
13591 }
13592 })
13593
13594 Point.fromAffine = function(curve, x, y) {
13595 return new Point(curve, x, y, BigInteger.ONE)
13596 }
13597
13598 Point.prototype.equals = function(other) {
13599 if (other === this) return true
13600 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
13601 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
13602
13603 // u = Y2 * Z1 - Y1 * Z2
13604 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
13605
13606 if (u.signum() !== 0) return false
13607
13608 // v = X2 * Z1 - X1 * Z2
13609 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
13610
13611 return v.signum() === 0
13612 }
13613
13614 Point.prototype.negate = function() {
13615 var y = this.curve.p.subtract(this.y)
13616
13617 return new Point(this.curve, this.x, y, this.z)
13618 }
13619
13620 Point.prototype.add = function(b) {
13621 if (this.curve.isInfinity(this)) return b
13622 if (this.curve.isInfinity(b)) return this
13623
13624 var x1 = this.x
13625 var y1 = this.y
13626 var x2 = b.x
13627 var y2 = b.y
13628
13629 // u = Y2 * Z1 - Y1 * Z2
13630 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
13631 // v = X2 * Z1 - X1 * Z2
13632 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
13633
13634 if (v.signum() === 0) {
13635 if (u.signum() === 0) {
13636 return this.twice() // this == b, so double
13637 }
13638
13639 return this.curve.infinity // this = -b, so infinity
13640 }
13641
13642 var v2 = v.square()
13643 var v3 = v2.multiply(v)
13644 var x1v2 = x1.multiply(v2)
13645 var zu2 = u.square().multiply(this.z)
13646
13647 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
13648 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
13649 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
13650 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)
13651 // z3 = v^3 * z1 * z2
13652 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
13653
13654 return new Point(this.curve, x3, y3, z3)
13655 }
13656
13657 Point.prototype.twice = function() {
13658 if (this.curve.isInfinity(this)) return this
13659 if (this.y.signum() === 0) return this.curve.infinity
13660
13661 var x1 = this.x
13662 var y1 = this.y
13663
13664 var y1z1 = y1.multiply(this.z)
13665 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
13666 var a = this.curve.a
13667
13668 // w = 3 * x1^2 + a * z1^2
13669 var w = x1.square().multiply(THREE)
13670
13671 if (a.signum() !== 0) {
13672 w = w.add(this.z.square().multiply(a))
13673 }
13674
13675 w = w.mod(this.curve.p)
13676 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
13677 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
13678 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
13679 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
13680 // z3 = 8 * (y1 * z1)^3
13681 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
13682
13683 return new Point(this.curve, x3, y3, z3)
13684 }
13685
13686 // Simple NAF (Non-Adjacent Form) multiplication algorithm
13687 // TODO: modularize the multiplication algorithm
13688 Point.prototype.multiply = function(k) {
13689 if (this.curve.isInfinity(this)) return this
13690 if (k.signum() === 0) return this.curve.infinity
13691
13692 var e = k
13693 var h = e.multiply(THREE)
13694
13695 var neg = this.negate()
13696 var R = this
13697
13698 for (var i = h.bitLength() - 2; i > 0; --i) {
13699 R = R.twice()
13700
13701 var hBit = h.testBit(i)
13702 var eBit = e.testBit(i)
13703
13704 if (hBit != eBit) {
13705 R = R.add(hBit ? this : neg)
13706 }
13707 }
13708
13709 return R
13710 }
13711
13712 // Compute this*j + x*k (simultaneous multiplication)
13713 Point.prototype.multiplyTwo = function(j, x, k) {
13714 var i
13715
13716 if (j.bitLength() > k.bitLength())
13717 i = j.bitLength() - 1
13718 else
13719 i = k.bitLength() - 1
13720
13721 var R = this.curve.infinity
13722 var both = this.add(x)
13723
13724 while (i >= 0) {
13725 R = R.twice()
13726
13727 var jBit = j.testBit(i)
13728 var kBit = k.testBit(i)
13729
13730 if (jBit) {
13731 if (kBit) {
13732 R = R.add(both)
13733
13734 } else {
13735 R = R.add(this)
13736 }
13737
13738 } else {
13739 if (kBit) {
13740 R = R.add(x)
13741 }
13742 }
13743 --i
13744 }
13745
13746 return R
13747 }
13748
13749 Point.prototype.getEncoded = function(compressed) {
13750 if (compressed == undefined) compressed = this.compressed
13751 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
13752
13753 var x = this.affineX
13754 var y = this.affineY
13755
13756 var buffer
13757
13758 // Determine size of q in bytes
13759 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
13760
13761 // 0x02/0x03 | X
13762 if (compressed) {
13763 buffer = new Buffer(1 + byteLength)
13764 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
13765
13766 // 0x04 | X | Y
13767 } else {
13768 buffer = new Buffer(1 + byteLength + byteLength)
13769 buffer.writeUInt8(0x04, 0)
13770
13771 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
13772 }
13773
13774 x.toBuffer(byteLength).copy(buffer, 1)
13775
13776 return buffer
13777 }
13778
13779 Point.decodeFrom = function(curve, buffer) {
13780 var type = buffer.readUInt8(0)
13781 var compressed = (type !== 4)
13782
13783 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
13784 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
13785
13786 var Q
13787 if (compressed) {
13788 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
13789 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
13790
13791 var isOdd = (type === 0x03)
13792 Q = curve.pointFromX(isOdd, x)
13793
13794 } else {
13795 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
13796
13797 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
13798 Q = Point.fromAffine(curve, x, y)
13799 }
13800
13801 Q.compressed = compressed
13802 return Q
13803 }
13804
13805 Point.prototype.toString = function () {
13806 if (this.curve.isInfinity(this)) return '(INFINITY)'
13807
13808 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
13809 }
13810
13811 module.exports = Point
13812
13813 }).call(this,require("buffer").Buffer)
13814 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
13815 (function (process,global,Buffer){
13816 'use strict';
13817
13818 var crypto = global.crypto || global.msCrypto
13819 if(crypto && crypto.getRandomValues) {
13820 module.exports = randomBytes;
13821 } else {
13822 module.exports = oldBrowser;
13823 }
13824 function randomBytes(size, cb) {
13825 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
13826 /* This will not work in older browsers.
13827 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
13828 */
13829
13830 crypto.getRandomValues(bytes);
13831 if (typeof cb === 'function') {
13832 return process.nextTick(function () {
13833 cb(null, bytes);
13834 });
13835 }
13836 return bytes;
13837 }
13838 function oldBrowser() {
13839 throw new Error(
13840 'secure random number generation not supported by this browser\n'+
13841 'use chrome, FireFox or Internet Explorer 11'
13842 )
13843 }
13844
13845 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
13846 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
13847 (function (Buffer){
13848 'use strict';
13849
13850 function getFunctionName(fn) {
13851 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
13852 }
13853
13854 function getTypeTypeName(type) {
13855 if (nativeTypes.Function(type)) {
13856 type = type.toJSON ? type.toJSON() : getFunctionName(type);
13857 }
13858 if (nativeTypes.Object(type)) return JSON.stringify(type);
13859
13860 return type;
13861 }
13862
13863 function getValueTypeName(value) {
13864 if (nativeTypes.Null(value)) return '';
13865
13866 return getFunctionName(value.constructor);
13867 }
13868
13869 function tfErrorString(type, value) {
13870 var typeTypeName = getTypeTypeName(type);
13871 var valueTypeName = getValueTypeName(value);
13872
13873 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
13874 }
13875
13876 function tfPropertyErrorString(type, name, value) {
13877 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
13878 }
13879
13880 var nativeTypes = {
13881 Array: (function (_Array) {
13882 function Array(_x) {
13883 return _Array.apply(this, arguments);
13884 }
13885
13886 Array.toString = function () {
13887 return _Array.toString();
13888 };
13889
13890 return Array;
13891 })(function (value) {
13892 return value !== null && value !== undefined && value.constructor === Array;
13893 }),
13894 Boolean: function Boolean(value) {
13895 return typeof value === 'boolean';
13896 },
13897 Buffer: (function (_Buffer) {
13898 function Buffer(_x2) {
13899 return _Buffer.apply(this, arguments);
13900 }
13901
13902 Buffer.toString = function () {
13903 return _Buffer.toString();
13904 };
13905
13906 return Buffer;
13907 })(function (value) {
13908 return Buffer.isBuffer(value);
13909 }),
13910 Function: function Function(value) {
13911 return typeof value === 'function';
13912 },
13913 Null: function Null(value) {
13914 return value === undefined || value === null;
13915 },
13916 Number: function Number(value) {
13917 return typeof value === 'number';
13918 },
13919 Object: function Object(value) {
13920 return typeof value === 'object';
13921 },
13922 String: function String(value) {
13923 return typeof value === 'string';
13924 },
13925 '': function _() {
13926 return true;
13927 }
13928 };
13929
13930 function tJSON(type) {
13931 return type && type.toJSON ? type.toJSON() : type;
13932 }
13933
13934 function sJSON(type) {
13935 var json = tJSON(type);
13936 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
13937 }
13938
13939 var otherTypes = {
13940 arrayOf: function arrayOf(type) {
13941 function arrayOf(value, strict) {
13942 try {
13943 return nativeTypes.Array(value) && value.every(function (x) {
13944 return typeforce(type, x, strict);
13945 });
13946 } catch (e) {
13947 return false;
13948 }
13949 }
13950 arrayOf.toJSON = function () {
13951 return [tJSON(type)];
13952 };
13953
13954 return arrayOf;
13955 },
13956
13957 maybe: function maybe(type) {
13958 function maybe(value, strict) {
13959 return nativeTypes.Null(value) || typeforce(type, value, strict);
13960 }
13961 maybe.toJSON = function () {
13962 return '?' + sJSON(type);
13963 };
13964
13965 return maybe;
13966 },
13967
13968 object: function object(type) {
13969 function object(value, strict) {
13970 typeforce(nativeTypes.Object, value, strict);
13971
13972 var propertyName, propertyType, propertyValue;
13973
13974 try {
13975 for (propertyName in type) {
13976 propertyType = type[propertyName];
13977 propertyValue = value[propertyName];
13978
13979 typeforce(propertyType, propertyValue, strict);
13980 }
13981 } catch (e) {
13982 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
13983 }
13984
13985 if (strict) {
13986 for (propertyName in value) {
13987 if (type[propertyName]) continue;
13988
13989 throw new TypeError('Unexpected property "' + propertyName + '"');
13990 }
13991 }
13992
13993 return true;
13994 }
13995 object.toJSON = function () {
13996 return type;
13997 };
13998
13999 return object;
14000 },
14001
14002 oneOf: function oneOf() {
14003 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
14004 types[_key] = arguments[_key];
14005 }
14006
14007 function oneOf(value, strict) {
14008 return types.some(function (type) {
14009 try {
14010 return typeforce(type, value, strict);
14011 } catch (e) {
14012 return false;
14013 }
14014 });
14015 }
14016 oneOf.toJSON = function () {
14017 return types.map(sJSON).join('|');
14018 };
14019
14020 return oneOf;
14021 },
14022
14023 quacksLike: function quacksLike(type) {
14024 function quacksLike(value, strict) {
14025 return type === getValueTypeName(value);
14026 }
14027 quacksLike.toJSON = function () {
14028 return type;
14029 };
14030
14031 return quacksLike;
14032 },
14033
14034 tuple: function tuple() {
14035 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
14036 types[_key2] = arguments[_key2];
14037 }
14038
14039 function tuple(value, strict) {
14040 return types.every(function (type, i) {
14041 return typeforce(type, value[i], strict);
14042 });
14043 }
14044 tuple.toJSON = function () {
14045 return '(' + types.map(sJSON).join(', ') + ')';
14046 };
14047
14048 return tuple;
14049 },
14050
14051 value: function value(expected) {
14052 function value(actual) {
14053 return actual === expected;
14054 }
14055 value.toJSON = function () {
14056 return expected;
14057 };
14058
14059 return value;
14060 }
14061 };
14062
14063 function compile(type) {
14064 if (nativeTypes.String(type)) {
14065 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
14066
14067 return nativeTypes[type] || otherTypes.quacksLike(type);
14068 } else if (type && nativeTypes.Object(type)) {
14069 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
14070
14071 var compiled = {};
14072
14073 for (var propertyName in type) {
14074 compiled[propertyName] = compile(type[propertyName]);
14075 }
14076
14077 return otherTypes.object(compiled);
14078 } else if (nativeTypes.Function(type)) {
14079 return type;
14080 }
14081
14082 return otherTypes.value(type);
14083 }
14084
14085 function typeforce(_x3, _x4, _x5) {
14086 var _again = true;
14087
14088 _function: while (_again) {
14089 var type = _x3,
14090 value = _x4,
14091 strict = _x5;
14092 _again = false;
14093
14094 if (nativeTypes.Function(type)) {
14095 if (type(value, strict)) return true;
14096
14097 throw new TypeError(tfErrorString(type, value));
14098 }
14099
14100 // JIT
14101 _x3 = compile(type);
14102 _x4 = value;
14103 _x5 = strict;
14104 _again = true;
14105 continue _function;
14106 }
14107 }
14108
14109 // assign all types to typeforce function
14110 var typeName;
14111 Object.keys(nativeTypes).forEach(function (typeName) {
14112 var nativeType = nativeTypes[typeName];
14113 nativeType.toJSON = function () {
14114 return typeName;
14115 };
14116
14117 typeforce[typeName] = nativeType;
14118 });
14119
14120 for (typeName in otherTypes) {
14121 typeforce[typeName] = otherTypes[typeName];
14122 }
14123
14124 module.exports = typeforce;
14125 module.exports.compile = compile;
14126 }).call(this,require("buffer").Buffer)
14127 },{"buffer":7}],54:[function(require,module,exports){
14128 (function (Buffer){
14129 var assert = require('assert')
14130 var base58check = require('bs58check')
14131 var typeForce = require('typeforce')
14132 var networks = require('./networks')
14133 var scripts = require('./scripts')
14134
14135 function findScriptTypeByVersion (version) {
14136 for (var networkName in networks) {
14137 var network = networks[networkName]
14138
14139 if (version === network.pubKeyHash) return 'pubkeyhash'
14140 if (version === network.scriptHash) return 'scripthash'
14141 }
14142 }
14143
14144 function Address (hash, version) {
14145 typeForce('Buffer', hash)
14146
14147 assert.strictEqual(hash.length, 20, 'Invalid hash length')
14148 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
14149
14150 this.hash = hash
14151 this.version = version
14152 }
14153
14154 Address.fromBase58Check = function (string) {
14155 var payload = base58check.decode(string)
14156 var version = payload.readUInt8(0)
14157 var hash = payload.slice(1)
14158
14159 return new Address(hash, version)
14160 }
14161
14162 Address.fromOutputScript = function (script, network) {
14163 network = network || networks.bitcoin
14164
14165 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
14166 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
14167
14168 assert(false, script.toASM() + ' has no matching Address')
14169 }
14170
14171 Address.prototype.toBase58Check = function () {
14172 var payload = new Buffer(21)
14173 payload.writeUInt8(this.version, 0)
14174 this.hash.copy(payload, 1)
14175
14176 return base58check.encode(payload)
14177 }
14178
14179 Address.prototype.toOutputScript = function () {
14180 var scriptType = findScriptTypeByVersion(this.version)
14181
14182 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
14183 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
14184
14185 assert(false, this.toString() + ' has no matching Script')
14186 }
14187
14188 Address.prototype.toString = Address.prototype.toBase58Check
14189
14190 module.exports = Address
14191
14192 }).call(this,require("buffer").Buffer)
14193 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
14194 var bs58check = require('bs58check')
14195
14196 function decode () {
14197 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
14198
14199 return bs58check.decode.apply(undefined, arguments)
14200 }
14201
14202 function encode () {
14203 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
14204
14205 return bs58check.encode.apply(undefined, arguments)
14206 }
14207
14208 module.exports = {
14209 decode: decode,
14210 encode: encode
14211 }
14212
14213 },{"bs58check":31}],56:[function(require,module,exports){
14214 (function (Buffer){
14215 var assert = require('assert')
14216 var bufferutils = require('./bufferutils')
14217 var crypto = require('./crypto')
14218
14219 var Transaction = require('./transaction')
14220
14221 function Block () {
14222 this.version = 1
14223 this.prevHash = null
14224 this.merkleRoot = null
14225 this.timestamp = 0
14226 this.bits = 0
14227 this.nonce = 0
14228 }
14229
14230 Block.fromBuffer = function (buffer) {
14231 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
14232
14233 var offset = 0
14234 function readSlice (n) {
14235 offset += n
14236 return buffer.slice(offset - n, offset)
14237 }
14238
14239 function readUInt32 () {
14240 var i = buffer.readUInt32LE(offset)
14241 offset += 4
14242 return i
14243 }
14244
14245 var block = new Block()
14246 block.version = readUInt32()
14247 block.prevHash = readSlice(32)
14248 block.merkleRoot = readSlice(32)
14249 block.timestamp = readUInt32()
14250 block.bits = readUInt32()
14251 block.nonce = readUInt32()
14252
14253 if (buffer.length === 80) return block
14254
14255 function readVarInt () {
14256 var vi = bufferutils.readVarInt(buffer, offset)
14257 offset += vi.size
14258 return vi.number
14259 }
14260
14261 // FIXME: poor performance
14262 function readTransaction () {
14263 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
14264
14265 offset += tx.toBuffer().length
14266 return tx
14267 }
14268
14269 var nTransactions = readVarInt()
14270 block.transactions = []
14271
14272 for (var i = 0; i < nTransactions; ++i) {
14273 var tx = readTransaction()
14274 block.transactions.push(tx)
14275 }
14276
14277 return block
14278 }
14279
14280 Block.fromHex = function (hex) {
14281 return Block.fromBuffer(new Buffer(hex, 'hex'))
14282 }
14283
14284 Block.prototype.getHash = function () {
14285 return crypto.hash256(this.toBuffer(true))
14286 }
14287
14288 Block.prototype.getId = function () {
14289 return bufferutils.reverse(this.getHash()).toString('hex')
14290 }
14291
14292 Block.prototype.getUTCDate = function () {
14293 var date = new Date(0) // epoch
14294 date.setUTCSeconds(this.timestamp)
14295
14296 return date
14297 }
14298
14299 Block.prototype.toBuffer = function (headersOnly) {
14300 var buffer = new Buffer(80)
14301
14302 var offset = 0
14303 function writeSlice (slice) {
14304 slice.copy(buffer, offset)
14305 offset += slice.length
14306 }
14307
14308 function writeUInt32 (i) {
14309 buffer.writeUInt32LE(i, offset)
14310 offset += 4
14311 }
14312
14313 writeUInt32(this.version)
14314 writeSlice(this.prevHash)
14315 writeSlice(this.merkleRoot)
14316 writeUInt32(this.timestamp)
14317 writeUInt32(this.bits)
14318 writeUInt32(this.nonce)
14319
14320 if (headersOnly || !this.transactions) return buffer
14321
14322 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
14323 var txBuffers = this.transactions.map(function (tx) {
14324 return tx.toBuffer()
14325 })
14326
14327 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
14328 }
14329
14330 Block.prototype.toHex = function (headersOnly) {
14331 return this.toBuffer(headersOnly).toString('hex')
14332 }
14333
14334 module.exports = Block
14335
14336 }).call(this,require("buffer").Buffer)
14337 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
14338 (function (Buffer){
14339 var assert = require('assert')
14340 var opcodes = require('./opcodes')
14341
14342 // https://github.com/feross/buffer/blob/master/index.js#L1127
14343 function verifuint (value, max) {
14344 assert(typeof value === 'number', 'cannot write a non-number as a number')
14345 assert(value >= 0, 'specified a negative value for writing an unsigned value')
14346 assert(value <= max, 'value is larger than maximum value for type')
14347 assert(Math.floor(value) === value, 'value has a fractional component')
14348 }
14349
14350 function pushDataSize (i) {
14351 return i < opcodes.OP_PUSHDATA1 ? 1
14352 : i < 0xff ? 2
14353 : i < 0xffff ? 3
14354 : 5
14355 }
14356
14357 function readPushDataInt (buffer, offset) {
14358 var opcode = buffer.readUInt8(offset)
14359 var number, size
14360
14361 // ~6 bit
14362 if (opcode < opcodes.OP_PUSHDATA1) {
14363 number = opcode
14364 size = 1
14365
14366 // 8 bit
14367 } else if (opcode === opcodes.OP_PUSHDATA1) {
14368 if (offset + 2 > buffer.length) return null
14369 number = buffer.readUInt8(offset + 1)
14370 size = 2
14371
14372 // 16 bit
14373 } else if (opcode === opcodes.OP_PUSHDATA2) {
14374 if (offset + 3 > buffer.length) return null
14375 number = buffer.readUInt16LE(offset + 1)
14376 size = 3
14377
14378 // 32 bit
14379 } else {
14380 if (offset + 5 > buffer.length) return null
14381 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
14382
14383 number = buffer.readUInt32LE(offset + 1)
14384 size = 5
14385 }
14386
14387 return {
14388 opcode: opcode,
14389 number: number,
14390 size: size
14391 }
14392 }
14393
14394 function readUInt64LE (buffer, offset) {
14395 var a = buffer.readUInt32LE(offset)
14396 var b = buffer.readUInt32LE(offset + 4)
14397 b *= 0x100000000
14398
14399 verifuint(b + a, 0x001fffffffffffff)
14400
14401 return b + a
14402 }
14403
14404 function readVarInt (buffer, offset) {
14405 var t = buffer.readUInt8(offset)
14406 var number, size
14407
14408 // 8 bit
14409 if (t < 253) {
14410 number = t
14411 size = 1
14412
14413 // 16 bit
14414 } else if (t < 254) {
14415 number = buffer.readUInt16LE(offset + 1)
14416 size = 3
14417
14418 // 32 bit
14419 } else if (t < 255) {
14420 number = buffer.readUInt32LE(offset + 1)
14421 size = 5
14422
14423 // 64 bit
14424 } else {
14425 number = readUInt64LE(buffer, offset + 1)
14426 size = 9
14427 }
14428
14429 return {
14430 number: number,
14431 size: size
14432 }
14433 }
14434
14435 function writePushDataInt (buffer, number, offset) {
14436 var size = pushDataSize(number)
14437
14438 // ~6 bit
14439 if (size === 1) {
14440 buffer.writeUInt8(number, offset)
14441
14442 // 8 bit
14443 } else if (size === 2) {
14444 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
14445 buffer.writeUInt8(number, offset + 1)
14446
14447 // 16 bit
14448 } else if (size === 3) {
14449 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
14450 buffer.writeUInt16LE(number, offset + 1)
14451
14452 // 32 bit
14453 } else {
14454 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
14455 buffer.writeUInt32LE(number, offset + 1)
14456 }
14457
14458 return size
14459 }
14460
14461 function writeUInt64LE (buffer, value, offset) {
14462 verifuint(value, 0x001fffffffffffff)
14463
14464 buffer.writeInt32LE(value & -1, offset)
14465 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
14466 }
14467
14468 function varIntSize (i) {
14469 return i < 253 ? 1
14470 : i < 0x10000 ? 3
14471 : i < 0x100000000 ? 5
14472 : 9
14473 }
14474
14475 function writeVarInt (buffer, number, offset) {
14476 var size = varIntSize(number)
14477
14478 // 8 bit
14479 if (size === 1) {
14480 buffer.writeUInt8(number, offset)
14481
14482 // 16 bit
14483 } else if (size === 3) {
14484 buffer.writeUInt8(253, offset)
14485 buffer.writeUInt16LE(number, offset + 1)
14486
14487 // 32 bit
14488 } else if (size === 5) {
14489 buffer.writeUInt8(254, offset)
14490 buffer.writeUInt32LE(number, offset + 1)
14491
14492 // 64 bit
14493 } else {
14494 buffer.writeUInt8(255, offset)
14495 writeUInt64LE(buffer, number, offset + 1)
14496 }
14497
14498 return size
14499 }
14500
14501 function varIntBuffer (i) {
14502 var size = varIntSize(i)
14503 var buffer = new Buffer(size)
14504 writeVarInt(buffer, i, 0)
14505
14506 return buffer
14507 }
14508
14509 function reverse (buffer) {
14510 var buffer2 = new Buffer(buffer)
14511 Array.prototype.reverse.call(buffer2)
14512 return buffer2
14513 }
14514
14515 module.exports = {
14516 pushDataSize: pushDataSize,
14517 readPushDataInt: readPushDataInt,
14518 readUInt64LE: readUInt64LE,
14519 readVarInt: readVarInt,
14520 reverse: reverse,
14521 varIntBuffer: varIntBuffer,
14522 varIntSize: varIntSize,
14523 writePushDataInt: writePushDataInt,
14524 writeUInt64LE: writeUInt64LE,
14525 writeVarInt: writeVarInt
14526 }
14527
14528 }).call(this,require("buffer").Buffer)
14529 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
14530 var createHash = require('create-hash')
14531
14532 function hash160 (buffer) {
14533 return ripemd160(sha256(buffer))
14534 }
14535
14536 function hash256 (buffer) {
14537 return sha256(sha256(buffer))
14538 }
14539
14540 function ripemd160 (buffer) {
14541 return createHash('rmd160').update(buffer).digest()
14542 }
14543
14544 function sha1 (buffer) {
14545 return createHash('sha1').update(buffer).digest()
14546 }
14547
14548 function sha256 (buffer) {
14549 return createHash('sha256').update(buffer).digest()
14550 }
14551
14552 // FIXME: Name not consistent with others
14553 var createHmac = require('create-hmac')
14554
14555 function HmacSHA256 (buffer, secret) {
14556 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
14557 return createHmac('sha256', secret).update(buffer).digest()
14558 }
14559
14560 function HmacSHA512 (buffer, secret) {
14561 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
14562 return createHmac('sha512', secret).update(buffer).digest()
14563 }
14564
14565 module.exports = {
14566 ripemd160: ripemd160,
14567 sha1: sha1,
14568 sha256: sha256,
14569 hash160: hash160,
14570 hash256: hash256,
14571 HmacSHA256: HmacSHA256,
14572 HmacSHA512: HmacSHA512
14573 }
14574
14575 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
14576 (function (Buffer){
14577 var assert = require('assert')
14578 var createHmac = require('create-hmac')
14579 var typeForce = require('typeforce')
14580
14581 var BigInteger = require('bigi')
14582 var ECSignature = require('./ecsignature')
14583
14584 var ZERO = new Buffer([0])
14585 var ONE = new Buffer([1])
14586
14587 // https://tools.ietf.org/html/rfc6979#section-3.2
14588 function deterministicGenerateK (curve, hash, d, checkSig) {
14589 typeForce('Buffer', hash)
14590 typeForce('BigInteger', d)
14591
14592 // FIXME: remove/uncomment for 2.0.0
14593 // typeForce('Function', checkSig)
14594
14595 if (typeof checkSig !== 'function') {
14596 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
14597
14598 checkSig = function (k) {
14599 var G = curve.G
14600 var n = curve.n
14601 var e = BigInteger.fromBuffer(hash)
14602
14603 var Q = G.multiply(k)
14604
14605 if (curve.isInfinity(Q))
14606 return false
14607
14608 var r = Q.affineX.mod(n)
14609 if (r.signum() === 0)
14610 return false
14611
14612 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
14613 if (s.signum() === 0)
14614 return false
14615
14616 return true
14617 }
14618 }
14619
14620 // sanity check
14621 assert.equal(hash.length, 32, 'Hash must be 256 bit')
14622
14623 var x = d.toBuffer(32)
14624 var k = new Buffer(32)
14625 var v = new Buffer(32)
14626
14627 // Step A, ignored as hash already provided
14628 // Step B
14629 v.fill(1)
14630
14631 // Step C
14632 k.fill(0)
14633
14634 // Step D
14635 k = createHmac('sha256', k)
14636 .update(v)
14637 .update(ZERO)
14638 .update(x)
14639 .update(hash)
14640 .digest()
14641
14642 // Step E
14643 v = createHmac('sha256', k).update(v).digest()
14644
14645 // Step F
14646 k = createHmac('sha256', k)
14647 .update(v)
14648 .update(ONE)
14649 .update(x)
14650 .update(hash)
14651 .digest()
14652
14653 // Step G
14654 v = createHmac('sha256', k).update(v).digest()
14655
14656 // Step H1/H2a, ignored as tlen === qlen (256 bit)
14657 // Step H2b
14658 v = createHmac('sha256', k).update(v).digest()
14659
14660 var T = BigInteger.fromBuffer(v)
14661
14662 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
14663 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
14664 k = createHmac('sha256', k)
14665 .update(v)
14666 .update(ZERO)
14667 .digest()
14668
14669 v = createHmac('sha256', k).update(v).digest()
14670
14671 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
14672 // Step H2b again
14673 v = createHmac('sha256', k).update(v).digest()
14674 T = BigInteger.fromBuffer(v)
14675 }
14676
14677 return T
14678 }
14679
14680 function sign (curve, hash, d) {
14681 var r, s
14682
14683 var e = BigInteger.fromBuffer(hash)
14684 var n = curve.n
14685 var G = curve.G
14686
14687 deterministicGenerateK(curve, hash, d, function (k) {
14688 var Q = G.multiply(k)
14689
14690 if (curve.isInfinity(Q))
14691 return false
14692
14693 r = Q.affineX.mod(n)
14694 if (r.signum() === 0)
14695 return false
14696
14697 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
14698 if (s.signum() === 0)
14699 return false
14700
14701 return true
14702 })
14703
14704 var N_OVER_TWO = n.shiftRight(1)
14705
14706 // enforce low S values, see bip62: 'low s values in signatures'
14707 if (s.compareTo(N_OVER_TWO) > 0) {
14708 s = n.subtract(s)
14709 }
14710
14711 return new ECSignature(r, s)
14712 }
14713
14714 function verifyRaw (curve, e, signature, Q) {
14715 var n = curve.n
14716 var G = curve.G
14717
14718 var r = signature.r
14719 var s = signature.s
14720
14721 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
14722 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
14723 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
14724
14725 // c = s^-1 mod n
14726 var c = s.modInverse(n)
14727
14728 // 1.4.4 Compute u1 = es^−1 mod n
14729 // u2 = rs^−1 mod n
14730 var u1 = e.multiply(c).mod(n)
14731 var u2 = r.multiply(c).mod(n)
14732
14733 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
14734 var R = G.multiplyTwo(u1, Q, u2)
14735 var v = R.affineX.mod(n)
14736
14737 // 1.4.5 (cont.) Enforce R is not at infinity
14738 if (curve.isInfinity(R)) return false
14739
14740 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
14741 return v.equals(r)
14742 }
14743
14744 function verify (curve, hash, signature, Q) {
14745 // 1.4.2 H = Hash(M), already done by the user
14746 // 1.4.3 e = H
14747 var e = BigInteger.fromBuffer(hash)
14748
14749 return verifyRaw(curve, e, signature, Q)
14750 }
14751
14752 /**
14753 * Recover a public key from a signature.
14754 *
14755 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
14756 * Key Recovery Operation".
14757 *
14758 * http://www.secg.org/download/aid-780/sec1-v2.pdf
14759 */
14760 function recoverPubKey (curve, e, signature, i) {
14761 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
14762
14763 var n = curve.n
14764 var G = curve.G
14765
14766 var r = signature.r
14767 var s = signature.s
14768
14769 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
14770 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
14771
14772 // A set LSB signifies that the y-coordinate is odd
14773 var isYOdd = i & 1
14774
14775 // The more significant bit specifies whether we should use the
14776 // first or second candidate key.
14777 var isSecondKey = i >> 1
14778
14779 // 1.1 Let x = r + jn
14780 var x = isSecondKey ? r.add(n) : r
14781 var R = curve.pointFromX(isYOdd, x)
14782
14783 // 1.4 Check that nR is at infinity
14784 var nR = R.multiply(n)
14785 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
14786
14787 // Compute -e from e
14788 var eNeg = e.negate().mod(n)
14789
14790 // 1.6.1 Compute Q = r^-1 (sR - eG)
14791 // Q = r^-1 (sR + -eG)
14792 var rInv = r.modInverse(n)
14793
14794 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
14795 curve.validate(Q)
14796
14797 return Q
14798 }
14799
14800 /**
14801 * Calculate pubkey extraction parameter.
14802 *
14803 * When extracting a pubkey from a signature, we have to
14804 * distinguish four different cases. Rather than putting this
14805 * burden on the verifier, Bitcoin includes a 2-bit value with the
14806 * signature.
14807 *
14808 * This function simply tries all four cases and returns the value
14809 * that resulted in a successful pubkey recovery.
14810 */
14811 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
14812 for (var i = 0; i < 4; i++) {
14813 var Qprime = recoverPubKey(curve, e, signature, i)
14814
14815 // 1.6.2 Verify Q
14816 if (Qprime.equals(Q)) {
14817 return i
14818 }
14819 }
14820
14821 throw new Error('Unable to find valid recovery factor')
14822 }
14823
14824 module.exports = {
14825 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
14826 deterministicGenerateK: deterministicGenerateK,
14827 recoverPubKey: recoverPubKey,
14828 sign: sign,
14829 verify: verify,
14830 verifyRaw: verifyRaw
14831 }
14832
14833 }).call(this,require("buffer").Buffer)
14834 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
14835 (function (Buffer){
14836 var assert = require('assert')
14837 var base58check = require('bs58check')
14838 var ecdsa = require('./ecdsa')
14839 var networks = require('./networks')
14840 var randomBytes = require('randombytes')
14841 var typeForce = require('typeforce')
14842
14843 var BigInteger = require('bigi')
14844 var ECPubKey = require('./ecpubkey')
14845
14846 var ecurve = require('ecurve')
14847 var secp256k1 = ecurve.getCurveByName('secp256k1')
14848
14849 function ECKey (d, compressed) {
14850 assert(d.signum() > 0, 'Private key must be greater than 0')
14851 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
14852
14853 var Q = ECKey.curve.G.multiply(d)
14854
14855 this.d = d
14856 this.pub = new ECPubKey(Q, compressed)
14857 }
14858
14859 // Constants
14860 ECKey.curve = secp256k1
14861
14862 // Static constructors
14863 ECKey.fromWIF = function (string) {
14864 var payload = base58check.decode(string)
14865 var compressed = false
14866
14867 // Ignore the version byte
14868 payload = payload.slice(1)
14869
14870 if (payload.length === 33) {
14871 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
14872
14873 // Truncate the compression flag
14874 payload = payload.slice(0, -1)
14875 compressed = true
14876 }
14877
14878 assert.equal(payload.length, 32, 'Invalid WIF payload length')
14879
14880 var d = BigInteger.fromBuffer(payload)
14881 return new ECKey(d, compressed)
14882 }
14883
14884 ECKey.makeRandom = function (compressed, rng) {
14885 rng = rng || randomBytes
14886
14887 var buffer = rng(32)
14888 typeForce('Buffer', buffer)
14889 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
14890
14891 var d = BigInteger.fromBuffer(buffer)
14892 d = d.mod(ECKey.curve.n)
14893
14894 return new ECKey(d, compressed)
14895 }
14896
14897 // Export functions
14898 ECKey.prototype.toWIF = function (network) {
14899 network = network || networks.bitcoin
14900
14901 var bufferLen = this.pub.compressed ? 34 : 33
14902 var buffer = new Buffer(bufferLen)
14903
14904 buffer.writeUInt8(network.wif, 0)
14905 this.d.toBuffer(32).copy(buffer, 1)
14906
14907 if (this.pub.compressed) {
14908 buffer.writeUInt8(0x01, 33)
14909 }
14910
14911 return base58check.encode(buffer)
14912 }
14913
14914 // Operations
14915 ECKey.prototype.sign = function (hash) {
14916 return ecdsa.sign(ECKey.curve, hash, this.d)
14917 }
14918
14919 module.exports = ECKey
14920
14921 }).call(this,require("buffer").Buffer)
14922 },{"./ecdsa":59,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"ecurve":49,"randombytes":52,"typeforce":53}],61:[function(require,module,exports){
14923 (function (Buffer){
14924 var crypto = require('./crypto')
14925 var ecdsa = require('./ecdsa')
14926 var typeForce = require('typeforce')
14927 var networks = require('./networks')
14928
14929 var Address = require('./address')
14930
14931 var ecurve = require('ecurve')
14932 var secp256k1 = ecurve.getCurveByName('secp256k1')
14933
14934 function ECPubKey (Q, compressed) {
14935 if (compressed === undefined) {
14936 compressed = true
14937 }
14938
14939 typeForce('Point', Q)
14940 typeForce('Boolean', compressed)
14941
14942 this.compressed = compressed
14943 this.Q = Q
14944 }
14945
14946 // Constants
14947 ECPubKey.curve = secp256k1
14948
14949 // Static constructors
14950 ECPubKey.fromBuffer = function (buffer) {
14951 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
14952 return new ECPubKey(Q, Q.compressed)
14953 }
14954
14955 ECPubKey.fromHex = function (hex) {
14956 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
14957 }
14958
14959 // Operations
14960 ECPubKey.prototype.getAddress = function (network) {
14961 network = network || networks.bitcoin
14962
14963 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
14964 }
14965
14966 ECPubKey.prototype.verify = function (hash, signature) {
14967 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
14968 }
14969
14970 // Export functions
14971 ECPubKey.prototype.toBuffer = function () {
14972 return this.Q.getEncoded(this.compressed)
14973 }
14974
14975 ECPubKey.prototype.toHex = function () {
14976 return this.toBuffer().toString('hex')
14977 }
14978
14979 module.exports = ECPubKey
14980
14981 }).call(this,require("buffer").Buffer)
14982 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
14983 (function (Buffer){
14984 var assert = require('assert')
14985 var typeForce = require('typeforce')
14986
14987 var BigInteger = require('bigi')
14988
14989 function ECSignature (r, s) {
14990 typeForce('BigInteger', r)
14991 typeForce('BigInteger', s)
14992
14993 this.r = r
14994 this.s = s
14995 }
14996
14997 ECSignature.parseCompact = function (buffer) {
14998 assert.equal(buffer.length, 65, 'Invalid signature length')
14999 var i = buffer.readUInt8(0) - 27
15000
15001 // At most 3 bits
15002 assert.equal(i, i & 7, 'Invalid signature parameter')
15003 var compressed = !!(i & 4)
15004
15005 // Recovery param only
15006 i = i & 3
15007
15008 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
15009 var s = BigInteger.fromBuffer(buffer.slice(33))
15010
15011 return {
15012 compressed: compressed,
15013 i: i,
15014 signature: new ECSignature(r, s)
15015 }
15016 }
15017
15018 ECSignature.fromDER = function (buffer) {
15019 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
15020 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
15021 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
15022
15023 var rLen = buffer.readUInt8(3)
15024 assert(rLen > 0, 'R length is zero')
15025
15026 var offset = 4 + rLen
15027 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
15028
15029 var sLen = buffer.readUInt8(offset + 1)
15030 assert(sLen > 0, 'S length is zero')
15031
15032 var rB = buffer.slice(4, offset)
15033 var sB = buffer.slice(offset + 2)
15034 offset += 2 + sLen
15035
15036 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
15037 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
15038 }
15039
15040 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
15041 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
15042 }
15043
15044 assert.equal(offset, buffer.length, 'Invalid DER encoding')
15045 var r = BigInteger.fromDERInteger(rB)
15046 var s = BigInteger.fromDERInteger(sB)
15047
15048 assert(r.signum() >= 0, 'R value is negative')
15049 assert(s.signum() >= 0, 'S value is negative')
15050
15051 return new ECSignature(r, s)
15052 }
15053
15054 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
15055 ECSignature.parseScriptSignature = function (buffer) {
15056 var hashType = buffer.readUInt8(buffer.length - 1)
15057 var hashTypeMod = hashType & ~0x80
15058
15059 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
15060
15061 return {
15062 signature: ECSignature.fromDER(buffer.slice(0, -1)),
15063 hashType: hashType
15064 }
15065 }
15066
15067 ECSignature.prototype.toCompact = function (i, compressed) {
15068 if (compressed) {
15069 i += 4
15070 }
15071
15072 i += 27
15073
15074 var buffer = new Buffer(65)
15075 buffer.writeUInt8(i, 0)
15076
15077 this.r.toBuffer(32).copy(buffer, 1)
15078 this.s.toBuffer(32).copy(buffer, 33)
15079
15080 return buffer
15081 }
15082
15083 ECSignature.prototype.toDER = function () {
15084 var rBa = this.r.toDERInteger()
15085 var sBa = this.s.toDERInteger()
15086
15087 var sequence = []
15088
15089 // INTEGER
15090 sequence.push(0x02, rBa.length)
15091 sequence = sequence.concat(rBa)
15092
15093 // INTEGER
15094 sequence.push(0x02, sBa.length)
15095 sequence = sequence.concat(sBa)
15096
15097 // SEQUENCE
15098 sequence.unshift(0x30, sequence.length)
15099
15100 return new Buffer(sequence)
15101 }
15102
15103 ECSignature.prototype.toScriptSignature = function (hashType) {
15104 var hashTypeMod = hashType & ~0x80
15105 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
15106
15107 var hashTypeBuffer = new Buffer(1)
15108 hashTypeBuffer.writeUInt8(hashType, 0)
15109
15110 return Buffer.concat([this.toDER(), hashTypeBuffer])
15111 }
15112
15113 module.exports = ECSignature
15114
15115 }).call(this,require("buffer").Buffer)
15116 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
15117 (function (Buffer){
15118 var assert = require('assert')
15119 var base58check = require('bs58check')
15120 var bcrypto = require('./crypto')
15121 var createHmac = require('create-hmac')
15122 var typeForce = require('typeforce')
15123 var networks = require('./networks')
15124
15125 var BigInteger = require('bigi')
15126 var ECKey = require('./eckey')
15127 var ECPubKey = require('./ecpubkey')
15128
15129 var ecurve = require('ecurve')
15130 var curve = ecurve.getCurveByName('secp256k1')
15131
15132 function findBIP32NetworkByVersion (version) {
15133 for (var name in networks) {
15134 var network = networks[name]
15135
15136 if (version === network.bip32.private || version === network.bip32.public) {
15137 return network
15138 }
15139 }
15140
15141 assert(false, 'Could not find network for ' + version.toString(16))
15142 }
15143
15144 function HDNode (K, chainCode, network) {
15145 network = network || networks.bitcoin
15146
15147 typeForce('Buffer', chainCode)
15148
15149 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
15150 assert(network.bip32, 'Unknown BIP32 constants for network')
15151
15152 this.chainCode = chainCode
15153 this.depth = 0
15154 this.index = 0
15155 this.parentFingerprint = 0x00000000
15156 this.network = network
15157
15158 if (K instanceof BigInteger) {
15159 this.privKey = new ECKey(K, true)
15160 this.pubKey = this.privKey.pub
15161 } else if (K instanceof ECKey) {
15162 assert(K.pub.compressed, 'ECKey must be compressed')
15163 this.privKey = K
15164 this.pubKey = K.pub
15165 } else if (K instanceof ECPubKey) {
15166 assert(K.compressed, 'ECPubKey must be compressed')
15167 this.pubKey = K
15168 } else {
15169 this.pubKey = new ECPubKey(K, true)
15170 }
15171 }
15172
15173 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
15174 HDNode.HIGHEST_BIT = 0x80000000
15175 HDNode.LENGTH = 78
15176
15177 HDNode.fromSeedBuffer = function (seed, network) {
15178 typeForce('Buffer', seed)
15179
15180 assert(seed.length >= 16, 'Seed should be at least 128 bits')
15181 assert(seed.length <= 64, 'Seed should be at most 512 bits')
15182
15183 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
15184 var IL = I.slice(0, 32)
15185 var IR = I.slice(32)
15186
15187 // In case IL is 0 or >= n, the master key is invalid
15188 // This is handled by `new ECKey` in the HDNode constructor
15189 var pIL = BigInteger.fromBuffer(IL)
15190
15191 return new HDNode(pIL, IR, network)
15192 }
15193
15194 HDNode.fromSeedHex = function (hex, network) {
15195 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
15196 }
15197
15198 HDNode.fromBase58 = function (string, network) {
15199 return HDNode.fromBuffer(base58check.decode(string), network, true)
15200 }
15201
15202 // FIXME: remove in 2.x.y
15203 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
15204 if (!__ignoreDeprecation) {
15205 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
15206 }
15207
15208 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
15209
15210 // 4 byte: version bytes
15211 var version = buffer.readUInt32BE(0)
15212
15213 if (network) {
15214 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
15215
15216 // auto-detect
15217 } else {
15218 network = findBIP32NetworkByVersion(version)
15219 }
15220
15221 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
15222 var depth = buffer.readUInt8(4)
15223
15224 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
15225 var parentFingerprint = buffer.readUInt32BE(5)
15226 if (depth === 0) {
15227 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
15228 }
15229
15230 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
15231 // This is encoded in MSB order. (0x00000000 if master key)
15232 var index = buffer.readUInt32BE(9)
15233 assert(depth > 0 || index === 0, 'Invalid index')
15234
15235 // 32 bytes: the chain code
15236 var chainCode = buffer.slice(13, 45)
15237 var data, hd
15238
15239 // 33 bytes: private key data (0x00 + k)
15240 if (version === network.bip32.private) {
15241 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
15242 data = buffer.slice(46, 78)
15243 var d = BigInteger.fromBuffer(data)
15244 hd = new HDNode(d, chainCode, network)
15245
15246 // 33 bytes: public key data (0x02 + X or 0x03 + X)
15247 } else {
15248 data = buffer.slice(45, 78)
15249 var Q = ecurve.Point.decodeFrom(curve, data)
15250 assert.equal(Q.compressed, true, 'Invalid public key')
15251
15252 // Verify that the X coordinate in the public point corresponds to a point on the curve.
15253 // If not, the extended public key is invalid.
15254 curve.validate(Q)
15255
15256 hd = new HDNode(Q, chainCode, network)
15257 }
15258
15259 hd.depth = depth
15260 hd.index = index
15261 hd.parentFingerprint = parentFingerprint
15262
15263 return hd
15264 }
15265
15266 // FIXME: remove in 2.x.y
15267 HDNode.fromHex = function (hex, network) {
15268 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
15269 }
15270
15271 HDNode.prototype.getIdentifier = function () {
15272 return bcrypto.hash160(this.pubKey.toBuffer())
15273 }
15274
15275 HDNode.prototype.getFingerprint = function () {
15276 return this.getIdentifier().slice(0, 4)
15277 }
15278
15279 HDNode.prototype.getAddress = function () {
15280 return this.pubKey.getAddress(this.network)
15281 }
15282
15283 HDNode.prototype.neutered = function () {
15284 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
15285 neutered.depth = this.depth
15286 neutered.index = this.index
15287 neutered.parentFingerprint = this.parentFingerprint
15288
15289 return neutered
15290 }
15291
15292 HDNode.prototype.toBase58 = function (isPrivate) {
15293 return base58check.encode(this.toBuffer(isPrivate, true))
15294 }
15295
15296 // FIXME: remove in 2.x.y
15297 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
15298 if (isPrivate === undefined) {
15299 isPrivate = !!this.privKey
15300
15301 // FIXME: remove in 2.x.y
15302 } else {
15303 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
15304 }
15305
15306 if (!__ignoreDeprecation) {
15307 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
15308 }
15309
15310 // Version
15311 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
15312 var buffer = new Buffer(HDNode.LENGTH)
15313
15314 // 4 bytes: version bytes
15315 buffer.writeUInt32BE(version, 0)
15316
15317 // Depth
15318 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
15319 buffer.writeUInt8(this.depth, 4)
15320
15321 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
15322 buffer.writeUInt32BE(this.parentFingerprint, 5)
15323
15324 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
15325 // This is encoded in Big endian. (0x00000000 if master key)
15326 buffer.writeUInt32BE(this.index, 9)
15327
15328 // 32 bytes: the chain code
15329 this.chainCode.copy(buffer, 13)
15330
15331 // 33 bytes: the public key or private key data
15332 if (isPrivate) {
15333 // FIXME: remove in 2.x.y
15334 assert(this.privKey, 'Missing private key')
15335
15336 // 0x00 + k for private keys
15337 buffer.writeUInt8(0, 45)
15338 this.privKey.d.toBuffer(32).copy(buffer, 46)
15339 } else {
15340 // X9.62 encoding for public keys
15341 this.pubKey.toBuffer().copy(buffer, 45)
15342 }
15343
15344 return buffer
15345 }
15346
15347 // FIXME: remove in 2.x.y
15348 HDNode.prototype.toHex = function (isPrivate) {
15349 return this.toBuffer(isPrivate).toString('hex')
15350 }
15351
15352 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
15353 HDNode.prototype.derive = function (index) {
15354 var isHardened = index >= HDNode.HIGHEST_BIT
15355 var indexBuffer = new Buffer(4)
15356 indexBuffer.writeUInt32BE(index, 0)
15357
15358 var data
15359
15360 // Hardened child
15361 if (isHardened) {
15362 assert(this.privKey, 'Could not derive hardened child key')
15363
15364 // data = 0x00 || ser256(kpar) || ser32(index)
15365 data = Buffer.concat([
15366 this.privKey.d.toBuffer(33),
15367 indexBuffer
15368 ])
15369
15370 // Normal child
15371 } else {
15372 // data = serP(point(kpar)) || ser32(index)
15373 // = serP(Kpar) || ser32(index)
15374 data = Buffer.concat([
15375 this.pubKey.toBuffer(),
15376 indexBuffer
15377 ])
15378 }
15379
15380 var I = createHmac('sha512', this.chainCode).update(data).digest()
15381 var IL = I.slice(0, 32)
15382 var IR = I.slice(32)
15383
15384 var pIL = BigInteger.fromBuffer(IL)
15385
15386 // In case parse256(IL) >= n, proceed with the next value for i
15387 if (pIL.compareTo(curve.n) >= 0) {
15388 return this.derive(index + 1)
15389 }
15390
15391 // Private parent key -> private child key
15392 var hd
15393 if (this.privKey) {
15394 // ki = parse256(IL) + kpar (mod n)
15395 var ki = pIL.add(this.privKey.d).mod(curve.n)
15396
15397 // In case ki == 0, proceed with the next value for i
15398 if (ki.signum() === 0) {
15399 return this.derive(index + 1)
15400 }
15401
15402 hd = new HDNode(ki, IR, this.network)
15403
15404 // Public parent key -> public child key
15405 } else {
15406 // Ki = point(parse256(IL)) + Kpar
15407 // = G*IL + Kpar
15408 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
15409
15410 // In case Ki is the point at infinity, proceed with the next value for i
15411 if (curve.isInfinity(Ki)) {
15412 return this.derive(index + 1)
15413 }
15414
15415 hd = new HDNode(Ki, IR, this.network)
15416 }
15417
15418 hd.depth = this.depth + 1
15419 hd.index = index
15420 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
15421
15422 return hd
15423 }
15424
15425 HDNode.prototype.deriveHardened = function (index) {
15426 // Only derives hardened private keys by default
15427 return this.derive(index + HDNode.HIGHEST_BIT)
15428 }
15429
15430 HDNode.prototype.toString = HDNode.prototype.toBase58
15431
15432 module.exports = HDNode
15433
15434 }).call(this,require("buffer").Buffer)
15435 },{"./crypto":58,"./eckey":60,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"create-hmac":45,"ecurve":49,"typeforce":53}],64:[function(require,module,exports){
15436 module.exports = {
15437 Address: require('./address'),
15438 base58check: require('./base58check'),
15439 Block: require('./block'),
15440 bufferutils: require('./bufferutils'),
15441 crypto: require('./crypto'),
15442 ecdsa: require('./ecdsa'),
15443 ECKey: require('./eckey'),
15444 ECPubKey: require('./ecpubkey'),
15445 ECSignature: require('./ecsignature'),
15446 Message: require('./message'),
15447 opcodes: require('./opcodes'),
15448 HDNode: require('./hdnode'),
15449 Script: require('./script'),
15450 scripts: require('./scripts'),
15451 Transaction: require('./transaction'),
15452 TransactionBuilder: require('./transaction_builder'),
15453 networks: require('./networks'),
15454 Wallet: require('./wallet')
15455 }
15456
15457 },{"./address":54,"./base58check":55,"./block":56,"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./eckey":60,"./ecpubkey":61,"./ecsignature":62,"./hdnode":63,"./message":65,"./networks":66,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"./transaction_builder":71,"./wallet":72}],65:[function(require,module,exports){
15458 (function (Buffer){
15459 var bufferutils = require('./bufferutils')
15460 var crypto = require('./crypto')
15461 var ecdsa = require('./ecdsa')
15462 var networks = require('./networks')
15463
15464 var BigInteger = require('bigi')
15465 var ECPubKey = require('./ecpubkey')
15466 var ECSignature = require('./ecsignature')
15467
15468 var ecurve = require('ecurve')
15469 var ecparams = ecurve.getCurveByName('secp256k1')
15470
15471 function magicHash (message, network) {
15472 var magicPrefix = new Buffer(network.magicPrefix)
15473 var messageBuffer = new Buffer(message)
15474 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
15475
15476 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
15477 return crypto.hash256(buffer)
15478 }
15479
15480 function sign (privKey, message, network) {
15481 network = network || networks.bitcoin
15482
15483 var hash = magicHash(message, network)
15484 var signature = privKey.sign(hash)
15485 var e = BigInteger.fromBuffer(hash)
15486 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
15487
15488 return signature.toCompact(i, privKey.pub.compressed)
15489 }
15490
15491 // TODO: network could be implied from address
15492 function verify (address, signature, message, network) {
15493 if (!Buffer.isBuffer(signature)) {
15494 signature = new Buffer(signature, 'base64')
15495 }
15496
15497 network = network || networks.bitcoin
15498
15499 var hash = magicHash(message, network)
15500 var parsed = ECSignature.parseCompact(signature)
15501 var e = BigInteger.fromBuffer(hash)
15502 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
15503
15504 var pubKey = new ECPubKey(Q, parsed.compressed)
15505 return pubKey.getAddress(network).toString() === address.toString()
15506 }
15507
15508 module.exports = {
15509 magicHash: magicHash,
15510 sign: sign,
15511 verify: verify
15512 }
15513
15514 }).call(this,require("buffer").Buffer)
15515 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
15516 // https://en.bitcoin.it/wiki/List_of_address_prefixes
15517 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
15518
15519 var networks = {
15520 bitcoin: {
15521 magicPrefix: '\x18Bitcoin Signed Message:\n',
15522 bip32: {
15523 public: 0x0488b21e,
15524 private: 0x0488ade4
15525 },
15526 pubKeyHash: 0x00,
15527 scriptHash: 0x05,
15528 wif: 0x80,
15529 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
15530 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
15531 estimateFee: estimateFee('bitcoin')
15532 },
15533 testnet: {
15534 magicPrefix: '\x18Bitcoin Signed Message:\n',
15535 bip32: {
15536 public: 0x043587cf,
15537 private: 0x04358394
15538 },
15539 pubKeyHash: 0x6f,
15540 scriptHash: 0xc4,
15541 wif: 0xef,
15542 dustThreshold: 546,
15543 feePerKb: 10000,
15544 estimateFee: estimateFee('testnet')
15545 },
15546 litecoin: {
15547 magicPrefix: '\x19Litecoin Signed Message:\n',
15548 bip32: {
15549 public: 0x019da462,
15550 private: 0x019d9cfe
15551 },
15552 pubKeyHash: 0x30,
15553 scriptHash: 0x05,
15554 wif: 0xb0,
15555 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
15556 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
15557 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
15558 estimateFee: estimateFee('litecoin')
15559 },
15560 dogecoin: {
15561 magicPrefix: '\x19Dogecoin Signed Message:\n',
15562 bip32: {
15563 public: 0x02facafd,
15564 private: 0x02fac398
15565 },
15566 pubKeyHash: 0x1e,
15567 scriptHash: 0x16,
15568 wif: 0x9e,
15569 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
15570 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
15571 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
15572 estimateFee: estimateFee('dogecoin')
15573 },
15574 viacoin: {
15575 magicPrefix: '\x18Viacoin Signed Message:\n',
15576 bip32: {
15577 public: 0x0488b21e,
15578 private: 0x0488ade4
15579 },
15580 pubKeyHash: 0x47,
15581 scriptHash: 0x21,
15582 wif: 0xc7,
15583 dustThreshold: 560,
15584 dustSoftThreshold: 100000,
15585 feePerKb: 100000, //
15586 estimateFee: estimateFee('viacoin')
15587 },
15588 viacointestnet: {
15589 magicPrefix: '\x18Viacoin Signed Message:\n',
15590 bip32: {
15591 public: 0x043587cf,
15592 private: 0x04358394
15593 },
15594 pubKeyHash: 0x7f,
15595 scriptHash: 0xc4,
15596 wif: 0xff,
15597 dustThreshold: 560,
15598 dustSoftThreshold: 100000,
15599 feePerKb: 100000,
15600 estimateFee: estimateFee('viacointestnet')
15601 },
15602 gamerscoin: {
15603 magicPrefix: '\x19Gamerscoin Signed Message:\n',
15604 bip32: {
15605 public: 0x019da462,
15606 private: 0x019d9cfe
15607 },
15608 pubKeyHash: 0x26,
15609 scriptHash: 0x05,
15610 wif: 0xA6,
15611 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
15612 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
15613 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
15614 estimateFee: estimateFee('gamerscoin')
15615 },
15616 jumbucks: {
15617 magicPrefix: '\x19Jumbucks Signed Message:\n',
15618 bip32: {
15619 public: 0x037a689a,
15620 private: 0x037a6460
15621 },
15622 pubKeyHash: 0x2b,
15623 scriptHash: 0x05,
15624 wif: 0xab,
15625 dustThreshold: 0,
15626 dustSoftThreshold: 10000,
15627 feePerKb: 10000,
15628 estimateFee: estimateFee('jumbucks')
15629 },
15630 zetacoin: {
15631 magicPrefix: '\x18Zetacoin Signed Message:\n',
15632 bip32: {
15633 public: 0x0488b21e,
15634 private: 0x0488ade4
15635 },
15636 pubKeyHash: 0x50,
15637 scriptHash: 0x09,
15638 wif: 0xe0,
15639 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
15640 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
15641 estimateFee: estimateFee('zetacoin')
15642 }
15643 }
15644
15645 function estimateFee (type) {
15646 return function (tx) {
15647 var network = networks[type]
15648 var baseFee = network.feePerKb
15649 var byteSize = tx.toBuffer().length
15650
15651 var fee = baseFee * Math.ceil(byteSize / 1000)
15652 if (network.dustSoftThreshold === undefined) return fee
15653
15654 tx.outs.forEach(function (e) {
15655 if (e.value < network.dustSoftThreshold) {
15656 fee += baseFee
15657 }
15658 })
15659
15660 return fee
15661 }
15662 }
15663
15664 module.exports = networks
15665
15666 },{}],67:[function(require,module,exports){
15667 module.exports = {
15668 // push value
15669 OP_FALSE: 0,
15670 OP_0: 0,
15671 OP_PUSHDATA1: 76,
15672 OP_PUSHDATA2: 77,
15673 OP_PUSHDATA4: 78,
15674 OP_1NEGATE: 79,
15675 OP_RESERVED: 80,
15676 OP_1: 81,
15677 OP_TRUE: 81,
15678 OP_2: 82,
15679 OP_3: 83,
15680 OP_4: 84,
15681 OP_5: 85,
15682 OP_6: 86,
15683 OP_7: 87,
15684 OP_8: 88,
15685 OP_9: 89,
15686 OP_10: 90,
15687 OP_11: 91,
15688 OP_12: 92,
15689 OP_13: 93,
15690 OP_14: 94,
15691 OP_15: 95,
15692 OP_16: 96,
15693
15694 // control
15695 OP_NOP: 97,
15696 OP_VER: 98,
15697 OP_IF: 99,
15698 OP_NOTIF: 100,
15699 OP_VERIF: 101,
15700 OP_VERNOTIF: 102,
15701 OP_ELSE: 103,
15702 OP_ENDIF: 104,
15703 OP_VERIFY: 105,
15704 OP_RETURN: 106,
15705
15706 // stack ops
15707 OP_TOALTSTACK: 107,
15708 OP_FROMALTSTACK: 108,
15709 OP_2DROP: 109,
15710 OP_2DUP: 110,
15711 OP_3DUP: 111,
15712 OP_2OVER: 112,
15713 OP_2ROT: 113,
15714 OP_2SWAP: 114,
15715 OP_IFDUP: 115,
15716 OP_DEPTH: 116,
15717 OP_DROP: 117,
15718 OP_DUP: 118,
15719 OP_NIP: 119,
15720 OP_OVER: 120,
15721 OP_PICK: 121,
15722 OP_ROLL: 122,
15723 OP_ROT: 123,
15724 OP_SWAP: 124,
15725 OP_TUCK: 125,
15726
15727 // splice ops
15728 OP_CAT: 126,
15729 OP_SUBSTR: 127,
15730 OP_LEFT: 128,
15731 OP_RIGHT: 129,
15732 OP_SIZE: 130,
15733
15734 // bit logic
15735 OP_INVERT: 131,
15736 OP_AND: 132,
15737 OP_OR: 133,
15738 OP_XOR: 134,
15739 OP_EQUAL: 135,
15740 OP_EQUALVERIFY: 136,
15741 OP_RESERVED1: 137,
15742 OP_RESERVED2: 138,
15743
15744 // numeric
15745 OP_1ADD: 139,
15746 OP_1SUB: 140,
15747 OP_2MUL: 141,
15748 OP_2DIV: 142,
15749 OP_NEGATE: 143,
15750 OP_ABS: 144,
15751 OP_NOT: 145,
15752 OP_0NOTEQUAL: 146,
15753
15754 OP_ADD: 147,
15755 OP_SUB: 148,
15756 OP_MUL: 149,
15757 OP_DIV: 150,
15758 OP_MOD: 151,
15759 OP_LSHIFT: 152,
15760 OP_RSHIFT: 153,
15761
15762 OP_BOOLAND: 154,
15763 OP_BOOLOR: 155,
15764 OP_NUMEQUAL: 156,
15765 OP_NUMEQUALVERIFY: 157,
15766 OP_NUMNOTEQUAL: 158,
15767 OP_LESSTHAN: 159,
15768 OP_GREATERTHAN: 160,
15769 OP_LESSTHANOREQUAL: 161,
15770 OP_GREATERTHANOREQUAL: 162,
15771 OP_MIN: 163,
15772 OP_MAX: 164,
15773
15774 OP_WITHIN: 165,
15775
15776 // crypto
15777 OP_RIPEMD160: 166,
15778 OP_SHA1: 167,
15779 OP_SHA256: 168,
15780 OP_HASH160: 169,
15781 OP_HASH256: 170,
15782 OP_CODESEPARATOR: 171,
15783 OP_CHECKSIG: 172,
15784 OP_CHECKSIGVERIFY: 173,
15785 OP_CHECKMULTISIG: 174,
15786 OP_CHECKMULTISIGVERIFY: 175,
15787
15788 // expansion
15789 OP_NOP1: 176,
15790 OP_NOP2: 177,
15791 OP_NOP3: 178,
15792 OP_NOP4: 179,
15793 OP_NOP5: 180,
15794 OP_NOP6: 181,
15795 OP_NOP7: 182,
15796 OP_NOP8: 183,
15797 OP_NOP9: 184,
15798 OP_NOP10: 185,
15799
15800 // template matching params
15801 OP_PUBKEYHASH: 253,
15802 OP_PUBKEY: 254,
15803 OP_INVALIDOPCODE: 255
15804 }
15805
15806 },{}],68:[function(require,module,exports){
15807 (function (Buffer){
15808 var assert = require('assert')
15809 var bufferutils = require('./bufferutils')
15810 var crypto = require('./crypto')
15811 var typeForce = require('typeforce')
15812 var opcodes = require('./opcodes')
15813
15814 function Script (buffer, chunks) {
15815 typeForce('Buffer', buffer)
15816 typeForce('Array', chunks)
15817
15818 this.buffer = buffer
15819 this.chunks = chunks
15820 }
15821
15822 Script.fromASM = function (asm) {
15823 var strChunks = asm.split(' ')
15824 var chunks = strChunks.map(function (strChunk) {
15825 // opcode
15826 if (strChunk in opcodes) {
15827 return opcodes[strChunk]
15828
15829 // data chunk
15830 } else {
15831 return new Buffer(strChunk, 'hex')
15832 }
15833 })
15834
15835 return Script.fromChunks(chunks)
15836 }
15837
15838 Script.fromBuffer = function (buffer) {
15839 var chunks = []
15840 var i = 0
15841
15842 while (i < buffer.length) {
15843 var opcode = buffer.readUInt8(i)
15844
15845 // data chunk
15846 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
15847 var d = bufferutils.readPushDataInt(buffer, i)
15848
15849 // did reading a pushDataInt fail? return non-chunked script
15850 if (d === null) return new Script(buffer, [])
15851 i += d.size
15852
15853 // attempt to read too much data?
15854 if (i + d.number > buffer.length) return new Script(buffer, [])
15855
15856 var data = buffer.slice(i, i + d.number)
15857 i += d.number
15858
15859 chunks.push(data)
15860
15861 // opcode
15862 } else {
15863 chunks.push(opcode)
15864
15865 i += 1
15866 }
15867 }
15868
15869 return new Script(buffer, chunks)
15870 }
15871
15872 Script.fromChunks = function (chunks) {
15873 typeForce('Array', chunks)
15874
15875 var bufferSize = chunks.reduce(function (accum, chunk) {
15876 // data chunk
15877 if (Buffer.isBuffer(chunk)) {
15878 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
15879 }
15880
15881 // opcode
15882 return accum + 1
15883 }, 0.0)
15884
15885 var buffer = new Buffer(bufferSize)
15886 var offset = 0
15887
15888 chunks.forEach(function (chunk) {
15889 // data chunk
15890 if (Buffer.isBuffer(chunk)) {
15891 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
15892
15893 chunk.copy(buffer, offset)
15894 offset += chunk.length
15895
15896 // opcode
15897 } else {
15898 buffer.writeUInt8(chunk, offset)
15899 offset += 1
15900 }
15901 })
15902
15903 assert.equal(offset, buffer.length, 'Could not decode chunks')
15904 return new Script(buffer, chunks)
15905 }
15906
15907 Script.fromHex = function (hex) {
15908 return Script.fromBuffer(new Buffer(hex, 'hex'))
15909 }
15910
15911 Script.EMPTY = Script.fromChunks([])
15912
15913 Script.prototype.getHash = function () {
15914 return crypto.hash160(this.buffer)
15915 }
15916
15917 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
15918 Script.prototype.without = function (needle) {
15919 return Script.fromChunks(this.chunks.filter(function (op) {
15920 return op !== needle
15921 }))
15922 }
15923
15924 var reverseOps = []
15925 for (var op in opcodes) {
15926 var code = opcodes[op]
15927 reverseOps[code] = op
15928 }
15929
15930 Script.prototype.toASM = function () {
15931 return this.chunks.map(function (chunk) {
15932 // data chunk
15933 if (Buffer.isBuffer(chunk)) {
15934 return chunk.toString('hex')
15935
15936 // opcode
15937 } else {
15938 return reverseOps[chunk]
15939 }
15940 }).join(' ')
15941 }
15942
15943 Script.prototype.toBuffer = function () {
15944 return this.buffer
15945 }
15946
15947 Script.prototype.toHex = function () {
15948 return this.toBuffer().toString('hex')
15949 }
15950
15951 module.exports = Script
15952
15953 }).call(this,require("buffer").Buffer)
15954 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
15955 (function (Buffer){
15956 var assert = require('assert')
15957 var ops = require('./opcodes')
15958 var typeForce = require('typeforce')
15959
15960 var ecurve = require('ecurve')
15961 var curve = ecurve.getCurveByName('secp256k1')
15962
15963 var ECSignature = require('./ecsignature')
15964 var Script = require('./script')
15965
15966 function isCanonicalPubKey (buffer) {
15967 if (!Buffer.isBuffer(buffer)) return false
15968
15969 try {
15970 ecurve.Point.decodeFrom(curve, buffer)
15971 } catch (e) {
15972 if (!(e.message.match(/Invalid sequence (length|tag)/)))
15973 throw e
15974
15975 return false
15976 }
15977
15978 return true
15979 }
15980
15981 function isCanonicalSignature (buffer) {
15982 if (!Buffer.isBuffer(buffer)) return false
15983
15984 try {
15985 ECSignature.parseScriptSignature(buffer)
15986 } catch (e) {
15987 if (!(e.message.match(/Not a DER sequence|Invalid sequence length|Expected a DER integer|R length is zero|S length is zero|R value excessively padded|S value excessively padded|R value is negative|S value is negative|Invalid hashType/))) {
15988 throw e
15989 }
15990
15991 return false
15992 }
15993
15994 return true
15995 }
15996
15997 function isPubKeyHashInput (script) {
15998 return script.chunks.length === 2 &&
15999 isCanonicalSignature(script.chunks[0]) &&
16000 isCanonicalPubKey(script.chunks[1])
16001 }
16002
16003 function isPubKeyHashOutput (script) {
16004 return script.chunks.length === 5 &&
16005 script.chunks[0] === ops.OP_DUP &&
16006 script.chunks[1] === ops.OP_HASH160 &&
16007 Buffer.isBuffer(script.chunks[2]) &&
16008 script.chunks[2].length === 20 &&
16009 script.chunks[3] === ops.OP_EQUALVERIFY &&
16010 script.chunks[4] === ops.OP_CHECKSIG
16011 }
16012
16013 function isPubKeyInput (script) {
16014 return script.chunks.length === 1 &&
16015 isCanonicalSignature(script.chunks[0])
16016 }
16017
16018 function isPubKeyOutput (script) {
16019 return script.chunks.length === 2 &&
16020 isCanonicalPubKey(script.chunks[0]) &&
16021 script.chunks[1] === ops.OP_CHECKSIG
16022 }
16023
16024 function isScriptHashInput (script, allowIncomplete) {
16025 if (script.chunks.length < 2) return false
16026
16027 var lastChunk = script.chunks[script.chunks.length - 1]
16028 if (!Buffer.isBuffer(lastChunk)) return false
16029
16030 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
16031 var redeemScript = Script.fromBuffer(lastChunk)
16032
16033 // is redeemScript a valid script?
16034 if (redeemScript.chunks.length === 0) return false
16035
16036 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
16037 }
16038
16039 function isScriptHashOutput (script) {
16040 return script.chunks.length === 3 &&
16041 script.chunks[0] === ops.OP_HASH160 &&
16042 Buffer.isBuffer(script.chunks[1]) &&
16043 script.chunks[1].length === 20 &&
16044 script.chunks[2] === ops.OP_EQUAL
16045 }
16046
16047 // allowIncomplete is to account for combining signatures
16048 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
16049 function isMultisigInput (script, allowIncomplete) {
16050 if (script.chunks.length < 2) return false
16051 if (script.chunks[0] !== ops.OP_0) return false
16052
16053 if (allowIncomplete) {
16054 return script.chunks.slice(1).every(function (chunk) {
16055 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
16056 })
16057 }
16058
16059 return script.chunks.slice(1).every(isCanonicalSignature)
16060 }
16061
16062 function isMultisigOutput (script) {
16063 if (script.chunks.length < 4) return false
16064 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
16065
16066 var mOp = script.chunks[0]
16067 if (mOp === ops.OP_0) return false
16068 if (mOp < ops.OP_1) return false
16069 if (mOp > ops.OP_16) return false
16070
16071 var nOp = script.chunks[script.chunks.length - 2]
16072 if (nOp === ops.OP_0) return false
16073 if (nOp < ops.OP_1) return false
16074 if (nOp > ops.OP_16) return false
16075
16076 var m = mOp - (ops.OP_1 - 1)
16077 var n = nOp - (ops.OP_1 - 1)
16078 if (n < m) return false
16079
16080 var pubKeys = script.chunks.slice(1, -2)
16081 if (n < pubKeys.length) return false
16082
16083 return pubKeys.every(isCanonicalPubKey)
16084 }
16085
16086 function isNullDataOutput (script) {
16087 return script.chunks[0] === ops.OP_RETURN
16088 }
16089
16090 function classifyOutput (script) {
16091 typeForce('Script', script)
16092
16093 if (isPubKeyHashOutput(script)) {
16094 return 'pubkeyhash'
16095 } else if (isScriptHashOutput(script)) {
16096 return 'scripthash'
16097 } else if (isMultisigOutput(script)) {
16098 return 'multisig'
16099 } else if (isPubKeyOutput(script)) {
16100 return 'pubkey'
16101 } else if (isNullDataOutput(script)) {
16102 return 'nulldata'
16103 }
16104
16105 return 'nonstandard'
16106 }
16107
16108 function classifyInput (script, allowIncomplete) {
16109 typeForce('Script', script)
16110
16111 if (isPubKeyHashInput(script)) {
16112 return 'pubkeyhash'
16113 } else if (isMultisigInput(script, allowIncomplete)) {
16114 return 'multisig'
16115 } else if (isScriptHashInput(script, allowIncomplete)) {
16116 return 'scripthash'
16117 } else if (isPubKeyInput(script)) {
16118 return 'pubkey'
16119 }
16120
16121 return 'nonstandard'
16122 }
16123
16124 // Standard Script Templates
16125 // {pubKey} OP_CHECKSIG
16126 function pubKeyOutput (pubKey) {
16127 return Script.fromChunks([
16128 pubKey.toBuffer(),
16129 ops.OP_CHECKSIG
16130 ])
16131 }
16132
16133 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
16134 function pubKeyHashOutput (hash) {
16135 typeForce('Buffer', hash)
16136
16137 return Script.fromChunks([
16138 ops.OP_DUP,
16139 ops.OP_HASH160,
16140 hash,
16141 ops.OP_EQUALVERIFY,
16142 ops.OP_CHECKSIG
16143 ])
16144 }
16145
16146 // OP_HASH160 {scriptHash} OP_EQUAL
16147 function scriptHashOutput (hash) {
16148 typeForce('Buffer', hash)
16149
16150 return Script.fromChunks([
16151 ops.OP_HASH160,
16152 hash,
16153 ops.OP_EQUAL
16154 ])
16155 }
16156
16157 // m [pubKeys ...] n OP_CHECKMULTISIG
16158 function multisigOutput (m, pubKeys) {
16159 typeForce(['ECPubKey'], pubKeys)
16160
16161 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
16162
16163 var pubKeyBuffers = pubKeys.map(function (pubKey) {
16164 return pubKey.toBuffer()
16165 })
16166 var n = pubKeys.length
16167
16168 return Script.fromChunks([].concat(
16169 (ops.OP_1 - 1) + m,
16170 pubKeyBuffers,
16171 (ops.OP_1 - 1) + n,
16172 ops.OP_CHECKMULTISIG
16173 ))
16174 }
16175
16176 // {signature}
16177 function pubKeyInput (signature) {
16178 typeForce('Buffer', signature)
16179
16180 return Script.fromChunks([signature])
16181 }
16182
16183 // {signature} {pubKey}
16184 function pubKeyHashInput (signature, pubKey) {
16185 typeForce('Buffer', signature)
16186
16187 return Script.fromChunks([signature, pubKey.toBuffer()])
16188 }
16189
16190 // <scriptSig> {serialized scriptPubKey script}
16191 function scriptHashInput (scriptSig, scriptPubKey) {
16192 return Script.fromChunks([].concat(
16193 scriptSig.chunks,
16194 scriptPubKey.toBuffer()
16195 ))
16196 }
16197
16198 // OP_0 [signatures ...]
16199 function multisigInput (signatures, scriptPubKey) {
16200 if (scriptPubKey) {
16201 assert(isMultisigOutput(scriptPubKey))
16202
16203 var mOp = scriptPubKey.chunks[0]
16204 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
16205 var m = mOp - (ops.OP_1 - 1)
16206 var n = nOp - (ops.OP_1 - 1)
16207
16208 assert(signatures.length >= m, 'Not enough signatures provided')
16209 assert(signatures.length <= n, 'Too many signatures provided')
16210 }
16211
16212 return Script.fromChunks([].concat(ops.OP_0, signatures))
16213 }
16214
16215 function nullDataOutput (data) {
16216 return Script.fromChunks([ops.OP_RETURN, data])
16217 }
16218
16219 module.exports = {
16220 isCanonicalPubKey: isCanonicalPubKey,
16221 isCanonicalSignature: isCanonicalSignature,
16222 isPubKeyHashInput: isPubKeyHashInput,
16223 isPubKeyHashOutput: isPubKeyHashOutput,
16224 isPubKeyInput: isPubKeyInput,
16225 isPubKeyOutput: isPubKeyOutput,
16226 isScriptHashInput: isScriptHashInput,
16227 isScriptHashOutput: isScriptHashOutput,
16228 isMultisigInput: isMultisigInput,
16229 isMultisigOutput: isMultisigOutput,
16230 isNullDataOutput: isNullDataOutput,
16231 classifyOutput: classifyOutput,
16232 classifyInput: classifyInput,
16233 pubKeyOutput: pubKeyOutput,
16234 pubKeyHashOutput: pubKeyHashOutput,
16235 scriptHashOutput: scriptHashOutput,
16236 multisigOutput: multisigOutput,
16237 pubKeyInput: pubKeyInput,
16238 pubKeyHashInput: pubKeyHashInput,
16239 scriptHashInput: scriptHashInput,
16240 multisigInput: multisigInput,
16241 dataOutput: function (data) {
16242 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
16243 return nullDataOutput(data)
16244 },
16245 nullDataOutput: nullDataOutput
16246 }
16247
16248 }).call(this,require("buffer").Buffer)
16249 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
16250 (function (Buffer){
16251 var assert = require('assert')
16252 var bufferutils = require('./bufferutils')
16253 var crypto = require('./crypto')
16254 var typeForce = require('typeforce')
16255 var opcodes = require('./opcodes')
16256 var scripts = require('./scripts')
16257
16258 var Address = require('./address')
16259 var ECSignature = require('./ecsignature')
16260 var Script = require('./script')
16261
16262 function Transaction () {
16263 this.version = 1
16264 this.locktime = 0
16265 this.ins = []
16266 this.outs = []
16267 }
16268
16269 Transaction.DEFAULT_SEQUENCE = 0xffffffff
16270 Transaction.SIGHASH_ALL = 0x01
16271 Transaction.SIGHASH_NONE = 0x02
16272 Transaction.SIGHASH_SINGLE = 0x03
16273 Transaction.SIGHASH_ANYONECANPAY = 0x80
16274
16275 Transaction.fromBuffer = function (buffer, __disableAssert) {
16276 var offset = 0
16277 function readSlice (n) {
16278 offset += n
16279 return buffer.slice(offset - n, offset)
16280 }
16281
16282 function readUInt32 () {
16283 var i = buffer.readUInt32LE(offset)
16284 offset += 4
16285 return i
16286 }
16287
16288 function readUInt64 () {
16289 var i = bufferutils.readUInt64LE(buffer, offset)
16290 offset += 8
16291 return i
16292 }
16293
16294 function readVarInt () {
16295 var vi = bufferutils.readVarInt(buffer, offset)
16296 offset += vi.size
16297 return vi.number
16298 }
16299
16300 function readScript () {
16301 return Script.fromBuffer(readSlice(readVarInt()))
16302 }
16303
16304 function readGenerationScript () {
16305 return new Script(readSlice(readVarInt()), [])
16306 }
16307
16308 var tx = new Transaction()
16309 tx.version = readUInt32()
16310
16311 var vinLen = readVarInt()
16312 for (var i = 0; i < vinLen; ++i) {
16313 var hash = readSlice(32)
16314
16315 if (Transaction.isCoinbaseHash(hash)) {
16316 tx.ins.push({
16317 hash: hash,
16318 index: readUInt32(),
16319 script: readGenerationScript(),
16320 sequence: readUInt32()
16321 })
16322 } else {
16323 tx.ins.push({
16324 hash: hash,
16325 index: readUInt32(),
16326 script: readScript(),
16327 sequence: readUInt32()
16328 })
16329 }
16330 }
16331
16332 var voutLen = readVarInt()
16333 for (i = 0; i < voutLen; ++i) {
16334 tx.outs.push({
16335 value: readUInt64(),
16336 script: readScript()
16337 })
16338 }
16339
16340 tx.locktime = readUInt32()
16341
16342 if (!__disableAssert) {
16343 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
16344 }
16345
16346 return tx
16347 }
16348
16349 Transaction.fromHex = function (hex) {
16350 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
16351 }
16352
16353 Transaction.isCoinbaseHash = function (buffer) {
16354 return Array.prototype.every.call(buffer, function (x) {
16355 return x === 0
16356 })
16357 }
16358
16359 /**
16360 * Create a new txIn.
16361 *
16362 * Can be called with any of:
16363 *
16364 * - A transaction and an index
16365 * - A transaction hash and an index
16366 *
16367 * Note that this method does not sign the created input.
16368 */
16369 Transaction.prototype.addInput = function (hash, index, sequence, script) {
16370 if (sequence === undefined || sequence === null) {
16371 sequence = Transaction.DEFAULT_SEQUENCE
16372 }
16373
16374 script = script || Script.EMPTY
16375
16376 if (typeof hash === 'string') {
16377 // TxId hex is big-endian, we need little-endian
16378 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
16379 } else if (hash instanceof Transaction) {
16380 hash = hash.getHash()
16381 }
16382
16383 typeForce('Buffer', hash)
16384 typeForce('Number', index)
16385 typeForce('Number', sequence)
16386 typeForce('Script', script)
16387
16388 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
16389
16390 // Add the input and return the input's index
16391 return (this.ins.push({
16392 hash: hash,
16393 index: index,
16394 script: script,
16395 sequence: sequence
16396 }) - 1)
16397 }
16398
16399 /**
16400 * Create a new txOut.
16401 *
16402 * Can be called with:
16403 *
16404 * - A base58 address string and a value
16405 * - An Address object and a value
16406 * - A scriptPubKey Script and a value
16407 */
16408 Transaction.prototype.addOutput = function (scriptPubKey, value) {
16409 // Attempt to get a valid address if it's a base58 address string
16410 if (typeof scriptPubKey === 'string') {
16411 scriptPubKey = Address.fromBase58Check(scriptPubKey)
16412 }
16413
16414 // Attempt to get a valid script if it's an Address object
16415 if (scriptPubKey instanceof Address) {
16416 scriptPubKey = scriptPubKey.toOutputScript()
16417 }
16418
16419 typeForce('Script', scriptPubKey)
16420 typeForce('Number', value)
16421
16422 // Add the output and return the output's index
16423 return (this.outs.push({
16424 script: scriptPubKey,
16425 value: value
16426 }) - 1)
16427 }
16428
16429 Transaction.prototype.clone = function () {
16430 var newTx = new Transaction()
16431 newTx.version = this.version
16432 newTx.locktime = this.locktime
16433
16434 newTx.ins = this.ins.map(function (txIn) {
16435 return {
16436 hash: txIn.hash,
16437 index: txIn.index,
16438 script: txIn.script,
16439 sequence: txIn.sequence
16440 }
16441 })
16442
16443 newTx.outs = this.outs.map(function (txOut) {
16444 return {
16445 script: txOut.script,
16446 value: txOut.value
16447 }
16448 })
16449
16450 return newTx
16451 }
16452
16453 /**
16454 * Hash transaction for signing a specific input.
16455 *
16456 * Bitcoin uses a different hash for each signed transaction input. This
16457 * method copies the transaction, makes the necessary changes based on the
16458 * hashType, serializes and finally hashes the result. This hash can then be
16459 * used to sign the transaction input in question.
16460 */
16461 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
16462 // FIXME: remove in 2.x.y
16463 if (arguments[0] instanceof Script) {
16464 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
16465
16466 // swap the arguments (must be stored in tmp, arguments is special)
16467 var tmp = arguments[0]
16468 inIndex = arguments[1]
16469 prevOutScript = tmp
16470 }
16471
16472 typeForce('Number', inIndex)
16473 typeForce('Script', prevOutScript)
16474 typeForce('Number', hashType)
16475
16476 assert(inIndex >= 0, 'Invalid vin index')
16477 assert(inIndex < this.ins.length, 'Invalid vin index')
16478
16479 var txTmp = this.clone()
16480 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
16481
16482 // Blank out other inputs' signatures
16483 txTmp.ins.forEach(function (txIn) {
16484 txIn.script = Script.EMPTY
16485 })
16486 txTmp.ins[inIndex].script = hashScript
16487
16488 var hashTypeModifier = hashType & 0x1f
16489
16490 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
16491 assert(false, 'SIGHASH_NONE not yet supported')
16492 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
16493 assert(false, 'SIGHASH_SINGLE not yet supported')
16494 }
16495
16496 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
16497 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
16498 }
16499
16500 var hashTypeBuffer = new Buffer(4)
16501 hashTypeBuffer.writeInt32LE(hashType, 0)
16502
16503 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
16504 return crypto.hash256(buffer)
16505 }
16506
16507 Transaction.prototype.getHash = function () {
16508 return crypto.hash256(this.toBuffer())
16509 }
16510
16511 Transaction.prototype.getId = function () {
16512 // TxHash is little-endian, we need big-endian
16513 return bufferutils.reverse(this.getHash()).toString('hex')
16514 }
16515
16516 Transaction.prototype.toBuffer = function () {
16517 function scriptSize (script) {
16518 var length = script.buffer.length
16519
16520 return bufferutils.varIntSize(length) + length
16521 }
16522
16523 var buffer = new Buffer(
16524 8 +
16525 bufferutils.varIntSize(this.ins.length) +
16526 bufferutils.varIntSize(this.outs.length) +
16527 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
16528 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
16529 )
16530
16531 var offset = 0
16532 function writeSlice (slice) {
16533 slice.copy(buffer, offset)
16534 offset += slice.length
16535 }
16536
16537 function writeUInt32 (i) {
16538 buffer.writeUInt32LE(i, offset)
16539 offset += 4
16540 }
16541
16542 function writeUInt64 (i) {
16543 bufferutils.writeUInt64LE(buffer, i, offset)
16544 offset += 8
16545 }
16546
16547 function writeVarInt (i) {
16548 var n = bufferutils.writeVarInt(buffer, i, offset)
16549 offset += n
16550 }
16551
16552 writeUInt32(this.version)
16553 writeVarInt(this.ins.length)
16554
16555 this.ins.forEach(function (txIn) {
16556 writeSlice(txIn.hash)
16557 writeUInt32(txIn.index)
16558 writeVarInt(txIn.script.buffer.length)
16559 writeSlice(txIn.script.buffer)
16560 writeUInt32(txIn.sequence)
16561 })
16562
16563 writeVarInt(this.outs.length)
16564 this.outs.forEach(function (txOut) {
16565 writeUInt64(txOut.value)
16566 writeVarInt(txOut.script.buffer.length)
16567 writeSlice(txOut.script.buffer)
16568 })
16569
16570 writeUInt32(this.locktime)
16571
16572 return buffer
16573 }
16574
16575 Transaction.prototype.toHex = function () {
16576 return this.toBuffer().toString('hex')
16577 }
16578
16579 Transaction.prototype.setInputScript = function (index, script) {
16580 typeForce('Number', index)
16581 typeForce('Script', script)
16582
16583 this.ins[index].script = script
16584 }
16585
16586 // FIXME: remove in 2.x.y
16587 Transaction.prototype.sign = function (index, privKey, hashType) {
16588 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
16589
16590 var prevOutScript = privKey.pub.getAddress().toOutputScript()
16591 var signature = this.signInput(index, prevOutScript, privKey, hashType)
16592
16593 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
16594 this.setInputScript(index, scriptSig)
16595 }
16596
16597 // FIXME: remove in 2.x.y
16598 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
16599 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
16600
16601 hashType = hashType || Transaction.SIGHASH_ALL
16602
16603 var hash = this.hashForSignature(index, prevOutScript, hashType)
16604 var signature = privKey.sign(hash)
16605
16606 return signature.toScriptSignature(hashType)
16607 }
16608
16609 // FIXME: remove in 2.x.y
16610 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
16611 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
16612
16613 var parsed = ECSignature.parseScriptSignature(buffer)
16614 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
16615
16616 return pubKey.verify(hash, parsed.signature)
16617 }
16618
16619 module.exports = Transaction
16620
16621 }).call(this,require("buffer").Buffer)
16622 },{"./address":54,"./bufferutils":57,"./crypto":58,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"assert":5,"buffer":7,"typeforce":53}],71:[function(require,module,exports){
16623 (function (Buffer){
16624 var assert = require('assert')
16625 var ops = require('./opcodes')
16626 var scripts = require('./scripts')
16627
16628 var ECPubKey = require('./ecpubkey')
16629 var ECSignature = require('./ecsignature')
16630 var Script = require('./script')
16631 var Transaction = require('./transaction')
16632
16633 function extractInput (txIn) {
16634 var redeemScript
16635 var scriptSig = txIn.script
16636 var prevOutScript
16637 var prevOutType = scripts.classifyInput(scriptSig, true)
16638 var scriptType
16639
16640 // Re-classify if scriptHash
16641 if (prevOutType === 'scripthash') {
16642 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
16643 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
16644
16645 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
16646 scriptType = scripts.classifyInput(scriptSig, true)
16647 } else {
16648 scriptType = prevOutType
16649 }
16650
16651 // Extract hashType, pubKeys and signatures
16652 var hashType, parsed, pubKeys, signatures
16653
16654 switch (scriptType) {
16655 case 'pubkeyhash': {
16656 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
16657 hashType = parsed.hashType
16658 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
16659 signatures = [parsed.signature]
16660 prevOutScript = pubKeys[0].getAddress().toOutputScript()
16661
16662 break
16663 }
16664
16665 case 'pubkey': {
16666 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
16667 hashType = parsed.hashType
16668 signatures = [parsed.signature]
16669
16670 if (redeemScript) {
16671 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
16672 }
16673
16674 break
16675 }
16676
16677 case 'multisig': {
16678 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
16679 if (chunk === ops.OP_0) return chunk
16680
16681 var parsed = ECSignature.parseScriptSignature(chunk)
16682 hashType = parsed.hashType
16683
16684 return parsed.signature
16685 })
16686
16687 if (redeemScript) {
16688 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
16689 }
16690
16691 break
16692 }
16693 }
16694
16695 return {
16696 hashType: hashType,
16697 prevOutScript: prevOutScript,
16698 prevOutType: prevOutType,
16699 pubKeys: pubKeys,
16700 redeemScript: redeemScript,
16701 scriptType: scriptType,
16702 signatures: signatures
16703 }
16704 }
16705
16706 function TransactionBuilder () {
16707 this.prevTxMap = {}
16708 this.prevOutScripts = {}
16709 this.prevOutTypes = {}
16710
16711 this.inputs = []
16712 this.tx = new Transaction()
16713 }
16714
16715 TransactionBuilder.fromTransaction = function (transaction) {
16716 var txb = new TransactionBuilder()
16717
16718 // Copy other transaction fields
16719 txb.tx.version = transaction.version
16720 txb.tx.locktime = transaction.locktime
16721
16722 // Extract/add inputs
16723 transaction.ins.forEach(function (txIn) {
16724 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
16725 })
16726
16727 // Extract/add outputs
16728 transaction.outs.forEach(function (txOut) {
16729 txb.addOutput(txOut.script, txOut.value)
16730 })
16731
16732 // Extract/add signatures
16733 txb.inputs = transaction.ins.map(function (txIn) {
16734 // TODO: remove me after testcase added
16735 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
16736
16737 // Ignore empty scripts
16738 if (txIn.script.buffer.length === 0) return {}
16739
16740 return extractInput(txIn)
16741 })
16742
16743 return txb
16744 }
16745
16746 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
16747 var prevOutHash
16748
16749 // txId
16750 if (typeof prevTx === 'string') {
16751 prevOutHash = new Buffer(prevTx, 'hex')
16752
16753 // TxId hex is big-endian, we want little-endian hash
16754 Array.prototype.reverse.call(prevOutHash)
16755
16756 // Transaction
16757 } else if (prevTx instanceof Transaction) {
16758 prevOutHash = prevTx.getHash()
16759 prevOutScript = prevTx.outs[index].script
16760
16761 // txHash
16762 } else {
16763 prevOutHash = prevTx
16764 }
16765
16766 var input = {}
16767 if (prevOutScript) {
16768 var prevOutType = scripts.classifyOutput(prevOutScript)
16769
16770 // if we can, extract pubKey information
16771 switch (prevOutType) {
16772 case 'multisig': {
16773 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
16774 break
16775 }
16776
16777 case 'pubkey': {
16778 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
16779 break
16780 }
16781 }
16782
16783 if (prevOutType !== 'scripthash') {
16784 input.scriptType = prevOutType
16785 }
16786
16787 input.prevOutScript = prevOutScript
16788 input.prevOutType = prevOutType
16789 }
16790
16791 assert(this.inputs.every(function (input2) {
16792 if (input2.hashType === undefined) return true
16793
16794 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
16795 }), 'No, this would invalidate signatures')
16796
16797 var prevOut = prevOutHash.toString('hex') + ':' + index
16798 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
16799
16800 var vin = this.tx.addInput(prevOutHash, index, sequence)
16801 this.inputs[vin] = input
16802 this.prevTxMap[prevOut] = vin
16803
16804 return vin
16805 }
16806
16807 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
16808 assert(this.inputs.every(function (input) {
16809 if (input.hashType === undefined) return true
16810
16811 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
16812 }), 'No, this would invalidate signatures')
16813
16814 return this.tx.addOutput(scriptPubKey, value)
16815 }
16816
16817 TransactionBuilder.prototype.build = function () {
16818 return this.__build(false)
16819 }
16820 TransactionBuilder.prototype.buildIncomplete = function () {
16821 return this.__build(true)
16822 }
16823
16824 var canSignTypes = {
16825 'pubkeyhash': true,
16826 'multisig': true,
16827 'pubkey': true
16828 }
16829
16830 TransactionBuilder.prototype.__build = function (allowIncomplete) {
16831 if (!allowIncomplete) {
16832 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
16833 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
16834 }
16835
16836 var tx = this.tx.clone()
16837
16838 // Create script signatures from signature meta-data
16839 this.inputs.forEach(function (input, index) {
16840 var scriptType = input.scriptType
16841 var scriptSig
16842
16843 if (!allowIncomplete) {
16844 assert(!!scriptType, 'Transaction is not complete')
16845 assert(scriptType in canSignTypes, scriptType + ' not supported')
16846 assert(input.signatures, 'Transaction is missing signatures')
16847 }
16848
16849 if (input.signatures) {
16850 switch (scriptType) {
16851 case 'pubkeyhash': {
16852 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
16853 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
16854 break
16855 }
16856
16857 case 'multisig': {
16858 // Array.prototype.map is sparse-compatible
16859 var msSignatures = input.signatures.map(function (signature) {
16860 return signature && signature.toScriptSignature(input.hashType)
16861 })
16862
16863 // fill in blanks with OP_0
16864 if (allowIncomplete) {
16865 for (var i = 0; i < msSignatures.length; ++i) {
16866 if (msSignatures[i]) continue
16867
16868 msSignatures[i] = ops.OP_0
16869 }
16870 } else {
16871 // Array.prototype.filter returns non-sparse array
16872 msSignatures = msSignatures.filter(function (x) { return x })
16873 }
16874
16875 var redeemScript = allowIncomplete ? undefined : input.redeemScript
16876 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
16877 break
16878 }
16879
16880 case 'pubkey': {
16881 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
16882 scriptSig = scripts.pubKeyInput(pkSignature)
16883 break
16884 }
16885 }
16886 }
16887
16888 // did we build a scriptSig?
16889 if (scriptSig) {
16890 // wrap as scriptHash if necessary
16891 if (input.prevOutType === 'scripthash') {
16892 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
16893 }
16894
16895 tx.setInputScript(index, scriptSig)
16896 }
16897 })
16898
16899 return tx
16900 }
16901
16902 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
16903 assert(index in this.inputs, 'No input at index: ' + index)
16904 hashType = hashType || Transaction.SIGHASH_ALL
16905
16906 var input = this.inputs[index]
16907 var canSign = input.hashType &&
16908 input.prevOutScript &&
16909 input.prevOutType &&
16910 input.pubKeys &&
16911 input.scriptType &&
16912 input.signatures
16913
16914 // are we almost ready to sign?
16915 if (canSign) {
16916 // if redeemScript was provided, enforce consistency
16917 if (redeemScript) {
16918 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
16919 }
16920
16921 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
16922
16923 // no? prepare
16924 } else {
16925 // must be pay-to-scriptHash?
16926 if (redeemScript) {
16927 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
16928 if (input.prevOutScript) {
16929 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
16930
16931 var scriptHash = input.prevOutScript.chunks[1]
16932 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
16933 }
16934
16935 var scriptType = scripts.classifyOutput(redeemScript)
16936 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
16937
16938 var pubKeys = []
16939 switch (scriptType) {
16940 case 'multisig': {
16941 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
16942 break
16943 }
16944
16945 case 'pubkeyhash': {
16946 var pkh1 = redeemScript.chunks[2]
16947 var pkh2 = privKey.pub.getAddress().hash
16948
16949 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
16950 pubKeys = [privKey.pub]
16951 break
16952 }
16953
16954 case 'pubkey': {
16955 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
16956 break
16957 }
16958 }
16959
16960 if (!input.prevOutScript) {
16961 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
16962 input.prevOutType = 'scripthash'
16963 }
16964
16965 input.pubKeys = pubKeys
16966 input.redeemScript = redeemScript
16967 input.scriptType = scriptType
16968
16969 // cannot be pay-to-scriptHash
16970 } else {
16971 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
16972
16973 // can we otherwise sign this?
16974 if (input.scriptType) {
16975 assert(input.pubKeys, input.scriptType + ' not supported')
16976
16977 // we know nothin' Jon Snow, assume pubKeyHash
16978 } else {
16979 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
16980 input.prevOutType = 'pubkeyhash'
16981 input.pubKeys = [privKey.pub]
16982 input.scriptType = input.prevOutType
16983 }
16984 }
16985
16986 input.hashType = hashType
16987 input.signatures = input.signatures || []
16988 }
16989
16990 var signatureScript = input.redeemScript || input.prevOutScript
16991 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
16992
16993 // enforce signature order matches public keys
16994 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
16995 // maintain a local copy of unmatched signatures
16996 var unmatched = input.signatures.slice()
16997
16998 input.signatures = input.pubKeys.map(function (pubKey) {
16999 var match
17000
17001 // check for any matching signatures
17002 unmatched.some(function (signature, i) {
17003 if (!pubKey.verify(signatureHash, signature)) return false
17004 match = signature
17005
17006 // remove matched signature from unmatched
17007 unmatched.splice(i, 1)
17008
17009 return true
17010 })
17011
17012 return match || undefined
17013 })
17014 }
17015
17016 // enforce in order signing of public keys
17017 assert(input.pubKeys.some(function (pubKey, i) {
17018 if (!privKey.pub.Q.equals(pubKey.Q)) return false
17019
17020 assert(!input.signatures[i], 'Signature already exists')
17021 var signature = privKey.sign(signatureHash)
17022 input.signatures[i] = signature
17023
17024 return true
17025 }, this), 'privateKey cannot sign for this input')
17026 }
17027
17028 module.exports = TransactionBuilder
17029
17030 }).call(this,require("buffer").Buffer)
17031 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
17032 (function (Buffer){
17033 var assert = require('assert')
17034 var bufferutils = require('./bufferutils')
17035 var typeForce = require('typeforce')
17036 var networks = require('./networks')
17037 var randomBytes = require('randombytes')
17038
17039 var Address = require('./address')
17040 var HDNode = require('./hdnode')
17041 var TransactionBuilder = require('./transaction_builder')
17042 var Script = require('./script')
17043
17044 function Wallet (seed, network) {
17045 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
17046
17047 seed = seed || randomBytes(32)
17048 network = network || networks.bitcoin
17049
17050 // Stored in a closure to make accidental serialization less likely
17051 var masterKey = HDNode.fromSeedBuffer(seed, network)
17052
17053 // HD first-level child derivation method should be hardened
17054 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
17055 var accountZero = masterKey.deriveHardened(0)
17056 var externalAccount = accountZero.derive(0)
17057 var internalAccount = accountZero.derive(1)
17058
17059 this.addresses = []
17060 this.changeAddresses = []
17061 this.network = network
17062 this.unspents = []
17063
17064 // FIXME: remove in 2.0.0
17065 this.unspentMap = {}
17066
17067 // FIXME: remove in 2.0.0
17068 var me = this
17069 this.newMasterKey = function (seed) {
17070 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
17071
17072 seed = seed || randomBytes(32)
17073 masterKey = HDNode.fromSeedBuffer(seed, network)
17074
17075 accountZero = masterKey.deriveHardened(0)
17076 externalAccount = accountZero.derive(0)
17077 internalAccount = accountZero.derive(1)
17078
17079 me.addresses = []
17080 me.changeAddresses = []
17081
17082 me.unspents = []
17083 me.unspentMap = {}
17084 }
17085
17086 this.getMasterKey = function () {
17087 return masterKey
17088 }
17089 this.getAccountZero = function () {
17090 return accountZero
17091 }
17092 this.getExternalAccount = function () {
17093 return externalAccount
17094 }
17095 this.getInternalAccount = function () {
17096 return internalAccount
17097 }
17098 }
17099
17100 Wallet.prototype.createTransaction = function (to, value, options) {
17101 // FIXME: remove in 2.0.0
17102 if (typeof options !== 'object') {
17103 if (options !== undefined) {
17104 console.warn('Non options object parameters are deprecated, use options object instead')
17105
17106 options = {
17107 fixedFee: arguments[2],
17108 changeAddress: arguments[3]
17109 }
17110 }
17111 }
17112
17113 options = options || {}
17114
17115 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
17116
17117 var changeAddress = options.changeAddress
17118 var fixedFee = options.fixedFee
17119 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
17120
17121 // filter by minConf, then pending and sort by descending value
17122 var unspents = this.unspents.filter(function (unspent) {
17123 return unspent.confirmations >= minConf
17124 }).filter(function (unspent) {
17125 return !unspent.pending
17126 }).sort(function (o1, o2) {
17127 return o2.value - o1.value
17128 })
17129
17130 var accum = 0
17131 var addresses = []
17132 var subTotal = value
17133
17134 var txb = new TransactionBuilder()
17135 txb.addOutput(to, value)
17136
17137 for (var i = 0; i < unspents.length; ++i) {
17138 var unspent = unspents[i]
17139 addresses.push(unspent.address)
17140
17141 txb.addInput(unspent.txHash, unspent.index)
17142
17143 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
17144
17145 accum += unspent.value
17146 subTotal = value + fee
17147
17148 if (accum >= subTotal) {
17149 var change = accum - subTotal
17150
17151 if (change > this.network.dustThreshold) {
17152 txb.addOutput(changeAddress || this.getChangeAddress(), change)
17153 }
17154
17155 break
17156 }
17157 }
17158
17159 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
17160
17161 return this.signWith(txb, addresses).build()
17162 }
17163
17164 // FIXME: remove in 2.0.0
17165 Wallet.prototype.processPendingTx = function (tx) {
17166 this.__processTx(tx, true)
17167 }
17168
17169 // FIXME: remove in 2.0.0
17170 Wallet.prototype.processConfirmedTx = function (tx) {
17171 this.__processTx(tx, false)
17172 }
17173
17174 // FIXME: remove in 2.0.0
17175 Wallet.prototype.__processTx = function (tx, isPending) {
17176 console.warn('processTransaction is considered harmful, see issue #260 for more information')
17177
17178 var txId = tx.getId()
17179 var txHash = tx.getHash()
17180
17181 tx.outs.forEach(function (txOut, i) {
17182 var address
17183
17184 try {
17185 address = Address.fromOutputScript(txOut.script, this.network).toString()
17186 } catch (e) {
17187 if (!(e.message.match(/has no matching Address/)))
17188 throw e
17189 }
17190
17191 var myAddresses = this.addresses.concat(this.changeAddresses)
17192 if (myAddresses.indexOf(address) > -1) {
17193 var lookup = txId + ':' + i
17194 if (lookup in this.unspentMap) return
17195
17196 // its unique, add it
17197 var unspent = {
17198 address: address,
17199 confirmations: 0, // no way to determine this without more information
17200 index: i,
17201 txHash: txHash,
17202 txId: txId,
17203 value: txOut.value,
17204 pending: isPending
17205 }
17206
17207 this.unspentMap[lookup] = unspent
17208 this.unspents.push(unspent)
17209 }
17210 }, this)
17211
17212 tx.ins.forEach(function (txIn) {
17213 // copy and convert to big-endian hex
17214 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
17215
17216 var lookup = txInId + ':' + txIn.index
17217 if (!(lookup in this.unspentMap)) return
17218
17219 var unspent = this.unspentMap[lookup]
17220
17221 if (isPending) {
17222 unspent.pending = true
17223 unspent.spent = true
17224 } else {
17225 delete this.unspentMap[lookup]
17226
17227 this.unspents = this.unspents.filter(function (unspent2) {
17228 return unspent !== unspent2
17229 })
17230 }
17231 }, this)
17232 }
17233
17234 Wallet.prototype.generateAddress = function () {
17235 var k = this.addresses.length
17236 var address = this.getExternalAccount().derive(k).getAddress()
17237
17238 this.addresses.push(address.toString())
17239
17240 return this.getReceiveAddress()
17241 }
17242
17243 Wallet.prototype.generateChangeAddress = function () {
17244 var k = this.changeAddresses.length
17245 var address = this.getInternalAccount().derive(k).getAddress()
17246
17247 this.changeAddresses.push(address.toString())
17248
17249 return this.getChangeAddress()
17250 }
17251
17252 Wallet.prototype.getAddress = function () {
17253 if (this.addresses.length === 0) {
17254 this.generateAddress()
17255 }
17256
17257 return this.addresses[this.addresses.length - 1]
17258 }
17259
17260 Wallet.prototype.getBalance = function (minConf) {
17261 minConf = minConf || 0
17262
17263 return this.unspents.filter(function (unspent) {
17264 return unspent.confirmations >= minConf
17265
17266 // FIXME: remove spent filter in 2.0.0
17267 }).filter(function (unspent) {
17268 return !unspent.spent
17269 }).reduce(function (accum, unspent) {
17270 return accum + unspent.value
17271 }, 0)
17272 }
17273
17274 Wallet.prototype.getChangeAddress = function () {
17275 if (this.changeAddresses.length === 0) {
17276 this.generateChangeAddress()
17277 }
17278
17279 return this.changeAddresses[this.changeAddresses.length - 1]
17280 }
17281
17282 Wallet.prototype.getInternalPrivateKey = function (index) {
17283 return this.getInternalAccount().derive(index).privKey
17284 }
17285
17286 Wallet.prototype.getPrivateKey = function (index) {
17287 return this.getExternalAccount().derive(index).privKey
17288 }
17289
17290 Wallet.prototype.getPrivateKeyForAddress = function (address) {
17291 var index
17292
17293 if ((index = this.addresses.indexOf(address)) > -1) {
17294 return this.getPrivateKey(index)
17295 }
17296
17297 if ((index = this.changeAddresses.indexOf(address)) > -1) {
17298 return this.getInternalPrivateKey(index)
17299 }
17300
17301 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
17302 }
17303
17304 Wallet.prototype.getUnspentOutputs = function (minConf) {
17305 minConf = minConf || 0
17306
17307 return this.unspents.filter(function (unspent) {
17308 return unspent.confirmations >= minConf
17309
17310 // FIXME: remove spent filter in 2.0.0
17311 }).filter(function (unspent) {
17312 return !unspent.spent
17313 }).map(function (unspent) {
17314 return {
17315 address: unspent.address,
17316 confirmations: unspent.confirmations,
17317 index: unspent.index,
17318 txId: unspent.txId,
17319 value: unspent.value,
17320
17321 // FIXME: remove in 2.0.0
17322 hash: unspent.txId,
17323 pending: unspent.pending
17324 }
17325 })
17326 }
17327
17328 Wallet.prototype.setUnspentOutputs = function (unspents) {
17329 this.unspentMap = {}
17330 this.unspents = unspents.map(function (unspent) {
17331 // FIXME: remove unspent.hash in 2.0.0
17332 var txId = unspent.txId || unspent.hash
17333 var index = unspent.index
17334
17335 // FIXME: remove in 2.0.0
17336 if (unspent.hash !== undefined) {
17337 console.warn('unspent.hash is deprecated, use unspent.txId instead')
17338 }
17339
17340 // FIXME: remove in 2.0.0
17341 if (index === undefined) {
17342 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
17343 index = unspent.outputIndex
17344 }
17345
17346 typeForce('String', txId)
17347 typeForce('Number', index)
17348 typeForce('Number', unspent.value)
17349
17350 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
17351 assert.doesNotThrow(function () {
17352 Address.fromBase58Check(unspent.address)
17353 }, 'Expected Base58 Address, got ' + unspent.address)
17354 assert(isFinite(index), 'Expected finite index, got ' + index)
17355
17356 // FIXME: remove branch in 2.0.0
17357 if (unspent.confirmations !== undefined) {
17358 typeForce('Number', unspent.confirmations)
17359 }
17360
17361 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
17362
17363 unspent = {
17364 address: unspent.address,
17365 confirmations: unspent.confirmations || 0,
17366 index: index,
17367 txHash: txHash,
17368 txId: txId,
17369 value: unspent.value,
17370
17371 // FIXME: remove in 2.0.0
17372 pending: unspent.pending || false
17373 }
17374
17375 // FIXME: remove in 2.0.0
17376 this.unspentMap[txId + ':' + index] = unspent
17377
17378 return unspent
17379 }, this)
17380 }
17381
17382 Wallet.prototype.signWith = function (tx, addresses) {
17383 addresses.forEach(function (address, i) {
17384 var privKey = this.getPrivateKeyForAddress(address)
17385
17386 tx.sign(i, privKey)
17387 }, this)
17388
17389 return tx
17390 }
17391
17392 function estimatePaddedFee (tx, network) {
17393 var tmpTx = tx.clone()
17394 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
17395
17396 return network.estimateFee(tmpTx)
17397 }
17398
17399 // FIXME: 1.0.0 shims, remove in 2.0.0
17400 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
17401 Wallet.prototype.createTx = Wallet.prototype.createTransaction
17402
17403 module.exports = Wallet
17404
17405 }).call(this,require("buffer").Buffer)
17406 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
17407 });</script>
17408 <script>bitcoin.networks.shadow = {
17409 magicPrefix: '\x19ShadowCash Signed Message:\n',
17410 bip32: {
17411 public: 0xEE80286A,
17412 private: 0xEE8031E8
17413 },
17414 pubKeyHash: 0x3f,
17415 scriptHash: 0x7d,
17416 wif: 0xbf,
17417 dustThreshold: 0,
17418 feePerKb: 1000,
17419 estimateFee: function() { return "unused in this app" },
17420 };
17421
17422 bitcoin.networks.shadowtn = {
17423 magicPrefix: '\x19ShadowCash Signed Message:\n',
17424 bip32: {
17425 public: 0x76C0FDFB,
17426 private: 0x76C1077A
17427 },
17428 pubKeyHash: 0x7f,
17429 scriptHash: 0xc4,
17430 wif: 0xff,
17431 dustThreshold: 0,
17432 feePerKb: 1000,
17433 estimateFee: function() { return "unused in this app" },
17434 };
17435
17436 bitcoin.networks.clam = {
17437 bip32: {
17438 public: 0xa8c26d64,
17439 private: 0xa8c17826
17440 },
17441 pubKeyHash: 0x89,
17442 wif: 0x85,
17443 };
17444
17445 bitcoin.networks.dash = {
17446 bip32: {
17447 public: 0x0488b21e,
17448 private: 0x0488ade4
17449 },
17450 pubKeyHash: 0x4c,
17451 scriptHash: 0x10,
17452 wif: 0xcc,
17453 };
17454
17455 bitcoin.networks.namecoin = {
17456 bip32: {
17457 public: 0x0488b21e,
17458 private: 0x0488ade4
17459 },
17460 pubKeyHash: 0x34,
17461 //scriptHash: 0x10,
17462 wif: 0x80,
17463 };
17464
17465 bitcoin.networks.peercoin = {
17466 bip32: {
17467 public: 0x0488b21e,
17468 private: 0x0488ade4
17469 },
17470 pubKeyHash: 0x37,
17471 //scriptHash: 0x10,
17472 wif: 0xb7,
17473 };
17474
17475 </script>
17476 <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){
17477 (function (global){
17478 'use strict';
17479
17480 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
17481 // original notice:
17482
17483 /*!
17484 * The buffer module from node.js, for the browser.
17485 *
17486 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
17487 * @license MIT
17488 */
17489 function compare(a, b) {
17490 if (a === b) {
17491 return 0;
17492 }
17493
17494 var x = a.length;
17495 var y = b.length;
17496
17497 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
17498 if (a[i] !== b[i]) {
17499 x = a[i];
17500 y = b[i];
17501 break;
17502 }
17503 }
17504
17505 if (x < y) {
17506 return -1;
17507 }
17508 if (y < x) {
17509 return 1;
17510 }
17511 return 0;
17512 }
17513 function isBuffer(b) {
17514 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
17515 return global.Buffer.isBuffer(b);
17516 }
17517 return !!(b != null && b._isBuffer);
17518 }
17519
17520 // based on node assert, original notice:
17521
17522 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
17523 //
17524 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
17525 //
17526 // Originally from narwhal.js (http://narwhaljs.org)
17527 // Copyright (c) 2009 Thomas Robinson <280north.com>
17528 //
17529 // Permission is hereby granted, free of charge, to any person obtaining a copy
17530 // of this software and associated documentation files (the 'Software'), to
17531 // deal in the Software without restriction, including without limitation the
17532 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
17533 // sell copies of the Software, and to permit persons to whom the Software is
17534 // furnished to do so, subject to the following conditions:
17535 //
17536 // The above copyright notice and this permission notice shall be included in
17537 // all copies or substantial portions of the Software.
17538 //
17539 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17540 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17541 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17542 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
17543 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
17544 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17545
17546 var util = require('util/');
17547 var hasOwn = Object.prototype.hasOwnProperty;
17548 var pSlice = Array.prototype.slice;
17549 var functionsHaveNames = (function () {
17550 return function foo() {}.name === 'foo';
17551 }());
17552 function pToString (obj) {
17553 return Object.prototype.toString.call(obj);
17554 }
17555 function isView(arrbuf) {
17556 if (isBuffer(arrbuf)) {
17557 return false;
17558 }
17559 if (typeof global.ArrayBuffer !== 'function') {
17560 return false;
17561 }
17562 if (typeof ArrayBuffer.isView === 'function') {
17563 return ArrayBuffer.isView(arrbuf);
17564 }
17565 if (!arrbuf) {
17566 return false;
17567 }
17568 if (arrbuf instanceof DataView) {
17569 return true;
17570 }
17571 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
17572 return true;
17573 }
17574 return false;
17575 }
17576 // 1. The assert module provides functions that throw
17577 // AssertionError's when particular conditions are not met. The
17578 // assert module must conform to the following interface.
17579
17580 var assert = module.exports = ok;
17581
17582 // 2. The AssertionError is defined in assert.
17583 // new assert.AssertionError({ message: message,
17584 // actual: actual,
17585 // expected: expected })
17586
17587 var regex = /\s*function\s+([^\(\s]*)\s*/;
17588 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
17589 function getName(func) {
17590 if (!util.isFunction(func)) {
17591 return;
17592 }
17593 if (functionsHaveNames) {
17594 return func.name;
17595 }
17596 var str = func.toString();
17597 var match = str.match(regex);
17598 return match && match[1];
17599 }
17600 assert.AssertionError = function AssertionError(options) {
17601 this.name = 'AssertionError';
17602 this.actual = options.actual;
17603 this.expected = options.expected;
17604 this.operator = options.operator;
17605 if (options.message) {
17606 this.message = options.message;
17607 this.generatedMessage = false;
17608 } else {
17609 this.message = getMessage(this);
17610 this.generatedMessage = true;
17611 }
17612 var stackStartFunction = options.stackStartFunction || fail;
17613 if (Error.captureStackTrace) {
17614 Error.captureStackTrace(this, stackStartFunction);
17615 } else {
17616 // non v8 browsers so we can have a stacktrace
17617 var err = new Error();
17618 if (err.stack) {
17619 var out = err.stack;
17620
17621 // try to strip useless frames
17622 var fn_name = getName(stackStartFunction);
17623 var idx = out.indexOf('\n' + fn_name);
17624 if (idx >= 0) {
17625 // once we have located the function frame
17626 // we need to strip out everything before it (and its line)
17627 var next_line = out.indexOf('\n', idx + 1);
17628 out = out.substring(next_line + 1);
17629 }
17630
17631 this.stack = out;
17632 }
17633 }
17634 };
17635
17636 // assert.AssertionError instanceof Error
17637 util.inherits(assert.AssertionError, Error);
17638
17639 function truncate(s, n) {
17640 if (typeof s === 'string') {
17641 return s.length < n ? s : s.slice(0, n);
17642 } else {
17643 return s;
17644 }
17645 }
17646 function inspect(something) {
17647 if (functionsHaveNames || !util.isFunction(something)) {
17648 return util.inspect(something);
17649 }
17650 var rawname = getName(something);
17651 var name = rawname ? ': ' + rawname : '';
17652 return '[Function' + name + ']';
17653 }
17654 function getMessage(self) {
17655 return truncate(inspect(self.actual), 128) + ' ' +
17656 self.operator + ' ' +
17657 truncate(inspect(self.expected), 128);
17658 }
17659
17660 // At present only the three keys mentioned above are used and
17661 // understood by the spec. Implementations or sub modules can pass
17662 // other keys to the AssertionError's constructor - they will be
17663 // ignored.
17664
17665 // 3. All of the following functions must throw an AssertionError
17666 // when a corresponding condition is not met, with a message that
17667 // may be undefined if not provided. All assertion methods provide
17668 // both the actual and expected values to the assertion error for
17669 // display purposes.
17670
17671 function fail(actual, expected, message, operator, stackStartFunction) {
17672 throw new assert.AssertionError({
17673 message: message,
17674 actual: actual,
17675 expected: expected,
17676 operator: operator,
17677 stackStartFunction: stackStartFunction
17678 });
17679 }
17680
17681 // EXTENSION! allows for well behaved errors defined elsewhere.
17682 assert.fail = fail;
17683
17684 // 4. Pure assertion tests whether a value is truthy, as determined
17685 // by !!guard.
17686 // assert.ok(guard, message_opt);
17687 // This statement is equivalent to assert.equal(true, !!guard,
17688 // message_opt);. To test strictly for the value true, use
17689 // assert.strictEqual(true, guard, message_opt);.
17690
17691 function ok(value, message) {
17692 if (!value) fail(value, true, message, '==', assert.ok);
17693 }
17694 assert.ok = ok;
17695
17696 // 5. The equality assertion tests shallow, coercive equality with
17697 // ==.
17698 // assert.equal(actual, expected, message_opt);
17699
17700 assert.equal = function equal(actual, expected, message) {
17701 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
17702 };
17703
17704 // 6. The non-equality assertion tests for whether two objects are not equal
17705 // with != assert.notEqual(actual, expected, message_opt);
17706
17707 assert.notEqual = function notEqual(actual, expected, message) {
17708 if (actual == expected) {
17709 fail(actual, expected, message, '!=', assert.notEqual);
17710 }
17711 };
17712
17713 // 7. The equivalence assertion tests a deep equality relation.
17714 // assert.deepEqual(actual, expected, message_opt);
17715
17716 assert.deepEqual = function deepEqual(actual, expected, message) {
17717 if (!_deepEqual(actual, expected, false)) {
17718 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
17719 }
17720 };
17721
17722 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
17723 if (!_deepEqual(actual, expected, true)) {
17724 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
17725 }
17726 };
17727
17728 function _deepEqual(actual, expected, strict, memos) {
17729 // 7.1. All identical values are equivalent, as determined by ===.
17730 if (actual === expected) {
17731 return true;
17732 } else if (isBuffer(actual) && isBuffer(expected)) {
17733 return compare(actual, expected) === 0;
17734
17735 // 7.2. If the expected value is a Date object, the actual value is
17736 // equivalent if it is also a Date object that refers to the same time.
17737 } else if (util.isDate(actual) && util.isDate(expected)) {
17738 return actual.getTime() === expected.getTime();
17739
17740 // 7.3 If the expected value is a RegExp object, the actual value is
17741 // equivalent if it is also a RegExp object with the same source and
17742 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
17743 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
17744 return actual.source === expected.source &&
17745 actual.global === expected.global &&
17746 actual.multiline === expected.multiline &&
17747 actual.lastIndex === expected.lastIndex &&
17748 actual.ignoreCase === expected.ignoreCase;
17749
17750 // 7.4. Other pairs that do not both pass typeof value == 'object',
17751 // equivalence is determined by ==.
17752 } else if ((actual === null || typeof actual !== 'object') &&
17753 (expected === null || typeof expected !== 'object')) {
17754 return strict ? actual === expected : actual == expected;
17755
17756 // If both values are instances of typed arrays, wrap their underlying
17757 // ArrayBuffers in a Buffer each to increase performance
17758 // This optimization requires the arrays to have the same type as checked by
17759 // Object.prototype.toString (aka pToString). Never perform binary
17760 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
17761 // bit patterns are not identical.
17762 } else if (isView(actual) && isView(expected) &&
17763 pToString(actual) === pToString(expected) &&
17764 !(actual instanceof Float32Array ||
17765 actual instanceof Float64Array)) {
17766 return compare(new Uint8Array(actual.buffer),
17767 new Uint8Array(expected.buffer)) === 0;
17768
17769 // 7.5 For all other Object pairs, including Array objects, equivalence is
17770 // determined by having the same number of owned properties (as verified
17771 // with Object.prototype.hasOwnProperty.call), the same set of keys
17772 // (although not necessarily the same order), equivalent values for every
17773 // corresponding key, and an identical 'prototype' property. Note: this
17774 // accounts for both named and indexed properties on Arrays.
17775 } else if (isBuffer(actual) !== isBuffer(expected)) {
17776 return false;
17777 } else {
17778 memos = memos || {actual: [], expected: []};
17779
17780 var actualIndex = memos.actual.indexOf(actual);
17781 if (actualIndex !== -1) {
17782 if (actualIndex === memos.expected.indexOf(expected)) {
17783 return true;
17784 }
17785 }
17786
17787 memos.actual.push(actual);
17788 memos.expected.push(expected);
17789
17790 return objEquiv(actual, expected, strict, memos);
17791 }
17792 }
17793
17794 function isArguments(object) {
17795 return Object.prototype.toString.call(object) == '[object Arguments]';
17796 }
17797
17798 function objEquiv(a, b, strict, actualVisitedObjects) {
17799 if (a === null || a === undefined || b === null || b === undefined)
17800 return false;
17801 // if one is a primitive, the other must be same
17802 if (util.isPrimitive(a) || util.isPrimitive(b))
17803 return a === b;
17804 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
17805 return false;
17806 var aIsArgs = isArguments(a);
17807 var bIsArgs = isArguments(b);
17808 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
17809 return false;
17810 if (aIsArgs) {
17811 a = pSlice.call(a);
17812 b = pSlice.call(b);
17813 return _deepEqual(a, b, strict);
17814 }
17815 var ka = objectKeys(a);
17816 var kb = objectKeys(b);
17817 var key, i;
17818 // having the same number of owned properties (keys incorporates
17819 // hasOwnProperty)
17820 if (ka.length !== kb.length)
17821 return false;
17822 //the same set of keys (although not necessarily the same order),
17823 ka.sort();
17824 kb.sort();
17825 //~~~cheap key test
17826 for (i = ka.length - 1; i >= 0; i--) {
17827 if (ka[i] !== kb[i])
17828 return false;
17829 }
17830 //equivalent values for every corresponding key, and
17831 //~~~possibly expensive deep test
17832 for (i = ka.length - 1; i >= 0; i--) {
17833 key = ka[i];
17834 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
17835 return false;
17836 }
17837 return true;
17838 }
17839
17840 // 8. The non-equivalence assertion tests for any deep inequality.
17841 // assert.notDeepEqual(actual, expected, message_opt);
17842
17843 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
17844 if (_deepEqual(actual, expected, false)) {
17845 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
17846 }
17847 };
17848
17849 assert.notDeepStrictEqual = notDeepStrictEqual;
17850 function notDeepStrictEqual(actual, expected, message) {
17851 if (_deepEqual(actual, expected, true)) {
17852 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
17853 }
17854 }
17855
17856
17857 // 9. The strict equality assertion tests strict equality, as determined by ===.
17858 // assert.strictEqual(actual, expected, message_opt);
17859
17860 assert.strictEqual = function strictEqual(actual, expected, message) {
17861 if (actual !== expected) {
17862 fail(actual, expected, message, '===', assert.strictEqual);
17863 }
17864 };
17865
17866 // 10. The strict non-equality assertion tests for strict inequality, as
17867 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
17868
17869 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
17870 if (actual === expected) {
17871 fail(actual, expected, message, '!==', assert.notStrictEqual);
17872 }
17873 };
17874
17875 function expectedException(actual, expected) {
17876 if (!actual || !expected) {
17877 return false;
17878 }
17879
17880 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
17881 return expected.test(actual);
17882 }
17883
17884 try {
17885 if (actual instanceof expected) {
17886 return true;
17887 }
17888 } catch (e) {
17889 // Ignore. The instanceof check doesn't work for arrow functions.
17890 }
17891
17892 if (Error.isPrototypeOf(expected)) {
17893 return false;
17894 }
17895
17896 return expected.call({}, actual) === true;
17897 }
17898
17899 function _tryBlock(block) {
17900 var error;
17901 try {
17902 block();
17903 } catch (e) {
17904 error = e;
17905 }
17906 return error;
17907 }
17908
17909 function _throws(shouldThrow, block, expected, message) {
17910 var actual;
17911
17912 if (typeof block !== 'function') {
17913 throw new TypeError('"block" argument must be a function');
17914 }
17915
17916 if (typeof expected === 'string') {
17917 message = expected;
17918 expected = null;
17919 }
17920
17921 actual = _tryBlock(block);
17922
17923 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
17924 (message ? ' ' + message : '.');
17925
17926 if (shouldThrow && !actual) {
17927 fail(actual, expected, 'Missing expected exception' + message);
17928 }
17929
17930 var userProvidedMessage = typeof message === 'string';
17931 var isUnwantedException = !shouldThrow && util.isError(actual);
17932 var isUnexpectedException = !shouldThrow && actual && !expected;
17933
17934 if ((isUnwantedException &&
17935 userProvidedMessage &&
17936 expectedException(actual, expected)) ||
17937 isUnexpectedException) {
17938 fail(actual, expected, 'Got unwanted exception' + message);
17939 }
17940
17941 if ((shouldThrow && actual && expected &&
17942 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
17943 throw actual;
17944 }
17945 }
17946
17947 // 11. Expected to throw an error:
17948 // assert.throws(block, Error_opt, message_opt);
17949
17950 assert.throws = function(block, /*optional*/error, /*optional*/message) {
17951 _throws(true, block, error, message);
17952 };
17953
17954 // EXTENSION! This is annoying to write outside this module.
17955 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
17956 _throws(false, block, error, message);
17957 };
17958
17959 assert.ifError = function(err) { if (err) throw err; };
17960
17961 var objectKeys = Object.keys || function (obj) {
17962 var keys = [];
17963 for (var key in obj) {
17964 if (hasOwn.call(obj, key)) keys.push(key);
17965 }
17966 return keys;
17967 };
17968
17969 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
17970 },{"util/":30}],2:[function(require,module,exports){
17971 'use strict'
17972
17973 exports.byteLength = byteLength
17974 exports.toByteArray = toByteArray
17975 exports.fromByteArray = fromByteArray
17976
17977 var lookup = []
17978 var revLookup = []
17979 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
17980
17981 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
17982 for (var i = 0, len = code.length; i < len; ++i) {
17983 lookup[i] = code[i]
17984 revLookup[code.charCodeAt(i)] = i
17985 }
17986
17987 revLookup['-'.charCodeAt(0)] = 62
17988 revLookup['_'.charCodeAt(0)] = 63
17989
17990 function placeHoldersCount (b64) {
17991 var len = b64.length
17992 if (len % 4 > 0) {
17993 throw new Error('Invalid string. Length must be a multiple of 4')
17994 }
17995
17996 // the number of equal signs (place holders)
17997 // if there are two placeholders, than the two characters before it
17998 // represent one byte
17999 // if there is only one, then the three characters before it represent 2 bytes
18000 // this is just a cheap hack to not do indexOf twice
18001 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
18002 }
18003
18004 function byteLength (b64) {
18005 // base64 is 4/3 + up to two characters of the original data
18006 return b64.length * 3 / 4 - placeHoldersCount(b64)
18007 }
18008
18009 function toByteArray (b64) {
18010 var i, j, l, tmp, placeHolders, arr
18011 var len = b64.length
18012 placeHolders = placeHoldersCount(b64)
18013
18014 arr = new Arr(len * 3 / 4 - placeHolders)
18015
18016 // if there are placeholders, only get up to the last complete 4 chars
18017 l = placeHolders > 0 ? len - 4 : len
18018
18019 var L = 0
18020
18021 for (i = 0, j = 0; i < l; i += 4, j += 3) {
18022 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
18023 arr[L++] = (tmp >> 16) & 0xFF
18024 arr[L++] = (tmp >> 8) & 0xFF
18025 arr[L++] = tmp & 0xFF
18026 }
18027
18028 if (placeHolders === 2) {
18029 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
18030 arr[L++] = tmp & 0xFF
18031 } else if (placeHolders === 1) {
18032 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
18033 arr[L++] = (tmp >> 8) & 0xFF
18034 arr[L++] = tmp & 0xFF
18035 }
18036
18037 return arr
18038 }
18039
18040 function tripletToBase64 (num) {
18041 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
18042 }
18043
18044 function encodeChunk (uint8, start, end) {
18045 var tmp
18046 var output = []
18047 for (var i = start; i < end; i += 3) {
18048 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
18049 output.push(tripletToBase64(tmp))
18050 }
18051 return output.join('')
18052 }
18053
18054 function fromByteArray (uint8) {
18055 var tmp
18056 var len = uint8.length
18057 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
18058 var output = ''
18059 var parts = []
18060 var maxChunkLength = 16383 // must be multiple of 3
18061
18062 // go through the array every three bytes, we'll deal with trailing stuff later
18063 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
18064 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
18065 }
18066
18067 // pad the end with zeros, but make sure to not forget the extra bytes
18068 if (extraBytes === 1) {
18069 tmp = uint8[len - 1]
18070 output += lookup[tmp >> 2]
18071 output += lookup[(tmp << 4) & 0x3F]
18072 output += '=='
18073 } else if (extraBytes === 2) {
18074 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
18075 output += lookup[tmp >> 10]
18076 output += lookup[(tmp >> 4) & 0x3F]
18077 output += lookup[(tmp << 2) & 0x3F]
18078 output += '='
18079 }
18080
18081 parts.push(output)
18082
18083 return parts.join('')
18084 }
18085
18086 },{}],3:[function(require,module,exports){
18087
18088 },{}],4:[function(require,module,exports){
18089 (function (global){
18090 'use strict';
18091
18092 var buffer = require('buffer');
18093 var Buffer = buffer.Buffer;
18094 var SlowBuffer = buffer.SlowBuffer;
18095 var MAX_LEN = buffer.kMaxLength || 2147483647;
18096 exports.alloc = function alloc(size, fill, encoding) {
18097 if (typeof Buffer.alloc === 'function') {
18098 return Buffer.alloc(size, fill, encoding);
18099 }
18100 if (typeof encoding === 'number') {
18101 throw new TypeError('encoding must not be number');
18102 }
18103 if (typeof size !== 'number') {
18104 throw new TypeError('size must be a number');
18105 }
18106 if (size > MAX_LEN) {
18107 throw new RangeError('size is too large');
18108 }
18109 var enc = encoding;
18110 var _fill = fill;
18111 if (_fill === undefined) {
18112 enc = undefined;
18113 _fill = 0;
18114 }
18115 var buf = new Buffer(size);
18116 if (typeof _fill === 'string') {
18117 var fillBuf = new Buffer(_fill, enc);
18118 var flen = fillBuf.length;
18119 var i = -1;
18120 while (++i < size) {
18121 buf[i] = fillBuf[i % flen];
18122 }
18123 } else {
18124 buf.fill(_fill);
18125 }
18126 return buf;
18127 }
18128 exports.allocUnsafe = function allocUnsafe(size) {
18129 if (typeof Buffer.allocUnsafe === 'function') {
18130 return Buffer.allocUnsafe(size);
18131 }
18132 if (typeof size !== 'number') {
18133 throw new TypeError('size must be a number');
18134 }
18135 if (size > MAX_LEN) {
18136 throw new RangeError('size is too large');
18137 }
18138 return new Buffer(size);
18139 }
18140 exports.from = function from(value, encodingOrOffset, length) {
18141 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
18142 return Buffer.from(value, encodingOrOffset, length);
18143 }
18144 if (typeof value === 'number') {
18145 throw new TypeError('"value" argument must not be a number');
18146 }
18147 if (typeof value === 'string') {
18148 return new Buffer(value, encodingOrOffset);
18149 }
18150 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
18151 var offset = encodingOrOffset;
18152 if (arguments.length === 1) {
18153 return new Buffer(value);
18154 }
18155 if (typeof offset === 'undefined') {
18156 offset = 0;
18157 }
18158 var len = length;
18159 if (typeof len === 'undefined') {
18160 len = value.byteLength - offset;
18161 }
18162 if (offset >= value.byteLength) {
18163 throw new RangeError('\'offset\' is out of bounds');
18164 }
18165 if (len > value.byteLength - offset) {
18166 throw new RangeError('\'length\' is out of bounds');
18167 }
18168 return new Buffer(value.slice(offset, offset + len));
18169 }
18170 if (Buffer.isBuffer(value)) {
18171 var out = new Buffer(value.length);
18172 value.copy(out, 0, 0, value.length);
18173 return out;
18174 }
18175 if (value) {
18176 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
18177 return new Buffer(value);
18178 }
18179 if (value.type === 'Buffer' && Array.isArray(value.data)) {
18180 return new Buffer(value.data);
18181 }
18182 }
18183
18184 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
18185 }
18186 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
18187 if (typeof Buffer.allocUnsafeSlow === 'function') {
18188 return Buffer.allocUnsafeSlow(size);
18189 }
18190 if (typeof size !== 'number') {
18191 throw new TypeError('size must be a number');
18192 }
18193 if (size >= MAX_LEN) {
18194 throw new RangeError('size is too large');
18195 }
18196 return new SlowBuffer(size);
18197 }
18198
18199 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
18200 },{"buffer":5}],5:[function(require,module,exports){
18201 /*!
18202 * The buffer module from node.js, for the browser.
18203 *
18204 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
18205 * @license MIT
18206 */
18207 /* eslint-disable no-proto */
18208
18209 'use strict'
18210
18211 var base64 = require('base64-js')
18212 var ieee754 = require('ieee754')
18213
18214 exports.Buffer = Buffer
18215 exports.SlowBuffer = SlowBuffer
18216 exports.INSPECT_MAX_BYTES = 50
18217
18218 var K_MAX_LENGTH = 0x7fffffff
18219 exports.kMaxLength = K_MAX_LENGTH
18220
18221 /**
18222 * If `Buffer.TYPED_ARRAY_SUPPORT`:
18223 * === true Use Uint8Array implementation (fastest)
18224 * === false Print warning and recommend using `buffer` v4.x which has an Object
18225 * implementation (most compatible, even IE6)
18226 *
18227 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
18228 * Opera 11.6+, iOS 4.2+.
18229 *
18230 * We report that the browser does not support typed arrays if the are not subclassable
18231 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
18232 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
18233 * for __proto__ and has a buggy typed array implementation.
18234 */
18235 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
18236
18237 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
18238 typeof console.error === 'function') {
18239 console.error(
18240 'This browser lacks typed array (Uint8Array) support which is required by ' +
18241 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
18242 )
18243 }
18244
18245 function typedArraySupport () {
18246 // Can typed array instances can be augmented?
18247 try {
18248 var arr = new Uint8Array(1)
18249 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
18250 return arr.foo() === 42
18251 } catch (e) {
18252 return false
18253 }
18254 }
18255
18256 function createBuffer (length) {
18257 if (length > K_MAX_LENGTH) {
18258 throw new RangeError('Invalid typed array length')
18259 }
18260 // Return an augmented `Uint8Array` instance
18261 var buf = new Uint8Array(length)
18262 buf.__proto__ = Buffer.prototype
18263 return buf
18264 }
18265
18266 /**
18267 * The Buffer constructor returns instances of `Uint8Array` that have their
18268 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
18269 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
18270 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
18271 * returns a single octet.
18272 *
18273 * The `Uint8Array` prototype remains unmodified.
18274 */
18275
18276 function Buffer (arg, encodingOrOffset, length) {
18277 // Common case.
18278 if (typeof arg === 'number') {
18279 if (typeof encodingOrOffset === 'string') {
18280 throw new Error(
18281 'If encoding is specified then the first argument must be a string'
18282 )
18283 }
18284 return allocUnsafe(arg)
18285 }
18286 return from(arg, encodingOrOffset, length)
18287 }
18288
18289 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
18290 if (typeof Symbol !== 'undefined' && Symbol.species &&
18291 Buffer[Symbol.species] === Buffer) {
18292 Object.defineProperty(Buffer, Symbol.species, {
18293 value: null,
18294 configurable: true,
18295 enumerable: false,
18296 writable: false
18297 })
18298 }
18299
18300 Buffer.poolSize = 8192 // not used by this implementation
18301
18302 function from (value, encodingOrOffset, length) {
18303 if (typeof value === 'number') {
18304 throw new TypeError('"value" argument must not be a number')
18305 }
18306
18307 if (value instanceof ArrayBuffer) {
18308 return fromArrayBuffer(value, encodingOrOffset, length)
18309 }
18310
18311 if (typeof value === 'string') {
18312 return fromString(value, encodingOrOffset)
18313 }
18314
18315 return fromObject(value)
18316 }
18317
18318 /**
18319 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
18320 * if value is a number.
18321 * Buffer.from(str[, encoding])
18322 * Buffer.from(array)
18323 * Buffer.from(buffer)
18324 * Buffer.from(arrayBuffer[, byteOffset[, length]])
18325 **/
18326 Buffer.from = function (value, encodingOrOffset, length) {
18327 return from(value, encodingOrOffset, length)
18328 }
18329
18330 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
18331 // https://github.com/feross/buffer/pull/148
18332 Buffer.prototype.__proto__ = Uint8Array.prototype
18333 Buffer.__proto__ = Uint8Array
18334
18335 function assertSize (size) {
18336 if (typeof size !== 'number') {
18337 throw new TypeError('"size" argument must be a number')
18338 } else if (size < 0) {
18339 throw new RangeError('"size" argument must not be negative')
18340 }
18341 }
18342
18343 function alloc (size, fill, encoding) {
18344 assertSize(size)
18345 if (size <= 0) {
18346 return createBuffer(size)
18347 }
18348 if (fill !== undefined) {
18349 // Only pay attention to encoding if it's a string. This
18350 // prevents accidentally sending in a number that would
18351 // be interpretted as a start offset.
18352 return typeof encoding === 'string'
18353 ? createBuffer(size).fill(fill, encoding)
18354 : createBuffer(size).fill(fill)
18355 }
18356 return createBuffer(size)
18357 }
18358
18359 /**
18360 * Creates a new filled Buffer instance.
18361 * alloc(size[, fill[, encoding]])
18362 **/
18363 Buffer.alloc = function (size, fill, encoding) {
18364 return alloc(size, fill, encoding)
18365 }
18366
18367 function allocUnsafe (size) {
18368 assertSize(size)
18369 return createBuffer(size < 0 ? 0 : checked(size) | 0)
18370 }
18371
18372 /**
18373 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
18374 * */
18375 Buffer.allocUnsafe = function (size) {
18376 return allocUnsafe(size)
18377 }
18378 /**
18379 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
18380 */
18381 Buffer.allocUnsafeSlow = function (size) {
18382 return allocUnsafe(size)
18383 }
18384
18385 function fromString (string, encoding) {
18386 if (typeof encoding !== 'string' || encoding === '') {
18387 encoding = 'utf8'
18388 }
18389
18390 if (!Buffer.isEncoding(encoding)) {
18391 throw new TypeError('"encoding" must be a valid string encoding')
18392 }
18393
18394 var length = byteLength(string, encoding) | 0
18395 var buf = createBuffer(length)
18396
18397 var actual = buf.write(string, encoding)
18398
18399 if (actual !== length) {
18400 // Writing a hex string, for example, that contains invalid characters will
18401 // cause everything after the first invalid character to be ignored. (e.g.
18402 // 'abxxcd' will be treated as 'ab')
18403 buf = buf.slice(0, actual)
18404 }
18405
18406 return buf
18407 }
18408
18409 function fromArrayLike (array) {
18410 var length = array.length < 0 ? 0 : checked(array.length) | 0
18411 var buf = createBuffer(length)
18412 for (var i = 0; i < length; i += 1) {
18413 buf[i] = array[i] & 255
18414 }
18415 return buf
18416 }
18417
18418 function fromArrayBuffer (array, byteOffset, length) {
18419 if (byteOffset < 0 || array.byteLength < byteOffset) {
18420 throw new RangeError('\'offset\' is out of bounds')
18421 }
18422
18423 if (array.byteLength < byteOffset + (length || 0)) {
18424 throw new RangeError('\'length\' is out of bounds')
18425 }
18426
18427 var buf
18428 if (byteOffset === undefined && length === undefined) {
18429 buf = new Uint8Array(array)
18430 } else if (length === undefined) {
18431 buf = new Uint8Array(array, byteOffset)
18432 } else {
18433 buf = new Uint8Array(array, byteOffset, length)
18434 }
18435
18436 // Return an augmented `Uint8Array` instance
18437 buf.__proto__ = Buffer.prototype
18438 return buf
18439 }
18440
18441 function fromObject (obj) {
18442 if (Buffer.isBuffer(obj)) {
18443 var len = checked(obj.length) | 0
18444 var buf = createBuffer(len)
18445
18446 if (buf.length === 0) {
18447 return buf
18448 }
18449
18450 obj.copy(buf, 0, 0, len)
18451 return buf
18452 }
18453
18454 if (obj) {
18455 if (ArrayBuffer.isView(obj) || 'length' in obj) {
18456 if (typeof obj.length !== 'number' || isnan(obj.length)) {
18457 return createBuffer(0)
18458 }
18459 return fromArrayLike(obj)
18460 }
18461
18462 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
18463 return fromArrayLike(obj.data)
18464 }
18465 }
18466
18467 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
18468 }
18469
18470 function checked (length) {
18471 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
18472 // length is NaN (which is otherwise coerced to zero.)
18473 if (length >= K_MAX_LENGTH) {
18474 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
18475 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
18476 }
18477 return length | 0
18478 }
18479
18480 function SlowBuffer (length) {
18481 if (+length != length) { // eslint-disable-line eqeqeq
18482 length = 0
18483 }
18484 return Buffer.alloc(+length)
18485 }
18486
18487 Buffer.isBuffer = function isBuffer (b) {
18488 return b != null && b._isBuffer === true
18489 }
18490
18491 Buffer.compare = function compare (a, b) {
18492 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
18493 throw new TypeError('Arguments must be Buffers')
18494 }
18495
18496 if (a === b) return 0
18497
18498 var x = a.length
18499 var y = b.length
18500
18501 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
18502 if (a[i] !== b[i]) {
18503 x = a[i]
18504 y = b[i]
18505 break
18506 }
18507 }
18508
18509 if (x < y) return -1
18510 if (y < x) return 1
18511 return 0
18512 }
18513
18514 Buffer.isEncoding = function isEncoding (encoding) {
18515 switch (String(encoding).toLowerCase()) {
18516 case 'hex':
18517 case 'utf8':
18518 case 'utf-8':
18519 case 'ascii':
18520 case 'latin1':
18521 case 'binary':
18522 case 'base64':
18523 case 'ucs2':
18524 case 'ucs-2':
18525 case 'utf16le':
18526 case 'utf-16le':
18527 return true
18528 default:
18529 return false
18530 }
18531 }
18532
18533 Buffer.concat = function concat (list, length) {
18534 if (!Array.isArray(list)) {
18535 throw new TypeError('"list" argument must be an Array of Buffers')
18536 }
18537
18538 if (list.length === 0) {
18539 return Buffer.alloc(0)
18540 }
18541
18542 var i
18543 if (length === undefined) {
18544 length = 0
18545 for (i = 0; i < list.length; ++i) {
18546 length += list[i].length
18547 }
18548 }
18549
18550 var buffer = Buffer.allocUnsafe(length)
18551 var pos = 0
18552 for (i = 0; i < list.length; ++i) {
18553 var buf = list[i]
18554 if (!Buffer.isBuffer(buf)) {
18555 throw new TypeError('"list" argument must be an Array of Buffers')
18556 }
18557 buf.copy(buffer, pos)
18558 pos += buf.length
18559 }
18560 return buffer
18561 }
18562
18563 function byteLength (string, encoding) {
18564 if (Buffer.isBuffer(string)) {
18565 return string.length
18566 }
18567 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
18568 return string.byteLength
18569 }
18570 if (typeof string !== 'string') {
18571 string = '' + string
18572 }
18573
18574 var len = string.length
18575 if (len === 0) return 0
18576
18577 // Use a for loop to avoid recursion
18578 var loweredCase = false
18579 for (;;) {
18580 switch (encoding) {
18581 case 'ascii':
18582 case 'latin1':
18583 case 'binary':
18584 return len
18585 case 'utf8':
18586 case 'utf-8':
18587 case undefined:
18588 return utf8ToBytes(string).length
18589 case 'ucs2':
18590 case 'ucs-2':
18591 case 'utf16le':
18592 case 'utf-16le':
18593 return len * 2
18594 case 'hex':
18595 return len >>> 1
18596 case 'base64':
18597 return base64ToBytes(string).length
18598 default:
18599 if (loweredCase) return utf8ToBytes(string).length // assume utf8
18600 encoding = ('' + encoding).toLowerCase()
18601 loweredCase = true
18602 }
18603 }
18604 }
18605 Buffer.byteLength = byteLength
18606
18607 function slowToString (encoding, start, end) {
18608 var loweredCase = false
18609
18610 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
18611 // property of a typed array.
18612
18613 // This behaves neither like String nor Uint8Array in that we set start/end
18614 // to their upper/lower bounds if the value passed is out of range.
18615 // undefined is handled specially as per ECMA-262 6th Edition,
18616 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
18617 if (start === undefined || start < 0) {
18618 start = 0
18619 }
18620 // Return early if start > this.length. Done here to prevent potential uint32
18621 // coercion fail below.
18622 if (start > this.length) {
18623 return ''
18624 }
18625
18626 if (end === undefined || end > this.length) {
18627 end = this.length
18628 }
18629
18630 if (end <= 0) {
18631 return ''
18632 }
18633
18634 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
18635 end >>>= 0
18636 start >>>= 0
18637
18638 if (end <= start) {
18639 return ''
18640 }
18641
18642 if (!encoding) encoding = 'utf8'
18643
18644 while (true) {
18645 switch (encoding) {
18646 case 'hex':
18647 return hexSlice(this, start, end)
18648
18649 case 'utf8':
18650 case 'utf-8':
18651 return utf8Slice(this, start, end)
18652
18653 case 'ascii':
18654 return asciiSlice(this, start, end)
18655
18656 case 'latin1':
18657 case 'binary':
18658 return latin1Slice(this, start, end)
18659
18660 case 'base64':
18661 return base64Slice(this, start, end)
18662
18663 case 'ucs2':
18664 case 'ucs-2':
18665 case 'utf16le':
18666 case 'utf-16le':
18667 return utf16leSlice(this, start, end)
18668
18669 default:
18670 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
18671 encoding = (encoding + '').toLowerCase()
18672 loweredCase = true
18673 }
18674 }
18675 }
18676
18677 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
18678 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
18679 // reliably in a browserify context because there could be multiple different
18680 // copies of the 'buffer' package in use. This method works even for Buffer
18681 // instances that were created from another copy of the `buffer` package.
18682 // See: https://github.com/feross/buffer/issues/154
18683 Buffer.prototype._isBuffer = true
18684
18685 function swap (b, n, m) {
18686 var i = b[n]
18687 b[n] = b[m]
18688 b[m] = i
18689 }
18690
18691 Buffer.prototype.swap16 = function swap16 () {
18692 var len = this.length
18693 if (len % 2 !== 0) {
18694 throw new RangeError('Buffer size must be a multiple of 16-bits')
18695 }
18696 for (var i = 0; i < len; i += 2) {
18697 swap(this, i, i + 1)
18698 }
18699 return this
18700 }
18701
18702 Buffer.prototype.swap32 = function swap32 () {
18703 var len = this.length
18704 if (len % 4 !== 0) {
18705 throw new RangeError('Buffer size must be a multiple of 32-bits')
18706 }
18707 for (var i = 0; i < len; i += 4) {
18708 swap(this, i, i + 3)
18709 swap(this, i + 1, i + 2)
18710 }
18711 return this
18712 }
18713
18714 Buffer.prototype.swap64 = function swap64 () {
18715 var len = this.length
18716 if (len % 8 !== 0) {
18717 throw new RangeError('Buffer size must be a multiple of 64-bits')
18718 }
18719 for (var i = 0; i < len; i += 8) {
18720 swap(this, i, i + 7)
18721 swap(this, i + 1, i + 6)
18722 swap(this, i + 2, i + 5)
18723 swap(this, i + 3, i + 4)
18724 }
18725 return this
18726 }
18727
18728 Buffer.prototype.toString = function toString () {
18729 var length = this.length
18730 if (length === 0) return ''
18731 if (arguments.length === 0) return utf8Slice(this, 0, length)
18732 return slowToString.apply(this, arguments)
18733 }
18734
18735 Buffer.prototype.equals = function equals (b) {
18736 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
18737 if (this === b) return true
18738 return Buffer.compare(this, b) === 0
18739 }
18740
18741 Buffer.prototype.inspect = function inspect () {
18742 var str = ''
18743 var max = exports.INSPECT_MAX_BYTES
18744 if (this.length > 0) {
18745 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
18746 if (this.length > max) str += ' ... '
18747 }
18748 return '<Buffer ' + str + '>'
18749 }
18750
18751 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
18752 if (!Buffer.isBuffer(target)) {
18753 throw new TypeError('Argument must be a Buffer')
18754 }
18755
18756 if (start === undefined) {
18757 start = 0
18758 }
18759 if (end === undefined) {
18760 end = target ? target.length : 0
18761 }
18762 if (thisStart === undefined) {
18763 thisStart = 0
18764 }
18765 if (thisEnd === undefined) {
18766 thisEnd = this.length
18767 }
18768
18769 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
18770 throw new RangeError('out of range index')
18771 }
18772
18773 if (thisStart >= thisEnd && start >= end) {
18774 return 0
18775 }
18776 if (thisStart >= thisEnd) {
18777 return -1
18778 }
18779 if (start >= end) {
18780 return 1
18781 }
18782
18783 start >>>= 0
18784 end >>>= 0
18785 thisStart >>>= 0
18786 thisEnd >>>= 0
18787
18788 if (this === target) return 0
18789
18790 var x = thisEnd - thisStart
18791 var y = end - start
18792 var len = Math.min(x, y)
18793
18794 var thisCopy = this.slice(thisStart, thisEnd)
18795 var targetCopy = target.slice(start, end)
18796
18797 for (var i = 0; i < len; ++i) {
18798 if (thisCopy[i] !== targetCopy[i]) {
18799 x = thisCopy[i]
18800 y = targetCopy[i]
18801 break
18802 }
18803 }
18804
18805 if (x < y) return -1
18806 if (y < x) return 1
18807 return 0
18808 }
18809
18810 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
18811 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
18812 //
18813 // Arguments:
18814 // - buffer - a Buffer to search
18815 // - val - a string, Buffer, or number
18816 // - byteOffset - an index into `buffer`; will be clamped to an int32
18817 // - encoding - an optional encoding, relevant is val is a string
18818 // - dir - true for indexOf, false for lastIndexOf
18819 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
18820 // Empty buffer means no match
18821 if (buffer.length === 0) return -1
18822
18823 // Normalize byteOffset
18824 if (typeof byteOffset === 'string') {
18825 encoding = byteOffset
18826 byteOffset = 0
18827 } else if (byteOffset > 0x7fffffff) {
18828 byteOffset = 0x7fffffff
18829 } else if (byteOffset < -0x80000000) {
18830 byteOffset = -0x80000000
18831 }
18832 byteOffset = +byteOffset // Coerce to Number.
18833 if (isNaN(byteOffset)) {
18834 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
18835 byteOffset = dir ? 0 : (buffer.length - 1)
18836 }
18837
18838 // Normalize byteOffset: negative offsets start from the end of the buffer
18839 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
18840 if (byteOffset >= buffer.length) {
18841 if (dir) return -1
18842 else byteOffset = buffer.length - 1
18843 } else if (byteOffset < 0) {
18844 if (dir) byteOffset = 0
18845 else return -1
18846 }
18847
18848 // Normalize val
18849 if (typeof val === 'string') {
18850 val = Buffer.from(val, encoding)
18851 }
18852
18853 // Finally, search either indexOf (if dir is true) or lastIndexOf
18854 if (Buffer.isBuffer(val)) {
18855 // Special case: looking for empty string/buffer always fails
18856 if (val.length === 0) {
18857 return -1
18858 }
18859 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
18860 } else if (typeof val === 'number') {
18861 val = val & 0xFF // Search for a byte value [0-255]
18862 if (typeof Uint8Array.prototype.indexOf === 'function') {
18863 if (dir) {
18864 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
18865 } else {
18866 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
18867 }
18868 }
18869 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
18870 }
18871
18872 throw new TypeError('val must be string, number or Buffer')
18873 }
18874
18875 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
18876 var indexSize = 1
18877 var arrLength = arr.length
18878 var valLength = val.length
18879
18880 if (encoding !== undefined) {
18881 encoding = String(encoding).toLowerCase()
18882 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
18883 encoding === 'utf16le' || encoding === 'utf-16le') {
18884 if (arr.length < 2 || val.length < 2) {
18885 return -1
18886 }
18887 indexSize = 2
18888 arrLength /= 2
18889 valLength /= 2
18890 byteOffset /= 2
18891 }
18892 }
18893
18894 function read (buf, i) {
18895 if (indexSize === 1) {
18896 return buf[i]
18897 } else {
18898 return buf.readUInt16BE(i * indexSize)
18899 }
18900 }
18901
18902 var i
18903 if (dir) {
18904 var foundIndex = -1
18905 for (i = byteOffset; i < arrLength; i++) {
18906 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
18907 if (foundIndex === -1) foundIndex = i
18908 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
18909 } else {
18910 if (foundIndex !== -1) i -= i - foundIndex
18911 foundIndex = -1
18912 }
18913 }
18914 } else {
18915 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
18916 for (i = byteOffset; i >= 0; i--) {
18917 var found = true
18918 for (var j = 0; j < valLength; j++) {
18919 if (read(arr, i + j) !== read(val, j)) {
18920 found = false
18921 break
18922 }
18923 }
18924 if (found) return i
18925 }
18926 }
18927
18928 return -1
18929 }
18930
18931 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
18932 return this.indexOf(val, byteOffset, encoding) !== -1
18933 }
18934
18935 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
18936 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
18937 }
18938
18939 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
18940 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
18941 }
18942
18943 function hexWrite (buf, string, offset, length) {
18944 offset = Number(offset) || 0
18945 var remaining = buf.length - offset
18946 if (!length) {
18947 length = remaining
18948 } else {
18949 length = Number(length)
18950 if (length > remaining) {
18951 length = remaining
18952 }
18953 }
18954
18955 // must be an even number of digits
18956 var strLen = string.length
18957 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
18958
18959 if (length > strLen / 2) {
18960 length = strLen / 2
18961 }
18962 for (var i = 0; i < length; ++i) {
18963 var parsed = parseInt(string.substr(i * 2, 2), 16)
18964 if (isNaN(parsed)) return i
18965 buf[offset + i] = parsed
18966 }
18967 return i
18968 }
18969
18970 function utf8Write (buf, string, offset, length) {
18971 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
18972 }
18973
18974 function asciiWrite (buf, string, offset, length) {
18975 return blitBuffer(asciiToBytes(string), buf, offset, length)
18976 }
18977
18978 function latin1Write (buf, string, offset, length) {
18979 return asciiWrite(buf, string, offset, length)
18980 }
18981
18982 function base64Write (buf, string, offset, length) {
18983 return blitBuffer(base64ToBytes(string), buf, offset, length)
18984 }
18985
18986 function ucs2Write (buf, string, offset, length) {
18987 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
18988 }
18989
18990 Buffer.prototype.write = function write (string, offset, length, encoding) {
18991 // Buffer#write(string)
18992 if (offset === undefined) {
18993 encoding = 'utf8'
18994 length = this.length
18995 offset = 0
18996 // Buffer#write(string, encoding)
18997 } else if (length === undefined && typeof offset === 'string') {
18998 encoding = offset
18999 length = this.length
19000 offset = 0
19001 // Buffer#write(string, offset[, length][, encoding])
19002 } else if (isFinite(offset)) {
19003 offset = offset >>> 0
19004 if (isFinite(length)) {
19005 length = length >>> 0
19006 if (encoding === undefined) encoding = 'utf8'
19007 } else {
19008 encoding = length
19009 length = undefined
19010 }
19011 } else {
19012 throw new Error(
19013 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
19014 )
19015 }
19016
19017 var remaining = this.length - offset
19018 if (length === undefined || length > remaining) length = remaining
19019
19020 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
19021 throw new RangeError('Attempt to write outside buffer bounds')
19022 }
19023
19024 if (!encoding) encoding = 'utf8'
19025
19026 var loweredCase = false
19027 for (;;) {
19028 switch (encoding) {
19029 case 'hex':
19030 return hexWrite(this, string, offset, length)
19031
19032 case 'utf8':
19033 case 'utf-8':
19034 return utf8Write(this, string, offset, length)
19035
19036 case 'ascii':
19037 return asciiWrite(this, string, offset, length)
19038
19039 case 'latin1':
19040 case 'binary':
19041 return latin1Write(this, string, offset, length)
19042
19043 case 'base64':
19044 // Warning: maxLength not taken into account in base64Write
19045 return base64Write(this, string, offset, length)
19046
19047 case 'ucs2':
19048 case 'ucs-2':
19049 case 'utf16le':
19050 case 'utf-16le':
19051 return ucs2Write(this, string, offset, length)
19052
19053 default:
19054 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
19055 encoding = ('' + encoding).toLowerCase()
19056 loweredCase = true
19057 }
19058 }
19059 }
19060
19061 Buffer.prototype.toJSON = function toJSON () {
19062 return {
19063 type: 'Buffer',
19064 data: Array.prototype.slice.call(this._arr || this, 0)
19065 }
19066 }
19067
19068 function base64Slice (buf, start, end) {
19069 if (start === 0 && end === buf.length) {
19070 return base64.fromByteArray(buf)
19071 } else {
19072 return base64.fromByteArray(buf.slice(start, end))
19073 }
19074 }
19075
19076 function utf8Slice (buf, start, end) {
19077 end = Math.min(buf.length, end)
19078 var res = []
19079
19080 var i = start
19081 while (i < end) {
19082 var firstByte = buf[i]
19083 var codePoint = null
19084 var bytesPerSequence = (firstByte > 0xEF) ? 4
19085 : (firstByte > 0xDF) ? 3
19086 : (firstByte > 0xBF) ? 2
19087 : 1
19088
19089 if (i + bytesPerSequence <= end) {
19090 var secondByte, thirdByte, fourthByte, tempCodePoint
19091
19092 switch (bytesPerSequence) {
19093 case 1:
19094 if (firstByte < 0x80) {
19095 codePoint = firstByte
19096 }
19097 break
19098 case 2:
19099 secondByte = buf[i + 1]
19100 if ((secondByte & 0xC0) === 0x80) {
19101 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
19102 if (tempCodePoint > 0x7F) {
19103 codePoint = tempCodePoint
19104 }
19105 }
19106 break
19107 case 3:
19108 secondByte = buf[i + 1]
19109 thirdByte = buf[i + 2]
19110 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
19111 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
19112 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
19113 codePoint = tempCodePoint
19114 }
19115 }
19116 break
19117 case 4:
19118 secondByte = buf[i + 1]
19119 thirdByte = buf[i + 2]
19120 fourthByte = buf[i + 3]
19121 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
19122 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
19123 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
19124 codePoint = tempCodePoint
19125 }
19126 }
19127 }
19128 }
19129
19130 if (codePoint === null) {
19131 // we did not generate a valid codePoint so insert a
19132 // replacement char (U+FFFD) and advance only 1 byte
19133 codePoint = 0xFFFD
19134 bytesPerSequence = 1
19135 } else if (codePoint > 0xFFFF) {
19136 // encode to utf16 (surrogate pair dance)
19137 codePoint -= 0x10000
19138 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
19139 codePoint = 0xDC00 | codePoint & 0x3FF
19140 }
19141
19142 res.push(codePoint)
19143 i += bytesPerSequence
19144 }
19145
19146 return decodeCodePointsArray(res)
19147 }
19148
19149 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
19150 // the lowest limit is Chrome, with 0x10000 args.
19151 // We go 1 magnitude less, for safety
19152 var MAX_ARGUMENTS_LENGTH = 0x1000
19153
19154 function decodeCodePointsArray (codePoints) {
19155 var len = codePoints.length
19156 if (len <= MAX_ARGUMENTS_LENGTH) {
19157 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
19158 }
19159
19160 // Decode in chunks to avoid "call stack size exceeded".
19161 var res = ''
19162 var i = 0
19163 while (i < len) {
19164 res += String.fromCharCode.apply(
19165 String,
19166 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
19167 )
19168 }
19169 return res
19170 }
19171
19172 function asciiSlice (buf, start, end) {
19173 var ret = ''
19174 end = Math.min(buf.length, end)
19175
19176 for (var i = start; i < end; ++i) {
19177 ret += String.fromCharCode(buf[i] & 0x7F)
19178 }
19179 return ret
19180 }
19181
19182 function latin1Slice (buf, start, end) {
19183 var ret = ''
19184 end = Math.min(buf.length, end)
19185
19186 for (var i = start; i < end; ++i) {
19187 ret += String.fromCharCode(buf[i])
19188 }
19189 return ret
19190 }
19191
19192 function hexSlice (buf, start, end) {
19193 var len = buf.length
19194
19195 if (!start || start < 0) start = 0
19196 if (!end || end < 0 || end > len) end = len
19197
19198 var out = ''
19199 for (var i = start; i < end; ++i) {
19200 out += toHex(buf[i])
19201 }
19202 return out
19203 }
19204
19205 function utf16leSlice (buf, start, end) {
19206 var bytes = buf.slice(start, end)
19207 var res = ''
19208 for (var i = 0; i < bytes.length; i += 2) {
19209 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
19210 }
19211 return res
19212 }
19213
19214 Buffer.prototype.slice = function slice (start, end) {
19215 var len = this.length
19216 start = ~~start
19217 end = end === undefined ? len : ~~end
19218
19219 if (start < 0) {
19220 start += len
19221 if (start < 0) start = 0
19222 } else if (start > len) {
19223 start = len
19224 }
19225
19226 if (end < 0) {
19227 end += len
19228 if (end < 0) end = 0
19229 } else if (end > len) {
19230 end = len
19231 }
19232
19233 if (end < start) end = start
19234
19235 var newBuf = this.subarray(start, end)
19236 // Return an augmented `Uint8Array` instance
19237 newBuf.__proto__ = Buffer.prototype
19238 return newBuf
19239 }
19240
19241 /*
19242 * Need to make sure that buffer isn't trying to write out of bounds.
19243 */
19244 function checkOffset (offset, ext, length) {
19245 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
19246 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
19247 }
19248
19249 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
19250 offset = offset >>> 0
19251 byteLength = byteLength >>> 0
19252 if (!noAssert) checkOffset(offset, byteLength, this.length)
19253
19254 var val = this[offset]
19255 var mul = 1
19256 var i = 0
19257 while (++i < byteLength && (mul *= 0x100)) {
19258 val += this[offset + i] * mul
19259 }
19260
19261 return val
19262 }
19263
19264 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
19265 offset = offset >>> 0
19266 byteLength = byteLength >>> 0
19267 if (!noAssert) {
19268 checkOffset(offset, byteLength, this.length)
19269 }
19270
19271 var val = this[offset + --byteLength]
19272 var mul = 1
19273 while (byteLength > 0 && (mul *= 0x100)) {
19274 val += this[offset + --byteLength] * mul
19275 }
19276
19277 return val
19278 }
19279
19280 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
19281 offset = offset >>> 0
19282 if (!noAssert) checkOffset(offset, 1, this.length)
19283 return this[offset]
19284 }
19285
19286 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
19287 offset = offset >>> 0
19288 if (!noAssert) checkOffset(offset, 2, this.length)
19289 return this[offset] | (this[offset + 1] << 8)
19290 }
19291
19292 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
19293 offset = offset >>> 0
19294 if (!noAssert) checkOffset(offset, 2, this.length)
19295 return (this[offset] << 8) | this[offset + 1]
19296 }
19297
19298 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
19299 offset = offset >>> 0
19300 if (!noAssert) checkOffset(offset, 4, this.length)
19301
19302 return ((this[offset]) |
19303 (this[offset + 1] << 8) |
19304 (this[offset + 2] << 16)) +
19305 (this[offset + 3] * 0x1000000)
19306 }
19307
19308 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
19309 offset = offset >>> 0
19310 if (!noAssert) checkOffset(offset, 4, this.length)
19311
19312 return (this[offset] * 0x1000000) +
19313 ((this[offset + 1] << 16) |
19314 (this[offset + 2] << 8) |
19315 this[offset + 3])
19316 }
19317
19318 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
19319 offset = offset >>> 0
19320 byteLength = byteLength >>> 0
19321 if (!noAssert) checkOffset(offset, byteLength, this.length)
19322
19323 var val = this[offset]
19324 var mul = 1
19325 var i = 0
19326 while (++i < byteLength && (mul *= 0x100)) {
19327 val += this[offset + i] * mul
19328 }
19329 mul *= 0x80
19330
19331 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
19332
19333 return val
19334 }
19335
19336 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
19337 offset = offset >>> 0
19338 byteLength = byteLength >>> 0
19339 if (!noAssert) checkOffset(offset, byteLength, this.length)
19340
19341 var i = byteLength
19342 var mul = 1
19343 var val = this[offset + --i]
19344 while (i > 0 && (mul *= 0x100)) {
19345 val += this[offset + --i] * mul
19346 }
19347 mul *= 0x80
19348
19349 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
19350
19351 return val
19352 }
19353
19354 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
19355 offset = offset >>> 0
19356 if (!noAssert) checkOffset(offset, 1, this.length)
19357 if (!(this[offset] & 0x80)) return (this[offset])
19358 return ((0xff - this[offset] + 1) * -1)
19359 }
19360
19361 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
19362 offset = offset >>> 0
19363 if (!noAssert) checkOffset(offset, 2, this.length)
19364 var val = this[offset] | (this[offset + 1] << 8)
19365 return (val & 0x8000) ? val | 0xFFFF0000 : val
19366 }
19367
19368 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
19369 offset = offset >>> 0
19370 if (!noAssert) checkOffset(offset, 2, this.length)
19371 var val = this[offset + 1] | (this[offset] << 8)
19372 return (val & 0x8000) ? val | 0xFFFF0000 : val
19373 }
19374
19375 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
19376 offset = offset >>> 0
19377 if (!noAssert) checkOffset(offset, 4, this.length)
19378
19379 return (this[offset]) |
19380 (this[offset + 1] << 8) |
19381 (this[offset + 2] << 16) |
19382 (this[offset + 3] << 24)
19383 }
19384
19385 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
19386 offset = offset >>> 0
19387 if (!noAssert) checkOffset(offset, 4, this.length)
19388
19389 return (this[offset] << 24) |
19390 (this[offset + 1] << 16) |
19391 (this[offset + 2] << 8) |
19392 (this[offset + 3])
19393 }
19394
19395 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
19396 offset = offset >>> 0
19397 if (!noAssert) checkOffset(offset, 4, this.length)
19398 return ieee754.read(this, offset, true, 23, 4)
19399 }
19400
19401 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
19402 offset = offset >>> 0
19403 if (!noAssert) checkOffset(offset, 4, this.length)
19404 return ieee754.read(this, offset, false, 23, 4)
19405 }
19406
19407 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
19408 offset = offset >>> 0
19409 if (!noAssert) checkOffset(offset, 8, this.length)
19410 return ieee754.read(this, offset, true, 52, 8)
19411 }
19412
19413 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
19414 offset = offset >>> 0
19415 if (!noAssert) checkOffset(offset, 8, this.length)
19416 return ieee754.read(this, offset, false, 52, 8)
19417 }
19418
19419 function checkInt (buf, value, offset, ext, max, min) {
19420 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
19421 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
19422 if (offset + ext > buf.length) throw new RangeError('Index out of range')
19423 }
19424
19425 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
19426 value = +value
19427 offset = offset >>> 0
19428 byteLength = byteLength >>> 0
19429 if (!noAssert) {
19430 var maxBytes = Math.pow(2, 8 * byteLength) - 1
19431 checkInt(this, value, offset, byteLength, maxBytes, 0)
19432 }
19433
19434 var mul = 1
19435 var i = 0
19436 this[offset] = value & 0xFF
19437 while (++i < byteLength && (mul *= 0x100)) {
19438 this[offset + i] = (value / mul) & 0xFF
19439 }
19440
19441 return offset + byteLength
19442 }
19443
19444 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
19445 value = +value
19446 offset = offset >>> 0
19447 byteLength = byteLength >>> 0
19448 if (!noAssert) {
19449 var maxBytes = Math.pow(2, 8 * byteLength) - 1
19450 checkInt(this, value, offset, byteLength, maxBytes, 0)
19451 }
19452
19453 var i = byteLength - 1
19454 var mul = 1
19455 this[offset + i] = value & 0xFF
19456 while (--i >= 0 && (mul *= 0x100)) {
19457 this[offset + i] = (value / mul) & 0xFF
19458 }
19459
19460 return offset + byteLength
19461 }
19462
19463 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
19464 value = +value
19465 offset = offset >>> 0
19466 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
19467 this[offset] = (value & 0xff)
19468 return offset + 1
19469 }
19470
19471 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
19472 value = +value
19473 offset = offset >>> 0
19474 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
19475 this[offset] = (value & 0xff)
19476 this[offset + 1] = (value >>> 8)
19477 return offset + 2
19478 }
19479
19480 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
19481 value = +value
19482 offset = offset >>> 0
19483 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
19484 this[offset] = (value >>> 8)
19485 this[offset + 1] = (value & 0xff)
19486 return offset + 2
19487 }
19488
19489 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
19490 value = +value
19491 offset = offset >>> 0
19492 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
19493 this[offset + 3] = (value >>> 24)
19494 this[offset + 2] = (value >>> 16)
19495 this[offset + 1] = (value >>> 8)
19496 this[offset] = (value & 0xff)
19497 return offset + 4
19498 }
19499
19500 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
19501 value = +value
19502 offset = offset >>> 0
19503 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
19504 this[offset] = (value >>> 24)
19505 this[offset + 1] = (value >>> 16)
19506 this[offset + 2] = (value >>> 8)
19507 this[offset + 3] = (value & 0xff)
19508 return offset + 4
19509 }
19510
19511 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
19512 value = +value
19513 offset = offset >>> 0
19514 if (!noAssert) {
19515 var limit = Math.pow(2, (8 * byteLength) - 1)
19516
19517 checkInt(this, value, offset, byteLength, limit - 1, -limit)
19518 }
19519
19520 var i = 0
19521 var mul = 1
19522 var sub = 0
19523 this[offset] = value & 0xFF
19524 while (++i < byteLength && (mul *= 0x100)) {
19525 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
19526 sub = 1
19527 }
19528 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
19529 }
19530
19531 return offset + byteLength
19532 }
19533
19534 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
19535 value = +value
19536 offset = offset >>> 0
19537 if (!noAssert) {
19538 var limit = Math.pow(2, (8 * byteLength) - 1)
19539
19540 checkInt(this, value, offset, byteLength, limit - 1, -limit)
19541 }
19542
19543 var i = byteLength - 1
19544 var mul = 1
19545 var sub = 0
19546 this[offset + i] = value & 0xFF
19547 while (--i >= 0 && (mul *= 0x100)) {
19548 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
19549 sub = 1
19550 }
19551 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
19552 }
19553
19554 return offset + byteLength
19555 }
19556
19557 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
19558 value = +value
19559 offset = offset >>> 0
19560 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
19561 if (value < 0) value = 0xff + value + 1
19562 this[offset] = (value & 0xff)
19563 return offset + 1
19564 }
19565
19566 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
19567 value = +value
19568 offset = offset >>> 0
19569 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
19570 this[offset] = (value & 0xff)
19571 this[offset + 1] = (value >>> 8)
19572 return offset + 2
19573 }
19574
19575 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
19576 value = +value
19577 offset = offset >>> 0
19578 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
19579 this[offset] = (value >>> 8)
19580 this[offset + 1] = (value & 0xff)
19581 return offset + 2
19582 }
19583
19584 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
19585 value = +value
19586 offset = offset >>> 0
19587 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
19588 this[offset] = (value & 0xff)
19589 this[offset + 1] = (value >>> 8)
19590 this[offset + 2] = (value >>> 16)
19591 this[offset + 3] = (value >>> 24)
19592 return offset + 4
19593 }
19594
19595 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
19596 value = +value
19597 offset = offset >>> 0
19598 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
19599 if (value < 0) value = 0xffffffff + value + 1
19600 this[offset] = (value >>> 24)
19601 this[offset + 1] = (value >>> 16)
19602 this[offset + 2] = (value >>> 8)
19603 this[offset + 3] = (value & 0xff)
19604 return offset + 4
19605 }
19606
19607 function checkIEEE754 (buf, value, offset, ext, max, min) {
19608 if (offset + ext > buf.length) throw new RangeError('Index out of range')
19609 if (offset < 0) throw new RangeError('Index out of range')
19610 }
19611
19612 function writeFloat (buf, value, offset, littleEndian, noAssert) {
19613 value = +value
19614 offset = offset >>> 0
19615 if (!noAssert) {
19616 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
19617 }
19618 ieee754.write(buf, value, offset, littleEndian, 23, 4)
19619 return offset + 4
19620 }
19621
19622 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
19623 return writeFloat(this, value, offset, true, noAssert)
19624 }
19625
19626 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
19627 return writeFloat(this, value, offset, false, noAssert)
19628 }
19629
19630 function writeDouble (buf, value, offset, littleEndian, noAssert) {
19631 value = +value
19632 offset = offset >>> 0
19633 if (!noAssert) {
19634 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
19635 }
19636 ieee754.write(buf, value, offset, littleEndian, 52, 8)
19637 return offset + 8
19638 }
19639
19640 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
19641 return writeDouble(this, value, offset, true, noAssert)
19642 }
19643
19644 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
19645 return writeDouble(this, value, offset, false, noAssert)
19646 }
19647
19648 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
19649 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
19650 if (!start) start = 0
19651 if (!end && end !== 0) end = this.length
19652 if (targetStart >= target.length) targetStart = target.length
19653 if (!targetStart) targetStart = 0
19654 if (end > 0 && end < start) end = start
19655
19656 // Copy 0 bytes; we're done
19657 if (end === start) return 0
19658 if (target.length === 0 || this.length === 0) return 0
19659
19660 // Fatal error conditions
19661 if (targetStart < 0) {
19662 throw new RangeError('targetStart out of bounds')
19663 }
19664 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
19665 if (end < 0) throw new RangeError('sourceEnd out of bounds')
19666
19667 // Are we oob?
19668 if (end > this.length) end = this.length
19669 if (target.length - targetStart < end - start) {
19670 end = target.length - targetStart + start
19671 }
19672
19673 var len = end - start
19674 var i
19675
19676 if (this === target && start < targetStart && targetStart < end) {
19677 // descending copy from end
19678 for (i = len - 1; i >= 0; --i) {
19679 target[i + targetStart] = this[i + start]
19680 }
19681 } else if (len < 1000) {
19682 // ascending copy from start
19683 for (i = 0; i < len; ++i) {
19684 target[i + targetStart] = this[i + start]
19685 }
19686 } else {
19687 Uint8Array.prototype.set.call(
19688 target,
19689 this.subarray(start, start + len),
19690 targetStart
19691 )
19692 }
19693
19694 return len
19695 }
19696
19697 // Usage:
19698 // buffer.fill(number[, offset[, end]])
19699 // buffer.fill(buffer[, offset[, end]])
19700 // buffer.fill(string[, offset[, end]][, encoding])
19701 Buffer.prototype.fill = function fill (val, start, end, encoding) {
19702 // Handle string cases:
19703 if (typeof val === 'string') {
19704 if (typeof start === 'string') {
19705 encoding = start
19706 start = 0
19707 end = this.length
19708 } else if (typeof end === 'string') {
19709 encoding = end
19710 end = this.length
19711 }
19712 if (val.length === 1) {
19713 var code = val.charCodeAt(0)
19714 if (code < 256) {
19715 val = code
19716 }
19717 }
19718 if (encoding !== undefined && typeof encoding !== 'string') {
19719 throw new TypeError('encoding must be a string')
19720 }
19721 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
19722 throw new TypeError('Unknown encoding: ' + encoding)
19723 }
19724 } else if (typeof val === 'number') {
19725 val = val & 255
19726 }
19727
19728 // Invalid ranges are not set to a default, so can range check early.
19729 if (start < 0 || this.length < start || this.length < end) {
19730 throw new RangeError('Out of range index')
19731 }
19732
19733 if (end <= start) {
19734 return this
19735 }
19736
19737 start = start >>> 0
19738 end = end === undefined ? this.length : end >>> 0
19739
19740 if (!val) val = 0
19741
19742 var i
19743 if (typeof val === 'number') {
19744 for (i = start; i < end; ++i) {
19745 this[i] = val
19746 }
19747 } else {
19748 var bytes = Buffer.isBuffer(val)
19749 ? val
19750 : new Buffer(val, encoding)
19751 var len = bytes.length
19752 for (i = 0; i < end - start; ++i) {
19753 this[i + start] = bytes[i % len]
19754 }
19755 }
19756
19757 return this
19758 }
19759
19760 // HELPER FUNCTIONS
19761 // ================
19762
19763 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
19764
19765 function base64clean (str) {
19766 // Node strips out invalid characters like \n and \t from the string, base64-js does not
19767 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
19768 // Node converts strings with length < 2 to ''
19769 if (str.length < 2) return ''
19770 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
19771 while (str.length % 4 !== 0) {
19772 str = str + '='
19773 }
19774 return str
19775 }
19776
19777 function stringtrim (str) {
19778 if (str.trim) return str.trim()
19779 return str.replace(/^\s+|\s+$/g, '')
19780 }
19781
19782 function toHex (n) {
19783 if (n < 16) return '0' + n.toString(16)
19784 return n.toString(16)
19785 }
19786
19787 function utf8ToBytes (string, units) {
19788 units = units || Infinity
19789 var codePoint
19790 var length = string.length
19791 var leadSurrogate = null
19792 var bytes = []
19793
19794 for (var i = 0; i < length; ++i) {
19795 codePoint = string.charCodeAt(i)
19796
19797 // is surrogate component
19798 if (codePoint > 0xD7FF && codePoint < 0xE000) {
19799 // last char was a lead
19800 if (!leadSurrogate) {
19801 // no lead yet
19802 if (codePoint > 0xDBFF) {
19803 // unexpected trail
19804 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19805 continue
19806 } else if (i + 1 === length) {
19807 // unpaired lead
19808 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19809 continue
19810 }
19811
19812 // valid lead
19813 leadSurrogate = codePoint
19814
19815 continue
19816 }
19817
19818 // 2 leads in a row
19819 if (codePoint < 0xDC00) {
19820 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19821 leadSurrogate = codePoint
19822 continue
19823 }
19824
19825 // valid surrogate pair
19826 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
19827 } else if (leadSurrogate) {
19828 // valid bmp char, but last char was a lead
19829 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19830 }
19831
19832 leadSurrogate = null
19833
19834 // encode utf8
19835 if (codePoint < 0x80) {
19836 if ((units -= 1) < 0) break
19837 bytes.push(codePoint)
19838 } else if (codePoint < 0x800) {
19839 if ((units -= 2) < 0) break
19840 bytes.push(
19841 codePoint >> 0x6 | 0xC0,
19842 codePoint & 0x3F | 0x80
19843 )
19844 } else if (codePoint < 0x10000) {
19845 if ((units -= 3) < 0) break
19846 bytes.push(
19847 codePoint >> 0xC | 0xE0,
19848 codePoint >> 0x6 & 0x3F | 0x80,
19849 codePoint & 0x3F | 0x80
19850 )
19851 } else if (codePoint < 0x110000) {
19852 if ((units -= 4) < 0) break
19853 bytes.push(
19854 codePoint >> 0x12 | 0xF0,
19855 codePoint >> 0xC & 0x3F | 0x80,
19856 codePoint >> 0x6 & 0x3F | 0x80,
19857 codePoint & 0x3F | 0x80
19858 )
19859 } else {
19860 throw new Error('Invalid code point')
19861 }
19862 }
19863
19864 return bytes
19865 }
19866
19867 function asciiToBytes (str) {
19868 var byteArray = []
19869 for (var i = 0; i < str.length; ++i) {
19870 // Node's code seems to be doing this and not & 0x7F..
19871 byteArray.push(str.charCodeAt(i) & 0xFF)
19872 }
19873 return byteArray
19874 }
19875
19876 function utf16leToBytes (str, units) {
19877 var c, hi, lo
19878 var byteArray = []
19879 for (var i = 0; i < str.length; ++i) {
19880 if ((units -= 2) < 0) break
19881
19882 c = str.charCodeAt(i)
19883 hi = c >> 8
19884 lo = c % 256
19885 byteArray.push(lo)
19886 byteArray.push(hi)
19887 }
19888
19889 return byteArray
19890 }
19891
19892 function base64ToBytes (str) {
19893 return base64.toByteArray(base64clean(str))
19894 }
19895
19896 function blitBuffer (src, dst, offset, length) {
19897 for (var i = 0; i < length; ++i) {
19898 if ((i + offset >= dst.length) || (i >= src.length)) break
19899 dst[i + offset] = src[i]
19900 }
19901 return i
19902 }
19903
19904 function isnan (val) {
19905 return val !== val // eslint-disable-line no-self-compare
19906 }
19907
19908 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
19909 (function (Buffer){
19910 // Copyright Joyent, Inc. and other Node contributors.
19911 //
19912 // Permission is hereby granted, free of charge, to any person obtaining a
19913 // copy of this software and associated documentation files (the
19914 // "Software"), to deal in the Software without restriction, including
19915 // without limitation the rights to use, copy, modify, merge, publish,
19916 // distribute, sublicense, and/or sell copies of the Software, and to permit
19917 // persons to whom the Software is furnished to do so, subject to the
19918 // following conditions:
19919 //
19920 // The above copyright notice and this permission notice shall be included
19921 // in all copies or substantial portions of the Software.
19922 //
19923 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19924 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19925 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
19926 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
19927 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19928 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
19929 // USE OR OTHER DEALINGS IN THE SOFTWARE.
19930
19931 // NOTE: These type checking functions intentionally don't use `instanceof`
19932 // because it is fragile and can be easily faked with `Object.create()`.
19933
19934 function isArray(arg) {
19935 if (Array.isArray) {
19936 return Array.isArray(arg);
19937 }
19938 return objectToString(arg) === '[object Array]';
19939 }
19940 exports.isArray = isArray;
19941
19942 function isBoolean(arg) {
19943 return typeof arg === 'boolean';
19944 }
19945 exports.isBoolean = isBoolean;
19946
19947 function isNull(arg) {
19948 return arg === null;
19949 }
19950 exports.isNull = isNull;
19951
19952 function isNullOrUndefined(arg) {
19953 return arg == null;
19954 }
19955 exports.isNullOrUndefined = isNullOrUndefined;
19956
19957 function isNumber(arg) {
19958 return typeof arg === 'number';
19959 }
19960 exports.isNumber = isNumber;
19961
19962 function isString(arg) {
19963 return typeof arg === 'string';
19964 }
19965 exports.isString = isString;
19966
19967 function isSymbol(arg) {
19968 return typeof arg === 'symbol';
19969 }
19970 exports.isSymbol = isSymbol;
19971
19972 function isUndefined(arg) {
19973 return arg === void 0;
19974 }
19975 exports.isUndefined = isUndefined;
19976
19977 function isRegExp(re) {
19978 return objectToString(re) === '[object RegExp]';
19979 }
19980 exports.isRegExp = isRegExp;
19981
19982 function isObject(arg) {
19983 return typeof arg === 'object' && arg !== null;
19984 }
19985 exports.isObject = isObject;
19986
19987 function isDate(d) {
19988 return objectToString(d) === '[object Date]';
19989 }
19990 exports.isDate = isDate;
19991
19992 function isError(e) {
19993 return (objectToString(e) === '[object Error]' || e instanceof Error);
19994 }
19995 exports.isError = isError;
19996
19997 function isFunction(arg) {
19998 return typeof arg === 'function';
19999 }
20000 exports.isFunction = isFunction;
20001
20002 function isPrimitive(arg) {
20003 return arg === null ||
20004 typeof arg === 'boolean' ||
20005 typeof arg === 'number' ||
20006 typeof arg === 'string' ||
20007 typeof arg === 'symbol' || // ES6 symbol
20008 typeof arg === 'undefined';
20009 }
20010 exports.isPrimitive = isPrimitive;
20011
20012 exports.isBuffer = Buffer.isBuffer;
20013
20014 function objectToString(o) {
20015 return Object.prototype.toString.call(o);
20016 }
20017
20018 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
20019 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
20020 // Copyright Joyent, Inc. and other Node contributors.
20021 //
20022 // Permission is hereby granted, free of charge, to any person obtaining a
20023 // copy of this software and associated documentation files (the
20024 // "Software"), to deal in the Software without restriction, including
20025 // without limitation the rights to use, copy, modify, merge, publish,
20026 // distribute, sublicense, and/or sell copies of the Software, and to permit
20027 // persons to whom the Software is furnished to do so, subject to the
20028 // following conditions:
20029 //
20030 // The above copyright notice and this permission notice shall be included
20031 // in all copies or substantial portions of the Software.
20032 //
20033 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20034 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20035 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
20036 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20037 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20038 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20039 // USE OR OTHER DEALINGS IN THE SOFTWARE.
20040
20041 function EventEmitter() {
20042 this._events = this._events || {};
20043 this._maxListeners = this._maxListeners || undefined;
20044 }
20045 module.exports = EventEmitter;
20046
20047 // Backwards-compat with node 0.10.x
20048 EventEmitter.EventEmitter = EventEmitter;
20049
20050 EventEmitter.prototype._events = undefined;
20051 EventEmitter.prototype._maxListeners = undefined;
20052
20053 // By default EventEmitters will print a warning if more than 10 listeners are
20054 // added to it. This is a useful default which helps finding memory leaks.
20055 EventEmitter.defaultMaxListeners = 10;
20056
20057 // Obviously not all Emitters should be limited to 10. This function allows
20058 // that to be increased. Set to zero for unlimited.
20059 EventEmitter.prototype.setMaxListeners = function(n) {
20060 if (!isNumber(n) || n < 0 || isNaN(n))
20061 throw TypeError('n must be a positive number');
20062 this._maxListeners = n;
20063 return this;
20064 };
20065
20066 EventEmitter.prototype.emit = function(type) {
20067 var er, handler, len, args, i, listeners;
20068
20069 if (!this._events)
20070 this._events = {};
20071
20072 // If there is no 'error' event listener then throw.
20073 if (type === 'error') {
20074 if (!this._events.error ||
20075 (isObject(this._events.error) && !this._events.error.length)) {
20076 er = arguments[1];
20077 if (er instanceof Error) {
20078 throw er; // Unhandled 'error' event
20079 } else {
20080 // At least give some kind of context to the user
20081 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
20082 err.context = er;
20083 throw err;
20084 }
20085 }
20086 }
20087
20088 handler = this._events[type];
20089
20090 if (isUndefined(handler))
20091 return false;
20092
20093 if (isFunction(handler)) {
20094 switch (arguments.length) {
20095 // fast cases
20096 case 1:
20097 handler.call(this);
20098 break;
20099 case 2:
20100 handler.call(this, arguments[1]);
20101 break;
20102 case 3:
20103 handler.call(this, arguments[1], arguments[2]);
20104 break;
20105 // slower
20106 default:
20107 args = Array.prototype.slice.call(arguments, 1);
20108 handler.apply(this, args);
20109 }
20110 } else if (isObject(handler)) {
20111 args = Array.prototype.slice.call(arguments, 1);
20112 listeners = handler.slice();
20113 len = listeners.length;
20114 for (i = 0; i < len; i++)
20115 listeners[i].apply(this, args);
20116 }
20117
20118 return true;
20119 };
20120
20121 EventEmitter.prototype.addListener = function(type, listener) {
20122 var m;
20123
20124 if (!isFunction(listener))
20125 throw TypeError('listener must be a function');
20126
20127 if (!this._events)
20128 this._events = {};
20129
20130 // To avoid recursion in the case that type === "newListener"! Before
20131 // adding it to the listeners, first emit "newListener".
20132 if (this._events.newListener)
20133 this.emit('newListener', type,
20134 isFunction(listener.listener) ?
20135 listener.listener : listener);
20136
20137 if (!this._events[type])
20138 // Optimize the case of one listener. Don't need the extra array object.
20139 this._events[type] = listener;
20140 else if (isObject(this._events[type]))
20141 // If we've already got an array, just append.
20142 this._events[type].push(listener);
20143 else
20144 // Adding the second element, need to change to array.
20145 this._events[type] = [this._events[type], listener];
20146
20147 // Check for listener leak
20148 if (isObject(this._events[type]) && !this._events[type].warned) {
20149 if (!isUndefined(this._maxListeners)) {
20150 m = this._maxListeners;
20151 } else {
20152 m = EventEmitter.defaultMaxListeners;
20153 }
20154
20155 if (m && m > 0 && this._events[type].length > m) {
20156 this._events[type].warned = true;
20157 console.error('(node) warning: possible EventEmitter memory ' +
20158 'leak detected. %d listeners added. ' +
20159 'Use emitter.setMaxListeners() to increase limit.',
20160 this._events[type].length);
20161 if (typeof console.trace === 'function') {
20162 // not supported in IE 10
20163 console.trace();
20164 }
20165 }
20166 }
20167
20168 return this;
20169 };
20170
20171 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
20172
20173 EventEmitter.prototype.once = function(type, listener) {
20174 if (!isFunction(listener))
20175 throw TypeError('listener must be a function');
20176
20177 var fired = false;
20178
20179 function g() {
20180 this.removeListener(type, g);
20181
20182 if (!fired) {
20183 fired = true;
20184 listener.apply(this, arguments);
20185 }
20186 }
20187
20188 g.listener = listener;
20189 this.on(type, g);
20190
20191 return this;
20192 };
20193
20194 // emits a 'removeListener' event iff the listener was removed
20195 EventEmitter.prototype.removeListener = function(type, listener) {
20196 var list, position, length, i;
20197
20198 if (!isFunction(listener))
20199 throw TypeError('listener must be a function');
20200
20201 if (!this._events || !this._events[type])
20202 return this;
20203
20204 list = this._events[type];
20205 length = list.length;
20206 position = -1;
20207
20208 if (list === listener ||
20209 (isFunction(list.listener) && list.listener === listener)) {
20210 delete this._events[type];
20211 if (this._events.removeListener)
20212 this.emit('removeListener', type, listener);
20213
20214 } else if (isObject(list)) {
20215 for (i = length; i-- > 0;) {
20216 if (list[i] === listener ||
20217 (list[i].listener && list[i].listener === listener)) {
20218 position = i;
20219 break;
20220 }
20221 }
20222
20223 if (position < 0)
20224 return this;
20225
20226 if (list.length === 1) {
20227 list.length = 0;
20228 delete this._events[type];
20229 } else {
20230 list.splice(position, 1);
20231 }
20232
20233 if (this._events.removeListener)
20234 this.emit('removeListener', type, listener);
20235 }
20236
20237 return this;
20238 };
20239
20240 EventEmitter.prototype.removeAllListeners = function(type) {
20241 var key, listeners;
20242
20243 if (!this._events)
20244 return this;
20245
20246 // not listening for removeListener, no need to emit
20247 if (!this._events.removeListener) {
20248 if (arguments.length === 0)
20249 this._events = {};
20250 else if (this._events[type])
20251 delete this._events[type];
20252 return this;
20253 }
20254
20255 // emit removeListener for all listeners on all events
20256 if (arguments.length === 0) {
20257 for (key in this._events) {
20258 if (key === 'removeListener') continue;
20259 this.removeAllListeners(key);
20260 }
20261 this.removeAllListeners('removeListener');
20262 this._events = {};
20263 return this;
20264 }
20265
20266 listeners = this._events[type];
20267
20268 if (isFunction(listeners)) {
20269 this.removeListener(type, listeners);
20270 } else if (listeners) {
20271 // LIFO order
20272 while (listeners.length)
20273 this.removeListener(type, listeners[listeners.length - 1]);
20274 }
20275 delete this._events[type];
20276
20277 return this;
20278 };
20279
20280 EventEmitter.prototype.listeners = function(type) {
20281 var ret;
20282 if (!this._events || !this._events[type])
20283 ret = [];
20284 else if (isFunction(this._events[type]))
20285 ret = [this._events[type]];
20286 else
20287 ret = this._events[type].slice();
20288 return ret;
20289 };
20290
20291 EventEmitter.prototype.listenerCount = function(type) {
20292 if (this._events) {
20293 var evlistener = this._events[type];
20294
20295 if (isFunction(evlistener))
20296 return 1;
20297 else if (evlistener)
20298 return evlistener.length;
20299 }
20300 return 0;
20301 };
20302
20303 EventEmitter.listenerCount = function(emitter, type) {
20304 return emitter.listenerCount(type);
20305 };
20306
20307 function isFunction(arg) {
20308 return typeof arg === 'function';
20309 }
20310
20311 function isNumber(arg) {
20312 return typeof arg === 'number';
20313 }
20314
20315 function isObject(arg) {
20316 return typeof arg === 'object' && arg !== null;
20317 }
20318
20319 function isUndefined(arg) {
20320 return arg === void 0;
20321 }
20322
20323 },{}],8:[function(require,module,exports){
20324 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
20325 var e, m
20326 var eLen = nBytes * 8 - mLen - 1
20327 var eMax = (1 << eLen) - 1
20328 var eBias = eMax >> 1
20329 var nBits = -7
20330 var i = isLE ? (nBytes - 1) : 0
20331 var d = isLE ? -1 : 1
20332 var s = buffer[offset + i]
20333
20334 i += d
20335
20336 e = s & ((1 << (-nBits)) - 1)
20337 s >>= (-nBits)
20338 nBits += eLen
20339 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
20340
20341 m = e & ((1 << (-nBits)) - 1)
20342 e >>= (-nBits)
20343 nBits += mLen
20344 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
20345
20346 if (e === 0) {
20347 e = 1 - eBias
20348 } else if (e === eMax) {
20349 return m ? NaN : ((s ? -1 : 1) * Infinity)
20350 } else {
20351 m = m + Math.pow(2, mLen)
20352 e = e - eBias
20353 }
20354 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
20355 }
20356
20357 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
20358 var e, m, c
20359 var eLen = nBytes * 8 - mLen - 1
20360 var eMax = (1 << eLen) - 1
20361 var eBias = eMax >> 1
20362 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
20363 var i = isLE ? 0 : (nBytes - 1)
20364 var d = isLE ? 1 : -1
20365 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
20366
20367 value = Math.abs(value)
20368
20369 if (isNaN(value) || value === Infinity) {
20370 m = isNaN(value) ? 1 : 0
20371 e = eMax
20372 } else {
20373 e = Math.floor(Math.log(value) / Math.LN2)
20374 if (value * (c = Math.pow(2, -e)) < 1) {
20375 e--
20376 c *= 2
20377 }
20378 if (e + eBias >= 1) {
20379 value += rt / c
20380 } else {
20381 value += rt * Math.pow(2, 1 - eBias)
20382 }
20383 if (value * c >= 2) {
20384 e++
20385 c /= 2
20386 }
20387
20388 if (e + eBias >= eMax) {
20389 m = 0
20390 e = eMax
20391 } else if (e + eBias >= 1) {
20392 m = (value * c - 1) * Math.pow(2, mLen)
20393 e = e + eBias
20394 } else {
20395 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
20396 e = 0
20397 }
20398 }
20399
20400 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
20401
20402 e = (e << mLen) | m
20403 eLen += mLen
20404 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
20405
20406 buffer[offset + i - d] |= s * 128
20407 }
20408
20409 },{}],9:[function(require,module,exports){
20410 if (typeof Object.create === 'function') {
20411 // implementation from standard node.js 'util' module
20412 module.exports = function inherits(ctor, superCtor) {
20413 ctor.super_ = superCtor
20414 ctor.prototype = Object.create(superCtor.prototype, {
20415 constructor: {
20416 value: ctor,
20417 enumerable: false,
20418 writable: true,
20419 configurable: true
20420 }
20421 });
20422 };
20423 } else {
20424 // old school shim for old browsers
20425 module.exports = function inherits(ctor, superCtor) {
20426 ctor.super_ = superCtor
20427 var TempCtor = function () {}
20428 TempCtor.prototype = superCtor.prototype
20429 ctor.prototype = new TempCtor()
20430 ctor.prototype.constructor = ctor
20431 }
20432 }
20433
20434 },{}],10:[function(require,module,exports){
20435 /*!
20436 * Determine if an object is a Buffer
20437 *
20438 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
20439 * @license MIT
20440 */
20441
20442 // The _isBuffer check is for Safari 5-7 support, because it's missing
20443 // Object.prototype.constructor. Remove this eventually
20444 module.exports = function (obj) {
20445 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
20446 }
20447
20448 function isBuffer (obj) {
20449 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
20450 }
20451
20452 // For Node v0.10 support. Remove this eventually.
20453 function isSlowBuffer (obj) {
20454 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
20455 }
20456
20457 },{}],11:[function(require,module,exports){
20458 var toString = {}.toString;
20459
20460 module.exports = Array.isArray || function (arr) {
20461 return toString.call(arr) == '[object Array]';
20462 };
20463
20464 },{}],12:[function(require,module,exports){
20465 (function (process){
20466 'use strict';
20467
20468 if (!process.version ||
20469 process.version.indexOf('v0.') === 0 ||
20470 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
20471 module.exports = nextTick;
20472 } else {
20473 module.exports = process.nextTick;
20474 }
20475
20476 function nextTick(fn, arg1, arg2, arg3) {
20477 if (typeof fn !== 'function') {
20478 throw new TypeError('"callback" argument must be a function');
20479 }
20480 var len = arguments.length;
20481 var args, i;
20482 switch (len) {
20483 case 0:
20484 case 1:
20485 return process.nextTick(fn);
20486 case 2:
20487 return process.nextTick(function afterTickOne() {
20488 fn.call(null, arg1);
20489 });
20490 case 3:
20491 return process.nextTick(function afterTickTwo() {
20492 fn.call(null, arg1, arg2);
20493 });
20494 case 4:
20495 return process.nextTick(function afterTickThree() {
20496 fn.call(null, arg1, arg2, arg3);
20497 });
20498 default:
20499 args = new Array(len - 1);
20500 i = 0;
20501 while (i < args.length) {
20502 args[i++] = arguments[i];
20503 }
20504 return process.nextTick(function afterTick() {
20505 fn.apply(null, args);
20506 });
20507 }
20508 }
20509
20510 }).call(this,require('_process'))
20511 },{"_process":13}],13:[function(require,module,exports){
20512 // shim for using process in browser
20513 var process = module.exports = {};
20514
20515 // cached from whatever global is present so that test runners that stub it
20516 // don't break things. But we need to wrap it in a try catch in case it is
20517 // wrapped in strict mode code which doesn't define any globals. It's inside a
20518 // function because try/catches deoptimize in certain engines.
20519
20520 var cachedSetTimeout;
20521 var cachedClearTimeout;
20522
20523 function defaultSetTimout() {
20524 throw new Error('setTimeout has not been defined');
20525 }
20526 function defaultClearTimeout () {
20527 throw new Error('clearTimeout has not been defined');
20528 }
20529 (function () {
20530 try {
20531 if (typeof setTimeout === 'function') {
20532 cachedSetTimeout = setTimeout;
20533 } else {
20534 cachedSetTimeout = defaultSetTimout;
20535 }
20536 } catch (e) {
20537 cachedSetTimeout = defaultSetTimout;
20538 }
20539 try {
20540 if (typeof clearTimeout === 'function') {
20541 cachedClearTimeout = clearTimeout;
20542 } else {
20543 cachedClearTimeout = defaultClearTimeout;
20544 }
20545 } catch (e) {
20546 cachedClearTimeout = defaultClearTimeout;
20547 }
20548 } ())
20549 function runTimeout(fun) {
20550 if (cachedSetTimeout === setTimeout) {
20551 //normal enviroments in sane situations
20552 return setTimeout(fun, 0);
20553 }
20554 // if setTimeout wasn't available but was latter defined
20555 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
20556 cachedSetTimeout = setTimeout;
20557 return setTimeout(fun, 0);
20558 }
20559 try {
20560 // when when somebody has screwed with setTimeout but no I.E. maddness
20561 return cachedSetTimeout(fun, 0);
20562 } catch(e){
20563 try {
20564 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
20565 return cachedSetTimeout.call(null, fun, 0);
20566 } catch(e){
20567 // 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
20568 return cachedSetTimeout.call(this, fun, 0);
20569 }
20570 }
20571
20572
20573 }
20574 function runClearTimeout(marker) {
20575 if (cachedClearTimeout === clearTimeout) {
20576 //normal enviroments in sane situations
20577 return clearTimeout(marker);
20578 }
20579 // if clearTimeout wasn't available but was latter defined
20580 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
20581 cachedClearTimeout = clearTimeout;
20582 return clearTimeout(marker);
20583 }
20584 try {
20585 // when when somebody has screwed with setTimeout but no I.E. maddness
20586 return cachedClearTimeout(marker);
20587 } catch (e){
20588 try {
20589 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
20590 return cachedClearTimeout.call(null, marker);
20591 } catch (e){
20592 // 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.
20593 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
20594 return cachedClearTimeout.call(this, marker);
20595 }
20596 }
20597
20598
20599
20600 }
20601 var queue = [];
20602 var draining = false;
20603 var currentQueue;
20604 var queueIndex = -1;
20605
20606 function cleanUpNextTick() {
20607 if (!draining || !currentQueue) {
20608 return;
20609 }
20610 draining = false;
20611 if (currentQueue.length) {
20612 queue = currentQueue.concat(queue);
20613 } else {
20614 queueIndex = -1;
20615 }
20616 if (queue.length) {
20617 drainQueue();
20618 }
20619 }
20620
20621 function drainQueue() {
20622 if (draining) {
20623 return;
20624 }
20625 var timeout = runTimeout(cleanUpNextTick);
20626 draining = true;
20627
20628 var len = queue.length;
20629 while(len) {
20630 currentQueue = queue;
20631 queue = [];
20632 while (++queueIndex < len) {
20633 if (currentQueue) {
20634 currentQueue[queueIndex].run();
20635 }
20636 }
20637 queueIndex = -1;
20638 len = queue.length;
20639 }
20640 currentQueue = null;
20641 draining = false;
20642 runClearTimeout(timeout);
20643 }
20644
20645 process.nextTick = function (fun) {
20646 var args = new Array(arguments.length - 1);
20647 if (arguments.length > 1) {
20648 for (var i = 1; i < arguments.length; i++) {
20649 args[i - 1] = arguments[i];
20650 }
20651 }
20652 queue.push(new Item(fun, args));
20653 if (queue.length === 1 && !draining) {
20654 runTimeout(drainQueue);
20655 }
20656 };
20657
20658 // v8 likes predictible objects
20659 function Item(fun, array) {
20660 this.fun = fun;
20661 this.array = array;
20662 }
20663 Item.prototype.run = function () {
20664 this.fun.apply(null, this.array);
20665 };
20666 process.title = 'browser';
20667 process.browser = true;
20668 process.env = {};
20669 process.argv = [];
20670 process.version = ''; // empty string to avoid regexp issues
20671 process.versions = {};
20672
20673 function noop() {}
20674
20675 process.on = noop;
20676 process.addListener = noop;
20677 process.once = noop;
20678 process.off = noop;
20679 process.removeListener = noop;
20680 process.removeAllListeners = noop;
20681 process.emit = noop;
20682
20683 process.binding = function (name) {
20684 throw new Error('process.binding is not supported');
20685 };
20686
20687 process.cwd = function () { return '/' };
20688 process.chdir = function (dir) {
20689 throw new Error('process.chdir is not supported');
20690 };
20691 process.umask = function() { return 0; };
20692
20693 },{}],14:[function(require,module,exports){
20694 module.exports = require("./lib/_stream_duplex.js")
20695
20696 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
20697 // a duplex stream is just a stream that is both readable and writable.
20698 // Since JS doesn't have multiple prototypal inheritance, this class
20699 // prototypally inherits from Readable, and then parasitically from
20700 // Writable.
20701
20702 'use strict';
20703
20704 /*<replacement>*/
20705
20706 var objectKeys = Object.keys || function (obj) {
20707 var keys = [];
20708 for (var key in obj) {
20709 keys.push(key);
20710 }return keys;
20711 };
20712 /*</replacement>*/
20713
20714 module.exports = Duplex;
20715
20716 /*<replacement>*/
20717 var processNextTick = require('process-nextick-args');
20718 /*</replacement>*/
20719
20720 /*<replacement>*/
20721 var util = require('core-util-is');
20722 util.inherits = require('inherits');
20723 /*</replacement>*/
20724
20725 var Readable = require('./_stream_readable');
20726 var Writable = require('./_stream_writable');
20727
20728 util.inherits(Duplex, Readable);
20729
20730 var keys = objectKeys(Writable.prototype);
20731 for (var v = 0; v < keys.length; v++) {
20732 var method = keys[v];
20733 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
20734 }
20735
20736 function Duplex(options) {
20737 if (!(this instanceof Duplex)) return new Duplex(options);
20738
20739 Readable.call(this, options);
20740 Writable.call(this, options);
20741
20742 if (options && options.readable === false) this.readable = false;
20743
20744 if (options && options.writable === false) this.writable = false;
20745
20746 this.allowHalfOpen = true;
20747 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
20748
20749 this.once('end', onend);
20750 }
20751
20752 // the no-half-open enforcer
20753 function onend() {
20754 // if we allow half-open state, or if the writable side ended,
20755 // then we're ok.
20756 if (this.allowHalfOpen || this._writableState.ended) return;
20757
20758 // no more data can be written.
20759 // But allow more writes to happen in this tick.
20760 processNextTick(onEndNT, this);
20761 }
20762
20763 function onEndNT(self) {
20764 self.end();
20765 }
20766
20767 function forEach(xs, f) {
20768 for (var i = 0, l = xs.length; i < l; i++) {
20769 f(xs[i], i);
20770 }
20771 }
20772 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
20773 // a passthrough stream.
20774 // basically just the most minimal sort of Transform stream.
20775 // Every written chunk gets output as-is.
20776
20777 'use strict';
20778
20779 module.exports = PassThrough;
20780
20781 var Transform = require('./_stream_transform');
20782
20783 /*<replacement>*/
20784 var util = require('core-util-is');
20785 util.inherits = require('inherits');
20786 /*</replacement>*/
20787
20788 util.inherits(PassThrough, Transform);
20789
20790 function PassThrough(options) {
20791 if (!(this instanceof PassThrough)) return new PassThrough(options);
20792
20793 Transform.call(this, options);
20794 }
20795
20796 PassThrough.prototype._transform = function (chunk, encoding, cb) {
20797 cb(null, chunk);
20798 };
20799 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
20800 (function (process){
20801 'use strict';
20802
20803 module.exports = Readable;
20804
20805 /*<replacement>*/
20806 var processNextTick = require('process-nextick-args');
20807 /*</replacement>*/
20808
20809 /*<replacement>*/
20810 var isArray = require('isarray');
20811 /*</replacement>*/
20812
20813 /*<replacement>*/
20814 var Duplex;
20815 /*</replacement>*/
20816
20817 Readable.ReadableState = ReadableState;
20818
20819 /*<replacement>*/
20820 var EE = require('events').EventEmitter;
20821
20822 var EElistenerCount = function (emitter, type) {
20823 return emitter.listeners(type).length;
20824 };
20825 /*</replacement>*/
20826
20827 /*<replacement>*/
20828 var Stream;
20829 (function () {
20830 try {
20831 Stream = require('st' + 'ream');
20832 } catch (_) {} finally {
20833 if (!Stream) Stream = require('events').EventEmitter;
20834 }
20835 })();
20836 /*</replacement>*/
20837
20838 var Buffer = require('buffer').Buffer;
20839 /*<replacement>*/
20840 var bufferShim = require('buffer-shims');
20841 /*</replacement>*/
20842
20843 /*<replacement>*/
20844 var util = require('core-util-is');
20845 util.inherits = require('inherits');
20846 /*</replacement>*/
20847
20848 /*<replacement>*/
20849 var debugUtil = require('util');
20850 var debug = void 0;
20851 if (debugUtil && debugUtil.debuglog) {
20852 debug = debugUtil.debuglog('stream');
20853 } else {
20854 debug = function () {};
20855 }
20856 /*</replacement>*/
20857
20858 var BufferList = require('./internal/streams/BufferList');
20859 var StringDecoder;
20860
20861 util.inherits(Readable, Stream);
20862
20863 function prependListener(emitter, event, fn) {
20864 // Sadly this is not cacheable as some libraries bundle their own
20865 // event emitter implementation with them.
20866 if (typeof emitter.prependListener === 'function') {
20867 return emitter.prependListener(event, fn);
20868 } else {
20869 // This is a hack to make sure that our error handler is attached before any
20870 // userland ones. NEVER DO THIS. This is here only because this code needs
20871 // to continue to work with older versions of Node.js that do not include
20872 // the prependListener() method. The goal is to eventually remove this hack.
20873 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]];
20874 }
20875 }
20876
20877 function ReadableState(options, stream) {
20878 Duplex = Duplex || require('./_stream_duplex');
20879
20880 options = options || {};
20881
20882 // object stream flag. Used to make read(n) ignore n and to
20883 // make all the buffer merging and length checks go away
20884 this.objectMode = !!options.objectMode;
20885
20886 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
20887
20888 // the point at which it stops calling _read() to fill the buffer
20889 // Note: 0 is a valid value, means "don't call _read preemptively ever"
20890 var hwm = options.highWaterMark;
20891 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
20892 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
20893
20894 // cast to ints.
20895 this.highWaterMark = ~ ~this.highWaterMark;
20896
20897 // A linked list is used to store data chunks instead of an array because the
20898 // linked list can remove elements from the beginning faster than
20899 // array.shift()
20900 this.buffer = new BufferList();
20901 this.length = 0;
20902 this.pipes = null;
20903 this.pipesCount = 0;
20904 this.flowing = null;
20905 this.ended = false;
20906 this.endEmitted = false;
20907 this.reading = false;
20908
20909 // a flag to be able to tell if the onwrite cb is called immediately,
20910 // or on a later tick. We set this to true at first, because any
20911 // actions that shouldn't happen until "later" should generally also
20912 // not happen before the first write call.
20913 this.sync = true;
20914
20915 // whenever we return null, then we set a flag to say
20916 // that we're awaiting a 'readable' event emission.
20917 this.needReadable = false;
20918 this.emittedReadable = false;
20919 this.readableListening = false;
20920 this.resumeScheduled = false;
20921
20922 // Crypto is kind of old and crusty. Historically, its default string
20923 // encoding is 'binary' so we have to make this configurable.
20924 // Everything else in the universe uses 'utf8', though.
20925 this.defaultEncoding = options.defaultEncoding || 'utf8';
20926
20927 // when piping, we only care about 'readable' events that happen
20928 // after read()ing all the bytes and not getting any pushback.
20929 this.ranOut = false;
20930
20931 // the number of writers that are awaiting a drain event in .pipe()s
20932 this.awaitDrain = 0;
20933
20934 // if true, a maybeReadMore has been scheduled
20935 this.readingMore = false;
20936
20937 this.decoder = null;
20938 this.encoding = null;
20939 if (options.encoding) {
20940 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
20941 this.decoder = new StringDecoder(options.encoding);
20942 this.encoding = options.encoding;
20943 }
20944 }
20945
20946 function Readable(options) {
20947 Duplex = Duplex || require('./_stream_duplex');
20948
20949 if (!(this instanceof Readable)) return new Readable(options);
20950
20951 this._readableState = new ReadableState(options, this);
20952
20953 // legacy
20954 this.readable = true;
20955
20956 if (options && typeof options.read === 'function') this._read = options.read;
20957
20958 Stream.call(this);
20959 }
20960
20961 // Manually shove something into the read() buffer.
20962 // This returns true if the highWaterMark has not been hit yet,
20963 // similar to how Writable.write() returns true if you should
20964 // write() some more.
20965 Readable.prototype.push = function (chunk, encoding) {
20966 var state = this._readableState;
20967
20968 if (!state.objectMode && typeof chunk === 'string') {
20969 encoding = encoding || state.defaultEncoding;
20970 if (encoding !== state.encoding) {
20971 chunk = bufferShim.from(chunk, encoding);
20972 encoding = '';
20973 }
20974 }
20975
20976 return readableAddChunk(this, state, chunk, encoding, false);
20977 };
20978
20979 // Unshift should *always* be something directly out of read()
20980 Readable.prototype.unshift = function (chunk) {
20981 var state = this._readableState;
20982 return readableAddChunk(this, state, chunk, '', true);
20983 };
20984
20985 Readable.prototype.isPaused = function () {
20986 return this._readableState.flowing === false;
20987 };
20988
20989 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
20990 var er = chunkInvalid(state, chunk);
20991 if (er) {
20992 stream.emit('error', er);
20993 } else if (chunk === null) {
20994 state.reading = false;
20995 onEofChunk(stream, state);
20996 } else if (state.objectMode || chunk && chunk.length > 0) {
20997 if (state.ended && !addToFront) {
20998 var e = new Error('stream.push() after EOF');
20999 stream.emit('error', e);
21000 } else if (state.endEmitted && addToFront) {
21001 var _e = new Error('stream.unshift() after end event');
21002 stream.emit('error', _e);
21003 } else {
21004 var skipAdd;
21005 if (state.decoder && !addToFront && !encoding) {
21006 chunk = state.decoder.write(chunk);
21007 skipAdd = !state.objectMode && chunk.length === 0;
21008 }
21009
21010 if (!addToFront) state.reading = false;
21011
21012 // Don't add to the buffer if we've decoded to an empty string chunk and
21013 // we're not in object mode
21014 if (!skipAdd) {
21015 // if we want the data now, just emit it.
21016 if (state.flowing && state.length === 0 && !state.sync) {
21017 stream.emit('data', chunk);
21018 stream.read(0);
21019 } else {
21020 // update the buffer info.
21021 state.length += state.objectMode ? 1 : chunk.length;
21022 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
21023
21024 if (state.needReadable) emitReadable(stream);
21025 }
21026 }
21027
21028 maybeReadMore(stream, state);
21029 }
21030 } else if (!addToFront) {
21031 state.reading = false;
21032 }
21033
21034 return needMoreData(state);
21035 }
21036
21037 // if it's past the high water mark, we can push in some more.
21038 // Also, if we have no data yet, we can stand some
21039 // more bytes. This is to work around cases where hwm=0,
21040 // such as the repl. Also, if the push() triggered a
21041 // readable event, and the user called read(largeNumber) such that
21042 // needReadable was set, then we ought to push more, so that another
21043 // 'readable' event will be triggered.
21044 function needMoreData(state) {
21045 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
21046 }
21047
21048 // backwards compatibility.
21049 Readable.prototype.setEncoding = function (enc) {
21050 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
21051 this._readableState.decoder = new StringDecoder(enc);
21052 this._readableState.encoding = enc;
21053 return this;
21054 };
21055
21056 // Don't raise the hwm > 8MB
21057 var MAX_HWM = 0x800000;
21058 function computeNewHighWaterMark(n) {
21059 if (n >= MAX_HWM) {
21060 n = MAX_HWM;
21061 } else {
21062 // Get the next highest power of 2 to prevent increasing hwm excessively in
21063 // tiny amounts
21064 n--;
21065 n |= n >>> 1;
21066 n |= n >>> 2;
21067 n |= n >>> 4;
21068 n |= n >>> 8;
21069 n |= n >>> 16;
21070 n++;
21071 }
21072 return n;
21073 }
21074
21075 // This function is designed to be inlinable, so please take care when making
21076 // changes to the function body.
21077 function howMuchToRead(n, state) {
21078 if (n <= 0 || state.length === 0 && state.ended) return 0;
21079 if (state.objectMode) return 1;
21080 if (n !== n) {
21081 // Only flow one buffer at a time
21082 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
21083 }
21084 // If we're asking for more than the current hwm, then raise the hwm.
21085 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
21086 if (n <= state.length) return n;
21087 // Don't have enough
21088 if (!state.ended) {
21089 state.needReadable = true;
21090 return 0;
21091 }
21092 return state.length;
21093 }
21094
21095 // you can override either this method, or the async _read(n) below.
21096 Readable.prototype.read = function (n) {
21097 debug('read', n);
21098 n = parseInt(n, 10);
21099 var state = this._readableState;
21100 var nOrig = n;
21101
21102 if (n !== 0) state.emittedReadable = false;
21103
21104 // if we're doing read(0) to trigger a readable event, but we
21105 // already have a bunch of data in the buffer, then just trigger
21106 // the 'readable' event and move on.
21107 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
21108 debug('read: emitReadable', state.length, state.ended);
21109 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
21110 return null;
21111 }
21112
21113 n = howMuchToRead(n, state);
21114
21115 // if we've ended, and we're now clear, then finish it up.
21116 if (n === 0 && state.ended) {
21117 if (state.length === 0) endReadable(this);
21118 return null;
21119 }
21120
21121 // All the actual chunk generation logic needs to be
21122 // *below* the call to _read. The reason is that in certain
21123 // synthetic stream cases, such as passthrough streams, _read
21124 // may be a completely synchronous operation which may change
21125 // the state of the read buffer, providing enough data when
21126 // before there was *not* enough.
21127 //
21128 // So, the steps are:
21129 // 1. Figure out what the state of things will be after we do
21130 // a read from the buffer.
21131 //
21132 // 2. If that resulting state will trigger a _read, then call _read.
21133 // Note that this may be asynchronous, or synchronous. Yes, it is
21134 // deeply ugly to write APIs this way, but that still doesn't mean
21135 // that the Readable class should behave improperly, as streams are
21136 // designed to be sync/async agnostic.
21137 // Take note if the _read call is sync or async (ie, if the read call
21138 // has returned yet), so that we know whether or not it's safe to emit
21139 // 'readable' etc.
21140 //
21141 // 3. Actually pull the requested chunks out of the buffer and return.
21142
21143 // if we need a readable event, then we need to do some reading.
21144 var doRead = state.needReadable;
21145 debug('need readable', doRead);
21146
21147 // if we currently have less than the highWaterMark, then also read some
21148 if (state.length === 0 || state.length - n < state.highWaterMark) {
21149 doRead = true;
21150 debug('length less than watermark', doRead);
21151 }
21152
21153 // however, if we've ended, then there's no point, and if we're already
21154 // reading, then it's unnecessary.
21155 if (state.ended || state.reading) {
21156 doRead = false;
21157 debug('reading or ended', doRead);
21158 } else if (doRead) {
21159 debug('do read');
21160 state.reading = true;
21161 state.sync = true;
21162 // if the length is currently zero, then we *need* a readable event.
21163 if (state.length === 0) state.needReadable = true;
21164 // call internal read method
21165 this._read(state.highWaterMark);
21166 state.sync = false;
21167 // If _read pushed data synchronously, then `reading` will be false,
21168 // and we need to re-evaluate how much data we can return to the user.
21169 if (!state.reading) n = howMuchToRead(nOrig, state);
21170 }
21171
21172 var ret;
21173 if (n > 0) ret = fromList(n, state);else ret = null;
21174
21175 if (ret === null) {
21176 state.needReadable = true;
21177 n = 0;
21178 } else {
21179 state.length -= n;
21180 }
21181
21182 if (state.length === 0) {
21183 // If we have nothing in the buffer, then we want to know
21184 // as soon as we *do* get something into the buffer.
21185 if (!state.ended) state.needReadable = true;
21186
21187 // If we tried to read() past the EOF, then emit end on the next tick.
21188 if (nOrig !== n && state.ended) endReadable(this);
21189 }
21190
21191 if (ret !== null) this.emit('data', ret);
21192
21193 return ret;
21194 };
21195
21196 function chunkInvalid(state, chunk) {
21197 var er = null;
21198 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
21199 er = new TypeError('Invalid non-string/buffer chunk');
21200 }
21201 return er;
21202 }
21203
21204 function onEofChunk(stream, state) {
21205 if (state.ended) return;
21206 if (state.decoder) {
21207 var chunk = state.decoder.end();
21208 if (chunk && chunk.length) {
21209 state.buffer.push(chunk);
21210 state.length += state.objectMode ? 1 : chunk.length;
21211 }
21212 }
21213 state.ended = true;
21214
21215 // emit 'readable' now to make sure it gets picked up.
21216 emitReadable(stream);
21217 }
21218
21219 // Don't emit readable right away in sync mode, because this can trigger
21220 // another read() call => stack overflow. This way, it might trigger
21221 // a nextTick recursion warning, but that's not so bad.
21222 function emitReadable(stream) {
21223 var state = stream._readableState;
21224 state.needReadable = false;
21225 if (!state.emittedReadable) {
21226 debug('emitReadable', state.flowing);
21227 state.emittedReadable = true;
21228 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
21229 }
21230 }
21231
21232 function emitReadable_(stream) {
21233 debug('emit readable');
21234 stream.emit('readable');
21235 flow(stream);
21236 }
21237
21238 // at this point, the user has presumably seen the 'readable' event,
21239 // and called read() to consume some data. that may have triggered
21240 // in turn another _read(n) call, in which case reading = true if
21241 // it's in progress.
21242 // However, if we're not ended, or reading, and the length < hwm,
21243 // then go ahead and try to read some more preemptively.
21244 function maybeReadMore(stream, state) {
21245 if (!state.readingMore) {
21246 state.readingMore = true;
21247 processNextTick(maybeReadMore_, stream, state);
21248 }
21249 }
21250
21251 function maybeReadMore_(stream, state) {
21252 var len = state.length;
21253 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
21254 debug('maybeReadMore read 0');
21255 stream.read(0);
21256 if (len === state.length)
21257 // didn't get any data, stop spinning.
21258 break;else len = state.length;
21259 }
21260 state.readingMore = false;
21261 }
21262
21263 // abstract method. to be overridden in specific implementation classes.
21264 // call cb(er, data) where data is <= n in length.
21265 // for virtual (non-string, non-buffer) streams, "length" is somewhat
21266 // arbitrary, and perhaps not very meaningful.
21267 Readable.prototype._read = function (n) {
21268 this.emit('error', new Error('_read() is not implemented'));
21269 };
21270
21271 Readable.prototype.pipe = function (dest, pipeOpts) {
21272 var src = this;
21273 var state = this._readableState;
21274
21275 switch (state.pipesCount) {
21276 case 0:
21277 state.pipes = dest;
21278 break;
21279 case 1:
21280 state.pipes = [state.pipes, dest];
21281 break;
21282 default:
21283 state.pipes.push(dest);
21284 break;
21285 }
21286 state.pipesCount += 1;
21287 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
21288
21289 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
21290
21291 var endFn = doEnd ? onend : cleanup;
21292 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
21293
21294 dest.on('unpipe', onunpipe);
21295 function onunpipe(readable) {
21296 debug('onunpipe');
21297 if (readable === src) {
21298 cleanup();
21299 }
21300 }
21301
21302 function onend() {
21303 debug('onend');
21304 dest.end();
21305 }
21306
21307 // when the dest drains, it reduces the awaitDrain counter
21308 // on the source. This would be more elegant with a .once()
21309 // handler in flow(), but adding and removing repeatedly is
21310 // too slow.
21311 var ondrain = pipeOnDrain(src);
21312 dest.on('drain', ondrain);
21313
21314 var cleanedUp = false;
21315 function cleanup() {
21316 debug('cleanup');
21317 // cleanup event handlers once the pipe is broken
21318 dest.removeListener('close', onclose);
21319 dest.removeListener('finish', onfinish);
21320 dest.removeListener('drain', ondrain);
21321 dest.removeListener('error', onerror);
21322 dest.removeListener('unpipe', onunpipe);
21323 src.removeListener('end', onend);
21324 src.removeListener('end', cleanup);
21325 src.removeListener('data', ondata);
21326
21327 cleanedUp = true;
21328
21329 // if the reader is waiting for a drain event from this
21330 // specific writer, then it would cause it to never start
21331 // flowing again.
21332 // So, if this is awaiting a drain, then we just call it now.
21333 // If we don't know, then assume that we are waiting for one.
21334 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
21335 }
21336
21337 // If the user pushes more data while we're writing to dest then we'll end up
21338 // in ondata again. However, we only want to increase awaitDrain once because
21339 // dest will only emit one 'drain' event for the multiple writes.
21340 // => Introduce a guard on increasing awaitDrain.
21341 var increasedAwaitDrain = false;
21342 src.on('data', ondata);
21343 function ondata(chunk) {
21344 debug('ondata');
21345 increasedAwaitDrain = false;
21346 var ret = dest.write(chunk);
21347 if (false === ret && !increasedAwaitDrain) {
21348 // If the user unpiped during `dest.write()`, it is possible
21349 // to get stuck in a permanently paused state if that write
21350 // also returned false.
21351 // => Check whether `dest` is still a piping destination.
21352 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
21353 debug('false write response, pause', src._readableState.awaitDrain);
21354 src._readableState.awaitDrain++;
21355 increasedAwaitDrain = true;
21356 }
21357 src.pause();
21358 }
21359 }
21360
21361 // if the dest has an error, then stop piping into it.
21362 // however, don't suppress the throwing behavior for this.
21363 function onerror(er) {
21364 debug('onerror', er);
21365 unpipe();
21366 dest.removeListener('error', onerror);
21367 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
21368 }
21369
21370 // Make sure our error handler is attached before userland ones.
21371 prependListener(dest, 'error', onerror);
21372
21373 // Both close and finish should trigger unpipe, but only once.
21374 function onclose() {
21375 dest.removeListener('finish', onfinish);
21376 unpipe();
21377 }
21378 dest.once('close', onclose);
21379 function onfinish() {
21380 debug('onfinish');
21381 dest.removeListener('close', onclose);
21382 unpipe();
21383 }
21384 dest.once('finish', onfinish);
21385
21386 function unpipe() {
21387 debug('unpipe');
21388 src.unpipe(dest);
21389 }
21390
21391 // tell the dest that it's being piped to
21392 dest.emit('pipe', src);
21393
21394 // start the flow if it hasn't been started already.
21395 if (!state.flowing) {
21396 debug('pipe resume');
21397 src.resume();
21398 }
21399
21400 return dest;
21401 };
21402
21403 function pipeOnDrain(src) {
21404 return function () {
21405 var state = src._readableState;
21406 debug('pipeOnDrain', state.awaitDrain);
21407 if (state.awaitDrain) state.awaitDrain--;
21408 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
21409 state.flowing = true;
21410 flow(src);
21411 }
21412 };
21413 }
21414
21415 Readable.prototype.unpipe = function (dest) {
21416 var state = this._readableState;
21417
21418 // if we're not piping anywhere, then do nothing.
21419 if (state.pipesCount === 0) return this;
21420
21421 // just one destination. most common case.
21422 if (state.pipesCount === 1) {
21423 // passed in one, but it's not the right one.
21424 if (dest && dest !== state.pipes) return this;
21425
21426 if (!dest) dest = state.pipes;
21427
21428 // got a match.
21429 state.pipes = null;
21430 state.pipesCount = 0;
21431 state.flowing = false;
21432 if (dest) dest.emit('unpipe', this);
21433 return this;
21434 }
21435
21436 // slow case. multiple pipe destinations.
21437
21438 if (!dest) {
21439 // remove all.
21440 var dests = state.pipes;
21441 var len = state.pipesCount;
21442 state.pipes = null;
21443 state.pipesCount = 0;
21444 state.flowing = false;
21445
21446 for (var i = 0; i < len; i++) {
21447 dests[i].emit('unpipe', this);
21448 }return this;
21449 }
21450
21451 // try to find the right one.
21452 var index = indexOf(state.pipes, dest);
21453 if (index === -1) return this;
21454
21455 state.pipes.splice(index, 1);
21456 state.pipesCount -= 1;
21457 if (state.pipesCount === 1) state.pipes = state.pipes[0];
21458
21459 dest.emit('unpipe', this);
21460
21461 return this;
21462 };
21463
21464 // set up data events if they are asked for
21465 // Ensure readable listeners eventually get something
21466 Readable.prototype.on = function (ev, fn) {
21467 var res = Stream.prototype.on.call(this, ev, fn);
21468
21469 if (ev === 'data') {
21470 // Start flowing on next tick if stream isn't explicitly paused
21471 if (this._readableState.flowing !== false) this.resume();
21472 } else if (ev === 'readable') {
21473 var state = this._readableState;
21474 if (!state.endEmitted && !state.readableListening) {
21475 state.readableListening = state.needReadable = true;
21476 state.emittedReadable = false;
21477 if (!state.reading) {
21478 processNextTick(nReadingNextTick, this);
21479 } else if (state.length) {
21480 emitReadable(this, state);
21481 }
21482 }
21483 }
21484
21485 return res;
21486 };
21487 Readable.prototype.addListener = Readable.prototype.on;
21488
21489 function nReadingNextTick(self) {
21490 debug('readable nexttick read 0');
21491 self.read(0);
21492 }
21493
21494 // pause() and resume() are remnants of the legacy readable stream API
21495 // If the user uses them, then switch into old mode.
21496 Readable.prototype.resume = function () {
21497 var state = this._readableState;
21498 if (!state.flowing) {
21499 debug('resume');
21500 state.flowing = true;
21501 resume(this, state);
21502 }
21503 return this;
21504 };
21505
21506 function resume(stream, state) {
21507 if (!state.resumeScheduled) {
21508 state.resumeScheduled = true;
21509 processNextTick(resume_, stream, state);
21510 }
21511 }
21512
21513 function resume_(stream, state) {
21514 if (!state.reading) {
21515 debug('resume read 0');
21516 stream.read(0);
21517 }
21518
21519 state.resumeScheduled = false;
21520 state.awaitDrain = 0;
21521 stream.emit('resume');
21522 flow(stream);
21523 if (state.flowing && !state.reading) stream.read(0);
21524 }
21525
21526 Readable.prototype.pause = function () {
21527 debug('call pause flowing=%j', this._readableState.flowing);
21528 if (false !== this._readableState.flowing) {
21529 debug('pause');
21530 this._readableState.flowing = false;
21531 this.emit('pause');
21532 }
21533 return this;
21534 };
21535
21536 function flow(stream) {
21537 var state = stream._readableState;
21538 debug('flow', state.flowing);
21539 while (state.flowing && stream.read() !== null) {}
21540 }
21541
21542 // wrap an old-style stream as the async data source.
21543 // This is *not* part of the readable stream interface.
21544 // It is an ugly unfortunate mess of history.
21545 Readable.prototype.wrap = function (stream) {
21546 var state = this._readableState;
21547 var paused = false;
21548
21549 var self = this;
21550 stream.on('end', function () {
21551 debug('wrapped end');
21552 if (state.decoder && !state.ended) {
21553 var chunk = state.decoder.end();
21554 if (chunk && chunk.length) self.push(chunk);
21555 }
21556
21557 self.push(null);
21558 });
21559
21560 stream.on('data', function (chunk) {
21561 debug('wrapped data');
21562 if (state.decoder) chunk = state.decoder.write(chunk);
21563
21564 // don't skip over falsy values in objectMode
21565 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
21566
21567 var ret = self.push(chunk);
21568 if (!ret) {
21569 paused = true;
21570 stream.pause();
21571 }
21572 });
21573
21574 // proxy all the other methods.
21575 // important when wrapping filters and duplexes.
21576 for (var i in stream) {
21577 if (this[i] === undefined && typeof stream[i] === 'function') {
21578 this[i] = function (method) {
21579 return function () {
21580 return stream[method].apply(stream, arguments);
21581 };
21582 }(i);
21583 }
21584 }
21585
21586 // proxy certain important events.
21587 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
21588 forEach(events, function (ev) {
21589 stream.on(ev, self.emit.bind(self, ev));
21590 });
21591
21592 // when we try to consume some more bytes, simply unpause the
21593 // underlying stream.
21594 self._read = function (n) {
21595 debug('wrapped _read', n);
21596 if (paused) {
21597 paused = false;
21598 stream.resume();
21599 }
21600 };
21601
21602 return self;
21603 };
21604
21605 // exposed for testing purposes only.
21606 Readable._fromList = fromList;
21607
21608 // Pluck off n bytes from an array of buffers.
21609 // Length is the combined lengths of all the buffers in the list.
21610 // This function is designed to be inlinable, so please take care when making
21611 // changes to the function body.
21612 function fromList(n, state) {
21613 // nothing buffered
21614 if (state.length === 0) return null;
21615
21616 var ret;
21617 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
21618 // read it all, truncate the list
21619 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);
21620 state.buffer.clear();
21621 } else {
21622 // read part of list
21623 ret = fromListPartial(n, state.buffer, state.decoder);
21624 }
21625
21626 return ret;
21627 }
21628
21629 // Extracts only enough buffered data to satisfy the amount requested.
21630 // This function is designed to be inlinable, so please take care when making
21631 // changes to the function body.
21632 function fromListPartial(n, list, hasStrings) {
21633 var ret;
21634 if (n < list.head.data.length) {
21635 // slice is the same for buffers and strings
21636 ret = list.head.data.slice(0, n);
21637 list.head.data = list.head.data.slice(n);
21638 } else if (n === list.head.data.length) {
21639 // first chunk is a perfect match
21640 ret = list.shift();
21641 } else {
21642 // result spans more than one buffer
21643 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
21644 }
21645 return ret;
21646 }
21647
21648 // Copies a specified amount of characters from the list of buffered data
21649 // chunks.
21650 // This function is designed to be inlinable, so please take care when making
21651 // changes to the function body.
21652 function copyFromBufferString(n, list) {
21653 var p = list.head;
21654 var c = 1;
21655 var ret = p.data;
21656 n -= ret.length;
21657 while (p = p.next) {
21658 var str = p.data;
21659 var nb = n > str.length ? str.length : n;
21660 if (nb === str.length) ret += str;else ret += str.slice(0, n);
21661 n -= nb;
21662 if (n === 0) {
21663 if (nb === str.length) {
21664 ++c;
21665 if (p.next) list.head = p.next;else list.head = list.tail = null;
21666 } else {
21667 list.head = p;
21668 p.data = str.slice(nb);
21669 }
21670 break;
21671 }
21672 ++c;
21673 }
21674 list.length -= c;
21675 return ret;
21676 }
21677
21678 // Copies a specified amount of bytes from the list of buffered data chunks.
21679 // This function is designed to be inlinable, so please take care when making
21680 // changes to the function body.
21681 function copyFromBuffer(n, list) {
21682 var ret = bufferShim.allocUnsafe(n);
21683 var p = list.head;
21684 var c = 1;
21685 p.data.copy(ret);
21686 n -= p.data.length;
21687 while (p = p.next) {
21688 var buf = p.data;
21689 var nb = n > buf.length ? buf.length : n;
21690 buf.copy(ret, ret.length - n, 0, nb);
21691 n -= nb;
21692 if (n === 0) {
21693 if (nb === buf.length) {
21694 ++c;
21695 if (p.next) list.head = p.next;else list.head = list.tail = null;
21696 } else {
21697 list.head = p;
21698 p.data = buf.slice(nb);
21699 }
21700 break;
21701 }
21702 ++c;
21703 }
21704 list.length -= c;
21705 return ret;
21706 }
21707
21708 function endReadable(stream) {
21709 var state = stream._readableState;
21710
21711 // If we get here before consuming all the bytes, then that is a
21712 // bug in node. Should never happen.
21713 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
21714
21715 if (!state.endEmitted) {
21716 state.ended = true;
21717 processNextTick(endReadableNT, state, stream);
21718 }
21719 }
21720
21721 function endReadableNT(state, stream) {
21722 // Check that we didn't get one last unshift.
21723 if (!state.endEmitted && state.length === 0) {
21724 state.endEmitted = true;
21725 stream.readable = false;
21726 stream.emit('end');
21727 }
21728 }
21729
21730 function forEach(xs, f) {
21731 for (var i = 0, l = xs.length; i < l; i++) {
21732 f(xs[i], i);
21733 }
21734 }
21735
21736 function indexOf(xs, x) {
21737 for (var i = 0, l = xs.length; i < l; i++) {
21738 if (xs[i] === x) return i;
21739 }
21740 return -1;
21741 }
21742 }).call(this,require('_process'))
21743 },{"./_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){
21744 // a transform stream is a readable/writable stream where you do
21745 // something with the data. Sometimes it's called a "filter",
21746 // but that's not a great name for it, since that implies a thing where
21747 // some bits pass through, and others are simply ignored. (That would
21748 // be a valid example of a transform, of course.)
21749 //
21750 // While the output is causally related to the input, it's not a
21751 // necessarily symmetric or synchronous transformation. For example,
21752 // a zlib stream might take multiple plain-text writes(), and then
21753 // emit a single compressed chunk some time in the future.
21754 //
21755 // Here's how this works:
21756 //
21757 // The Transform stream has all the aspects of the readable and writable
21758 // stream classes. When you write(chunk), that calls _write(chunk,cb)
21759 // internally, and returns false if there's a lot of pending writes
21760 // buffered up. When you call read(), that calls _read(n) until
21761 // there's enough pending readable data buffered up.
21762 //
21763 // In a transform stream, the written data is placed in a buffer. When
21764 // _read(n) is called, it transforms the queued up data, calling the
21765 // buffered _write cb's as it consumes chunks. If consuming a single
21766 // written chunk would result in multiple output chunks, then the first
21767 // outputted bit calls the readcb, and subsequent chunks just go into
21768 // the read buffer, and will cause it to emit 'readable' if necessary.
21769 //
21770 // This way, back-pressure is actually determined by the reading side,
21771 // since _read has to be called to start processing a new chunk. However,
21772 // a pathological inflate type of transform can cause excessive buffering
21773 // here. For example, imagine a stream where every byte of input is
21774 // interpreted as an integer from 0-255, and then results in that many
21775 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
21776 // 1kb of data being output. In this case, you could write a very small
21777 // amount of input, and end up with a very large amount of output. In
21778 // such a pathological inflating mechanism, there'd be no way to tell
21779 // the system to stop doing the transform. A single 4MB write could
21780 // cause the system to run out of memory.
21781 //
21782 // However, even in such a pathological case, only a single written chunk
21783 // would be consumed, and then the rest would wait (un-transformed) until
21784 // the results of the previous transformed chunk were consumed.
21785
21786 'use strict';
21787
21788 module.exports = Transform;
21789
21790 var Duplex = require('./_stream_duplex');
21791
21792 /*<replacement>*/
21793 var util = require('core-util-is');
21794 util.inherits = require('inherits');
21795 /*</replacement>*/
21796
21797 util.inherits(Transform, Duplex);
21798
21799 function TransformState(stream) {
21800 this.afterTransform = function (er, data) {
21801 return afterTransform(stream, er, data);
21802 };
21803
21804 this.needTransform = false;
21805 this.transforming = false;
21806 this.writecb = null;
21807 this.writechunk = null;
21808 this.writeencoding = null;
21809 }
21810
21811 function afterTransform(stream, er, data) {
21812 var ts = stream._transformState;
21813 ts.transforming = false;
21814
21815 var cb = ts.writecb;
21816
21817 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
21818
21819 ts.writechunk = null;
21820 ts.writecb = null;
21821
21822 if (data !== null && data !== undefined) stream.push(data);
21823
21824 cb(er);
21825
21826 var rs = stream._readableState;
21827 rs.reading = false;
21828 if (rs.needReadable || rs.length < rs.highWaterMark) {
21829 stream._read(rs.highWaterMark);
21830 }
21831 }
21832
21833 function Transform(options) {
21834 if (!(this instanceof Transform)) return new Transform(options);
21835
21836 Duplex.call(this, options);
21837
21838 this._transformState = new TransformState(this);
21839
21840 var stream = this;
21841
21842 // start out asking for a readable event once data is transformed.
21843 this._readableState.needReadable = true;
21844
21845 // we have implemented the _read method, and done the other things
21846 // that Readable wants before the first _read call, so unset the
21847 // sync guard flag.
21848 this._readableState.sync = false;
21849
21850 if (options) {
21851 if (typeof options.transform === 'function') this._transform = options.transform;
21852
21853 if (typeof options.flush === 'function') this._flush = options.flush;
21854 }
21855
21856 // When the writable side finishes, then flush out anything remaining.
21857 this.once('prefinish', function () {
21858 if (typeof this._flush === 'function') this._flush(function (er, data) {
21859 done(stream, er, data);
21860 });else done(stream);
21861 });
21862 }
21863
21864 Transform.prototype.push = function (chunk, encoding) {
21865 this._transformState.needTransform = false;
21866 return Duplex.prototype.push.call(this, chunk, encoding);
21867 };
21868
21869 // This is the part where you do stuff!
21870 // override this function in implementation classes.
21871 // 'chunk' is an input chunk.
21872 //
21873 // Call `push(newChunk)` to pass along transformed output
21874 // to the readable side. You may call 'push' zero or more times.
21875 //
21876 // Call `cb(err)` when you are done with this chunk. If you pass
21877 // an error, then that'll put the hurt on the whole operation. If you
21878 // never call cb(), then you'll never get another chunk.
21879 Transform.prototype._transform = function (chunk, encoding, cb) {
21880 throw new Error('_transform() is not implemented');
21881 };
21882
21883 Transform.prototype._write = function (chunk, encoding, cb) {
21884 var ts = this._transformState;
21885 ts.writecb = cb;
21886 ts.writechunk = chunk;
21887 ts.writeencoding = encoding;
21888 if (!ts.transforming) {
21889 var rs = this._readableState;
21890 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
21891 }
21892 };
21893
21894 // Doesn't matter what the args are here.
21895 // _transform does all the work.
21896 // That we got here means that the readable side wants more data.
21897 Transform.prototype._read = function (n) {
21898 var ts = this._transformState;
21899
21900 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
21901 ts.transforming = true;
21902 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
21903 } else {
21904 // mark that we need a transform, so that any data that comes in
21905 // will get processed, now that we've asked for it.
21906 ts.needTransform = true;
21907 }
21908 };
21909
21910 function done(stream, er, data) {
21911 if (er) return stream.emit('error', er);
21912
21913 if (data !== null && data !== undefined) stream.push(data);
21914
21915 // if there's nothing in the write buffer, then that means
21916 // that nothing more will ever be provided
21917 var ws = stream._writableState;
21918 var ts = stream._transformState;
21919
21920 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
21921
21922 if (ts.transforming) throw new Error('Calling transform done when still transforming');
21923
21924 return stream.push(null);
21925 }
21926 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
21927 (function (process){
21928 // A bit simpler than readable streams.
21929 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
21930 // the drain event emission and buffering.
21931
21932 'use strict';
21933
21934 module.exports = Writable;
21935
21936 /*<replacement>*/
21937 var processNextTick = require('process-nextick-args');
21938 /*</replacement>*/
21939
21940 /*<replacement>*/
21941 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
21942 /*</replacement>*/
21943
21944 /*<replacement>*/
21945 var Duplex;
21946 /*</replacement>*/
21947
21948 Writable.WritableState = WritableState;
21949
21950 /*<replacement>*/
21951 var util = require('core-util-is');
21952 util.inherits = require('inherits');
21953 /*</replacement>*/
21954
21955 /*<replacement>*/
21956 var internalUtil = {
21957 deprecate: require('util-deprecate')
21958 };
21959 /*</replacement>*/
21960
21961 /*<replacement>*/
21962 var Stream;
21963 (function () {
21964 try {
21965 Stream = require('st' + 'ream');
21966 } catch (_) {} finally {
21967 if (!Stream) Stream = require('events').EventEmitter;
21968 }
21969 })();
21970 /*</replacement>*/
21971
21972 var Buffer = require('buffer').Buffer;
21973 /*<replacement>*/
21974 var bufferShim = require('buffer-shims');
21975 /*</replacement>*/
21976
21977 util.inherits(Writable, Stream);
21978
21979 function nop() {}
21980
21981 function WriteReq(chunk, encoding, cb) {
21982 this.chunk = chunk;
21983 this.encoding = encoding;
21984 this.callback = cb;
21985 this.next = null;
21986 }
21987
21988 function WritableState(options, stream) {
21989 Duplex = Duplex || require('./_stream_duplex');
21990
21991 options = options || {};
21992
21993 // object stream flag to indicate whether or not this stream
21994 // contains buffers or objects.
21995 this.objectMode = !!options.objectMode;
21996
21997 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
21998
21999 // the point at which write() starts returning false
22000 // Note: 0 is a valid value, means that we always return false if
22001 // the entire buffer is not flushed immediately on write()
22002 var hwm = options.highWaterMark;
22003 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
22004 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
22005
22006 // cast to ints.
22007 this.highWaterMark = ~ ~this.highWaterMark;
22008
22009 // drain event flag.
22010 this.needDrain = false;
22011 // at the start of calling end()
22012 this.ending = false;
22013 // when end() has been called, and returned
22014 this.ended = false;
22015 // when 'finish' is emitted
22016 this.finished = false;
22017
22018 // should we decode strings into buffers before passing to _write?
22019 // this is here so that some node-core streams can optimize string
22020 // handling at a lower level.
22021 var noDecode = options.decodeStrings === false;
22022 this.decodeStrings = !noDecode;
22023
22024 // Crypto is kind of old and crusty. Historically, its default string
22025 // encoding is 'binary' so we have to make this configurable.
22026 // Everything else in the universe uses 'utf8', though.
22027 this.defaultEncoding = options.defaultEncoding || 'utf8';
22028
22029 // not an actual buffer we keep track of, but a measurement
22030 // of how much we're waiting to get pushed to some underlying
22031 // socket or file.
22032 this.length = 0;
22033
22034 // a flag to see when we're in the middle of a write.
22035 this.writing = false;
22036
22037 // when true all writes will be buffered until .uncork() call
22038 this.corked = 0;
22039
22040 // a flag to be able to tell if the onwrite cb is called immediately,
22041 // or on a later tick. We set this to true at first, because any
22042 // actions that shouldn't happen until "later" should generally also
22043 // not happen before the first write call.
22044 this.sync = true;
22045
22046 // a flag to know if we're processing previously buffered items, which
22047 // may call the _write() callback in the same tick, so that we don't
22048 // end up in an overlapped onwrite situation.
22049 this.bufferProcessing = false;
22050
22051 // the callback that's passed to _write(chunk,cb)
22052 this.onwrite = function (er) {
22053 onwrite(stream, er);
22054 };
22055
22056 // the callback that the user supplies to write(chunk,encoding,cb)
22057 this.writecb = null;
22058
22059 // the amount that is being written when _write is called.
22060 this.writelen = 0;
22061
22062 this.bufferedRequest = null;
22063 this.lastBufferedRequest = null;
22064
22065 // number of pending user-supplied write callbacks
22066 // this must be 0 before 'finish' can be emitted
22067 this.pendingcb = 0;
22068
22069 // emit prefinish if the only thing we're waiting for is _write cbs
22070 // This is relevant for synchronous Transform streams
22071 this.prefinished = false;
22072
22073 // True if the error was already emitted and should not be thrown again
22074 this.errorEmitted = false;
22075
22076 // count buffered requests
22077 this.bufferedRequestCount = 0;
22078
22079 // allocate the first CorkedRequest, there is always
22080 // one allocated and free to use, and we maintain at most two
22081 this.corkedRequestsFree = new CorkedRequest(this);
22082 }
22083
22084 WritableState.prototype.getBuffer = function getBuffer() {
22085 var current = this.bufferedRequest;
22086 var out = [];
22087 while (current) {
22088 out.push(current);
22089 current = current.next;
22090 }
22091 return out;
22092 };
22093
22094 (function () {
22095 try {
22096 Object.defineProperty(WritableState.prototype, 'buffer', {
22097 get: internalUtil.deprecate(function () {
22098 return this.getBuffer();
22099 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
22100 });
22101 } catch (_) {}
22102 })();
22103
22104 // Test _writableState for inheritance to account for Duplex streams,
22105 // whose prototype chain only points to Readable.
22106 var realHasInstance;
22107 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
22108 realHasInstance = Function.prototype[Symbol.hasInstance];
22109 Object.defineProperty(Writable, Symbol.hasInstance, {
22110 value: function (object) {
22111 if (realHasInstance.call(this, object)) return true;
22112
22113 return object && object._writableState instanceof WritableState;
22114 }
22115 });
22116 } else {
22117 realHasInstance = function (object) {
22118 return object instanceof this;
22119 };
22120 }
22121
22122 function Writable(options) {
22123 Duplex = Duplex || require('./_stream_duplex');
22124
22125 // Writable ctor is applied to Duplexes, too.
22126 // `realHasInstance` is necessary because using plain `instanceof`
22127 // would return false, as no `_writableState` property is attached.
22128
22129 // Trying to use the custom `instanceof` for Writable here will also break the
22130 // Node.js LazyTransform implementation, which has a non-trivial getter for
22131 // `_writableState` that would lead to infinite recursion.
22132 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
22133 return new Writable(options);
22134 }
22135
22136 this._writableState = new WritableState(options, this);
22137
22138 // legacy.
22139 this.writable = true;
22140
22141 if (options) {
22142 if (typeof options.write === 'function') this._write = options.write;
22143
22144 if (typeof options.writev === 'function') this._writev = options.writev;
22145 }
22146
22147 Stream.call(this);
22148 }
22149
22150 // Otherwise people can pipe Writable streams, which is just wrong.
22151 Writable.prototype.pipe = function () {
22152 this.emit('error', new Error('Cannot pipe, not readable'));
22153 };
22154
22155 function writeAfterEnd(stream, cb) {
22156 var er = new Error('write after end');
22157 // TODO: defer error events consistently everywhere, not just the cb
22158 stream.emit('error', er);
22159 processNextTick(cb, er);
22160 }
22161
22162 // If we get something that is not a buffer, string, null, or undefined,
22163 // and we're not in objectMode, then that's an error.
22164 // Otherwise stream chunks are all considered to be of length=1, and the
22165 // watermarks determine how many objects to keep in the buffer, rather than
22166 // how many bytes or characters.
22167 function validChunk(stream, state, chunk, cb) {
22168 var valid = true;
22169 var er = false;
22170 // Always throw error if a null is written
22171 // if we are not in object mode then throw
22172 // if it is not a buffer, string, or undefined.
22173 if (chunk === null) {
22174 er = new TypeError('May not write null values to stream');
22175 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
22176 er = new TypeError('Invalid non-string/buffer chunk');
22177 }
22178 if (er) {
22179 stream.emit('error', er);
22180 processNextTick(cb, er);
22181 valid = false;
22182 }
22183 return valid;
22184 }
22185
22186 Writable.prototype.write = function (chunk, encoding, cb) {
22187 var state = this._writableState;
22188 var ret = false;
22189
22190 if (typeof encoding === 'function') {
22191 cb = encoding;
22192 encoding = null;
22193 }
22194
22195 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
22196
22197 if (typeof cb !== 'function') cb = nop;
22198
22199 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
22200 state.pendingcb++;
22201 ret = writeOrBuffer(this, state, chunk, encoding, cb);
22202 }
22203
22204 return ret;
22205 };
22206
22207 Writable.prototype.cork = function () {
22208 var state = this._writableState;
22209
22210 state.corked++;
22211 };
22212
22213 Writable.prototype.uncork = function () {
22214 var state = this._writableState;
22215
22216 if (state.corked) {
22217 state.corked--;
22218
22219 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
22220 }
22221 };
22222
22223 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
22224 // node::ParseEncoding() requires lower case.
22225 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
22226 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);
22227 this._writableState.defaultEncoding = encoding;
22228 return this;
22229 };
22230
22231 function decodeChunk(state, chunk, encoding) {
22232 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
22233 chunk = bufferShim.from(chunk, encoding);
22234 }
22235 return chunk;
22236 }
22237
22238 // if we're already writing something, then just put this
22239 // in the queue, and wait our turn. Otherwise, call _write
22240 // If we return false, then we need a drain event, so set that flag.
22241 function writeOrBuffer(stream, state, chunk, encoding, cb) {
22242 chunk = decodeChunk(state, chunk, encoding);
22243
22244 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
22245 var len = state.objectMode ? 1 : chunk.length;
22246
22247 state.length += len;
22248
22249 var ret = state.length < state.highWaterMark;
22250 // we must ensure that previous needDrain will not be reset to false.
22251 if (!ret) state.needDrain = true;
22252
22253 if (state.writing || state.corked) {
22254 var last = state.lastBufferedRequest;
22255 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
22256 if (last) {
22257 last.next = state.lastBufferedRequest;
22258 } else {
22259 state.bufferedRequest = state.lastBufferedRequest;
22260 }
22261 state.bufferedRequestCount += 1;
22262 } else {
22263 doWrite(stream, state, false, len, chunk, encoding, cb);
22264 }
22265
22266 return ret;
22267 }
22268
22269 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
22270 state.writelen = len;
22271 state.writecb = cb;
22272 state.writing = true;
22273 state.sync = true;
22274 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
22275 state.sync = false;
22276 }
22277
22278 function onwriteError(stream, state, sync, er, cb) {
22279 --state.pendingcb;
22280 if (sync) processNextTick(cb, er);else cb(er);
22281
22282 stream._writableState.errorEmitted = true;
22283 stream.emit('error', er);
22284 }
22285
22286 function onwriteStateUpdate(state) {
22287 state.writing = false;
22288 state.writecb = null;
22289 state.length -= state.writelen;
22290 state.writelen = 0;
22291 }
22292
22293 function onwrite(stream, er) {
22294 var state = stream._writableState;
22295 var sync = state.sync;
22296 var cb = state.writecb;
22297
22298 onwriteStateUpdate(state);
22299
22300 if (er) onwriteError(stream, state, sync, er, cb);else {
22301 // Check if we're actually ready to finish, but don't emit yet
22302 var finished = needFinish(state);
22303
22304 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
22305 clearBuffer(stream, state);
22306 }
22307
22308 if (sync) {
22309 /*<replacement>*/
22310 asyncWrite(afterWrite, stream, state, finished, cb);
22311 /*</replacement>*/
22312 } else {
22313 afterWrite(stream, state, finished, cb);
22314 }
22315 }
22316 }
22317
22318 function afterWrite(stream, state, finished, cb) {
22319 if (!finished) onwriteDrain(stream, state);
22320 state.pendingcb--;
22321 cb();
22322 finishMaybe(stream, state);
22323 }
22324
22325 // Must force callback to be called on nextTick, so that we don't
22326 // emit 'drain' before the write() consumer gets the 'false' return
22327 // value, and has a chance to attach a 'drain' listener.
22328 function onwriteDrain(stream, state) {
22329 if (state.length === 0 && state.needDrain) {
22330 state.needDrain = false;
22331 stream.emit('drain');
22332 }
22333 }
22334
22335 // if there's something in the buffer waiting, then process it
22336 function clearBuffer(stream, state) {
22337 state.bufferProcessing = true;
22338 var entry = state.bufferedRequest;
22339
22340 if (stream._writev && entry && entry.next) {
22341 // Fast case, write everything using _writev()
22342 var l = state.bufferedRequestCount;
22343 var buffer = new Array(l);
22344 var holder = state.corkedRequestsFree;
22345 holder.entry = entry;
22346
22347 var count = 0;
22348 while (entry) {
22349 buffer[count] = entry;
22350 entry = entry.next;
22351 count += 1;
22352 }
22353
22354 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
22355
22356 // doWrite is almost always async, defer these to save a bit of time
22357 // as the hot path ends with doWrite
22358 state.pendingcb++;
22359 state.lastBufferedRequest = null;
22360 if (holder.next) {
22361 state.corkedRequestsFree = holder.next;
22362 holder.next = null;
22363 } else {
22364 state.corkedRequestsFree = new CorkedRequest(state);
22365 }
22366 } else {
22367 // Slow case, write chunks one-by-one
22368 while (entry) {
22369 var chunk = entry.chunk;
22370 var encoding = entry.encoding;
22371 var cb = entry.callback;
22372 var len = state.objectMode ? 1 : chunk.length;
22373
22374 doWrite(stream, state, false, len, chunk, encoding, cb);
22375 entry = entry.next;
22376 // if we didn't call the onwrite immediately, then
22377 // it means that we need to wait until it does.
22378 // also, that means that the chunk and cb are currently
22379 // being processed, so move the buffer counter past them.
22380 if (state.writing) {
22381 break;
22382 }
22383 }
22384
22385 if (entry === null) state.lastBufferedRequest = null;
22386 }
22387
22388 state.bufferedRequestCount = 0;
22389 state.bufferedRequest = entry;
22390 state.bufferProcessing = false;
22391 }
22392
22393 Writable.prototype._write = function (chunk, encoding, cb) {
22394 cb(new Error('_write() is not implemented'));
22395 };
22396
22397 Writable.prototype._writev = null;
22398
22399 Writable.prototype.end = function (chunk, encoding, cb) {
22400 var state = this._writableState;
22401
22402 if (typeof chunk === 'function') {
22403 cb = chunk;
22404 chunk = null;
22405 encoding = null;
22406 } else if (typeof encoding === 'function') {
22407 cb = encoding;
22408 encoding = null;
22409 }
22410
22411 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
22412
22413 // .end() fully uncorks
22414 if (state.corked) {
22415 state.corked = 1;
22416 this.uncork();
22417 }
22418
22419 // ignore unnecessary end() calls.
22420 if (!state.ending && !state.finished) endWritable(this, state, cb);
22421 };
22422
22423 function needFinish(state) {
22424 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
22425 }
22426
22427 function prefinish(stream, state) {
22428 if (!state.prefinished) {
22429 state.prefinished = true;
22430 stream.emit('prefinish');
22431 }
22432 }
22433
22434 function finishMaybe(stream, state) {
22435 var need = needFinish(state);
22436 if (need) {
22437 if (state.pendingcb === 0) {
22438 prefinish(stream, state);
22439 state.finished = true;
22440 stream.emit('finish');
22441 } else {
22442 prefinish(stream, state);
22443 }
22444 }
22445 return need;
22446 }
22447
22448 function endWritable(stream, state, cb) {
22449 state.ending = true;
22450 finishMaybe(stream, state);
22451 if (cb) {
22452 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
22453 }
22454 state.ended = true;
22455 stream.writable = false;
22456 }
22457
22458 // It seems a linked list but it is not
22459 // there will be only 2 of these for each stream
22460 function CorkedRequest(state) {
22461 var _this = this;
22462
22463 this.next = null;
22464 this.entry = null;
22465
22466 this.finish = function (err) {
22467 var entry = _this.entry;
22468 _this.entry = null;
22469 while (entry) {
22470 var cb = entry.callback;
22471 state.pendingcb--;
22472 cb(err);
22473 entry = entry.next;
22474 }
22475 if (state.corkedRequestsFree) {
22476 state.corkedRequestsFree.next = _this;
22477 } else {
22478 state.corkedRequestsFree = _this;
22479 }
22480 };
22481 }
22482 }).call(this,require('_process'))
22483 },{"./_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){
22484 'use strict';
22485
22486 var Buffer = require('buffer').Buffer;
22487 /*<replacement>*/
22488 var bufferShim = require('buffer-shims');
22489 /*</replacement>*/
22490
22491 module.exports = BufferList;
22492
22493 function BufferList() {
22494 this.head = null;
22495 this.tail = null;
22496 this.length = 0;
22497 }
22498
22499 BufferList.prototype.push = function (v) {
22500 var entry = { data: v, next: null };
22501 if (this.length > 0) this.tail.next = entry;else this.head = entry;
22502 this.tail = entry;
22503 ++this.length;
22504 };
22505
22506 BufferList.prototype.unshift = function (v) {
22507 var entry = { data: v, next: this.head };
22508 if (this.length === 0) this.tail = entry;
22509 this.head = entry;
22510 ++this.length;
22511 };
22512
22513 BufferList.prototype.shift = function () {
22514 if (this.length === 0) return;
22515 var ret = this.head.data;
22516 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
22517 --this.length;
22518 return ret;
22519 };
22520
22521 BufferList.prototype.clear = function () {
22522 this.head = this.tail = null;
22523 this.length = 0;
22524 };
22525
22526 BufferList.prototype.join = function (s) {
22527 if (this.length === 0) return '';
22528 var p = this.head;
22529 var ret = '' + p.data;
22530 while (p = p.next) {
22531 ret += s + p.data;
22532 }return ret;
22533 };
22534
22535 BufferList.prototype.concat = function (n) {
22536 if (this.length === 0) return bufferShim.alloc(0);
22537 if (this.length === 1) return this.head.data;
22538 var ret = bufferShim.allocUnsafe(n >>> 0);
22539 var p = this.head;
22540 var i = 0;
22541 while (p) {
22542 p.data.copy(ret, i);
22543 i += p.data.length;
22544 p = p.next;
22545 }
22546 return ret;
22547 };
22548 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
22549 module.exports = require("./lib/_stream_passthrough.js")
22550
22551 },{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
22552 (function (process){
22553 var Stream = (function (){
22554 try {
22555 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
22556 } catch(_){}
22557 }());
22558 exports = module.exports = require('./lib/_stream_readable.js');
22559 exports.Stream = Stream || exports;
22560 exports.Readable = exports;
22561 exports.Writable = require('./lib/_stream_writable.js');
22562 exports.Duplex = require('./lib/_stream_duplex.js');
22563 exports.Transform = require('./lib/_stream_transform.js');
22564 exports.PassThrough = require('./lib/_stream_passthrough.js');
22565
22566 if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
22567 module.exports = Stream;
22568 }
22569
22570 }).call(this,require('_process'))
22571 },{"./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){
22572 module.exports = require("./lib/_stream_transform.js")
22573
22574 },{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
22575 module.exports = require("./lib/_stream_writable.js")
22576
22577 },{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
22578 // Copyright Joyent, Inc. and other Node contributors.
22579 //
22580 // Permission is hereby granted, free of charge, to any person obtaining a
22581 // copy of this software and associated documentation files (the
22582 // "Software"), to deal in the Software without restriction, including
22583 // without limitation the rights to use, copy, modify, merge, publish,
22584 // distribute, sublicense, and/or sell copies of the Software, and to permit
22585 // persons to whom the Software is furnished to do so, subject to the
22586 // following conditions:
22587 //
22588 // The above copyright notice and this permission notice shall be included
22589 // in all copies or substantial portions of the Software.
22590 //
22591 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22592 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22593 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
22594 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22595 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22596 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22597 // USE OR OTHER DEALINGS IN THE SOFTWARE.
22598
22599 module.exports = Stream;
22600
22601 var EE = require('events').EventEmitter;
22602 var inherits = require('inherits');
22603
22604 inherits(Stream, EE);
22605 Stream.Readable = require('readable-stream/readable.js');
22606 Stream.Writable = require('readable-stream/writable.js');
22607 Stream.Duplex = require('readable-stream/duplex.js');
22608 Stream.Transform = require('readable-stream/transform.js');
22609 Stream.PassThrough = require('readable-stream/passthrough.js');
22610
22611 // Backwards-compat with node 0.4.x
22612 Stream.Stream = Stream;
22613
22614
22615
22616 // old-style streams. Note that the pipe method (the only relevant
22617 // part of this class) is overridden in the Readable class.
22618
22619 function Stream() {
22620 EE.call(this);
22621 }
22622
22623 Stream.prototype.pipe = function(dest, options) {
22624 var source = this;
22625
22626 function ondata(chunk) {
22627 if (dest.writable) {
22628 if (false === dest.write(chunk) && source.pause) {
22629 source.pause();
22630 }
22631 }
22632 }
22633
22634 source.on('data', ondata);
22635
22636 function ondrain() {
22637 if (source.readable && source.resume) {
22638 source.resume();
22639 }
22640 }
22641
22642 dest.on('drain', ondrain);
22643
22644 // If the 'end' option is not supplied, dest.end() will be called when
22645 // source gets the 'end' or 'close' events. Only dest.end() once.
22646 if (!dest._isStdio && (!options || options.end !== false)) {
22647 source.on('end', onend);
22648 source.on('close', onclose);
22649 }
22650
22651 var didOnEnd = false;
22652 function onend() {
22653 if (didOnEnd) return;
22654 didOnEnd = true;
22655
22656 dest.end();
22657 }
22658
22659
22660 function onclose() {
22661 if (didOnEnd) return;
22662 didOnEnd = true;
22663
22664 if (typeof dest.destroy === 'function') dest.destroy();
22665 }
22666
22667 // don't leave dangling pipes when there are errors.
22668 function onerror(er) {
22669 cleanup();
22670 if (EE.listenerCount(this, 'error') === 0) {
22671 throw er; // Unhandled stream error in pipe.
22672 }
22673 }
22674
22675 source.on('error', onerror);
22676 dest.on('error', onerror);
22677
22678 // remove all the event listeners that were added.
22679 function cleanup() {
22680 source.removeListener('data', ondata);
22681 dest.removeListener('drain', ondrain);
22682
22683 source.removeListener('end', onend);
22684 source.removeListener('close', onclose);
22685
22686 source.removeListener('error', onerror);
22687 dest.removeListener('error', onerror);
22688
22689 source.removeListener('end', cleanup);
22690 source.removeListener('close', cleanup);
22691
22692 dest.removeListener('close', cleanup);
22693 }
22694
22695 source.on('end', cleanup);
22696 source.on('close', cleanup);
22697
22698 dest.on('close', cleanup);
22699
22700 dest.emit('pipe', source);
22701
22702 // Allow for unix-like usage: A.pipe(B).pipe(C)
22703 return dest;
22704 };
22705
22706 },{"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){
22707 // Copyright Joyent, Inc. and other Node contributors.
22708 //
22709 // Permission is hereby granted, free of charge, to any person obtaining a
22710 // copy of this software and associated documentation files (the
22711 // "Software"), to deal in the Software without restriction, including
22712 // without limitation the rights to use, copy, modify, merge, publish,
22713 // distribute, sublicense, and/or sell copies of the Software, and to permit
22714 // persons to whom the Software is furnished to do so, subject to the
22715 // following conditions:
22716 //
22717 // The above copyright notice and this permission notice shall be included
22718 // in all copies or substantial portions of the Software.
22719 //
22720 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22721 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22722 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
22723 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22724 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22725 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22726 // USE OR OTHER DEALINGS IN THE SOFTWARE.
22727
22728 var Buffer = require('buffer').Buffer;
22729
22730 var isBufferEncoding = Buffer.isEncoding
22731 || function(encoding) {
22732 switch (encoding && encoding.toLowerCase()) {
22733 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;
22734 default: return false;
22735 }
22736 }
22737
22738
22739 function assertEncoding(encoding) {
22740 if (encoding && !isBufferEncoding(encoding)) {
22741 throw new Error('Unknown encoding: ' + encoding);
22742 }
22743 }
22744
22745 // StringDecoder provides an interface for efficiently splitting a series of
22746 // buffers into a series of JS strings without breaking apart multi-byte
22747 // characters. CESU-8 is handled as part of the UTF-8 encoding.
22748 //
22749 // @TODO Handling all encodings inside a single object makes it very difficult
22750 // to reason about this code, so it should be split up in the future.
22751 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
22752 // points as used by CESU-8.
22753 var StringDecoder = exports.StringDecoder = function(encoding) {
22754 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
22755 assertEncoding(encoding);
22756 switch (this.encoding) {
22757 case 'utf8':
22758 // CESU-8 represents each of Surrogate Pair by 3-bytes
22759 this.surrogateSize = 3;
22760 break;
22761 case 'ucs2':
22762 case 'utf16le':
22763 // UTF-16 represents each of Surrogate Pair by 2-bytes
22764 this.surrogateSize = 2;
22765 this.detectIncompleteChar = utf16DetectIncompleteChar;
22766 break;
22767 case 'base64':
22768 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
22769 this.surrogateSize = 3;
22770 this.detectIncompleteChar = base64DetectIncompleteChar;
22771 break;
22772 default:
22773 this.write = passThroughWrite;
22774 return;
22775 }
22776
22777 // Enough space to store all bytes of a single character. UTF-8 needs 4
22778 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
22779 this.charBuffer = new Buffer(6);
22780 // Number of bytes received for the current incomplete multi-byte character.
22781 this.charReceived = 0;
22782 // Number of bytes expected for the current incomplete multi-byte character.
22783 this.charLength = 0;
22784 };
22785
22786
22787 // write decodes the given buffer and returns it as JS string that is
22788 // guaranteed to not contain any partial multi-byte characters. Any partial
22789 // character found at the end of the buffer is buffered up, and will be
22790 // returned when calling write again with the remaining bytes.
22791 //
22792 // Note: Converting a Buffer containing an orphan surrogate to a String
22793 // currently works, but converting a String to a Buffer (via `new Buffer`, or
22794 // Buffer#write) will replace incomplete surrogates with the unicode
22795 // replacement character. See https://codereview.chromium.org/121173009/ .
22796 StringDecoder.prototype.write = function(buffer) {
22797 var charStr = '';
22798 // if our last write ended with an incomplete multibyte character
22799 while (this.charLength) {
22800 // determine how many remaining bytes this buffer has to offer for this char
22801 var available = (buffer.length >= this.charLength - this.charReceived) ?
22802 this.charLength - this.charReceived :
22803 buffer.length;
22804
22805 // add the new bytes to the char buffer
22806 buffer.copy(this.charBuffer, this.charReceived, 0, available);
22807 this.charReceived += available;
22808
22809 if (this.charReceived < this.charLength) {
22810 // still not enough chars in this buffer? wait for more ...
22811 return '';
22812 }
22813
22814 // remove bytes belonging to the current character from the buffer
22815 buffer = buffer.slice(available, buffer.length);
22816
22817 // get the character that was split
22818 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
22819
22820 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
22821 var charCode = charStr.charCodeAt(charStr.length - 1);
22822 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
22823 this.charLength += this.surrogateSize;
22824 charStr = '';
22825 continue;
22826 }
22827 this.charReceived = this.charLength = 0;
22828
22829 // if there are no more bytes in this buffer, just emit our char
22830 if (buffer.length === 0) {
22831 return charStr;
22832 }
22833 break;
22834 }
22835
22836 // determine and set charLength / charReceived
22837 this.detectIncompleteChar(buffer);
22838
22839 var end = buffer.length;
22840 if (this.charLength) {
22841 // buffer the incomplete character bytes we got
22842 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
22843 end -= this.charReceived;
22844 }
22845
22846 charStr += buffer.toString(this.encoding, 0, end);
22847
22848 var end = charStr.length - 1;
22849 var charCode = charStr.charCodeAt(end);
22850 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
22851 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
22852 var size = this.surrogateSize;
22853 this.charLength += size;
22854 this.charReceived += size;
22855 this.charBuffer.copy(this.charBuffer, size, 0, size);
22856 buffer.copy(this.charBuffer, 0, 0, size);
22857 return charStr.substring(0, end);
22858 }
22859
22860 // or just emit the charStr
22861 return charStr;
22862 };
22863
22864 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
22865 // the end of the given buffer. If so, it sets this.charLength to the byte
22866 // length that character, and sets this.charReceived to the number of bytes
22867 // that are available for this character.
22868 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
22869 // determine how many bytes we have to check at the end of this buffer
22870 var i = (buffer.length >= 3) ? 3 : buffer.length;
22871
22872 // Figure out if one of the last i bytes of our buffer announces an
22873 // incomplete char.
22874 for (; i > 0; i--) {
22875 var c = buffer[buffer.length - i];
22876
22877 // See http://en.wikipedia.org/wiki/UTF-8#Description
22878
22879 // 110XXXXX
22880 if (i == 1 && c >> 5 == 0x06) {
22881 this.charLength = 2;
22882 break;
22883 }
22884
22885 // 1110XXXX
22886 if (i <= 2 && c >> 4 == 0x0E) {
22887 this.charLength = 3;
22888 break;
22889 }
22890
22891 // 11110XXX
22892 if (i <= 3 && c >> 3 == 0x1E) {
22893 this.charLength = 4;
22894 break;
22895 }
22896 }
22897 this.charReceived = i;
22898 };
22899
22900 StringDecoder.prototype.end = function(buffer) {
22901 var res = '';
22902 if (buffer && buffer.length)
22903 res = this.write(buffer);
22904
22905 if (this.charReceived) {
22906 var cr = this.charReceived;
22907 var buf = this.charBuffer;
22908 var enc = this.encoding;
22909 res += buf.slice(0, cr).toString(enc);
22910 }
22911
22912 return res;
22913 };
22914
22915 function passThroughWrite(buffer) {
22916 return buffer.toString(this.encoding);
22917 }
22918
22919 function utf16DetectIncompleteChar(buffer) {
22920 this.charReceived = buffer.length % 2;
22921 this.charLength = this.charReceived ? 2 : 0;
22922 }
22923
22924 function base64DetectIncompleteChar(buffer) {
22925 this.charReceived = buffer.length % 3;
22926 this.charLength = this.charReceived ? 3 : 0;
22927 }
22928
22929 },{"buffer":5}],27:[function(require,module,exports){
22930 (function (global){
22931
22932 /**
22933 * Module exports.
22934 */
22935
22936 module.exports = deprecate;
22937
22938 /**
22939 * Mark that a method should not be used.
22940 * Returns a modified function which warns once by default.
22941 *
22942 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
22943 *
22944 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
22945 * will throw an Error when invoked.
22946 *
22947 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
22948 * will invoke `console.trace()` instead of `console.error()`.
22949 *
22950 * @param {Function} fn - the function to deprecate
22951 * @param {String} msg - the string to print to the console when `fn` is invoked
22952 * @returns {Function} a new "deprecated" version of `fn`
22953 * @api public
22954 */
22955
22956 function deprecate (fn, msg) {
22957 if (config('noDeprecation')) {
22958 return fn;
22959 }
22960
22961 var warned = false;
22962 function deprecated() {
22963 if (!warned) {
22964 if (config('throwDeprecation')) {
22965 throw new Error(msg);
22966 } else if (config('traceDeprecation')) {
22967 console.trace(msg);
22968 } else {
22969 console.warn(msg);
22970 }
22971 warned = true;
22972 }
22973 return fn.apply(this, arguments);
22974 }
22975
22976 return deprecated;
22977 }
22978
22979 /**
22980 * Checks `localStorage` for boolean values for the given `name`.
22981 *
22982 * @param {String} name
22983 * @returns {Boolean}
22984 * @api private
22985 */
22986
22987 function config (name) {
22988 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
22989 try {
22990 if (!global.localStorage) return false;
22991 } catch (_) {
22992 return false;
22993 }
22994 var val = global.localStorage[name];
22995 if (null == val) return false;
22996 return String(val).toLowerCase() === 'true';
22997 }
22998
22999 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
23000 },{}],28:[function(require,module,exports){
23001 arguments[4][9][0].apply(exports,arguments)
23002 },{"dup":9}],29:[function(require,module,exports){
23003 module.exports = function isBuffer(arg) {
23004 return arg && typeof arg === 'object'
23005 && typeof arg.copy === 'function'
23006 && typeof arg.fill === 'function'
23007 && typeof arg.readUInt8 === 'function';
23008 }
23009 },{}],30:[function(require,module,exports){
23010 (function (process,global){
23011 // Copyright Joyent, Inc. and other Node contributors.
23012 //
23013 // Permission is hereby granted, free of charge, to any person obtaining a
23014 // copy of this software and associated documentation files (the
23015 // "Software"), to deal in the Software without restriction, including
23016 // without limitation the rights to use, copy, modify, merge, publish,
23017 // distribute, sublicense, and/or sell copies of the Software, and to permit
23018 // persons to whom the Software is furnished to do so, subject to the
23019 // following conditions:
23020 //
23021 // The above copyright notice and this permission notice shall be included
23022 // in all copies or substantial portions of the Software.
23023 //
23024 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23025 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23026 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23027 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23028 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23029 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23030 // USE OR OTHER DEALINGS IN THE SOFTWARE.
23031
23032 var formatRegExp = /%[sdj%]/g;
23033 exports.format = function(f) {
23034 if (!isString(f)) {
23035 var objects = [];
23036 for (var i = 0; i < arguments.length; i++) {
23037 objects.push(inspect(arguments[i]));
23038 }
23039 return objects.join(' ');
23040 }
23041
23042 var i = 1;
23043 var args = arguments;
23044 var len = args.length;
23045 var str = String(f).replace(formatRegExp, function(x) {
23046 if (x === '%%') return '%';
23047 if (i >= len) return x;
23048 switch (x) {
23049 case '%s': return String(args[i++]);
23050 case '%d': return Number(args[i++]);
23051 case '%j':
23052 try {
23053 return JSON.stringify(args[i++]);
23054 } catch (_) {
23055 return '[Circular]';
23056 }
23057 default:
23058 return x;
23059 }
23060 });
23061 for (var x = args[i]; i < len; x = args[++i]) {
23062 if (isNull(x) || !isObject(x)) {
23063 str += ' ' + x;
23064 } else {
23065 str += ' ' + inspect(x);
23066 }
23067 }
23068 return str;
23069 };
23070
23071
23072 // Mark that a method should not be used.
23073 // Returns a modified function which warns once by default.
23074 // If --no-deprecation is set, then it is a no-op.
23075 exports.deprecate = function(fn, msg) {
23076 // Allow for deprecating things in the process of starting up.
23077 if (isUndefined(global.process)) {
23078 return function() {
23079 return exports.deprecate(fn, msg).apply(this, arguments);
23080 };
23081 }
23082
23083 if (process.noDeprecation === true) {
23084 return fn;
23085 }
23086
23087 var warned = false;
23088 function deprecated() {
23089 if (!warned) {
23090 if (process.throwDeprecation) {
23091 throw new Error(msg);
23092 } else if (process.traceDeprecation) {
23093 console.trace(msg);
23094 } else {
23095 console.error(msg);
23096 }
23097 warned = true;
23098 }
23099 return fn.apply(this, arguments);
23100 }
23101
23102 return deprecated;
23103 };
23104
23105
23106 var debugs = {};
23107 var debugEnviron;
23108 exports.debuglog = function(set) {
23109 if (isUndefined(debugEnviron))
23110 debugEnviron = process.env.NODE_DEBUG || '';
23111 set = set.toUpperCase();
23112 if (!debugs[set]) {
23113 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
23114 var pid = process.pid;
23115 debugs[set] = function() {
23116 var msg = exports.format.apply(exports, arguments);
23117 console.error('%s %d: %s', set, pid, msg);
23118 };
23119 } else {
23120 debugs[set] = function() {};
23121 }
23122 }
23123 return debugs[set];
23124 };
23125
23126
23127 /**
23128 * Echos the value of a value. Trys to print the value out
23129 * in the best way possible given the different types.
23130 *
23131 * @param {Object} obj The object to print out.
23132 * @param {Object} opts Optional options object that alters the output.
23133 */
23134 /* legacy: obj, showHidden, depth, colors*/
23135 function inspect(obj, opts) {
23136 // default options
23137 var ctx = {
23138 seen: [],
23139 stylize: stylizeNoColor
23140 };
23141 // legacy...
23142 if (arguments.length >= 3) ctx.depth = arguments[2];
23143 if (arguments.length >= 4) ctx.colors = arguments[3];
23144 if (isBoolean(opts)) {
23145 // legacy...
23146 ctx.showHidden = opts;
23147 } else if (opts) {
23148 // got an "options" object
23149 exports._extend(ctx, opts);
23150 }
23151 // set default options
23152 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
23153 if (isUndefined(ctx.depth)) ctx.depth = 2;
23154 if (isUndefined(ctx.colors)) ctx.colors = false;
23155 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
23156 if (ctx.colors) ctx.stylize = stylizeWithColor;
23157 return formatValue(ctx, obj, ctx.depth);
23158 }
23159 exports.inspect = inspect;
23160
23161
23162 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
23163 inspect.colors = {
23164 'bold' : [1, 22],
23165 'italic' : [3, 23],
23166 'underline' : [4, 24],
23167 'inverse' : [7, 27],
23168 'white' : [37, 39],
23169 'grey' : [90, 39],
23170 'black' : [30, 39],
23171 'blue' : [34, 39],
23172 'cyan' : [36, 39],
23173 'green' : [32, 39],
23174 'magenta' : [35, 39],
23175 'red' : [31, 39],
23176 'yellow' : [33, 39]
23177 };
23178
23179 // Don't use 'blue' not visible on cmd.exe
23180 inspect.styles = {
23181 'special': 'cyan',
23182 'number': 'yellow',
23183 'boolean': 'yellow',
23184 'undefined': 'grey',
23185 'null': 'bold',
23186 'string': 'green',
23187 'date': 'magenta',
23188 // "name": intentionally not styling
23189 'regexp': 'red'
23190 };
23191
23192
23193 function stylizeWithColor(str, styleType) {
23194 var style = inspect.styles[styleType];
23195
23196 if (style) {
23197 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
23198 '\u001b[' + inspect.colors[style][1] + 'm';
23199 } else {
23200 return str;
23201 }
23202 }
23203
23204
23205 function stylizeNoColor(str, styleType) {
23206 return str;
23207 }
23208
23209
23210 function arrayToHash(array) {
23211 var hash = {};
23212
23213 array.forEach(function(val, idx) {
23214 hash[val] = true;
23215 });
23216
23217 return hash;
23218 }
23219
23220
23221 function formatValue(ctx, value, recurseTimes) {
23222 // Provide a hook for user-specified inspect functions.
23223 // Check that value is an object with an inspect function on it
23224 if (ctx.customInspect &&
23225 value &&
23226 isFunction(value.inspect) &&
23227 // Filter out the util module, it's inspect function is special
23228 value.inspect !== exports.inspect &&
23229 // Also filter out any prototype objects using the circular check.
23230 !(value.constructor && value.constructor.prototype === value)) {
23231 var ret = value.inspect(recurseTimes, ctx);
23232 if (!isString(ret)) {
23233 ret = formatValue(ctx, ret, recurseTimes);
23234 }
23235 return ret;
23236 }
23237
23238 // Primitive types cannot have properties
23239 var primitive = formatPrimitive(ctx, value);
23240 if (primitive) {
23241 return primitive;
23242 }
23243
23244 // Look up the keys of the object.
23245 var keys = Object.keys(value);
23246 var visibleKeys = arrayToHash(keys);
23247
23248 if (ctx.showHidden) {
23249 keys = Object.getOwnPropertyNames(value);
23250 }
23251
23252 // IE doesn't make error fields non-enumerable
23253 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
23254 if (isError(value)
23255 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
23256 return formatError(value);
23257 }
23258
23259 // Some type of object without properties can be shortcutted.
23260 if (keys.length === 0) {
23261 if (isFunction(value)) {
23262 var name = value.name ? ': ' + value.name : '';
23263 return ctx.stylize('[Function' + name + ']', 'special');
23264 }
23265 if (isRegExp(value)) {
23266 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
23267 }
23268 if (isDate(value)) {
23269 return ctx.stylize(Date.prototype.toString.call(value), 'date');
23270 }
23271 if (isError(value)) {
23272 return formatError(value);
23273 }
23274 }
23275
23276 var base = '', array = false, braces = ['{', '}'];
23277
23278 // Make Array say that they are Array
23279 if (isArray(value)) {
23280 array = true;
23281 braces = ['[', ']'];
23282 }
23283
23284 // Make functions say that they are functions
23285 if (isFunction(value)) {
23286 var n = value.name ? ': ' + value.name : '';
23287 base = ' [Function' + n + ']';
23288 }
23289
23290 // Make RegExps say that they are RegExps
23291 if (isRegExp(value)) {
23292 base = ' ' + RegExp.prototype.toString.call(value);
23293 }
23294
23295 // Make dates with properties first say the date
23296 if (isDate(value)) {
23297 base = ' ' + Date.prototype.toUTCString.call(value);
23298 }
23299
23300 // Make error with message first say the error
23301 if (isError(value)) {
23302 base = ' ' + formatError(value);
23303 }
23304
23305 if (keys.length === 0 && (!array || value.length == 0)) {
23306 return braces[0] + base + braces[1];
23307 }
23308
23309 if (recurseTimes < 0) {
23310 if (isRegExp(value)) {
23311 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
23312 } else {
23313 return ctx.stylize('[Object]', 'special');
23314 }
23315 }
23316
23317 ctx.seen.push(value);
23318
23319 var output;
23320 if (array) {
23321 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
23322 } else {
23323 output = keys.map(function(key) {
23324 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
23325 });
23326 }
23327
23328 ctx.seen.pop();
23329
23330 return reduceToSingleString(output, base, braces);
23331 }
23332
23333
23334 function formatPrimitive(ctx, value) {
23335 if (isUndefined(value))
23336 return ctx.stylize('undefined', 'undefined');
23337 if (isString(value)) {
23338 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
23339 .replace(/'/g, "\\'")
23340 .replace(/\\"/g, '"') + '\'';
23341 return ctx.stylize(simple, 'string');
23342 }
23343 if (isNumber(value))
23344 return ctx.stylize('' + value, 'number');
23345 if (isBoolean(value))
23346 return ctx.stylize('' + value, 'boolean');
23347 // For some reason typeof null is "object", so special case here.
23348 if (isNull(value))
23349 return ctx.stylize('null', 'null');
23350 }
23351
23352
23353 function formatError(value) {
23354 return '[' + Error.prototype.toString.call(value) + ']';
23355 }
23356
23357
23358 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
23359 var output = [];
23360 for (var i = 0, l = value.length; i < l; ++i) {
23361 if (hasOwnProperty(value, String(i))) {
23362 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
23363 String(i), true));
23364 } else {
23365 output.push('');
23366 }
23367 }
23368 keys.forEach(function(key) {
23369 if (!key.match(/^\d+$/)) {
23370 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
23371 key, true));
23372 }
23373 });
23374 return output;
23375 }
23376
23377
23378 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
23379 var name, str, desc;
23380 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
23381 if (desc.get) {
23382 if (desc.set) {
23383 str = ctx.stylize('[Getter/Setter]', 'special');
23384 } else {
23385 str = ctx.stylize('[Getter]', 'special');
23386 }
23387 } else {
23388 if (desc.set) {
23389 str = ctx.stylize('[Setter]', 'special');
23390 }
23391 }
23392 if (!hasOwnProperty(visibleKeys, key)) {
23393 name = '[' + key + ']';
23394 }
23395 if (!str) {
23396 if (ctx.seen.indexOf(desc.value) < 0) {
23397 if (isNull(recurseTimes)) {
23398 str = formatValue(ctx, desc.value, null);
23399 } else {
23400 str = formatValue(ctx, desc.value, recurseTimes - 1);
23401 }
23402 if (str.indexOf('\n') > -1) {
23403 if (array) {
23404 str = str.split('\n').map(function(line) {
23405 return ' ' + line;
23406 }).join('\n').substr(2);
23407 } else {
23408 str = '\n' + str.split('\n').map(function(line) {
23409 return ' ' + line;
23410 }).join('\n');
23411 }
23412 }
23413 } else {
23414 str = ctx.stylize('[Circular]', 'special');
23415 }
23416 }
23417 if (isUndefined(name)) {
23418 if (array && key.match(/^\d+$/)) {
23419 return str;
23420 }
23421 name = JSON.stringify('' + key);
23422 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
23423 name = name.substr(1, name.length - 2);
23424 name = ctx.stylize(name, 'name');
23425 } else {
23426 name = name.replace(/'/g, "\\'")
23427 .replace(/\\"/g, '"')
23428 .replace(/(^"|"$)/g, "'");
23429 name = ctx.stylize(name, 'string');
23430 }
23431 }
23432
23433 return name + ': ' + str;
23434 }
23435
23436
23437 function reduceToSingleString(output, base, braces) {
23438 var numLinesEst = 0;
23439 var length = output.reduce(function(prev, cur) {
23440 numLinesEst++;
23441 if (cur.indexOf('\n') >= 0) numLinesEst++;
23442 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
23443 }, 0);
23444
23445 if (length > 60) {
23446 return braces[0] +
23447 (base === '' ? '' : base + '\n ') +
23448 ' ' +
23449 output.join(',\n ') +
23450 ' ' +
23451 braces[1];
23452 }
23453
23454 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
23455 }
23456
23457
23458 // NOTE: These type checking functions intentionally don't use `instanceof`
23459 // because it is fragile and can be easily faked with `Object.create()`.
23460 function isArray(ar) {
23461 return Array.isArray(ar);
23462 }
23463 exports.isArray = isArray;
23464
23465 function isBoolean(arg) {
23466 return typeof arg === 'boolean';
23467 }
23468 exports.isBoolean = isBoolean;
23469
23470 function isNull(arg) {
23471 return arg === null;
23472 }
23473 exports.isNull = isNull;
23474
23475 function isNullOrUndefined(arg) {
23476 return arg == null;
23477 }
23478 exports.isNullOrUndefined = isNullOrUndefined;
23479
23480 function isNumber(arg) {
23481 return typeof arg === 'number';
23482 }
23483 exports.isNumber = isNumber;
23484
23485 function isString(arg) {
23486 return typeof arg === 'string';
23487 }
23488 exports.isString = isString;
23489
23490 function isSymbol(arg) {
23491 return typeof arg === 'symbol';
23492 }
23493 exports.isSymbol = isSymbol;
23494
23495 function isUndefined(arg) {
23496 return arg === void 0;
23497 }
23498 exports.isUndefined = isUndefined;
23499
23500 function isRegExp(re) {
23501 return isObject(re) && objectToString(re) === '[object RegExp]';
23502 }
23503 exports.isRegExp = isRegExp;
23504
23505 function isObject(arg) {
23506 return typeof arg === 'object' && arg !== null;
23507 }
23508 exports.isObject = isObject;
23509
23510 function isDate(d) {
23511 return isObject(d) && objectToString(d) === '[object Date]';
23512 }
23513 exports.isDate = isDate;
23514
23515 function isError(e) {
23516 return isObject(e) &&
23517 (objectToString(e) === '[object Error]' || e instanceof Error);
23518 }
23519 exports.isError = isError;
23520
23521 function isFunction(arg) {
23522 return typeof arg === 'function';
23523 }
23524 exports.isFunction = isFunction;
23525
23526 function isPrimitive(arg) {
23527 return arg === null ||
23528 typeof arg === 'boolean' ||
23529 typeof arg === 'number' ||
23530 typeof arg === 'string' ||
23531 typeof arg === 'symbol' || // ES6 symbol
23532 typeof arg === 'undefined';
23533 }
23534 exports.isPrimitive = isPrimitive;
23535
23536 exports.isBuffer = require('./support/isBuffer');
23537
23538 function objectToString(o) {
23539 return Object.prototype.toString.call(o);
23540 }
23541
23542
23543 function pad(n) {
23544 return n < 10 ? '0' + n.toString(10) : n.toString(10);
23545 }
23546
23547
23548 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
23549 'Oct', 'Nov', 'Dec'];
23550
23551 // 26 Feb 16:19:34
23552 function timestamp() {
23553 var d = new Date();
23554 var time = [pad(d.getHours()),
23555 pad(d.getMinutes()),
23556 pad(d.getSeconds())].join(':');
23557 return [d.getDate(), months[d.getMonth()], time].join(' ');
23558 }
23559
23560
23561 // log is just a thin wrapper to console.log that prepends a timestamp
23562 exports.log = function() {
23563 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
23564 };
23565
23566
23567 /**
23568 * Inherit the prototype methods from one constructor into another.
23569 *
23570 * The Function.prototype.inherits from lang.js rewritten as a standalone
23571 * function (not on Function.prototype). NOTE: If this file is to be loaded
23572 * during bootstrapping this function needs to be rewritten using some native
23573 * functions as prototype setup using normal JavaScript does not work as
23574 * expected during bootstrapping (see mirror.js in r114903).
23575 *
23576 * @param {function} ctor Constructor function which needs to inherit the
23577 * prototype.
23578 * @param {function} superCtor Constructor function to inherit prototype from.
23579 */
23580 exports.inherits = require('inherits');
23581
23582 exports._extend = function(origin, add) {
23583 // Don't do anything if add isn't an object
23584 if (!add || !isObject(add)) return origin;
23585
23586 var keys = Object.keys(add);
23587 var i = keys.length;
23588 while (i--) {
23589 origin[keys[i]] = add[keys[i]];
23590 }
23591 return origin;
23592 };
23593
23594 function hasOwnProperty(obj, prop) {
23595 return Object.prototype.hasOwnProperty.call(obj, prop);
23596 }
23597
23598 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
23599 },{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
23600 (function (Buffer){
23601 const createKeccakHash = require('keccak')
23602 const secp256k1 = require('secp256k1')
23603 const assert = require('assert')
23604 const rlp = require('rlp')
23605 const BN = require('bn.js')
23606 const createHash = require('create-hash')
23607 Object.assign(exports, require('ethjs-util'))
23608
23609 /**
23610 * the max integer that this VM can handle (a ```BN```)
23611 * @var {BN} MAX_INTEGER
23612 */
23613 exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
23614
23615 /**
23616 * 2^256 (a ```BN```)
23617 * @var {BN} TWO_POW256
23618 */
23619 exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
23620
23621 /**
23622 * SHA3-256 hash of null (a ```String```)
23623 * @var {String} SHA3_NULL_S
23624 */
23625 exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
23626
23627 /**
23628 * SHA3-256 hash of null (a ```Buffer```)
23629 * @var {Buffer} SHA3_NULL
23630 */
23631 exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
23632
23633 /**
23634 * SHA3-256 of an RLP of an empty array (a ```String```)
23635 * @var {String} SHA3_RLP_ARRAY_S
23636 */
23637 exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
23638
23639 /**
23640 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
23641 * @var {Buffer} SHA3_RLP_ARRAY
23642 */
23643 exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
23644
23645 /**
23646 * SHA3-256 hash of the RLP of null (a ```String```)
23647 * @var {String} SHA3_RLP_S
23648 */
23649 exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
23650
23651 /**
23652 * SHA3-256 hash of the RLP of null (a ```Buffer```)
23653 * @var {Buffer} SHA3_RLP
23654 */
23655 exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
23656
23657 /**
23658 * [`BN`](https://github.com/indutny/bn.js)
23659 * @var {Function}
23660 */
23661 exports.BN = BN
23662
23663 /**
23664 * [`rlp`](https://github.com/ethereumjs/rlp)
23665 * @var {Function}
23666 */
23667 exports.rlp = rlp
23668
23669 /**
23670 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
23671 * @var {Object}
23672 */
23673 exports.secp256k1 = secp256k1
23674
23675 /**
23676 * Returns a buffer filled with 0s
23677 * @method zeros
23678 * @param {Number} bytes the number of bytes the buffer should be
23679 * @return {Buffer}
23680 */
23681 exports.zeros = function (bytes) {
23682 return Buffer.allocUnsafe(bytes).fill(0)
23683 }
23684
23685 /**
23686 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
23687 * Or it truncates the beginning if it exceeds.
23688 * @method lsetLength
23689 * @param {Buffer|Array} msg the value to pad
23690 * @param {Number} length the number of bytes the output should be
23691 * @param {Boolean} [right=false] whether to start padding form the left or right
23692 * @return {Buffer|Array}
23693 */
23694 exports.setLengthLeft = exports.setLength = function (msg, length, right) {
23695 var buf = exports.zeros(length)
23696 msg = exports.toBuffer(msg)
23697 if (right) {
23698 if (msg.length < length) {
23699 msg.copy(buf)
23700 return buf
23701 }
23702 return msg.slice(0, length)
23703 } else {
23704 if (msg.length < length) {
23705 msg.copy(buf, length - msg.length)
23706 return buf
23707 }
23708 return msg.slice(-length)
23709 }
23710 }
23711
23712 /**
23713 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
23714 * Or it truncates the beginning if it exceeds.
23715 * @param {Buffer|Array} msg the value to pad
23716 * @param {Number} length the number of bytes the output should be
23717 * @return {Buffer|Array}
23718 */
23719 exports.setLengthRight = function (msg, length) {
23720 return exports.setLength(msg, length, true)
23721 }
23722
23723 /**
23724 * Trims leading zeros from a `Buffer` or an `Array`
23725 * @param {Buffer|Array|String} a
23726 * @return {Buffer|Array|String}
23727 */
23728 exports.unpad = exports.stripZeros = function (a) {
23729 a = exports.stripHexPrefix(a)
23730 var first = a[0]
23731 while (a.length > 0 && first.toString() === '0') {
23732 a = a.slice(1)
23733 first = a[0]
23734 }
23735 return a
23736 }
23737 /**
23738 * 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.
23739 * @param {*} v the value
23740 */
23741 exports.toBuffer = function (v) {
23742 if (!Buffer.isBuffer(v)) {
23743 if (Array.isArray(v)) {
23744 v = Buffer.from(v)
23745 } else if (typeof v === 'string') {
23746 if (exports.isHexPrefixed(v)) {
23747 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
23748 } else {
23749 v = Buffer.from(v)
23750 }
23751 } else if (typeof v === 'number') {
23752 v = exports.intToBuffer(v)
23753 } else if (v === null || v === undefined) {
23754 v = Buffer.allocUnsafe(0)
23755 } else if (v.toArray) {
23756 // converts a BN to a Buffer
23757 v = Buffer.from(v.toArray())
23758 } else {
23759 throw new Error('invalid type')
23760 }
23761 }
23762 return v
23763 }
23764
23765 /**
23766 * Converts a `Buffer` to a `Number`
23767 * @param {Buffer} buf
23768 * @return {Number}
23769 * @throws If the input number exceeds 53 bits.
23770 */
23771 exports.bufferToInt = function (buf) {
23772 return new BN(exports.toBuffer(buf)).toNumber()
23773 }
23774
23775 /**
23776 * Converts a `Buffer` into a hex `String`
23777 * @param {Buffer} buf
23778 * @return {String}
23779 */
23780 exports.bufferToHex = function (buf) {
23781 buf = exports.toBuffer(buf)
23782 return '0x' + buf.toString('hex')
23783 }
23784
23785 /**
23786 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
23787 * @param {Buffer} num
23788 * @return {BN}
23789 */
23790 exports.fromSigned = function (num) {
23791 return new BN(num).fromTwos(256)
23792 }
23793
23794 /**
23795 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
23796 * @param {BN} num
23797 * @return {Buffer}
23798 */
23799 exports.toUnsigned = function (num) {
23800 return Buffer.from(num.toTwos(256).toArray())
23801 }
23802
23803 /**
23804 * Creates SHA-3 hash of the input
23805 * @param {Buffer|Array|String|Number} a the input data
23806 * @param {Number} [bits=256] the SHA width
23807 * @return {Buffer}
23808 */
23809 exports.sha3 = function (a, bits) {
23810 a = exports.toBuffer(a)
23811 if (!bits) bits = 256
23812
23813 return createKeccakHash('keccak' + bits).update(a).digest()
23814 }
23815
23816 /**
23817 * Creates SHA256 hash of the input
23818 * @param {Buffer|Array|String|Number} a the input data
23819 * @return {Buffer}
23820 */
23821 exports.sha256 = function (a) {
23822 a = exports.toBuffer(a)
23823 return createHash('sha256').update(a).digest()
23824 }
23825
23826 /**
23827 * Creates RIPEMD160 hash of the input
23828 * @param {Buffer|Array|String|Number} a the input data
23829 * @param {Boolean} padded whether it should be padded to 256 bits or not
23830 * @return {Buffer}
23831 */
23832 exports.ripemd160 = function (a, padded) {
23833 a = exports.toBuffer(a)
23834 var hash = createHash('rmd160').update(a).digest()
23835 if (padded === true) {
23836 return exports.setLength(hash, 32)
23837 } else {
23838 return hash
23839 }
23840 }
23841
23842 /**
23843 * Creates SHA-3 hash of the RLP encoded version of the input
23844 * @param {Buffer|Array|String|Number} a the input data
23845 * @return {Buffer}
23846 */
23847 exports.rlphash = function (a) {
23848 return exports.sha3(rlp.encode(a))
23849 }
23850
23851 /**
23852 * Checks if the private key satisfies the rules of the curve secp256k1.
23853 * @param {Buffer} privateKey
23854 * @return {Boolean}
23855 */
23856 exports.isValidPrivate = function (privateKey) {
23857 return secp256k1.privateKeyVerify(privateKey)
23858 }
23859
23860 /**
23861 * Checks if the public key satisfies the rules of the curve secp256k1
23862 * and the requirements of Ethereum.
23863 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
23864 * @param {Boolean} [sanitize=false] Accept public keys in other formats
23865 * @return {Boolean}
23866 */
23867 exports.isValidPublic = function (publicKey, sanitize) {
23868 if (publicKey.length === 64) {
23869 // Convert to SEC1 for secp256k1
23870 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
23871 }
23872
23873 if (!sanitize) {
23874 return false
23875 }
23876
23877 return secp256k1.publicKeyVerify(publicKey)
23878 }
23879
23880 /**
23881 * Returns the ethereum address of a given public key.
23882 * Accepts "Ethereum public keys" and SEC1 encoded keys.
23883 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
23884 * @param {Boolean} [sanitize=false] Accept public keys in other formats
23885 * @return {Buffer}
23886 */
23887 exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
23888 pubKey = exports.toBuffer(pubKey)
23889 if (sanitize && (pubKey.length !== 64)) {
23890 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
23891 }
23892 assert(pubKey.length === 64)
23893 // Only take the lower 160bits of the hash
23894 return exports.sha3(pubKey).slice(-20)
23895 }
23896
23897 /**
23898 * Returns the ethereum public key of a given private key
23899 * @param {Buffer} privateKey A private key must be 256 bits wide
23900 * @return {Buffer}
23901 */
23902 var privateToPublic = exports.privateToPublic = function (privateKey) {
23903 privateKey = exports.toBuffer(privateKey)
23904 // skip the type flag and use the X, Y points
23905 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
23906 }
23907
23908 /**
23909 * Converts a public key to the Ethereum format.
23910 * @param {Buffer} publicKey
23911 * @return {Buffer}
23912 */
23913 exports.importPublic = function (publicKey) {
23914 publicKey = exports.toBuffer(publicKey)
23915 if (publicKey.length !== 64) {
23916 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
23917 }
23918 return publicKey
23919 }
23920
23921 /**
23922 * ECDSA sign
23923 * @param {Buffer} msgHash
23924 * @param {Buffer} privateKey
23925 * @return {Object}
23926 */
23927 exports.ecsign = function (msgHash, privateKey) {
23928 var sig = secp256k1.sign(msgHash, privateKey)
23929
23930 var ret = {}
23931 ret.r = sig.signature.slice(0, 32)
23932 ret.s = sig.signature.slice(32, 64)
23933 ret.v = sig.recovery + 27
23934 return ret
23935 }
23936
23937 /**
23938 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
23939 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
23940 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
23941 * used to produce the signature.
23942 * @param message
23943 * @returns {Buffer} hash
23944 */
23945 exports.hashPersonalMessage = function (message) {
23946 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
23947 return exports.sha3(Buffer.concat([prefix, message]))
23948 }
23949
23950 /**
23951 * ECDSA public key recovery from signature
23952 * @param {Buffer} msgHash
23953 * @param {Number} v
23954 * @param {Buffer} r
23955 * @param {Buffer} s
23956 * @return {Buffer} publicKey
23957 */
23958 exports.ecrecover = function (msgHash, v, r, s) {
23959 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
23960 var recovery = v - 27
23961 if (recovery !== 0 && recovery !== 1) {
23962 throw new Error('Invalid signature v value')
23963 }
23964 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
23965 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
23966 }
23967
23968 /**
23969 * Convert signature parameters into the format of `eth_sign` RPC method
23970 * @param {Number} v
23971 * @param {Buffer} r
23972 * @param {Buffer} s
23973 * @return {String} sig
23974 */
23975 exports.toRpcSig = function (v, r, s) {
23976 // NOTE: with potential introduction of chainId this might need to be updated
23977 if (v !== 27 && v !== 28) {
23978 throw new Error('Invalid recovery id')
23979 }
23980
23981 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
23982 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
23983 return exports.bufferToHex(Buffer.concat([
23984 exports.setLengthLeft(r, 32),
23985 exports.setLengthLeft(s, 32),
23986 exports.toBuffer(v - 27)
23987 ]))
23988 }
23989
23990 /**
23991 * Convert signature format of the `eth_sign` RPC method to signature parameters
23992 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
23993 * @param {String} sig
23994 * @return {Object}
23995 */
23996 exports.fromRpcSig = function (sig) {
23997 sig = exports.toBuffer(sig)
23998
23999 // NOTE: with potential introduction of chainId this might need to be updated
24000 if (sig.length !== 65) {
24001 throw new Error('Invalid signature length')
24002 }
24003
24004 var v = sig[64]
24005 // support both versions of `eth_sign` responses
24006 if (v < 27) {
24007 v += 27
24008 }
24009
24010 return {
24011 v: v,
24012 r: sig.slice(0, 32),
24013 s: sig.slice(32, 64)
24014 }
24015 }
24016
24017 /**
24018 * Returns the ethereum address of a given private key
24019 * @param {Buffer} privateKey A private key must be 256 bits wide
24020 * @return {Buffer}
24021 */
24022 exports.privateToAddress = function (privateKey) {
24023 return exports.publicToAddress(privateToPublic(privateKey))
24024 }
24025
24026 /**
24027 * Checks if the address is a valid. Accepts checksummed addresses too
24028 * @param {String} address
24029 * @return {Boolean}
24030 */
24031 exports.isValidAddress = function (address) {
24032 return /^0x[0-9a-fA-F]{40}$/i.test(address)
24033 }
24034
24035 /**
24036 * Returns a checksummed address
24037 * @param {String} address
24038 * @return {String}
24039 */
24040 exports.toChecksumAddress = function (address) {
24041 address = exports.stripHexPrefix(address).toLowerCase()
24042 var hash = exports.sha3(address).toString('hex')
24043 var ret = '0x'
24044
24045 for (var i = 0; i < address.length; i++) {
24046 if (parseInt(hash[i], 16) >= 8) {
24047 ret += address[i].toUpperCase()
24048 } else {
24049 ret += address[i]
24050 }
24051 }
24052
24053 return ret
24054 }
24055
24056 /**
24057 * Checks if the address is a valid checksummed address
24058 * @param {Buffer} address
24059 * @return {Boolean}
24060 */
24061 exports.isValidChecksumAddress = function (address) {
24062 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
24063 }
24064
24065 /**
24066 * Generates an address of a newly created contract
24067 * @param {Buffer} from the address which is creating this new address
24068 * @param {Buffer} nonce the nonce of the from account
24069 * @return {Buffer}
24070 */
24071 exports.generateAddress = function (from, nonce) {
24072 from = exports.toBuffer(from)
24073 nonce = new BN(nonce)
24074
24075 if (nonce.isZero()) {
24076 // in RLP we want to encode null in the case of zero nonce
24077 // read the RLP documentation for an answer if you dare
24078 nonce = null
24079 } else {
24080 nonce = Buffer.from(nonce.toArray())
24081 }
24082
24083 // Only take the lower 160bits of the hash
24084 return exports.rlphash([from, nonce]).slice(-20)
24085 }
24086
24087 /**
24088 * Returns true if the supplied address belongs to a precompiled account
24089 * @param {Buffer|String} address
24090 * @return {Boolean}
24091 */
24092 exports.isPrecompiled = function (address) {
24093 var a = exports.unpad(address)
24094 return a.length === 1 && a[0] > 0 && a[0] < 5
24095 }
24096
24097 /**
24098 * Adds "0x" to a given `String` if it does not already start with "0x"
24099 * @param {String} str
24100 * @return {String}
24101 */
24102 exports.addHexPrefix = function (str) {
24103 if (typeof str !== 'string') {
24104 return str
24105 }
24106
24107 return exports.isHexPrefixed(str) ? str : '0x' + str
24108 }
24109
24110 /**
24111 * Validate ECDSA signature
24112 * @method isValidSignature
24113 * @param {Buffer} v
24114 * @param {Buffer} r
24115 * @param {Buffer} s
24116 * @param {Boolean} [homestead=true]
24117 * @return {Boolean}
24118 */
24119
24120 exports.isValidSignature = function (v, r, s, homestead) {
24121 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
24122 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
24123
24124 if (r.length !== 32 || s.length !== 32) {
24125 return false
24126 }
24127
24128 if (v !== 27 && v !== 28) {
24129 return false
24130 }
24131
24132 r = new BN(r)
24133 s = new BN(s)
24134
24135 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
24136 return false
24137 }
24138
24139 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
24140 return false
24141 }
24142
24143 return true
24144 }
24145
24146 /**
24147 * Converts a `Buffer` or `Array` to JSON
24148 * @param {Buffer|Array} ba
24149 * @return {Array|String|null}
24150 */
24151 exports.baToJSON = function (ba) {
24152 if (Buffer.isBuffer(ba)) {
24153 return '0x' + ba.toString('hex')
24154 } else if (ba instanceof Array) {
24155 var array = []
24156 for (var i = 0; i < ba.length; i++) {
24157 array.push(exports.baToJSON(ba[i]))
24158 }
24159 return array
24160 }
24161 }
24162
24163 /**
24164 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
24165 * @param {Object} self the `Object` to define properties on
24166 * @param {Array} fields an array fields to define. Fields can contain:
24167 * * `name` - the name of the properties
24168 * * `length` - the number of bytes the field can have
24169 * * `allowLess` - if the field can be less than the length
24170 * * `allowEmpty`
24171 * @param {*} data data to be validated against the definitions
24172 */
24173 exports.defineProperties = function (self, fields, data) {
24174 self.raw = []
24175 self._fields = []
24176
24177 // attach the `toJSON`
24178 self.toJSON = function (label) {
24179 if (label) {
24180 var obj = {}
24181 self._fields.forEach(function (field) {
24182 obj[field] = '0x' + self[field].toString('hex')
24183 })
24184 return obj
24185 }
24186 return exports.baToJSON(this.raw)
24187 }
24188
24189 self.serialize = function serialize () {
24190 return rlp.encode(self.raw)
24191 }
24192
24193 fields.forEach(function (field, i) {
24194 self._fields.push(field.name)
24195 function getter () {
24196 return self.raw[i]
24197 }
24198 function setter (v) {
24199 v = exports.toBuffer(v)
24200
24201 if (v.toString('hex') === '00' && !field.allowZero) {
24202 v = Buffer.allocUnsafe(0)
24203 }
24204
24205 if (field.allowLess && field.length) {
24206 v = exports.stripZeros(v)
24207 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
24208 } else if (!(field.allowZero && v.length === 0) && field.length) {
24209 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
24210 }
24211
24212 self.raw[i] = v
24213 }
24214
24215 Object.defineProperty(self, field.name, {
24216 enumerable: true,
24217 configurable: true,
24218 get: getter,
24219 set: setter
24220 })
24221
24222 if (field.default) {
24223 self[field.name] = field.default
24224 }
24225
24226 // attach alias
24227 if (field.alias) {
24228 Object.defineProperty(self, field.alias, {
24229 enumerable: false,
24230 configurable: true,
24231 set: setter,
24232 get: getter
24233 })
24234 }
24235 })
24236
24237 // if the constuctor is passed data
24238 if (data) {
24239 if (typeof data === 'string') {
24240 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
24241 }
24242
24243 if (Buffer.isBuffer(data)) {
24244 data = rlp.decode(data)
24245 }
24246
24247 if (Array.isArray(data)) {
24248 if (data.length > self._fields.length) {
24249 throw (new Error('wrong number of fields in data'))
24250 }
24251
24252 // make sure all the items are buffers
24253 data.forEach(function (d, i) {
24254 self[self._fields[i]] = exports.toBuffer(d)
24255 })
24256 } else if (typeof data === 'object') {
24257 const keys = Object.keys(data)
24258 fields.forEach(function (field) {
24259 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
24260 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
24261 })
24262 } else {
24263 throw new Error('invalid data')
24264 }
24265 }
24266 }
24267
24268 }).call(this,require("buffer").Buffer)
24269 },{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
24270 (function (Buffer){
24271 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
24272 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
24273 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
24274
24275 function check (buffer) {
24276 if (buffer.length < 8) return false
24277 if (buffer.length > 72) return false
24278 if (buffer[0] !== 0x30) return false
24279 if (buffer[1] !== buffer.length - 2) return false
24280 if (buffer[2] !== 0x02) return false
24281
24282 var lenR = buffer[3]
24283 if (lenR === 0) return false
24284 if (5 + lenR >= buffer.length) return false
24285 if (buffer[4 + lenR] !== 0x02) return false
24286
24287 var lenS = buffer[5 + lenR]
24288 if (lenS === 0) return false
24289 if ((6 + lenR + lenS) !== buffer.length) return false
24290
24291 if (buffer[4] & 0x80) return false
24292 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
24293
24294 if (buffer[lenR + 6] & 0x80) return false
24295 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
24296 return true
24297 }
24298
24299 function decode (buffer) {
24300 if (buffer.length < 8) throw new Error('DER sequence length is too short')
24301 if (buffer.length > 72) throw new Error('DER sequence length is too long')
24302 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
24303 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
24304 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
24305
24306 var lenR = buffer[3]
24307 if (lenR === 0) throw new Error('R length is zero')
24308 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
24309 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
24310
24311 var lenS = buffer[5 + lenR]
24312 if (lenS === 0) throw new Error('S length is zero')
24313 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
24314
24315 if (buffer[4] & 0x80) throw new Error('R value is negative')
24316 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
24317
24318 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
24319 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
24320
24321 // non-BIP66 - extract R, S values
24322 return {
24323 r: buffer.slice(4, 4 + lenR),
24324 s: buffer.slice(6 + lenR)
24325 }
24326 }
24327
24328 /*
24329 * Expects r and s to be positive DER integers.
24330 *
24331 * The DER format uses the most significant bit as a sign bit (& 0x80).
24332 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
24333 *
24334 * Examples:
24335 *
24336 * 0 => 0x00
24337 * 1 => 0x01
24338 * -1 => 0xff
24339 * 127 => 0x7f
24340 * -127 => 0x81
24341 * 128 => 0x0080
24342 * -128 => 0x80
24343 * 255 => 0x00ff
24344 * -255 => 0xff01
24345 * 16300 => 0x3fac
24346 * -16300 => 0xc054
24347 * 62300 => 0x00f35c
24348 * -62300 => 0xff0ca4
24349 */
24350 function encode (r, s) {
24351 var lenR = r.length
24352 var lenS = s.length
24353 if (lenR === 0) throw new Error('R length is zero')
24354 if (lenS === 0) throw new Error('S length is zero')
24355 if (lenR > 33) throw new Error('R length is too long')
24356 if (lenS > 33) throw new Error('S length is too long')
24357 if (r[0] & 0x80) throw new Error('R value is negative')
24358 if (s[0] & 0x80) throw new Error('S value is negative')
24359 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
24360 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
24361
24362 var signature = new Buffer(6 + lenR + lenS)
24363
24364 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
24365 signature[0] = 0x30
24366 signature[1] = signature.length - 2
24367 signature[2] = 0x02
24368 signature[3] = r.length
24369 r.copy(signature, 4)
24370 signature[4 + lenR] = 0x02
24371 signature[5 + lenR] = s.length
24372 s.copy(signature, 6 + lenR)
24373
24374 return signature
24375 }
24376
24377 module.exports = {
24378 check: check,
24379 decode: decode,
24380 encode: encode
24381 }
24382
24383 }).call(this,require("buffer").Buffer)
24384 },{"buffer":5}],33:[function(require,module,exports){
24385 (function (module, exports) {
24386 'use strict';
24387
24388 // Utils
24389 function assert (val, msg) {
24390 if (!val) throw new Error(msg || 'Assertion failed');
24391 }
24392
24393 // Could use `inherits` module, but don't want to move from single file
24394 // architecture yet.
24395 function inherits (ctor, superCtor) {
24396 ctor.super_ = superCtor;
24397 var TempCtor = function () {};
24398 TempCtor.prototype = superCtor.prototype;
24399 ctor.prototype = new TempCtor();
24400 ctor.prototype.constructor = ctor;
24401 }
24402
24403 // BN
24404
24405 function BN (number, base, endian) {
24406 if (BN.isBN(number)) {
24407 return number;
24408 }
24409
24410 this.negative = 0;
24411 this.words = null;
24412 this.length = 0;
24413
24414 // Reduction context
24415 this.red = null;
24416
24417 if (number !== null) {
24418 if (base === 'le' || base === 'be') {
24419 endian = base;
24420 base = 10;
24421 }
24422
24423 this._init(number || 0, base || 10, endian || 'be');
24424 }
24425 }
24426 if (typeof module === 'object') {
24427 module.exports = BN;
24428 } else {
24429 exports.BN = BN;
24430 }
24431
24432 BN.BN = BN;
24433 BN.wordSize = 26;
24434
24435 var Buffer;
24436 try {
24437 Buffer = require('buf' + 'fer').Buffer;
24438 } catch (e) {
24439 }
24440
24441 BN.isBN = function isBN (num) {
24442 if (num instanceof BN) {
24443 return true;
24444 }
24445
24446 return num !== null && typeof num === 'object' &&
24447 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
24448 };
24449
24450 BN.max = function max (left, right) {
24451 if (left.cmp(right) > 0) return left;
24452 return right;
24453 };
24454
24455 BN.min = function min (left, right) {
24456 if (left.cmp(right) < 0) return left;
24457 return right;
24458 };
24459
24460 BN.prototype._init = function init (number, base, endian) {
24461 if (typeof number === 'number') {
24462 return this._initNumber(number, base, endian);
24463 }
24464
24465 if (typeof number === 'object') {
24466 return this._initArray(number, base, endian);
24467 }
24468
24469 if (base === 'hex') {
24470 base = 16;
24471 }
24472 assert(base === (base | 0) && base >= 2 && base <= 36);
24473
24474 number = number.toString().replace(/\s+/g, '');
24475 var start = 0;
24476 if (number[0] === '-') {
24477 start++;
24478 }
24479
24480 if (base === 16) {
24481 this._parseHex(number, start);
24482 } else {
24483 this._parseBase(number, base, start);
24484 }
24485
24486 if (number[0] === '-') {
24487 this.negative = 1;
24488 }
24489
24490 this.strip();
24491
24492 if (endian !== 'le') return;
24493
24494 this._initArray(this.toArray(), base, endian);
24495 };
24496
24497 BN.prototype._initNumber = function _initNumber (number, base, endian) {
24498 if (number < 0) {
24499 this.negative = 1;
24500 number = -number;
24501 }
24502 if (number < 0x4000000) {
24503 this.words = [ number & 0x3ffffff ];
24504 this.length = 1;
24505 } else if (number < 0x10000000000000) {
24506 this.words = [
24507 number & 0x3ffffff,
24508 (number / 0x4000000) & 0x3ffffff
24509 ];
24510 this.length = 2;
24511 } else {
24512 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
24513 this.words = [
24514 number & 0x3ffffff,
24515 (number / 0x4000000) & 0x3ffffff,
24516 1
24517 ];
24518 this.length = 3;
24519 }
24520
24521 if (endian !== 'le') return;
24522
24523 // Reverse the bytes
24524 this._initArray(this.toArray(), base, endian);
24525 };
24526
24527 BN.prototype._initArray = function _initArray (number, base, endian) {
24528 // Perhaps a Uint8Array
24529 assert(typeof number.length === 'number');
24530 if (number.length <= 0) {
24531 this.words = [ 0 ];
24532 this.length = 1;
24533 return this;
24534 }
24535
24536 this.length = Math.ceil(number.length / 3);
24537 this.words = new Array(this.length);
24538 for (var i = 0; i < this.length; i++) {
24539 this.words[i] = 0;
24540 }
24541
24542 var j, w;
24543 var off = 0;
24544 if (endian === 'be') {
24545 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
24546 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
24547 this.words[j] |= (w << off) & 0x3ffffff;
24548 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
24549 off += 24;
24550 if (off >= 26) {
24551 off -= 26;
24552 j++;
24553 }
24554 }
24555 } else if (endian === 'le') {
24556 for (i = 0, j = 0; i < number.length; i += 3) {
24557 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
24558 this.words[j] |= (w << off) & 0x3ffffff;
24559 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
24560 off += 24;
24561 if (off >= 26) {
24562 off -= 26;
24563 j++;
24564 }
24565 }
24566 }
24567 return this.strip();
24568 };
24569
24570 function parseHex (str, start, end) {
24571 var r = 0;
24572 var len = Math.min(str.length, end);
24573 for (var i = start; i < len; i++) {
24574 var c = str.charCodeAt(i) - 48;
24575
24576 r <<= 4;
24577
24578 // 'a' - 'f'
24579 if (c >= 49 && c <= 54) {
24580 r |= c - 49 + 0xa;
24581
24582 // 'A' - 'F'
24583 } else if (c >= 17 && c <= 22) {
24584 r |= c - 17 + 0xa;
24585
24586 // '0' - '9'
24587 } else {
24588 r |= c & 0xf;
24589 }
24590 }
24591 return r;
24592 }
24593
24594 BN.prototype._parseHex = function _parseHex (number, start) {
24595 // Create possibly bigger array to ensure that it fits the number
24596 this.length = Math.ceil((number.length - start) / 6);
24597 this.words = new Array(this.length);
24598 for (var i = 0; i < this.length; i++) {
24599 this.words[i] = 0;
24600 }
24601
24602 var j, w;
24603 // Scan 24-bit chunks and add them to the number
24604 var off = 0;
24605 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
24606 w = parseHex(number, i, i + 6);
24607 this.words[j] |= (w << off) & 0x3ffffff;
24608 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
24609 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
24610 off += 24;
24611 if (off >= 26) {
24612 off -= 26;
24613 j++;
24614 }
24615 }
24616 if (i + 6 !== start) {
24617 w = parseHex(number, start, i + 6);
24618 this.words[j] |= (w << off) & 0x3ffffff;
24619 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
24620 }
24621 this.strip();
24622 };
24623
24624 function parseBase (str, start, end, mul) {
24625 var r = 0;
24626 var len = Math.min(str.length, end);
24627 for (var i = start; i < len; i++) {
24628 var c = str.charCodeAt(i) - 48;
24629
24630 r *= mul;
24631
24632 // 'a'
24633 if (c >= 49) {
24634 r += c - 49 + 0xa;
24635
24636 // 'A'
24637 } else if (c >= 17) {
24638 r += c - 17 + 0xa;
24639
24640 // '0' - '9'
24641 } else {
24642 r += c;
24643 }
24644 }
24645 return r;
24646 }
24647
24648 BN.prototype._parseBase = function _parseBase (number, base, start) {
24649 // Initialize as zero
24650 this.words = [ 0 ];
24651 this.length = 1;
24652
24653 // Find length of limb in base
24654 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
24655 limbLen++;
24656 }
24657 limbLen--;
24658 limbPow = (limbPow / base) | 0;
24659
24660 var total = number.length - start;
24661 var mod = total % limbLen;
24662 var end = Math.min(total, total - mod) + start;
24663
24664 var word = 0;
24665 for (var i = start; i < end; i += limbLen) {
24666 word = parseBase(number, i, i + limbLen, base);
24667
24668 this.imuln(limbPow);
24669 if (this.words[0] + word < 0x4000000) {
24670 this.words[0] += word;
24671 } else {
24672 this._iaddn(word);
24673 }
24674 }
24675
24676 if (mod !== 0) {
24677 var pow = 1;
24678 word = parseBase(number, i, number.length, base);
24679
24680 for (i = 0; i < mod; i++) {
24681 pow *= base;
24682 }
24683
24684 this.imuln(pow);
24685 if (this.words[0] + word < 0x4000000) {
24686 this.words[0] += word;
24687 } else {
24688 this._iaddn(word);
24689 }
24690 }
24691 };
24692
24693 BN.prototype.copy = function copy (dest) {
24694 dest.words = new Array(this.length);
24695 for (var i = 0; i < this.length; i++) {
24696 dest.words[i] = this.words[i];
24697 }
24698 dest.length = this.length;
24699 dest.negative = this.negative;
24700 dest.red = this.red;
24701 };
24702
24703 BN.prototype.clone = function clone () {
24704 var r = new BN(null);
24705 this.copy(r);
24706 return r;
24707 };
24708
24709 BN.prototype._expand = function _expand (size) {
24710 while (this.length < size) {
24711 this.words[this.length++] = 0;
24712 }
24713 return this;
24714 };
24715
24716 // Remove leading `0` from `this`
24717 BN.prototype.strip = function strip () {
24718 while (this.length > 1 && this.words[this.length - 1] === 0) {
24719 this.length--;
24720 }
24721 return this._normSign();
24722 };
24723
24724 BN.prototype._normSign = function _normSign () {
24725 // -0 = 0
24726 if (this.length === 1 && this.words[0] === 0) {
24727 this.negative = 0;
24728 }
24729 return this;
24730 };
24731
24732 BN.prototype.inspect = function inspect () {
24733 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
24734 };
24735
24736 /*
24737
24738 var zeros = [];
24739 var groupSizes = [];
24740 var groupBases = [];
24741
24742 var s = '';
24743 var i = -1;
24744 while (++i < BN.wordSize) {
24745 zeros[i] = s;
24746 s += '0';
24747 }
24748 groupSizes[0] = 0;
24749 groupSizes[1] = 0;
24750 groupBases[0] = 0;
24751 groupBases[1] = 0;
24752 var base = 2 - 1;
24753 while (++base < 36 + 1) {
24754 var groupSize = 0;
24755 var groupBase = 1;
24756 while (groupBase < (1 << BN.wordSize) / base) {
24757 groupBase *= base;
24758 groupSize += 1;
24759 }
24760 groupSizes[base] = groupSize;
24761 groupBases[base] = groupBase;
24762 }
24763
24764 */
24765
24766 var zeros = [
24767 '',
24768 '0',
24769 '00',
24770 '000',
24771 '0000',
24772 '00000',
24773 '000000',
24774 '0000000',
24775 '00000000',
24776 '000000000',
24777 '0000000000',
24778 '00000000000',
24779 '000000000000',
24780 '0000000000000',
24781 '00000000000000',
24782 '000000000000000',
24783 '0000000000000000',
24784 '00000000000000000',
24785 '000000000000000000',
24786 '0000000000000000000',
24787 '00000000000000000000',
24788 '000000000000000000000',
24789 '0000000000000000000000',
24790 '00000000000000000000000',
24791 '000000000000000000000000',
24792 '0000000000000000000000000'
24793 ];
24794
24795 var groupSizes = [
24796 0, 0,
24797 25, 16, 12, 11, 10, 9, 8,
24798 8, 7, 7, 7, 7, 6, 6,
24799 6, 6, 6, 6, 6, 5, 5,
24800 5, 5, 5, 5, 5, 5, 5,
24801 5, 5, 5, 5, 5, 5, 5
24802 ];
24803
24804 var groupBases = [
24805 0, 0,
24806 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
24807 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
24808 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
24809 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
24810 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
24811 ];
24812
24813 BN.prototype.toString = function toString (base, padding) {
24814 base = base || 10;
24815 padding = padding | 0 || 1;
24816
24817 var out;
24818 if (base === 16 || base === 'hex') {
24819 out = '';
24820 var off = 0;
24821 var carry = 0;
24822 for (var i = 0; i < this.length; i++) {
24823 var w = this.words[i];
24824 var word = (((w << off) | carry) & 0xffffff).toString(16);
24825 carry = (w >>> (24 - off)) & 0xffffff;
24826 if (carry !== 0 || i !== this.length - 1) {
24827 out = zeros[6 - word.length] + word + out;
24828 } else {
24829 out = word + out;
24830 }
24831 off += 2;
24832 if (off >= 26) {
24833 off -= 26;
24834 i--;
24835 }
24836 }
24837 if (carry !== 0) {
24838 out = carry.toString(16) + out;
24839 }
24840 while (out.length % padding !== 0) {
24841 out = '0' + out;
24842 }
24843 if (this.negative !== 0) {
24844 out = '-' + out;
24845 }
24846 return out;
24847 }
24848
24849 if (base === (base | 0) && base >= 2 && base <= 36) {
24850 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
24851 var groupSize = groupSizes[base];
24852 // var groupBase = Math.pow(base, groupSize);
24853 var groupBase = groupBases[base];
24854 out = '';
24855 var c = this.clone();
24856 c.negative = 0;
24857 while (!c.isZero()) {
24858 var r = c.modn(groupBase).toString(base);
24859 c = c.idivn(groupBase);
24860
24861 if (!c.isZero()) {
24862 out = zeros[groupSize - r.length] + r + out;
24863 } else {
24864 out = r + out;
24865 }
24866 }
24867 if (this.isZero()) {
24868 out = '0' + out;
24869 }
24870 while (out.length % padding !== 0) {
24871 out = '0' + out;
24872 }
24873 if (this.negative !== 0) {
24874 out = '-' + out;
24875 }
24876 return out;
24877 }
24878
24879 assert(false, 'Base should be between 2 and 36');
24880 };
24881
24882 BN.prototype.toNumber = function toNumber () {
24883 var ret = this.words[0];
24884 if (this.length === 2) {
24885 ret += this.words[1] * 0x4000000;
24886 } else if (this.length === 3 && this.words[2] === 0x01) {
24887 // NOTE: at this stage it is known that the top bit is set
24888 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
24889 } else if (this.length > 2) {
24890 assert(false, 'Number can only safely store up to 53 bits');
24891 }
24892 return (this.negative !== 0) ? -ret : ret;
24893 };
24894
24895 BN.prototype.toJSON = function toJSON () {
24896 return this.toString(16);
24897 };
24898
24899 BN.prototype.toBuffer = function toBuffer (endian, length) {
24900 assert(typeof Buffer !== 'undefined');
24901 return this.toArrayLike(Buffer, endian, length);
24902 };
24903
24904 BN.prototype.toArray = function toArray (endian, length) {
24905 return this.toArrayLike(Array, endian, length);
24906 };
24907
24908 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
24909 var byteLength = this.byteLength();
24910 var reqLength = length || Math.max(1, byteLength);
24911 assert(byteLength <= reqLength, 'byte array longer than desired length');
24912 assert(reqLength > 0, 'Requested array length <= 0');
24913
24914 this.strip();
24915 var littleEndian = endian === 'le';
24916 var res = new ArrayType(reqLength);
24917
24918 var b, i;
24919 var q = this.clone();
24920 if (!littleEndian) {
24921 // Assume big-endian
24922 for (i = 0; i < reqLength - byteLength; i++) {
24923 res[i] = 0;
24924 }
24925
24926 for (i = 0; !q.isZero(); i++) {
24927 b = q.andln(0xff);
24928 q.iushrn(8);
24929
24930 res[reqLength - i - 1] = b;
24931 }
24932 } else {
24933 for (i = 0; !q.isZero(); i++) {
24934 b = q.andln(0xff);
24935 q.iushrn(8);
24936
24937 res[i] = b;
24938 }
24939
24940 for (; i < reqLength; i++) {
24941 res[i] = 0;
24942 }
24943 }
24944
24945 return res;
24946 };
24947
24948 if (Math.clz32) {
24949 BN.prototype._countBits = function _countBits (w) {
24950 return 32 - Math.clz32(w);
24951 };
24952 } else {
24953 BN.prototype._countBits = function _countBits (w) {
24954 var t = w;
24955 var r = 0;
24956 if (t >= 0x1000) {
24957 r += 13;
24958 t >>>= 13;
24959 }
24960 if (t >= 0x40) {
24961 r += 7;
24962 t >>>= 7;
24963 }
24964 if (t >= 0x8) {
24965 r += 4;
24966 t >>>= 4;
24967 }
24968 if (t >= 0x02) {
24969 r += 2;
24970 t >>>= 2;
24971 }
24972 return r + t;
24973 };
24974 }
24975
24976 BN.prototype._zeroBits = function _zeroBits (w) {
24977 // Short-cut
24978 if (w === 0) return 26;
24979
24980 var t = w;
24981 var r = 0;
24982 if ((t & 0x1fff) === 0) {
24983 r += 13;
24984 t >>>= 13;
24985 }
24986 if ((t & 0x7f) === 0) {
24987 r += 7;
24988 t >>>= 7;
24989 }
24990 if ((t & 0xf) === 0) {
24991 r += 4;
24992 t >>>= 4;
24993 }
24994 if ((t & 0x3) === 0) {
24995 r += 2;
24996 t >>>= 2;
24997 }
24998 if ((t & 0x1) === 0) {
24999 r++;
25000 }
25001 return r;
25002 };
25003
25004 // Return number of used bits in a BN
25005 BN.prototype.bitLength = function bitLength () {
25006 var w = this.words[this.length - 1];
25007 var hi = this._countBits(w);
25008 return (this.length - 1) * 26 + hi;
25009 };
25010
25011 function toBitArray (num) {
25012 var w = new Array(num.bitLength());
25013
25014 for (var bit = 0; bit < w.length; bit++) {
25015 var off = (bit / 26) | 0;
25016 var wbit = bit % 26;
25017
25018 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
25019 }
25020
25021 return w;
25022 }
25023
25024 // Number of trailing zero bits
25025 BN.prototype.zeroBits = function zeroBits () {
25026 if (this.isZero()) return 0;
25027
25028 var r = 0;
25029 for (var i = 0; i < this.length; i++) {
25030 var b = this._zeroBits(this.words[i]);
25031 r += b;
25032 if (b !== 26) break;
25033 }
25034 return r;
25035 };
25036
25037 BN.prototype.byteLength = function byteLength () {
25038 return Math.ceil(this.bitLength() / 8);
25039 };
25040
25041 BN.prototype.toTwos = function toTwos (width) {
25042 if (this.negative !== 0) {
25043 return this.abs().inotn(width).iaddn(1);
25044 }
25045 return this.clone();
25046 };
25047
25048 BN.prototype.fromTwos = function fromTwos (width) {
25049 if (this.testn(width - 1)) {
25050 return this.notn(width).iaddn(1).ineg();
25051 }
25052 return this.clone();
25053 };
25054
25055 BN.prototype.isNeg = function isNeg () {
25056 return this.negative !== 0;
25057 };
25058
25059 // Return negative clone of `this`
25060 BN.prototype.neg = function neg () {
25061 return this.clone().ineg();
25062 };
25063
25064 BN.prototype.ineg = function ineg () {
25065 if (!this.isZero()) {
25066 this.negative ^= 1;
25067 }
25068
25069 return this;
25070 };
25071
25072 // Or `num` with `this` in-place
25073 BN.prototype.iuor = function iuor (num) {
25074 while (this.length < num.length) {
25075 this.words[this.length++] = 0;
25076 }
25077
25078 for (var i = 0; i < num.length; i++) {
25079 this.words[i] = this.words[i] | num.words[i];
25080 }
25081
25082 return this.strip();
25083 };
25084
25085 BN.prototype.ior = function ior (num) {
25086 assert((this.negative | num.negative) === 0);
25087 return this.iuor(num);
25088 };
25089
25090 // Or `num` with `this`
25091 BN.prototype.or = function or (num) {
25092 if (this.length > num.length) return this.clone().ior(num);
25093 return num.clone().ior(this);
25094 };
25095
25096 BN.prototype.uor = function uor (num) {
25097 if (this.length > num.length) return this.clone().iuor(num);
25098 return num.clone().iuor(this);
25099 };
25100
25101 // And `num` with `this` in-place
25102 BN.prototype.iuand = function iuand (num) {
25103 // b = min-length(num, this)
25104 var b;
25105 if (this.length > num.length) {
25106 b = num;
25107 } else {
25108 b = this;
25109 }
25110
25111 for (var i = 0; i < b.length; i++) {
25112 this.words[i] = this.words[i] & num.words[i];
25113 }
25114
25115 this.length = b.length;
25116
25117 return this.strip();
25118 };
25119
25120 BN.prototype.iand = function iand (num) {
25121 assert((this.negative | num.negative) === 0);
25122 return this.iuand(num);
25123 };
25124
25125 // And `num` with `this`
25126 BN.prototype.and = function and (num) {
25127 if (this.length > num.length) return this.clone().iand(num);
25128 return num.clone().iand(this);
25129 };
25130
25131 BN.prototype.uand = function uand (num) {
25132 if (this.length > num.length) return this.clone().iuand(num);
25133 return num.clone().iuand(this);
25134 };
25135
25136 // Xor `num` with `this` in-place
25137 BN.prototype.iuxor = function iuxor (num) {
25138 // a.length > b.length
25139 var a;
25140 var b;
25141 if (this.length > num.length) {
25142 a = this;
25143 b = num;
25144 } else {
25145 a = num;
25146 b = this;
25147 }
25148
25149 for (var i = 0; i < b.length; i++) {
25150 this.words[i] = a.words[i] ^ b.words[i];
25151 }
25152
25153 if (this !== a) {
25154 for (; i < a.length; i++) {
25155 this.words[i] = a.words[i];
25156 }
25157 }
25158
25159 this.length = a.length;
25160
25161 return this.strip();
25162 };
25163
25164 BN.prototype.ixor = function ixor (num) {
25165 assert((this.negative | num.negative) === 0);
25166 return this.iuxor(num);
25167 };
25168
25169 // Xor `num` with `this`
25170 BN.prototype.xor = function xor (num) {
25171 if (this.length > num.length) return this.clone().ixor(num);
25172 return num.clone().ixor(this);
25173 };
25174
25175 BN.prototype.uxor = function uxor (num) {
25176 if (this.length > num.length) return this.clone().iuxor(num);
25177 return num.clone().iuxor(this);
25178 };
25179
25180 // Not ``this`` with ``width`` bitwidth
25181 BN.prototype.inotn = function inotn (width) {
25182 assert(typeof width === 'number' && width >= 0);
25183
25184 var bytesNeeded = Math.ceil(width / 26) | 0;
25185 var bitsLeft = width % 26;
25186
25187 // Extend the buffer with leading zeroes
25188 this._expand(bytesNeeded);
25189
25190 if (bitsLeft > 0) {
25191 bytesNeeded--;
25192 }
25193
25194 // Handle complete words
25195 for (var i = 0; i < bytesNeeded; i++) {
25196 this.words[i] = ~this.words[i] & 0x3ffffff;
25197 }
25198
25199 // Handle the residue
25200 if (bitsLeft > 0) {
25201 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
25202 }
25203
25204 // And remove leading zeroes
25205 return this.strip();
25206 };
25207
25208 BN.prototype.notn = function notn (width) {
25209 return this.clone().inotn(width);
25210 };
25211
25212 // Set `bit` of `this`
25213 BN.prototype.setn = function setn (bit, val) {
25214 assert(typeof bit === 'number' && bit >= 0);
25215
25216 var off = (bit / 26) | 0;
25217 var wbit = bit % 26;
25218
25219 this._expand(off + 1);
25220
25221 if (val) {
25222 this.words[off] = this.words[off] | (1 << wbit);
25223 } else {
25224 this.words[off] = this.words[off] & ~(1 << wbit);
25225 }
25226
25227 return this.strip();
25228 };
25229
25230 // Add `num` to `this` in-place
25231 BN.prototype.iadd = function iadd (num) {
25232 var r;
25233
25234 // negative + positive
25235 if (this.negative !== 0 && num.negative === 0) {
25236 this.negative = 0;
25237 r = this.isub(num);
25238 this.negative ^= 1;
25239 return this._normSign();
25240
25241 // positive + negative
25242 } else if (this.negative === 0 && num.negative !== 0) {
25243 num.negative = 0;
25244 r = this.isub(num);
25245 num.negative = 1;
25246 return r._normSign();
25247 }
25248
25249 // a.length > b.length
25250 var a, b;
25251 if (this.length > num.length) {
25252 a = this;
25253 b = num;
25254 } else {
25255 a = num;
25256 b = this;
25257 }
25258
25259 var carry = 0;
25260 for (var i = 0; i < b.length; i++) {
25261 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
25262 this.words[i] = r & 0x3ffffff;
25263 carry = r >>> 26;
25264 }
25265 for (; carry !== 0 && i < a.length; i++) {
25266 r = (a.words[i] | 0) + carry;
25267 this.words[i] = r & 0x3ffffff;
25268 carry = r >>> 26;
25269 }
25270
25271 this.length = a.length;
25272 if (carry !== 0) {
25273 this.words[this.length] = carry;
25274 this.length++;
25275 // Copy the rest of the words
25276 } else if (a !== this) {
25277 for (; i < a.length; i++) {
25278 this.words[i] = a.words[i];
25279 }
25280 }
25281
25282 return this;
25283 };
25284
25285 // Add `num` to `this`
25286 BN.prototype.add = function add (num) {
25287 var res;
25288 if (num.negative !== 0 && this.negative === 0) {
25289 num.negative = 0;
25290 res = this.sub(num);
25291 num.negative ^= 1;
25292 return res;
25293 } else if (num.negative === 0 && this.negative !== 0) {
25294 this.negative = 0;
25295 res = num.sub(this);
25296 this.negative = 1;
25297 return res;
25298 }
25299
25300 if (this.length > num.length) return this.clone().iadd(num);
25301
25302 return num.clone().iadd(this);
25303 };
25304
25305 // Subtract `num` from `this` in-place
25306 BN.prototype.isub = function isub (num) {
25307 // this - (-num) = this + num
25308 if (num.negative !== 0) {
25309 num.negative = 0;
25310 var r = this.iadd(num);
25311 num.negative = 1;
25312 return r._normSign();
25313
25314 // -this - num = -(this + num)
25315 } else if (this.negative !== 0) {
25316 this.negative = 0;
25317 this.iadd(num);
25318 this.negative = 1;
25319 return this._normSign();
25320 }
25321
25322 // At this point both numbers are positive
25323 var cmp = this.cmp(num);
25324
25325 // Optimization - zeroify
25326 if (cmp === 0) {
25327 this.negative = 0;
25328 this.length = 1;
25329 this.words[0] = 0;
25330 return this;
25331 }
25332
25333 // a > b
25334 var a, b;
25335 if (cmp > 0) {
25336 a = this;
25337 b = num;
25338 } else {
25339 a = num;
25340 b = this;
25341 }
25342
25343 var carry = 0;
25344 for (var i = 0; i < b.length; i++) {
25345 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
25346 carry = r >> 26;
25347 this.words[i] = r & 0x3ffffff;
25348 }
25349 for (; carry !== 0 && i < a.length; i++) {
25350 r = (a.words[i] | 0) + carry;
25351 carry = r >> 26;
25352 this.words[i] = r & 0x3ffffff;
25353 }
25354
25355 // Copy rest of the words
25356 if (carry === 0 && i < a.length && a !== this) {
25357 for (; i < a.length; i++) {
25358 this.words[i] = a.words[i];
25359 }
25360 }
25361
25362 this.length = Math.max(this.length, i);
25363
25364 if (a !== this) {
25365 this.negative = 1;
25366 }
25367
25368 return this.strip();
25369 };
25370
25371 // Subtract `num` from `this`
25372 BN.prototype.sub = function sub (num) {
25373 return this.clone().isub(num);
25374 };
25375
25376 function smallMulTo (self, num, out) {
25377 out.negative = num.negative ^ self.negative;
25378 var len = (self.length + num.length) | 0;
25379 out.length = len;
25380 len = (len - 1) | 0;
25381
25382 // Peel one iteration (compiler can't do it, because of code complexity)
25383 var a = self.words[0] | 0;
25384 var b = num.words[0] | 0;
25385 var r = a * b;
25386
25387 var lo = r & 0x3ffffff;
25388 var carry = (r / 0x4000000) | 0;
25389 out.words[0] = lo;
25390
25391 for (var k = 1; k < len; k++) {
25392 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
25393 // note that ncarry could be >= 0x3ffffff
25394 var ncarry = carry >>> 26;
25395 var rword = carry & 0x3ffffff;
25396 var maxJ = Math.min(k, num.length - 1);
25397 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
25398 var i = (k - j) | 0;
25399 a = self.words[i] | 0;
25400 b = num.words[j] | 0;
25401 r = a * b + rword;
25402 ncarry += (r / 0x4000000) | 0;
25403 rword = r & 0x3ffffff;
25404 }
25405 out.words[k] = rword | 0;
25406 carry = ncarry | 0;
25407 }
25408 if (carry !== 0) {
25409 out.words[k] = carry | 0;
25410 } else {
25411 out.length--;
25412 }
25413
25414 return out.strip();
25415 }
25416
25417 // TODO(indutny): it may be reasonable to omit it for users who don't need
25418 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
25419 // multiplication (like elliptic secp256k1).
25420 var comb10MulTo = function comb10MulTo (self, num, out) {
25421 var a = self.words;
25422 var b = num.words;
25423 var o = out.words;
25424 var c = 0;
25425 var lo;
25426 var mid;
25427 var hi;
25428 var a0 = a[0] | 0;
25429 var al0 = a0 & 0x1fff;
25430 var ah0 = a0 >>> 13;
25431 var a1 = a[1] | 0;
25432 var al1 = a1 & 0x1fff;
25433 var ah1 = a1 >>> 13;
25434 var a2 = a[2] | 0;
25435 var al2 = a2 & 0x1fff;
25436 var ah2 = a2 >>> 13;
25437 var a3 = a[3] | 0;
25438 var al3 = a3 & 0x1fff;
25439 var ah3 = a3 >>> 13;
25440 var a4 = a[4] | 0;
25441 var al4 = a4 & 0x1fff;
25442 var ah4 = a4 >>> 13;
25443 var a5 = a[5] | 0;
25444 var al5 = a5 & 0x1fff;
25445 var ah5 = a5 >>> 13;
25446 var a6 = a[6] | 0;
25447 var al6 = a6 & 0x1fff;
25448 var ah6 = a6 >>> 13;
25449 var a7 = a[7] | 0;
25450 var al7 = a7 & 0x1fff;
25451 var ah7 = a7 >>> 13;
25452 var a8 = a[8] | 0;
25453 var al8 = a8 & 0x1fff;
25454 var ah8 = a8 >>> 13;
25455 var a9 = a[9] | 0;
25456 var al9 = a9 & 0x1fff;
25457 var ah9 = a9 >>> 13;
25458 var b0 = b[0] | 0;
25459 var bl0 = b0 & 0x1fff;
25460 var bh0 = b0 >>> 13;
25461 var b1 = b[1] | 0;
25462 var bl1 = b1 & 0x1fff;
25463 var bh1 = b1 >>> 13;
25464 var b2 = b[2] | 0;
25465 var bl2 = b2 & 0x1fff;
25466 var bh2 = b2 >>> 13;
25467 var b3 = b[3] | 0;
25468 var bl3 = b3 & 0x1fff;
25469 var bh3 = b3 >>> 13;
25470 var b4 = b[4] | 0;
25471 var bl4 = b4 & 0x1fff;
25472 var bh4 = b4 >>> 13;
25473 var b5 = b[5] | 0;
25474 var bl5 = b5 & 0x1fff;
25475 var bh5 = b5 >>> 13;
25476 var b6 = b[6] | 0;
25477 var bl6 = b6 & 0x1fff;
25478 var bh6 = b6 >>> 13;
25479 var b7 = b[7] | 0;
25480 var bl7 = b7 & 0x1fff;
25481 var bh7 = b7 >>> 13;
25482 var b8 = b[8] | 0;
25483 var bl8 = b8 & 0x1fff;
25484 var bh8 = b8 >>> 13;
25485 var b9 = b[9] | 0;
25486 var bl9 = b9 & 0x1fff;
25487 var bh9 = b9 >>> 13;
25488
25489 out.negative = self.negative ^ num.negative;
25490 out.length = 19;
25491 /* k = 0 */
25492 lo = Math.imul(al0, bl0);
25493 mid = Math.imul(al0, bh0);
25494 mid = (mid + Math.imul(ah0, bl0)) | 0;
25495 hi = Math.imul(ah0, bh0);
25496 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25497 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
25498 w0 &= 0x3ffffff;
25499 /* k = 1 */
25500 lo = Math.imul(al1, bl0);
25501 mid = Math.imul(al1, bh0);
25502 mid = (mid + Math.imul(ah1, bl0)) | 0;
25503 hi = Math.imul(ah1, bh0);
25504 lo = (lo + Math.imul(al0, bl1)) | 0;
25505 mid = (mid + Math.imul(al0, bh1)) | 0;
25506 mid = (mid + Math.imul(ah0, bl1)) | 0;
25507 hi = (hi + Math.imul(ah0, bh1)) | 0;
25508 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25509 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
25510 w1 &= 0x3ffffff;
25511 /* k = 2 */
25512 lo = Math.imul(al2, bl0);
25513 mid = Math.imul(al2, bh0);
25514 mid = (mid + Math.imul(ah2, bl0)) | 0;
25515 hi = Math.imul(ah2, bh0);
25516 lo = (lo + Math.imul(al1, bl1)) | 0;
25517 mid = (mid + Math.imul(al1, bh1)) | 0;
25518 mid = (mid + Math.imul(ah1, bl1)) | 0;
25519 hi = (hi + Math.imul(ah1, bh1)) | 0;
25520 lo = (lo + Math.imul(al0, bl2)) | 0;
25521 mid = (mid + Math.imul(al0, bh2)) | 0;
25522 mid = (mid + Math.imul(ah0, bl2)) | 0;
25523 hi = (hi + Math.imul(ah0, bh2)) | 0;
25524 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25525 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
25526 w2 &= 0x3ffffff;
25527 /* k = 3 */
25528 lo = Math.imul(al3, bl0);
25529 mid = Math.imul(al3, bh0);
25530 mid = (mid + Math.imul(ah3, bl0)) | 0;
25531 hi = Math.imul(ah3, bh0);
25532 lo = (lo + Math.imul(al2, bl1)) | 0;
25533 mid = (mid + Math.imul(al2, bh1)) | 0;
25534 mid = (mid + Math.imul(ah2, bl1)) | 0;
25535 hi = (hi + Math.imul(ah2, bh1)) | 0;
25536 lo = (lo + Math.imul(al1, bl2)) | 0;
25537 mid = (mid + Math.imul(al1, bh2)) | 0;
25538 mid = (mid + Math.imul(ah1, bl2)) | 0;
25539 hi = (hi + Math.imul(ah1, bh2)) | 0;
25540 lo = (lo + Math.imul(al0, bl3)) | 0;
25541 mid = (mid + Math.imul(al0, bh3)) | 0;
25542 mid = (mid + Math.imul(ah0, bl3)) | 0;
25543 hi = (hi + Math.imul(ah0, bh3)) | 0;
25544 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25545 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
25546 w3 &= 0x3ffffff;
25547 /* k = 4 */
25548 lo = Math.imul(al4, bl0);
25549 mid = Math.imul(al4, bh0);
25550 mid = (mid + Math.imul(ah4, bl0)) | 0;
25551 hi = Math.imul(ah4, bh0);
25552 lo = (lo + Math.imul(al3, bl1)) | 0;
25553 mid = (mid + Math.imul(al3, bh1)) | 0;
25554 mid = (mid + Math.imul(ah3, bl1)) | 0;
25555 hi = (hi + Math.imul(ah3, bh1)) | 0;
25556 lo = (lo + Math.imul(al2, bl2)) | 0;
25557 mid = (mid + Math.imul(al2, bh2)) | 0;
25558 mid = (mid + Math.imul(ah2, bl2)) | 0;
25559 hi = (hi + Math.imul(ah2, bh2)) | 0;
25560 lo = (lo + Math.imul(al1, bl3)) | 0;
25561 mid = (mid + Math.imul(al1, bh3)) | 0;
25562 mid = (mid + Math.imul(ah1, bl3)) | 0;
25563 hi = (hi + Math.imul(ah1, bh3)) | 0;
25564 lo = (lo + Math.imul(al0, bl4)) | 0;
25565 mid = (mid + Math.imul(al0, bh4)) | 0;
25566 mid = (mid + Math.imul(ah0, bl4)) | 0;
25567 hi = (hi + Math.imul(ah0, bh4)) | 0;
25568 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25569 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
25570 w4 &= 0x3ffffff;
25571 /* k = 5 */
25572 lo = Math.imul(al5, bl0);
25573 mid = Math.imul(al5, bh0);
25574 mid = (mid + Math.imul(ah5, bl0)) | 0;
25575 hi = Math.imul(ah5, bh0);
25576 lo = (lo + Math.imul(al4, bl1)) | 0;
25577 mid = (mid + Math.imul(al4, bh1)) | 0;
25578 mid = (mid + Math.imul(ah4, bl1)) | 0;
25579 hi = (hi + Math.imul(ah4, bh1)) | 0;
25580 lo = (lo + Math.imul(al3, bl2)) | 0;
25581 mid = (mid + Math.imul(al3, bh2)) | 0;
25582 mid = (mid + Math.imul(ah3, bl2)) | 0;
25583 hi = (hi + Math.imul(ah3, bh2)) | 0;
25584 lo = (lo + Math.imul(al2, bl3)) | 0;
25585 mid = (mid + Math.imul(al2, bh3)) | 0;
25586 mid = (mid + Math.imul(ah2, bl3)) | 0;
25587 hi = (hi + Math.imul(ah2, bh3)) | 0;
25588 lo = (lo + Math.imul(al1, bl4)) | 0;
25589 mid = (mid + Math.imul(al1, bh4)) | 0;
25590 mid = (mid + Math.imul(ah1, bl4)) | 0;
25591 hi = (hi + Math.imul(ah1, bh4)) | 0;
25592 lo = (lo + Math.imul(al0, bl5)) | 0;
25593 mid = (mid + Math.imul(al0, bh5)) | 0;
25594 mid = (mid + Math.imul(ah0, bl5)) | 0;
25595 hi = (hi + Math.imul(ah0, bh5)) | 0;
25596 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25597 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
25598 w5 &= 0x3ffffff;
25599 /* k = 6 */
25600 lo = Math.imul(al6, bl0);
25601 mid = Math.imul(al6, bh0);
25602 mid = (mid + Math.imul(ah6, bl0)) | 0;
25603 hi = Math.imul(ah6, bh0);
25604 lo = (lo + Math.imul(al5, bl1)) | 0;
25605 mid = (mid + Math.imul(al5, bh1)) | 0;
25606 mid = (mid + Math.imul(ah5, bl1)) | 0;
25607 hi = (hi + Math.imul(ah5, bh1)) | 0;
25608 lo = (lo + Math.imul(al4, bl2)) | 0;
25609 mid = (mid + Math.imul(al4, bh2)) | 0;
25610 mid = (mid + Math.imul(ah4, bl2)) | 0;
25611 hi = (hi + Math.imul(ah4, bh2)) | 0;
25612 lo = (lo + Math.imul(al3, bl3)) | 0;
25613 mid = (mid + Math.imul(al3, bh3)) | 0;
25614 mid = (mid + Math.imul(ah3, bl3)) | 0;
25615 hi = (hi + Math.imul(ah3, bh3)) | 0;
25616 lo = (lo + Math.imul(al2, bl4)) | 0;
25617 mid = (mid + Math.imul(al2, bh4)) | 0;
25618 mid = (mid + Math.imul(ah2, bl4)) | 0;
25619 hi = (hi + Math.imul(ah2, bh4)) | 0;
25620 lo = (lo + Math.imul(al1, bl5)) | 0;
25621 mid = (mid + Math.imul(al1, bh5)) | 0;
25622 mid = (mid + Math.imul(ah1, bl5)) | 0;
25623 hi = (hi + Math.imul(ah1, bh5)) | 0;
25624 lo = (lo + Math.imul(al0, bl6)) | 0;
25625 mid = (mid + Math.imul(al0, bh6)) | 0;
25626 mid = (mid + Math.imul(ah0, bl6)) | 0;
25627 hi = (hi + Math.imul(ah0, bh6)) | 0;
25628 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25629 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
25630 w6 &= 0x3ffffff;
25631 /* k = 7 */
25632 lo = Math.imul(al7, bl0);
25633 mid = Math.imul(al7, bh0);
25634 mid = (mid + Math.imul(ah7, bl0)) | 0;
25635 hi = Math.imul(ah7, bh0);
25636 lo = (lo + Math.imul(al6, bl1)) | 0;
25637 mid = (mid + Math.imul(al6, bh1)) | 0;
25638 mid = (mid + Math.imul(ah6, bl1)) | 0;
25639 hi = (hi + Math.imul(ah6, bh1)) | 0;
25640 lo = (lo + Math.imul(al5, bl2)) | 0;
25641 mid = (mid + Math.imul(al5, bh2)) | 0;
25642 mid = (mid + Math.imul(ah5, bl2)) | 0;
25643 hi = (hi + Math.imul(ah5, bh2)) | 0;
25644 lo = (lo + Math.imul(al4, bl3)) | 0;
25645 mid = (mid + Math.imul(al4, bh3)) | 0;
25646 mid = (mid + Math.imul(ah4, bl3)) | 0;
25647 hi = (hi + Math.imul(ah4, bh3)) | 0;
25648 lo = (lo + Math.imul(al3, bl4)) | 0;
25649 mid = (mid + Math.imul(al3, bh4)) | 0;
25650 mid = (mid + Math.imul(ah3, bl4)) | 0;
25651 hi = (hi + Math.imul(ah3, bh4)) | 0;
25652 lo = (lo + Math.imul(al2, bl5)) | 0;
25653 mid = (mid + Math.imul(al2, bh5)) | 0;
25654 mid = (mid + Math.imul(ah2, bl5)) | 0;
25655 hi = (hi + Math.imul(ah2, bh5)) | 0;
25656 lo = (lo + Math.imul(al1, bl6)) | 0;
25657 mid = (mid + Math.imul(al1, bh6)) | 0;
25658 mid = (mid + Math.imul(ah1, bl6)) | 0;
25659 hi = (hi + Math.imul(ah1, bh6)) | 0;
25660 lo = (lo + Math.imul(al0, bl7)) | 0;
25661 mid = (mid + Math.imul(al0, bh7)) | 0;
25662 mid = (mid + Math.imul(ah0, bl7)) | 0;
25663 hi = (hi + Math.imul(ah0, bh7)) | 0;
25664 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25665 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
25666 w7 &= 0x3ffffff;
25667 /* k = 8 */
25668 lo = Math.imul(al8, bl0);
25669 mid = Math.imul(al8, bh0);
25670 mid = (mid + Math.imul(ah8, bl0)) | 0;
25671 hi = Math.imul(ah8, bh0);
25672 lo = (lo + Math.imul(al7, bl1)) | 0;
25673 mid = (mid + Math.imul(al7, bh1)) | 0;
25674 mid = (mid + Math.imul(ah7, bl1)) | 0;
25675 hi = (hi + Math.imul(ah7, bh1)) | 0;
25676 lo = (lo + Math.imul(al6, bl2)) | 0;
25677 mid = (mid + Math.imul(al6, bh2)) | 0;
25678 mid = (mid + Math.imul(ah6, bl2)) | 0;
25679 hi = (hi + Math.imul(ah6, bh2)) | 0;
25680 lo = (lo + Math.imul(al5, bl3)) | 0;
25681 mid = (mid + Math.imul(al5, bh3)) | 0;
25682 mid = (mid + Math.imul(ah5, bl3)) | 0;
25683 hi = (hi + Math.imul(ah5, bh3)) | 0;
25684 lo = (lo + Math.imul(al4, bl4)) | 0;
25685 mid = (mid + Math.imul(al4, bh4)) | 0;
25686 mid = (mid + Math.imul(ah4, bl4)) | 0;
25687 hi = (hi + Math.imul(ah4, bh4)) | 0;
25688 lo = (lo + Math.imul(al3, bl5)) | 0;
25689 mid = (mid + Math.imul(al3, bh5)) | 0;
25690 mid = (mid + Math.imul(ah3, bl5)) | 0;
25691 hi = (hi + Math.imul(ah3, bh5)) | 0;
25692 lo = (lo + Math.imul(al2, bl6)) | 0;
25693 mid = (mid + Math.imul(al2, bh6)) | 0;
25694 mid = (mid + Math.imul(ah2, bl6)) | 0;
25695 hi = (hi + Math.imul(ah2, bh6)) | 0;
25696 lo = (lo + Math.imul(al1, bl7)) | 0;
25697 mid = (mid + Math.imul(al1, bh7)) | 0;
25698 mid = (mid + Math.imul(ah1, bl7)) | 0;
25699 hi = (hi + Math.imul(ah1, bh7)) | 0;
25700 lo = (lo + Math.imul(al0, bl8)) | 0;
25701 mid = (mid + Math.imul(al0, bh8)) | 0;
25702 mid = (mid + Math.imul(ah0, bl8)) | 0;
25703 hi = (hi + Math.imul(ah0, bh8)) | 0;
25704 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25705 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
25706 w8 &= 0x3ffffff;
25707 /* k = 9 */
25708 lo = Math.imul(al9, bl0);
25709 mid = Math.imul(al9, bh0);
25710 mid = (mid + Math.imul(ah9, bl0)) | 0;
25711 hi = Math.imul(ah9, bh0);
25712 lo = (lo + Math.imul(al8, bl1)) | 0;
25713 mid = (mid + Math.imul(al8, bh1)) | 0;
25714 mid = (mid + Math.imul(ah8, bl1)) | 0;
25715 hi = (hi + Math.imul(ah8, bh1)) | 0;
25716 lo = (lo + Math.imul(al7, bl2)) | 0;
25717 mid = (mid + Math.imul(al7, bh2)) | 0;
25718 mid = (mid + Math.imul(ah7, bl2)) | 0;
25719 hi = (hi + Math.imul(ah7, bh2)) | 0;
25720 lo = (lo + Math.imul(al6, bl3)) | 0;
25721 mid = (mid + Math.imul(al6, bh3)) | 0;
25722 mid = (mid + Math.imul(ah6, bl3)) | 0;
25723 hi = (hi + Math.imul(ah6, bh3)) | 0;
25724 lo = (lo + Math.imul(al5, bl4)) | 0;
25725 mid = (mid + Math.imul(al5, bh4)) | 0;
25726 mid = (mid + Math.imul(ah5, bl4)) | 0;
25727 hi = (hi + Math.imul(ah5, bh4)) | 0;
25728 lo = (lo + Math.imul(al4, bl5)) | 0;
25729 mid = (mid + Math.imul(al4, bh5)) | 0;
25730 mid = (mid + Math.imul(ah4, bl5)) | 0;
25731 hi = (hi + Math.imul(ah4, bh5)) | 0;
25732 lo = (lo + Math.imul(al3, bl6)) | 0;
25733 mid = (mid + Math.imul(al3, bh6)) | 0;
25734 mid = (mid + Math.imul(ah3, bl6)) | 0;
25735 hi = (hi + Math.imul(ah3, bh6)) | 0;
25736 lo = (lo + Math.imul(al2, bl7)) | 0;
25737 mid = (mid + Math.imul(al2, bh7)) | 0;
25738 mid = (mid + Math.imul(ah2, bl7)) | 0;
25739 hi = (hi + Math.imul(ah2, bh7)) | 0;
25740 lo = (lo + Math.imul(al1, bl8)) | 0;
25741 mid = (mid + Math.imul(al1, bh8)) | 0;
25742 mid = (mid + Math.imul(ah1, bl8)) | 0;
25743 hi = (hi + Math.imul(ah1, bh8)) | 0;
25744 lo = (lo + Math.imul(al0, bl9)) | 0;
25745 mid = (mid + Math.imul(al0, bh9)) | 0;
25746 mid = (mid + Math.imul(ah0, bl9)) | 0;
25747 hi = (hi + Math.imul(ah0, bh9)) | 0;
25748 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25749 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
25750 w9 &= 0x3ffffff;
25751 /* k = 10 */
25752 lo = Math.imul(al9, bl1);
25753 mid = Math.imul(al9, bh1);
25754 mid = (mid + Math.imul(ah9, bl1)) | 0;
25755 hi = Math.imul(ah9, bh1);
25756 lo = (lo + Math.imul(al8, bl2)) | 0;
25757 mid = (mid + Math.imul(al8, bh2)) | 0;
25758 mid = (mid + Math.imul(ah8, bl2)) | 0;
25759 hi = (hi + Math.imul(ah8, bh2)) | 0;
25760 lo = (lo + Math.imul(al7, bl3)) | 0;
25761 mid = (mid + Math.imul(al7, bh3)) | 0;
25762 mid = (mid + Math.imul(ah7, bl3)) | 0;
25763 hi = (hi + Math.imul(ah7, bh3)) | 0;
25764 lo = (lo + Math.imul(al6, bl4)) | 0;
25765 mid = (mid + Math.imul(al6, bh4)) | 0;
25766 mid = (mid + Math.imul(ah6, bl4)) | 0;
25767 hi = (hi + Math.imul(ah6, bh4)) | 0;
25768 lo = (lo + Math.imul(al5, bl5)) | 0;
25769 mid = (mid + Math.imul(al5, bh5)) | 0;
25770 mid = (mid + Math.imul(ah5, bl5)) | 0;
25771 hi = (hi + Math.imul(ah5, bh5)) | 0;
25772 lo = (lo + Math.imul(al4, bl6)) | 0;
25773 mid = (mid + Math.imul(al4, bh6)) | 0;
25774 mid = (mid + Math.imul(ah4, bl6)) | 0;
25775 hi = (hi + Math.imul(ah4, bh6)) | 0;
25776 lo = (lo + Math.imul(al3, bl7)) | 0;
25777 mid = (mid + Math.imul(al3, bh7)) | 0;
25778 mid = (mid + Math.imul(ah3, bl7)) | 0;
25779 hi = (hi + Math.imul(ah3, bh7)) | 0;
25780 lo = (lo + Math.imul(al2, bl8)) | 0;
25781 mid = (mid + Math.imul(al2, bh8)) | 0;
25782 mid = (mid + Math.imul(ah2, bl8)) | 0;
25783 hi = (hi + Math.imul(ah2, bh8)) | 0;
25784 lo = (lo + Math.imul(al1, bl9)) | 0;
25785 mid = (mid + Math.imul(al1, bh9)) | 0;
25786 mid = (mid + Math.imul(ah1, bl9)) | 0;
25787 hi = (hi + Math.imul(ah1, bh9)) | 0;
25788 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25789 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
25790 w10 &= 0x3ffffff;
25791 /* k = 11 */
25792 lo = Math.imul(al9, bl2);
25793 mid = Math.imul(al9, bh2);
25794 mid = (mid + Math.imul(ah9, bl2)) | 0;
25795 hi = Math.imul(ah9, bh2);
25796 lo = (lo + Math.imul(al8, bl3)) | 0;
25797 mid = (mid + Math.imul(al8, bh3)) | 0;
25798 mid = (mid + Math.imul(ah8, bl3)) | 0;
25799 hi = (hi + Math.imul(ah8, bh3)) | 0;
25800 lo = (lo + Math.imul(al7, bl4)) | 0;
25801 mid = (mid + Math.imul(al7, bh4)) | 0;
25802 mid = (mid + Math.imul(ah7, bl4)) | 0;
25803 hi = (hi + Math.imul(ah7, bh4)) | 0;
25804 lo = (lo + Math.imul(al6, bl5)) | 0;
25805 mid = (mid + Math.imul(al6, bh5)) | 0;
25806 mid = (mid + Math.imul(ah6, bl5)) | 0;
25807 hi = (hi + Math.imul(ah6, bh5)) | 0;
25808 lo = (lo + Math.imul(al5, bl6)) | 0;
25809 mid = (mid + Math.imul(al5, bh6)) | 0;
25810 mid = (mid + Math.imul(ah5, bl6)) | 0;
25811 hi = (hi + Math.imul(ah5, bh6)) | 0;
25812 lo = (lo + Math.imul(al4, bl7)) | 0;
25813 mid = (mid + Math.imul(al4, bh7)) | 0;
25814 mid = (mid + Math.imul(ah4, bl7)) | 0;
25815 hi = (hi + Math.imul(ah4, bh7)) | 0;
25816 lo = (lo + Math.imul(al3, bl8)) | 0;
25817 mid = (mid + Math.imul(al3, bh8)) | 0;
25818 mid = (mid + Math.imul(ah3, bl8)) | 0;
25819 hi = (hi + Math.imul(ah3, bh8)) | 0;
25820 lo = (lo + Math.imul(al2, bl9)) | 0;
25821 mid = (mid + Math.imul(al2, bh9)) | 0;
25822 mid = (mid + Math.imul(ah2, bl9)) | 0;
25823 hi = (hi + Math.imul(ah2, bh9)) | 0;
25824 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25825 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
25826 w11 &= 0x3ffffff;
25827 /* k = 12 */
25828 lo = Math.imul(al9, bl3);
25829 mid = Math.imul(al9, bh3);
25830 mid = (mid + Math.imul(ah9, bl3)) | 0;
25831 hi = Math.imul(ah9, bh3);
25832 lo = (lo + Math.imul(al8, bl4)) | 0;
25833 mid = (mid + Math.imul(al8, bh4)) | 0;
25834 mid = (mid + Math.imul(ah8, bl4)) | 0;
25835 hi = (hi + Math.imul(ah8, bh4)) | 0;
25836 lo = (lo + Math.imul(al7, bl5)) | 0;
25837 mid = (mid + Math.imul(al7, bh5)) | 0;
25838 mid = (mid + Math.imul(ah7, bl5)) | 0;
25839 hi = (hi + Math.imul(ah7, bh5)) | 0;
25840 lo = (lo + Math.imul(al6, bl6)) | 0;
25841 mid = (mid + Math.imul(al6, bh6)) | 0;
25842 mid = (mid + Math.imul(ah6, bl6)) | 0;
25843 hi = (hi + Math.imul(ah6, bh6)) | 0;
25844 lo = (lo + Math.imul(al5, bl7)) | 0;
25845 mid = (mid + Math.imul(al5, bh7)) | 0;
25846 mid = (mid + Math.imul(ah5, bl7)) | 0;
25847 hi = (hi + Math.imul(ah5, bh7)) | 0;
25848 lo = (lo + Math.imul(al4, bl8)) | 0;
25849 mid = (mid + Math.imul(al4, bh8)) | 0;
25850 mid = (mid + Math.imul(ah4, bl8)) | 0;
25851 hi = (hi + Math.imul(ah4, bh8)) | 0;
25852 lo = (lo + Math.imul(al3, bl9)) | 0;
25853 mid = (mid + Math.imul(al3, bh9)) | 0;
25854 mid = (mid + Math.imul(ah3, bl9)) | 0;
25855 hi = (hi + Math.imul(ah3, bh9)) | 0;
25856 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25857 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
25858 w12 &= 0x3ffffff;
25859 /* k = 13 */
25860 lo = Math.imul(al9, bl4);
25861 mid = Math.imul(al9, bh4);
25862 mid = (mid + Math.imul(ah9, bl4)) | 0;
25863 hi = Math.imul(ah9, bh4);
25864 lo = (lo + Math.imul(al8, bl5)) | 0;
25865 mid = (mid + Math.imul(al8, bh5)) | 0;
25866 mid = (mid + Math.imul(ah8, bl5)) | 0;
25867 hi = (hi + Math.imul(ah8, bh5)) | 0;
25868 lo = (lo + Math.imul(al7, bl6)) | 0;
25869 mid = (mid + Math.imul(al7, bh6)) | 0;
25870 mid = (mid + Math.imul(ah7, bl6)) | 0;
25871 hi = (hi + Math.imul(ah7, bh6)) | 0;
25872 lo = (lo + Math.imul(al6, bl7)) | 0;
25873 mid = (mid + Math.imul(al6, bh7)) | 0;
25874 mid = (mid + Math.imul(ah6, bl7)) | 0;
25875 hi = (hi + Math.imul(ah6, bh7)) | 0;
25876 lo = (lo + Math.imul(al5, bl8)) | 0;
25877 mid = (mid + Math.imul(al5, bh8)) | 0;
25878 mid = (mid + Math.imul(ah5, bl8)) | 0;
25879 hi = (hi + Math.imul(ah5, bh8)) | 0;
25880 lo = (lo + Math.imul(al4, bl9)) | 0;
25881 mid = (mid + Math.imul(al4, bh9)) | 0;
25882 mid = (mid + Math.imul(ah4, bl9)) | 0;
25883 hi = (hi + Math.imul(ah4, bh9)) | 0;
25884 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25885 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
25886 w13 &= 0x3ffffff;
25887 /* k = 14 */
25888 lo = Math.imul(al9, bl5);
25889 mid = Math.imul(al9, bh5);
25890 mid = (mid + Math.imul(ah9, bl5)) | 0;
25891 hi = Math.imul(ah9, bh5);
25892 lo = (lo + Math.imul(al8, bl6)) | 0;
25893 mid = (mid + Math.imul(al8, bh6)) | 0;
25894 mid = (mid + Math.imul(ah8, bl6)) | 0;
25895 hi = (hi + Math.imul(ah8, bh6)) | 0;
25896 lo = (lo + Math.imul(al7, bl7)) | 0;
25897 mid = (mid + Math.imul(al7, bh7)) | 0;
25898 mid = (mid + Math.imul(ah7, bl7)) | 0;
25899 hi = (hi + Math.imul(ah7, bh7)) | 0;
25900 lo = (lo + Math.imul(al6, bl8)) | 0;
25901 mid = (mid + Math.imul(al6, bh8)) | 0;
25902 mid = (mid + Math.imul(ah6, bl8)) | 0;
25903 hi = (hi + Math.imul(ah6, bh8)) | 0;
25904 lo = (lo + Math.imul(al5, bl9)) | 0;
25905 mid = (mid + Math.imul(al5, bh9)) | 0;
25906 mid = (mid + Math.imul(ah5, bl9)) | 0;
25907 hi = (hi + Math.imul(ah5, bh9)) | 0;
25908 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25909 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
25910 w14 &= 0x3ffffff;
25911 /* k = 15 */
25912 lo = Math.imul(al9, bl6);
25913 mid = Math.imul(al9, bh6);
25914 mid = (mid + Math.imul(ah9, bl6)) | 0;
25915 hi = Math.imul(ah9, bh6);
25916 lo = (lo + Math.imul(al8, bl7)) | 0;
25917 mid = (mid + Math.imul(al8, bh7)) | 0;
25918 mid = (mid + Math.imul(ah8, bl7)) | 0;
25919 hi = (hi + Math.imul(ah8, bh7)) | 0;
25920 lo = (lo + Math.imul(al7, bl8)) | 0;
25921 mid = (mid + Math.imul(al7, bh8)) | 0;
25922 mid = (mid + Math.imul(ah7, bl8)) | 0;
25923 hi = (hi + Math.imul(ah7, bh8)) | 0;
25924 lo = (lo + Math.imul(al6, bl9)) | 0;
25925 mid = (mid + Math.imul(al6, bh9)) | 0;
25926 mid = (mid + Math.imul(ah6, bl9)) | 0;
25927 hi = (hi + Math.imul(ah6, bh9)) | 0;
25928 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25929 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
25930 w15 &= 0x3ffffff;
25931 /* k = 16 */
25932 lo = Math.imul(al9, bl7);
25933 mid = Math.imul(al9, bh7);
25934 mid = (mid + Math.imul(ah9, bl7)) | 0;
25935 hi = Math.imul(ah9, bh7);
25936 lo = (lo + Math.imul(al8, bl8)) | 0;
25937 mid = (mid + Math.imul(al8, bh8)) | 0;
25938 mid = (mid + Math.imul(ah8, bl8)) | 0;
25939 hi = (hi + Math.imul(ah8, bh8)) | 0;
25940 lo = (lo + Math.imul(al7, bl9)) | 0;
25941 mid = (mid + Math.imul(al7, bh9)) | 0;
25942 mid = (mid + Math.imul(ah7, bl9)) | 0;
25943 hi = (hi + Math.imul(ah7, bh9)) | 0;
25944 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25945 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
25946 w16 &= 0x3ffffff;
25947 /* k = 17 */
25948 lo = Math.imul(al9, bl8);
25949 mid = Math.imul(al9, bh8);
25950 mid = (mid + Math.imul(ah9, bl8)) | 0;
25951 hi = Math.imul(ah9, bh8);
25952 lo = (lo + Math.imul(al8, bl9)) | 0;
25953 mid = (mid + Math.imul(al8, bh9)) | 0;
25954 mid = (mid + Math.imul(ah8, bl9)) | 0;
25955 hi = (hi + Math.imul(ah8, bh9)) | 0;
25956 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25957 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
25958 w17 &= 0x3ffffff;
25959 /* k = 18 */
25960 lo = Math.imul(al9, bl9);
25961 mid = Math.imul(al9, bh9);
25962 mid = (mid + Math.imul(ah9, bl9)) | 0;
25963 hi = Math.imul(ah9, bh9);
25964 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25965 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
25966 w18 &= 0x3ffffff;
25967 o[0] = w0;
25968 o[1] = w1;
25969 o[2] = w2;
25970 o[3] = w3;
25971 o[4] = w4;
25972 o[5] = w5;
25973 o[6] = w6;
25974 o[7] = w7;
25975 o[8] = w8;
25976 o[9] = w9;
25977 o[10] = w10;
25978 o[11] = w11;
25979 o[12] = w12;
25980 o[13] = w13;
25981 o[14] = w14;
25982 o[15] = w15;
25983 o[16] = w16;
25984 o[17] = w17;
25985 o[18] = w18;
25986 if (c !== 0) {
25987 o[19] = c;
25988 out.length++;
25989 }
25990 return out;
25991 };
25992
25993 // Polyfill comb
25994 if (!Math.imul) {
25995 comb10MulTo = smallMulTo;
25996 }
25997
25998 function bigMulTo (self, num, out) {
25999 out.negative = num.negative ^ self.negative;
26000 out.length = self.length + num.length;
26001
26002 var carry = 0;
26003 var hncarry = 0;
26004 for (var k = 0; k < out.length - 1; k++) {
26005 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
26006 // note that ncarry could be >= 0x3ffffff
26007 var ncarry = hncarry;
26008 hncarry = 0;
26009 var rword = carry & 0x3ffffff;
26010 var maxJ = Math.min(k, num.length - 1);
26011 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
26012 var i = k - j;
26013 var a = self.words[i] | 0;
26014 var b = num.words[j] | 0;
26015 var r = a * b;
26016
26017 var lo = r & 0x3ffffff;
26018 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
26019 lo = (lo + rword) | 0;
26020 rword = lo & 0x3ffffff;
26021 ncarry = (ncarry + (lo >>> 26)) | 0;
26022
26023 hncarry += ncarry >>> 26;
26024 ncarry &= 0x3ffffff;
26025 }
26026 out.words[k] = rword;
26027 carry = ncarry;
26028 ncarry = hncarry;
26029 }
26030 if (carry !== 0) {
26031 out.words[k] = carry;
26032 } else {
26033 out.length--;
26034 }
26035
26036 return out.strip();
26037 }
26038
26039 function jumboMulTo (self, num, out) {
26040 var fftm = new FFTM();
26041 return fftm.mulp(self, num, out);
26042 }
26043
26044 BN.prototype.mulTo = function mulTo (num, out) {
26045 var res;
26046 var len = this.length + num.length;
26047 if (this.length === 10 && num.length === 10) {
26048 res = comb10MulTo(this, num, out);
26049 } else if (len < 63) {
26050 res = smallMulTo(this, num, out);
26051 } else if (len < 1024) {
26052 res = bigMulTo(this, num, out);
26053 } else {
26054 res = jumboMulTo(this, num, out);
26055 }
26056
26057 return res;
26058 };
26059
26060 // Cooley-Tukey algorithm for FFT
26061 // slightly revisited to rely on looping instead of recursion
26062
26063 function FFTM (x, y) {
26064 this.x = x;
26065 this.y = y;
26066 }
26067
26068 FFTM.prototype.makeRBT = function makeRBT (N) {
26069 var t = new Array(N);
26070 var l = BN.prototype._countBits(N) - 1;
26071 for (var i = 0; i < N; i++) {
26072 t[i] = this.revBin(i, l, N);
26073 }
26074
26075 return t;
26076 };
26077
26078 // Returns binary-reversed representation of `x`
26079 FFTM.prototype.revBin = function revBin (x, l, N) {
26080 if (x === 0 || x === N - 1) return x;
26081
26082 var rb = 0;
26083 for (var i = 0; i < l; i++) {
26084 rb |= (x & 1) << (l - i - 1);
26085 x >>= 1;
26086 }
26087
26088 return rb;
26089 };
26090
26091 // Performs "tweedling" phase, therefore 'emulating'
26092 // behaviour of the recursive algorithm
26093 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
26094 for (var i = 0; i < N; i++) {
26095 rtws[i] = rws[rbt[i]];
26096 itws[i] = iws[rbt[i]];
26097 }
26098 };
26099
26100 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
26101 this.permute(rbt, rws, iws, rtws, itws, N);
26102
26103 for (var s = 1; s < N; s <<= 1) {
26104 var l = s << 1;
26105
26106 var rtwdf = Math.cos(2 * Math.PI / l);
26107 var itwdf = Math.sin(2 * Math.PI / l);
26108
26109 for (var p = 0; p < N; p += l) {
26110 var rtwdf_ = rtwdf;
26111 var itwdf_ = itwdf;
26112
26113 for (var j = 0; j < s; j++) {
26114 var re = rtws[p + j];
26115 var ie = itws[p + j];
26116
26117 var ro = rtws[p + j + s];
26118 var io = itws[p + j + s];
26119
26120 var rx = rtwdf_ * ro - itwdf_ * io;
26121
26122 io = rtwdf_ * io + itwdf_ * ro;
26123 ro = rx;
26124
26125 rtws[p + j] = re + ro;
26126 itws[p + j] = ie + io;
26127
26128 rtws[p + j + s] = re - ro;
26129 itws[p + j + s] = ie - io;
26130
26131 /* jshint maxdepth : false */
26132 if (j !== l) {
26133 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
26134
26135 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
26136 rtwdf_ = rx;
26137 }
26138 }
26139 }
26140 }
26141 };
26142
26143 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
26144 var N = Math.max(m, n) | 1;
26145 var odd = N & 1;
26146 var i = 0;
26147 for (N = N / 2 | 0; N; N = N >>> 1) {
26148 i++;
26149 }
26150
26151 return 1 << i + 1 + odd;
26152 };
26153
26154 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
26155 if (N <= 1) return;
26156
26157 for (var i = 0; i < N / 2; i++) {
26158 var t = rws[i];
26159
26160 rws[i] = rws[N - i - 1];
26161 rws[N - i - 1] = t;
26162
26163 t = iws[i];
26164
26165 iws[i] = -iws[N - i - 1];
26166 iws[N - i - 1] = -t;
26167 }
26168 };
26169
26170 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
26171 var carry = 0;
26172 for (var i = 0; i < N / 2; i++) {
26173 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
26174 Math.round(ws[2 * i] / N) +
26175 carry;
26176
26177 ws[i] = w & 0x3ffffff;
26178
26179 if (w < 0x4000000) {
26180 carry = 0;
26181 } else {
26182 carry = w / 0x4000000 | 0;
26183 }
26184 }
26185
26186 return ws;
26187 };
26188
26189 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
26190 var carry = 0;
26191 for (var i = 0; i < len; i++) {
26192 carry = carry + (ws[i] | 0);
26193
26194 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
26195 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
26196 }
26197
26198 // Pad with zeroes
26199 for (i = 2 * len; i < N; ++i) {
26200 rws[i] = 0;
26201 }
26202
26203 assert(carry === 0);
26204 assert((carry & ~0x1fff) === 0);
26205 };
26206
26207 FFTM.prototype.stub = function stub (N) {
26208 var ph = new Array(N);
26209 for (var i = 0; i < N; i++) {
26210 ph[i] = 0;
26211 }
26212
26213 return ph;
26214 };
26215
26216 FFTM.prototype.mulp = function mulp (x, y, out) {
26217 var N = 2 * this.guessLen13b(x.length, y.length);
26218
26219 var rbt = this.makeRBT(N);
26220
26221 var _ = this.stub(N);
26222
26223 var rws = new Array(N);
26224 var rwst = new Array(N);
26225 var iwst = new Array(N);
26226
26227 var nrws = new Array(N);
26228 var nrwst = new Array(N);
26229 var niwst = new Array(N);
26230
26231 var rmws = out.words;
26232 rmws.length = N;
26233
26234 this.convert13b(x.words, x.length, rws, N);
26235 this.convert13b(y.words, y.length, nrws, N);
26236
26237 this.transform(rws, _, rwst, iwst, N, rbt);
26238 this.transform(nrws, _, nrwst, niwst, N, rbt);
26239
26240 for (var i = 0; i < N; i++) {
26241 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
26242 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
26243 rwst[i] = rx;
26244 }
26245
26246 this.conjugate(rwst, iwst, N);
26247 this.transform(rwst, iwst, rmws, _, N, rbt);
26248 this.conjugate(rmws, _, N);
26249 this.normalize13b(rmws, N);
26250
26251 out.negative = x.negative ^ y.negative;
26252 out.length = x.length + y.length;
26253 return out.strip();
26254 };
26255
26256 // Multiply `this` by `num`
26257 BN.prototype.mul = function mul (num) {
26258 var out = new BN(null);
26259 out.words = new Array(this.length + num.length);
26260 return this.mulTo(num, out);
26261 };
26262
26263 // Multiply employing FFT
26264 BN.prototype.mulf = function mulf (num) {
26265 var out = new BN(null);
26266 out.words = new Array(this.length + num.length);
26267 return jumboMulTo(this, num, out);
26268 };
26269
26270 // In-place Multiplication
26271 BN.prototype.imul = function imul (num) {
26272 return this.clone().mulTo(num, this);
26273 };
26274
26275 BN.prototype.imuln = function imuln (num) {
26276 assert(typeof num === 'number');
26277 assert(num < 0x4000000);
26278
26279 // Carry
26280 var carry = 0;
26281 for (var i = 0; i < this.length; i++) {
26282 var w = (this.words[i] | 0) * num;
26283 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
26284 carry >>= 26;
26285 carry += (w / 0x4000000) | 0;
26286 // NOTE: lo is 27bit maximum
26287 carry += lo >>> 26;
26288 this.words[i] = lo & 0x3ffffff;
26289 }
26290
26291 if (carry !== 0) {
26292 this.words[i] = carry;
26293 this.length++;
26294 }
26295
26296 return this;
26297 };
26298
26299 BN.prototype.muln = function muln (num) {
26300 return this.clone().imuln(num);
26301 };
26302
26303 // `this` * `this`
26304 BN.prototype.sqr = function sqr () {
26305 return this.mul(this);
26306 };
26307
26308 // `this` * `this` in-place
26309 BN.prototype.isqr = function isqr () {
26310 return this.imul(this.clone());
26311 };
26312
26313 // Math.pow(`this`, `num`)
26314 BN.prototype.pow = function pow (num) {
26315 var w = toBitArray(num);
26316 if (w.length === 0) return new BN(1);
26317
26318 // Skip leading zeroes
26319 var res = this;
26320 for (var i = 0; i < w.length; i++, res = res.sqr()) {
26321 if (w[i] !== 0) break;
26322 }
26323
26324 if (++i < w.length) {
26325 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
26326 if (w[i] === 0) continue;
26327
26328 res = res.mul(q);
26329 }
26330 }
26331
26332 return res;
26333 };
26334
26335 // Shift-left in-place
26336 BN.prototype.iushln = function iushln (bits) {
26337 assert(typeof bits === 'number' && bits >= 0);
26338 var r = bits % 26;
26339 var s = (bits - r) / 26;
26340 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
26341 var i;
26342
26343 if (r !== 0) {
26344 var carry = 0;
26345
26346 for (i = 0; i < this.length; i++) {
26347 var newCarry = this.words[i] & carryMask;
26348 var c = ((this.words[i] | 0) - newCarry) << r;
26349 this.words[i] = c | carry;
26350 carry = newCarry >>> (26 - r);
26351 }
26352
26353 if (carry) {
26354 this.words[i] = carry;
26355 this.length++;
26356 }
26357 }
26358
26359 if (s !== 0) {
26360 for (i = this.length - 1; i >= 0; i--) {
26361 this.words[i + s] = this.words[i];
26362 }
26363
26364 for (i = 0; i < s; i++) {
26365 this.words[i] = 0;
26366 }
26367
26368 this.length += s;
26369 }
26370
26371 return this.strip();
26372 };
26373
26374 BN.prototype.ishln = function ishln (bits) {
26375 // TODO(indutny): implement me
26376 assert(this.negative === 0);
26377 return this.iushln(bits);
26378 };
26379
26380 // Shift-right in-place
26381 // NOTE: `hint` is a lowest bit before trailing zeroes
26382 // NOTE: if `extended` is present - it will be filled with destroyed bits
26383 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
26384 assert(typeof bits === 'number' && bits >= 0);
26385 var h;
26386 if (hint) {
26387 h = (hint - (hint % 26)) / 26;
26388 } else {
26389 h = 0;
26390 }
26391
26392 var r = bits % 26;
26393 var s = Math.min((bits - r) / 26, this.length);
26394 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
26395 var maskedWords = extended;
26396
26397 h -= s;
26398 h = Math.max(0, h);
26399
26400 // Extended mode, copy masked part
26401 if (maskedWords) {
26402 for (var i = 0; i < s; i++) {
26403 maskedWords.words[i] = this.words[i];
26404 }
26405 maskedWords.length = s;
26406 }
26407
26408 if (s === 0) {
26409 // No-op, we should not move anything at all
26410 } else if (this.length > s) {
26411 this.length -= s;
26412 for (i = 0; i < this.length; i++) {
26413 this.words[i] = this.words[i + s];
26414 }
26415 } else {
26416 this.words[0] = 0;
26417 this.length = 1;
26418 }
26419
26420 var carry = 0;
26421 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
26422 var word = this.words[i] | 0;
26423 this.words[i] = (carry << (26 - r)) | (word >>> r);
26424 carry = word & mask;
26425 }
26426
26427 // Push carried bits as a mask
26428 if (maskedWords && carry !== 0) {
26429 maskedWords.words[maskedWords.length++] = carry;
26430 }
26431
26432 if (this.length === 0) {
26433 this.words[0] = 0;
26434 this.length = 1;
26435 }
26436
26437 return this.strip();
26438 };
26439
26440 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
26441 // TODO(indutny): implement me
26442 assert(this.negative === 0);
26443 return this.iushrn(bits, hint, extended);
26444 };
26445
26446 // Shift-left
26447 BN.prototype.shln = function shln (bits) {
26448 return this.clone().ishln(bits);
26449 };
26450
26451 BN.prototype.ushln = function ushln (bits) {
26452 return this.clone().iushln(bits);
26453 };
26454
26455 // Shift-right
26456 BN.prototype.shrn = function shrn (bits) {
26457 return this.clone().ishrn(bits);
26458 };
26459
26460 BN.prototype.ushrn = function ushrn (bits) {
26461 return this.clone().iushrn(bits);
26462 };
26463
26464 // Test if n bit is set
26465 BN.prototype.testn = function testn (bit) {
26466 assert(typeof bit === 'number' && bit >= 0);
26467 var r = bit % 26;
26468 var s = (bit - r) / 26;
26469 var q = 1 << r;
26470
26471 // Fast case: bit is much higher than all existing words
26472 if (this.length <= s) return false;
26473
26474 // Check bit and return
26475 var w = this.words[s];
26476
26477 return !!(w & q);
26478 };
26479
26480 // Return only lowers bits of number (in-place)
26481 BN.prototype.imaskn = function imaskn (bits) {
26482 assert(typeof bits === 'number' && bits >= 0);
26483 var r = bits % 26;
26484 var s = (bits - r) / 26;
26485
26486 assert(this.negative === 0, 'imaskn works only with positive numbers');
26487
26488 if (this.length <= s) {
26489 return this;
26490 }
26491
26492 if (r !== 0) {
26493 s++;
26494 }
26495 this.length = Math.min(s, this.length);
26496
26497 if (r !== 0) {
26498 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
26499 this.words[this.length - 1] &= mask;
26500 }
26501
26502 return this.strip();
26503 };
26504
26505 // Return only lowers bits of number
26506 BN.prototype.maskn = function maskn (bits) {
26507 return this.clone().imaskn(bits);
26508 };
26509
26510 // Add plain number `num` to `this`
26511 BN.prototype.iaddn = function iaddn (num) {
26512 assert(typeof num === 'number');
26513 assert(num < 0x4000000);
26514 if (num < 0) return this.isubn(-num);
26515
26516 // Possible sign change
26517 if (this.negative !== 0) {
26518 if (this.length === 1 && (this.words[0] | 0) < num) {
26519 this.words[0] = num - (this.words[0] | 0);
26520 this.negative = 0;
26521 return this;
26522 }
26523
26524 this.negative = 0;
26525 this.isubn(num);
26526 this.negative = 1;
26527 return this;
26528 }
26529
26530 // Add without checks
26531 return this._iaddn(num);
26532 };
26533
26534 BN.prototype._iaddn = function _iaddn (num) {
26535 this.words[0] += num;
26536
26537 // Carry
26538 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
26539 this.words[i] -= 0x4000000;
26540 if (i === this.length - 1) {
26541 this.words[i + 1] = 1;
26542 } else {
26543 this.words[i + 1]++;
26544 }
26545 }
26546 this.length = Math.max(this.length, i + 1);
26547
26548 return this;
26549 };
26550
26551 // Subtract plain number `num` from `this`
26552 BN.prototype.isubn = function isubn (num) {
26553 assert(typeof num === 'number');
26554 assert(num < 0x4000000);
26555 if (num < 0) return this.iaddn(-num);
26556
26557 if (this.negative !== 0) {
26558 this.negative = 0;
26559 this.iaddn(num);
26560 this.negative = 1;
26561 return this;
26562 }
26563
26564 this.words[0] -= num;
26565
26566 if (this.length === 1 && this.words[0] < 0) {
26567 this.words[0] = -this.words[0];
26568 this.negative = 1;
26569 } else {
26570 // Carry
26571 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
26572 this.words[i] += 0x4000000;
26573 this.words[i + 1] -= 1;
26574 }
26575 }
26576
26577 return this.strip();
26578 };
26579
26580 BN.prototype.addn = function addn (num) {
26581 return this.clone().iaddn(num);
26582 };
26583
26584 BN.prototype.subn = function subn (num) {
26585 return this.clone().isubn(num);
26586 };
26587
26588 BN.prototype.iabs = function iabs () {
26589 this.negative = 0;
26590
26591 return this;
26592 };
26593
26594 BN.prototype.abs = function abs () {
26595 return this.clone().iabs();
26596 };
26597
26598 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
26599 var len = num.length + shift;
26600 var i;
26601
26602 this._expand(len);
26603
26604 var w;
26605 var carry = 0;
26606 for (i = 0; i < num.length; i++) {
26607 w = (this.words[i + shift] | 0) + carry;
26608 var right = (num.words[i] | 0) * mul;
26609 w -= right & 0x3ffffff;
26610 carry = (w >> 26) - ((right / 0x4000000) | 0);
26611 this.words[i + shift] = w & 0x3ffffff;
26612 }
26613 for (; i < this.length - shift; i++) {
26614 w = (this.words[i + shift] | 0) + carry;
26615 carry = w >> 26;
26616 this.words[i + shift] = w & 0x3ffffff;
26617 }
26618
26619 if (carry === 0) return this.strip();
26620
26621 // Subtraction overflow
26622 assert(carry === -1);
26623 carry = 0;
26624 for (i = 0; i < this.length; i++) {
26625 w = -(this.words[i] | 0) + carry;
26626 carry = w >> 26;
26627 this.words[i] = w & 0x3ffffff;
26628 }
26629 this.negative = 1;
26630
26631 return this.strip();
26632 };
26633
26634 BN.prototype._wordDiv = function _wordDiv (num, mode) {
26635 var shift = this.length - num.length;
26636
26637 var a = this.clone();
26638 var b = num;
26639
26640 // Normalize
26641 var bhi = b.words[b.length - 1] | 0;
26642 var bhiBits = this._countBits(bhi);
26643 shift = 26 - bhiBits;
26644 if (shift !== 0) {
26645 b = b.ushln(shift);
26646 a.iushln(shift);
26647 bhi = b.words[b.length - 1] | 0;
26648 }
26649
26650 // Initialize quotient
26651 var m = a.length - b.length;
26652 var q;
26653
26654 if (mode !== 'mod') {
26655 q = new BN(null);
26656 q.length = m + 1;
26657 q.words = new Array(q.length);
26658 for (var i = 0; i < q.length; i++) {
26659 q.words[i] = 0;
26660 }
26661 }
26662
26663 var diff = a.clone()._ishlnsubmul(b, 1, m);
26664 if (diff.negative === 0) {
26665 a = diff;
26666 if (q) {
26667 q.words[m] = 1;
26668 }
26669 }
26670
26671 for (var j = m - 1; j >= 0; j--) {
26672 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
26673 (a.words[b.length + j - 1] | 0);
26674
26675 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
26676 // (0x7ffffff)
26677 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
26678
26679 a._ishlnsubmul(b, qj, j);
26680 while (a.negative !== 0) {
26681 qj--;
26682 a.negative = 0;
26683 a._ishlnsubmul(b, 1, j);
26684 if (!a.isZero()) {
26685 a.negative ^= 1;
26686 }
26687 }
26688 if (q) {
26689 q.words[j] = qj;
26690 }
26691 }
26692 if (q) {
26693 q.strip();
26694 }
26695 a.strip();
26696
26697 // Denormalize
26698 if (mode !== 'div' && shift !== 0) {
26699 a.iushrn(shift);
26700 }
26701
26702 return {
26703 div: q || null,
26704 mod: a
26705 };
26706 };
26707
26708 // NOTE: 1) `mode` can be set to `mod` to request mod only,
26709 // to `div` to request div only, or be absent to
26710 // request both div & mod
26711 // 2) `positive` is true if unsigned mod is requested
26712 BN.prototype.divmod = function divmod (num, mode, positive) {
26713 assert(!num.isZero());
26714
26715 if (this.isZero()) {
26716 return {
26717 div: new BN(0),
26718 mod: new BN(0)
26719 };
26720 }
26721
26722 var div, mod, res;
26723 if (this.negative !== 0 && num.negative === 0) {
26724 res = this.neg().divmod(num, mode);
26725
26726 if (mode !== 'mod') {
26727 div = res.div.neg();
26728 }
26729
26730 if (mode !== 'div') {
26731 mod = res.mod.neg();
26732 if (positive && mod.negative !== 0) {
26733 mod.iadd(num);
26734 }
26735 }
26736
26737 return {
26738 div: div,
26739 mod: mod
26740 };
26741 }
26742
26743 if (this.negative === 0 && num.negative !== 0) {
26744 res = this.divmod(num.neg(), mode);
26745
26746 if (mode !== 'mod') {
26747 div = res.div.neg();
26748 }
26749
26750 return {
26751 div: div,
26752 mod: res.mod
26753 };
26754 }
26755
26756 if ((this.negative & num.negative) !== 0) {
26757 res = this.neg().divmod(num.neg(), mode);
26758
26759 if (mode !== 'div') {
26760 mod = res.mod.neg();
26761 if (positive && mod.negative !== 0) {
26762 mod.isub(num);
26763 }
26764 }
26765
26766 return {
26767 div: res.div,
26768 mod: mod
26769 };
26770 }
26771
26772 // Both numbers are positive at this point
26773
26774 // Strip both numbers to approximate shift value
26775 if (num.length > this.length || this.cmp(num) < 0) {
26776 return {
26777 div: new BN(0),
26778 mod: this
26779 };
26780 }
26781
26782 // Very short reduction
26783 if (num.length === 1) {
26784 if (mode === 'div') {
26785 return {
26786 div: this.divn(num.words[0]),
26787 mod: null
26788 };
26789 }
26790
26791 if (mode === 'mod') {
26792 return {
26793 div: null,
26794 mod: new BN(this.modn(num.words[0]))
26795 };
26796 }
26797
26798 return {
26799 div: this.divn(num.words[0]),
26800 mod: new BN(this.modn(num.words[0]))
26801 };
26802 }
26803
26804 return this._wordDiv(num, mode);
26805 };
26806
26807 // Find `this` / `num`
26808 BN.prototype.div = function div (num) {
26809 return this.divmod(num, 'div', false).div;
26810 };
26811
26812 // Find `this` % `num`
26813 BN.prototype.mod = function mod (num) {
26814 return this.divmod(num, 'mod', false).mod;
26815 };
26816
26817 BN.prototype.umod = function umod (num) {
26818 return this.divmod(num, 'mod', true).mod;
26819 };
26820
26821 // Find Round(`this` / `num`)
26822 BN.prototype.divRound = function divRound (num) {
26823 var dm = this.divmod(num);
26824
26825 // Fast case - exact division
26826 if (dm.mod.isZero()) return dm.div;
26827
26828 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
26829
26830 var half = num.ushrn(1);
26831 var r2 = num.andln(1);
26832 var cmp = mod.cmp(half);
26833
26834 // Round down
26835 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
26836
26837 // Round up
26838 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
26839 };
26840
26841 BN.prototype.modn = function modn (num) {
26842 assert(num <= 0x3ffffff);
26843 var p = (1 << 26) % num;
26844
26845 var acc = 0;
26846 for (var i = this.length - 1; i >= 0; i--) {
26847 acc = (p * acc + (this.words[i] | 0)) % num;
26848 }
26849
26850 return acc;
26851 };
26852
26853 // In-place division by number
26854 BN.prototype.idivn = function idivn (num) {
26855 assert(num <= 0x3ffffff);
26856
26857 var carry = 0;
26858 for (var i = this.length - 1; i >= 0; i--) {
26859 var w = (this.words[i] | 0) + carry * 0x4000000;
26860 this.words[i] = (w / num) | 0;
26861 carry = w % num;
26862 }
26863
26864 return this.strip();
26865 };
26866
26867 BN.prototype.divn = function divn (num) {
26868 return this.clone().idivn(num);
26869 };
26870
26871 BN.prototype.egcd = function egcd (p) {
26872 assert(p.negative === 0);
26873 assert(!p.isZero());
26874
26875 var x = this;
26876 var y = p.clone();
26877
26878 if (x.negative !== 0) {
26879 x = x.umod(p);
26880 } else {
26881 x = x.clone();
26882 }
26883
26884 // A * x + B * y = x
26885 var A = new BN(1);
26886 var B = new BN(0);
26887
26888 // C * x + D * y = y
26889 var C = new BN(0);
26890 var D = new BN(1);
26891
26892 var g = 0;
26893
26894 while (x.isEven() && y.isEven()) {
26895 x.iushrn(1);
26896 y.iushrn(1);
26897 ++g;
26898 }
26899
26900 var yp = y.clone();
26901 var xp = x.clone();
26902
26903 while (!x.isZero()) {
26904 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
26905 if (i > 0) {
26906 x.iushrn(i);
26907 while (i-- > 0) {
26908 if (A.isOdd() || B.isOdd()) {
26909 A.iadd(yp);
26910 B.isub(xp);
26911 }
26912
26913 A.iushrn(1);
26914 B.iushrn(1);
26915 }
26916 }
26917
26918 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
26919 if (j > 0) {
26920 y.iushrn(j);
26921 while (j-- > 0) {
26922 if (C.isOdd() || D.isOdd()) {
26923 C.iadd(yp);
26924 D.isub(xp);
26925 }
26926
26927 C.iushrn(1);
26928 D.iushrn(1);
26929 }
26930 }
26931
26932 if (x.cmp(y) >= 0) {
26933 x.isub(y);
26934 A.isub(C);
26935 B.isub(D);
26936 } else {
26937 y.isub(x);
26938 C.isub(A);
26939 D.isub(B);
26940 }
26941 }
26942
26943 return {
26944 a: C,
26945 b: D,
26946 gcd: y.iushln(g)
26947 };
26948 };
26949
26950 // This is reduced incarnation of the binary EEA
26951 // above, designated to invert members of the
26952 // _prime_ fields F(p) at a maximal speed
26953 BN.prototype._invmp = function _invmp (p) {
26954 assert(p.negative === 0);
26955 assert(!p.isZero());
26956
26957 var a = this;
26958 var b = p.clone();
26959
26960 if (a.negative !== 0) {
26961 a = a.umod(p);
26962 } else {
26963 a = a.clone();
26964 }
26965
26966 var x1 = new BN(1);
26967 var x2 = new BN(0);
26968
26969 var delta = b.clone();
26970
26971 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
26972 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
26973 if (i > 0) {
26974 a.iushrn(i);
26975 while (i-- > 0) {
26976 if (x1.isOdd()) {
26977 x1.iadd(delta);
26978 }
26979
26980 x1.iushrn(1);
26981 }
26982 }
26983
26984 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
26985 if (j > 0) {
26986 b.iushrn(j);
26987 while (j-- > 0) {
26988 if (x2.isOdd()) {
26989 x2.iadd(delta);
26990 }
26991
26992 x2.iushrn(1);
26993 }
26994 }
26995
26996 if (a.cmp(b) >= 0) {
26997 a.isub(b);
26998 x1.isub(x2);
26999 } else {
27000 b.isub(a);
27001 x2.isub(x1);
27002 }
27003 }
27004
27005 var res;
27006 if (a.cmpn(1) === 0) {
27007 res = x1;
27008 } else {
27009 res = x2;
27010 }
27011
27012 if (res.cmpn(0) < 0) {
27013 res.iadd(p);
27014 }
27015
27016 return res;
27017 };
27018
27019 BN.prototype.gcd = function gcd (num) {
27020 if (this.isZero()) return num.abs();
27021 if (num.isZero()) return this.abs();
27022
27023 var a = this.clone();
27024 var b = num.clone();
27025 a.negative = 0;
27026 b.negative = 0;
27027
27028 // Remove common factor of two
27029 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
27030 a.iushrn(1);
27031 b.iushrn(1);
27032 }
27033
27034 do {
27035 while (a.isEven()) {
27036 a.iushrn(1);
27037 }
27038 while (b.isEven()) {
27039 b.iushrn(1);
27040 }
27041
27042 var r = a.cmp(b);
27043 if (r < 0) {
27044 // Swap `a` and `b` to make `a` always bigger than `b`
27045 var t = a;
27046 a = b;
27047 b = t;
27048 } else if (r === 0 || b.cmpn(1) === 0) {
27049 break;
27050 }
27051
27052 a.isub(b);
27053 } while (true);
27054
27055 return b.iushln(shift);
27056 };
27057
27058 // Invert number in the field F(num)
27059 BN.prototype.invm = function invm (num) {
27060 return this.egcd(num).a.umod(num);
27061 };
27062
27063 BN.prototype.isEven = function isEven () {
27064 return (this.words[0] & 1) === 0;
27065 };
27066
27067 BN.prototype.isOdd = function isOdd () {
27068 return (this.words[0] & 1) === 1;
27069 };
27070
27071 // And first word and num
27072 BN.prototype.andln = function andln (num) {
27073 return this.words[0] & num;
27074 };
27075
27076 // Increment at the bit position in-line
27077 BN.prototype.bincn = function bincn (bit) {
27078 assert(typeof bit === 'number');
27079 var r = bit % 26;
27080 var s = (bit - r) / 26;
27081 var q = 1 << r;
27082
27083 // Fast case: bit is much higher than all existing words
27084 if (this.length <= s) {
27085 this._expand(s + 1);
27086 this.words[s] |= q;
27087 return this;
27088 }
27089
27090 // Add bit and propagate, if needed
27091 var carry = q;
27092 for (var i = s; carry !== 0 && i < this.length; i++) {
27093 var w = this.words[i] | 0;
27094 w += carry;
27095 carry = w >>> 26;
27096 w &= 0x3ffffff;
27097 this.words[i] = w;
27098 }
27099 if (carry !== 0) {
27100 this.words[i] = carry;
27101 this.length++;
27102 }
27103 return this;
27104 };
27105
27106 BN.prototype.isZero = function isZero () {
27107 return this.length === 1 && this.words[0] === 0;
27108 };
27109
27110 BN.prototype.cmpn = function cmpn (num) {
27111 var negative = num < 0;
27112
27113 if (this.negative !== 0 && !negative) return -1;
27114 if (this.negative === 0 && negative) return 1;
27115
27116 this.strip();
27117
27118 var res;
27119 if (this.length > 1) {
27120 res = 1;
27121 } else {
27122 if (negative) {
27123 num = -num;
27124 }
27125
27126 assert(num <= 0x3ffffff, 'Number is too big');
27127
27128 var w = this.words[0] | 0;
27129 res = w === num ? 0 : w < num ? -1 : 1;
27130 }
27131 if (this.negative !== 0) return -res | 0;
27132 return res;
27133 };
27134
27135 // Compare two numbers and return:
27136 // 1 - if `this` > `num`
27137 // 0 - if `this` == `num`
27138 // -1 - if `this` < `num`
27139 BN.prototype.cmp = function cmp (num) {
27140 if (this.negative !== 0 && num.negative === 0) return -1;
27141 if (this.negative === 0 && num.negative !== 0) return 1;
27142
27143 var res = this.ucmp(num);
27144 if (this.negative !== 0) return -res | 0;
27145 return res;
27146 };
27147
27148 // Unsigned comparison
27149 BN.prototype.ucmp = function ucmp (num) {
27150 // At this point both numbers have the same sign
27151 if (this.length > num.length) return 1;
27152 if (this.length < num.length) return -1;
27153
27154 var res = 0;
27155 for (var i = this.length - 1; i >= 0; i--) {
27156 var a = this.words[i] | 0;
27157 var b = num.words[i] | 0;
27158
27159 if (a === b) continue;
27160 if (a < b) {
27161 res = -1;
27162 } else if (a > b) {
27163 res = 1;
27164 }
27165 break;
27166 }
27167 return res;
27168 };
27169
27170 BN.prototype.gtn = function gtn (num) {
27171 return this.cmpn(num) === 1;
27172 };
27173
27174 BN.prototype.gt = function gt (num) {
27175 return this.cmp(num) === 1;
27176 };
27177
27178 BN.prototype.gten = function gten (num) {
27179 return this.cmpn(num) >= 0;
27180 };
27181
27182 BN.prototype.gte = function gte (num) {
27183 return this.cmp(num) >= 0;
27184 };
27185
27186 BN.prototype.ltn = function ltn (num) {
27187 return this.cmpn(num) === -1;
27188 };
27189
27190 BN.prototype.lt = function lt (num) {
27191 return this.cmp(num) === -1;
27192 };
27193
27194 BN.prototype.lten = function lten (num) {
27195 return this.cmpn(num) <= 0;
27196 };
27197
27198 BN.prototype.lte = function lte (num) {
27199 return this.cmp(num) <= 0;
27200 };
27201
27202 BN.prototype.eqn = function eqn (num) {
27203 return this.cmpn(num) === 0;
27204 };
27205
27206 BN.prototype.eq = function eq (num) {
27207 return this.cmp(num) === 0;
27208 };
27209
27210 //
27211 // A reduce context, could be using montgomery or something better, depending
27212 // on the `m` itself.
27213 //
27214 BN.red = function red (num) {
27215 return new Red(num);
27216 };
27217
27218 BN.prototype.toRed = function toRed (ctx) {
27219 assert(!this.red, 'Already a number in reduction context');
27220 assert(this.negative === 0, 'red works only with positives');
27221 return ctx.convertTo(this)._forceRed(ctx);
27222 };
27223
27224 BN.prototype.fromRed = function fromRed () {
27225 assert(this.red, 'fromRed works only with numbers in reduction context');
27226 return this.red.convertFrom(this);
27227 };
27228
27229 BN.prototype._forceRed = function _forceRed (ctx) {
27230 this.red = ctx;
27231 return this;
27232 };
27233
27234 BN.prototype.forceRed = function forceRed (ctx) {
27235 assert(!this.red, 'Already a number in reduction context');
27236 return this._forceRed(ctx);
27237 };
27238
27239 BN.prototype.redAdd = function redAdd (num) {
27240 assert(this.red, 'redAdd works only with red numbers');
27241 return this.red.add(this, num);
27242 };
27243
27244 BN.prototype.redIAdd = function redIAdd (num) {
27245 assert(this.red, 'redIAdd works only with red numbers');
27246 return this.red.iadd(this, num);
27247 };
27248
27249 BN.prototype.redSub = function redSub (num) {
27250 assert(this.red, 'redSub works only with red numbers');
27251 return this.red.sub(this, num);
27252 };
27253
27254 BN.prototype.redISub = function redISub (num) {
27255 assert(this.red, 'redISub works only with red numbers');
27256 return this.red.isub(this, num);
27257 };
27258
27259 BN.prototype.redShl = function redShl (num) {
27260 assert(this.red, 'redShl works only with red numbers');
27261 return this.red.shl(this, num);
27262 };
27263
27264 BN.prototype.redMul = function redMul (num) {
27265 assert(this.red, 'redMul works only with red numbers');
27266 this.red._verify2(this, num);
27267 return this.red.mul(this, num);
27268 };
27269
27270 BN.prototype.redIMul = function redIMul (num) {
27271 assert(this.red, 'redMul works only with red numbers');
27272 this.red._verify2(this, num);
27273 return this.red.imul(this, num);
27274 };
27275
27276 BN.prototype.redSqr = function redSqr () {
27277 assert(this.red, 'redSqr works only with red numbers');
27278 this.red._verify1(this);
27279 return this.red.sqr(this);
27280 };
27281
27282 BN.prototype.redISqr = function redISqr () {
27283 assert(this.red, 'redISqr works only with red numbers');
27284 this.red._verify1(this);
27285 return this.red.isqr(this);
27286 };
27287
27288 // Square root over p
27289 BN.prototype.redSqrt = function redSqrt () {
27290 assert(this.red, 'redSqrt works only with red numbers');
27291 this.red._verify1(this);
27292 return this.red.sqrt(this);
27293 };
27294
27295 BN.prototype.redInvm = function redInvm () {
27296 assert(this.red, 'redInvm works only with red numbers');
27297 this.red._verify1(this);
27298 return this.red.invm(this);
27299 };
27300
27301 // Return negative clone of `this` % `red modulo`
27302 BN.prototype.redNeg = function redNeg () {
27303 assert(this.red, 'redNeg works only with red numbers');
27304 this.red._verify1(this);
27305 return this.red.neg(this);
27306 };
27307
27308 BN.prototype.redPow = function redPow (num) {
27309 assert(this.red && !num.red, 'redPow(normalNum)');
27310 this.red._verify1(this);
27311 return this.red.pow(this, num);
27312 };
27313
27314 // Prime numbers with efficient reduction
27315 var primes = {
27316 k256: null,
27317 p224: null,
27318 p192: null,
27319 p25519: null
27320 };
27321
27322 // Pseudo-Mersenne prime
27323 function MPrime (name, p) {
27324 // P = 2 ^ N - K
27325 this.name = name;
27326 this.p = new BN(p, 16);
27327 this.n = this.p.bitLength();
27328 this.k = new BN(1).iushln(this.n).isub(this.p);
27329
27330 this.tmp = this._tmp();
27331 }
27332
27333 MPrime.prototype._tmp = function _tmp () {
27334 var tmp = new BN(null);
27335 tmp.words = new Array(Math.ceil(this.n / 13));
27336 return tmp;
27337 };
27338
27339 MPrime.prototype.ireduce = function ireduce (num) {
27340 // Assumes that `num` is less than `P^2`
27341 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
27342 var r = num;
27343 var rlen;
27344
27345 do {
27346 this.split(r, this.tmp);
27347 r = this.imulK(r);
27348 r = r.iadd(this.tmp);
27349 rlen = r.bitLength();
27350 } while (rlen > this.n);
27351
27352 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
27353 if (cmp === 0) {
27354 r.words[0] = 0;
27355 r.length = 1;
27356 } else if (cmp > 0) {
27357 r.isub(this.p);
27358 } else {
27359 r.strip();
27360 }
27361
27362 return r;
27363 };
27364
27365 MPrime.prototype.split = function split (input, out) {
27366 input.iushrn(this.n, 0, out);
27367 };
27368
27369 MPrime.prototype.imulK = function imulK (num) {
27370 return num.imul(this.k);
27371 };
27372
27373 function K256 () {
27374 MPrime.call(
27375 this,
27376 'k256',
27377 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
27378 }
27379 inherits(K256, MPrime);
27380
27381 K256.prototype.split = function split (input, output) {
27382 // 256 = 9 * 26 + 22
27383 var mask = 0x3fffff;
27384
27385 var outLen = Math.min(input.length, 9);
27386 for (var i = 0; i < outLen; i++) {
27387 output.words[i] = input.words[i];
27388 }
27389 output.length = outLen;
27390
27391 if (input.length <= 9) {
27392 input.words[0] = 0;
27393 input.length = 1;
27394 return;
27395 }
27396
27397 // Shift by 9 limbs
27398 var prev = input.words[9];
27399 output.words[output.length++] = prev & mask;
27400
27401 for (i = 10; i < input.length; i++) {
27402 var next = input.words[i] | 0;
27403 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
27404 prev = next;
27405 }
27406 prev >>>= 22;
27407 input.words[i - 10] = prev;
27408 if (prev === 0 && input.length > 10) {
27409 input.length -= 10;
27410 } else {
27411 input.length -= 9;
27412 }
27413 };
27414
27415 K256.prototype.imulK = function imulK (num) {
27416 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
27417 num.words[num.length] = 0;
27418 num.words[num.length + 1] = 0;
27419 num.length += 2;
27420
27421 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
27422 var lo = 0;
27423 for (var i = 0; i < num.length; i++) {
27424 var w = num.words[i] | 0;
27425 lo += w * 0x3d1;
27426 num.words[i] = lo & 0x3ffffff;
27427 lo = w * 0x40 + ((lo / 0x4000000) | 0);
27428 }
27429
27430 // Fast length reduction
27431 if (num.words[num.length - 1] === 0) {
27432 num.length--;
27433 if (num.words[num.length - 1] === 0) {
27434 num.length--;
27435 }
27436 }
27437 return num;
27438 };
27439
27440 function P224 () {
27441 MPrime.call(
27442 this,
27443 'p224',
27444 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
27445 }
27446 inherits(P224, MPrime);
27447
27448 function P192 () {
27449 MPrime.call(
27450 this,
27451 'p192',
27452 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
27453 }
27454 inherits(P192, MPrime);
27455
27456 function P25519 () {
27457 // 2 ^ 255 - 19
27458 MPrime.call(
27459 this,
27460 '25519',
27461 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
27462 }
27463 inherits(P25519, MPrime);
27464
27465 P25519.prototype.imulK = function imulK (num) {
27466 // K = 0x13
27467 var carry = 0;
27468 for (var i = 0; i < num.length; i++) {
27469 var hi = (num.words[i] | 0) * 0x13 + carry;
27470 var lo = hi & 0x3ffffff;
27471 hi >>>= 26;
27472
27473 num.words[i] = lo;
27474 carry = hi;
27475 }
27476 if (carry !== 0) {
27477 num.words[num.length++] = carry;
27478 }
27479 return num;
27480 };
27481
27482 // Exported mostly for testing purposes, use plain name instead
27483 BN._prime = function prime (name) {
27484 // Cached version of prime
27485 if (primes[name]) return primes[name];
27486
27487 var prime;
27488 if (name === 'k256') {
27489 prime = new K256();
27490 } else if (name === 'p224') {
27491 prime = new P224();
27492 } else if (name === 'p192') {
27493 prime = new P192();
27494 } else if (name === 'p25519') {
27495 prime = new P25519();
27496 } else {
27497 throw new Error('Unknown prime ' + name);
27498 }
27499 primes[name] = prime;
27500
27501 return prime;
27502 };
27503
27504 //
27505 // Base reduction engine
27506 //
27507 function Red (m) {
27508 if (typeof m === 'string') {
27509 var prime = BN._prime(m);
27510 this.m = prime.p;
27511 this.prime = prime;
27512 } else {
27513 assert(m.gtn(1), 'modulus must be greater than 1');
27514 this.m = m;
27515 this.prime = null;
27516 }
27517 }
27518
27519 Red.prototype._verify1 = function _verify1 (a) {
27520 assert(a.negative === 0, 'red works only with positives');
27521 assert(a.red, 'red works only with red numbers');
27522 };
27523
27524 Red.prototype._verify2 = function _verify2 (a, b) {
27525 assert((a.negative | b.negative) === 0, 'red works only with positives');
27526 assert(a.red && a.red === b.red,
27527 'red works only with red numbers');
27528 };
27529
27530 Red.prototype.imod = function imod (a) {
27531 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
27532 return a.umod(this.m)._forceRed(this);
27533 };
27534
27535 Red.prototype.neg = function neg (a) {
27536 if (a.isZero()) {
27537 return a.clone();
27538 }
27539
27540 return this.m.sub(a)._forceRed(this);
27541 };
27542
27543 Red.prototype.add = function add (a, b) {
27544 this._verify2(a, b);
27545
27546 var res = a.add(b);
27547 if (res.cmp(this.m) >= 0) {
27548 res.isub(this.m);
27549 }
27550 return res._forceRed(this);
27551 };
27552
27553 Red.prototype.iadd = function iadd (a, b) {
27554 this._verify2(a, b);
27555
27556 var res = a.iadd(b);
27557 if (res.cmp(this.m) >= 0) {
27558 res.isub(this.m);
27559 }
27560 return res;
27561 };
27562
27563 Red.prototype.sub = function sub (a, b) {
27564 this._verify2(a, b);
27565
27566 var res = a.sub(b);
27567 if (res.cmpn(0) < 0) {
27568 res.iadd(this.m);
27569 }
27570 return res._forceRed(this);
27571 };
27572
27573 Red.prototype.isub = function isub (a, b) {
27574 this._verify2(a, b);
27575
27576 var res = a.isub(b);
27577 if (res.cmpn(0) < 0) {
27578 res.iadd(this.m);
27579 }
27580 return res;
27581 };
27582
27583 Red.prototype.shl = function shl (a, num) {
27584 this._verify1(a);
27585 return this.imod(a.ushln(num));
27586 };
27587
27588 Red.prototype.imul = function imul (a, b) {
27589 this._verify2(a, b);
27590 return this.imod(a.imul(b));
27591 };
27592
27593 Red.prototype.mul = function mul (a, b) {
27594 this._verify2(a, b);
27595 return this.imod(a.mul(b));
27596 };
27597
27598 Red.prototype.isqr = function isqr (a) {
27599 return this.imul(a, a.clone());
27600 };
27601
27602 Red.prototype.sqr = function sqr (a) {
27603 return this.mul(a, a);
27604 };
27605
27606 Red.prototype.sqrt = function sqrt (a) {
27607 if (a.isZero()) return a.clone();
27608
27609 var mod3 = this.m.andln(3);
27610 assert(mod3 % 2 === 1);
27611
27612 // Fast case
27613 if (mod3 === 3) {
27614 var pow = this.m.add(new BN(1)).iushrn(2);
27615 return this.pow(a, pow);
27616 }
27617
27618 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
27619 //
27620 // Find Q and S, that Q * 2 ^ S = (P - 1)
27621 var q = this.m.subn(1);
27622 var s = 0;
27623 while (!q.isZero() && q.andln(1) === 0) {
27624 s++;
27625 q.iushrn(1);
27626 }
27627 assert(!q.isZero());
27628
27629 var one = new BN(1).toRed(this);
27630 var nOne = one.redNeg();
27631
27632 // Find quadratic non-residue
27633 // NOTE: Max is such because of generalized Riemann hypothesis.
27634 var lpow = this.m.subn(1).iushrn(1);
27635 var z = this.m.bitLength();
27636 z = new BN(2 * z * z).toRed(this);
27637
27638 while (this.pow(z, lpow).cmp(nOne) !== 0) {
27639 z.redIAdd(nOne);
27640 }
27641
27642 var c = this.pow(z, q);
27643 var r = this.pow(a, q.addn(1).iushrn(1));
27644 var t = this.pow(a, q);
27645 var m = s;
27646 while (t.cmp(one) !== 0) {
27647 var tmp = t;
27648 for (var i = 0; tmp.cmp(one) !== 0; i++) {
27649 tmp = tmp.redSqr();
27650 }
27651 assert(i < m);
27652 var b = this.pow(c, new BN(1).iushln(m - i - 1));
27653
27654 r = r.redMul(b);
27655 c = b.redSqr();
27656 t = t.redMul(c);
27657 m = i;
27658 }
27659
27660 return r;
27661 };
27662
27663 Red.prototype.invm = function invm (a) {
27664 var inv = a._invmp(this.m);
27665 if (inv.negative !== 0) {
27666 inv.negative = 0;
27667 return this.imod(inv).redNeg();
27668 } else {
27669 return this.imod(inv);
27670 }
27671 };
27672
27673 Red.prototype.pow = function pow (a, num) {
27674 if (num.isZero()) return new BN(1);
27675 if (num.cmpn(1) === 0) return a.clone();
27676
27677 var windowSize = 4;
27678 var wnd = new Array(1 << windowSize);
27679 wnd[0] = new BN(1).toRed(this);
27680 wnd[1] = a;
27681 for (var i = 2; i < wnd.length; i++) {
27682 wnd[i] = this.mul(wnd[i - 1], a);
27683 }
27684
27685 var res = wnd[0];
27686 var current = 0;
27687 var currentLen = 0;
27688 var start = num.bitLength() % 26;
27689 if (start === 0) {
27690 start = 26;
27691 }
27692
27693 for (i = num.length - 1; i >= 0; i--) {
27694 var word = num.words[i];
27695 for (var j = start - 1; j >= 0; j--) {
27696 var bit = (word >> j) & 1;
27697 if (res !== wnd[0]) {
27698 res = this.sqr(res);
27699 }
27700
27701 if (bit === 0 && current === 0) {
27702 currentLen = 0;
27703 continue;
27704 }
27705
27706 current <<= 1;
27707 current |= bit;
27708 currentLen++;
27709 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
27710
27711 res = this.mul(res, wnd[current]);
27712 currentLen = 0;
27713 current = 0;
27714 }
27715 start = 26;
27716 }
27717
27718 return res;
27719 };
27720
27721 Red.prototype.convertTo = function convertTo (num) {
27722 var r = num.umod(this.m);
27723
27724 return r === num ? r.clone() : r;
27725 };
27726
27727 Red.prototype.convertFrom = function convertFrom (num) {
27728 var res = num.clone();
27729 res.red = null;
27730 return res;
27731 };
27732
27733 //
27734 // Montgomery method engine
27735 //
27736
27737 BN.mont = function mont (num) {
27738 return new Mont(num);
27739 };
27740
27741 function Mont (m) {
27742 Red.call(this, m);
27743
27744 this.shift = this.m.bitLength();
27745 if (this.shift % 26 !== 0) {
27746 this.shift += 26 - (this.shift % 26);
27747 }
27748
27749 this.r = new BN(1).iushln(this.shift);
27750 this.r2 = this.imod(this.r.sqr());
27751 this.rinv = this.r._invmp(this.m);
27752
27753 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
27754 this.minv = this.minv.umod(this.r);
27755 this.minv = this.r.sub(this.minv);
27756 }
27757 inherits(Mont, Red);
27758
27759 Mont.prototype.convertTo = function convertTo (num) {
27760 return this.imod(num.ushln(this.shift));
27761 };
27762
27763 Mont.prototype.convertFrom = function convertFrom (num) {
27764 var r = this.imod(num.mul(this.rinv));
27765 r.red = null;
27766 return r;
27767 };
27768
27769 Mont.prototype.imul = function imul (a, b) {
27770 if (a.isZero() || b.isZero()) {
27771 a.words[0] = 0;
27772 a.length = 1;
27773 return a;
27774 }
27775
27776 var t = a.imul(b);
27777 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
27778 var u = t.isub(c).iushrn(this.shift);
27779 var res = u;
27780
27781 if (u.cmp(this.m) >= 0) {
27782 res = u.isub(this.m);
27783 } else if (u.cmpn(0) < 0) {
27784 res = u.iadd(this.m);
27785 }
27786
27787 return res._forceRed(this);
27788 };
27789
27790 Mont.prototype.mul = function mul (a, b) {
27791 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
27792
27793 var t = a.mul(b);
27794 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
27795 var u = t.isub(c).iushrn(this.shift);
27796 var res = u;
27797 if (u.cmp(this.m) >= 0) {
27798 res = u.isub(this.m);
27799 } else if (u.cmpn(0) < 0) {
27800 res = u.iadd(this.m);
27801 }
27802
27803 return res._forceRed(this);
27804 };
27805
27806 Mont.prototype.invm = function invm (a) {
27807 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
27808 var res = this.imod(a._invmp(this.m).mul(this.r2));
27809 return res._forceRed(this);
27810 };
27811 })(typeof module === 'undefined' || module, this);
27812
27813 },{}],34:[function(require,module,exports){
27814 var r;
27815
27816 module.exports = function rand(len) {
27817 if (!r)
27818 r = new Rand(null);
27819
27820 return r.generate(len);
27821 };
27822
27823 function Rand(rand) {
27824 this.rand = rand;
27825 }
27826 module.exports.Rand = Rand;
27827
27828 Rand.prototype.generate = function generate(len) {
27829 return this._rand(len);
27830 };
27831
27832 if (typeof self === 'object') {
27833 if (self.crypto && self.crypto.getRandomValues) {
27834 // Modern browsers
27835 Rand.prototype._rand = function _rand(n) {
27836 var arr = new Uint8Array(n);
27837 self.crypto.getRandomValues(arr);
27838 return arr;
27839 };
27840 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
27841 // IE
27842 Rand.prototype._rand = function _rand(n) {
27843 var arr = new Uint8Array(n);
27844 self.msCrypto.getRandomValues(arr);
27845 return arr;
27846 };
27847 } else {
27848 // Old junk
27849 Rand.prototype._rand = function() {
27850 throw new Error('Not implemented yet');
27851 };
27852 }
27853 } else {
27854 // Node.js or Web worker with no crypto support
27855 try {
27856 var crypto = require('crypto');
27857
27858 Rand.prototype._rand = function _rand(n) {
27859 return crypto.randomBytes(n);
27860 };
27861 } catch (e) {
27862 // Emulate crypto API using randy
27863 Rand.prototype._rand = function _rand(n) {
27864 var res = new Uint8Array(n);
27865 for (var i = 0; i < res.length; i++)
27866 res[i] = this.rand.getByte();
27867 return res;
27868 };
27869 }
27870 }
27871
27872 },{"crypto":3}],35:[function(require,module,exports){
27873 (function (Buffer){
27874 var Transform = require('stream').Transform
27875 var inherits = require('inherits')
27876 var StringDecoder = require('string_decoder').StringDecoder
27877 module.exports = CipherBase
27878 inherits(CipherBase, Transform)
27879 function CipherBase (hashMode) {
27880 Transform.call(this)
27881 this.hashMode = typeof hashMode === 'string'
27882 if (this.hashMode) {
27883 this[hashMode] = this._finalOrDigest
27884 } else {
27885 this.final = this._finalOrDigest
27886 }
27887 this._decoder = null
27888 this._encoding = null
27889 }
27890 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
27891 if (typeof data === 'string') {
27892 data = new Buffer(data, inputEnc)
27893 }
27894 var outData = this._update(data)
27895 if (this.hashMode) {
27896 return this
27897 }
27898 if (outputEnc) {
27899 outData = this._toString(outData, outputEnc)
27900 }
27901 return outData
27902 }
27903
27904 CipherBase.prototype.setAutoPadding = function () {}
27905
27906 CipherBase.prototype.getAuthTag = function () {
27907 throw new Error('trying to get auth tag in unsupported state')
27908 }
27909
27910 CipherBase.prototype.setAuthTag = function () {
27911 throw new Error('trying to set auth tag in unsupported state')
27912 }
27913
27914 CipherBase.prototype.setAAD = function () {
27915 throw new Error('trying to set aad in unsupported state')
27916 }
27917
27918 CipherBase.prototype._transform = function (data, _, next) {
27919 var err
27920 try {
27921 if (this.hashMode) {
27922 this._update(data)
27923 } else {
27924 this.push(this._update(data))
27925 }
27926 } catch (e) {
27927 err = e
27928 } finally {
27929 next(err)
27930 }
27931 }
27932 CipherBase.prototype._flush = function (done) {
27933 var err
27934 try {
27935 this.push(this._final())
27936 } catch (e) {
27937 err = e
27938 } finally {
27939 done(err)
27940 }
27941 }
27942 CipherBase.prototype._finalOrDigest = function (outputEnc) {
27943 var outData = this._final() || new Buffer('')
27944 if (outputEnc) {
27945 outData = this._toString(outData, outputEnc, true)
27946 }
27947 return outData
27948 }
27949
27950 CipherBase.prototype._toString = function (value, enc, fin) {
27951 if (!this._decoder) {
27952 this._decoder = new StringDecoder(enc)
27953 this._encoding = enc
27954 }
27955 if (this._encoding !== enc) {
27956 throw new Error('can\'t switch encodings')
27957 }
27958 var out = this._decoder.write(value)
27959 if (fin) {
27960 out += this._decoder.end()
27961 }
27962 return out
27963 }
27964
27965 }).call(this,require("buffer").Buffer)
27966 },{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
27967 (function (Buffer){
27968 'use strict';
27969 var inherits = require('inherits')
27970 var md5 = require('./md5')
27971 var rmd160 = require('ripemd160')
27972 var sha = require('sha.js')
27973
27974 var Base = require('cipher-base')
27975
27976 function HashNoConstructor(hash) {
27977 Base.call(this, 'digest')
27978
27979 this._hash = hash
27980 this.buffers = []
27981 }
27982
27983 inherits(HashNoConstructor, Base)
27984
27985 HashNoConstructor.prototype._update = function (data) {
27986 this.buffers.push(data)
27987 }
27988
27989 HashNoConstructor.prototype._final = function () {
27990 var buf = Buffer.concat(this.buffers)
27991 var r = this._hash(buf)
27992 this.buffers = null
27993
27994 return r
27995 }
27996
27997 function Hash(hash) {
27998 Base.call(this, 'digest')
27999
28000 this._hash = hash
28001 }
28002
28003 inherits(Hash, Base)
28004
28005 Hash.prototype._update = function (data) {
28006 this._hash.update(data)
28007 }
28008
28009 Hash.prototype._final = function () {
28010 return this._hash.digest()
28011 }
28012
28013 module.exports = function createHash (alg) {
28014 alg = alg.toLowerCase()
28015 if ('md5' === alg) return new HashNoConstructor(md5)
28016 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
28017
28018 return new Hash(sha(alg))
28019 }
28020
28021 }).call(this,require("buffer").Buffer)
28022 },{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
28023 (function (Buffer){
28024 'use strict';
28025 var intSize = 4;
28026 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
28027 var chrsz = 8;
28028
28029 function toArray(buf, bigEndian) {
28030 if ((buf.length % intSize) !== 0) {
28031 var len = buf.length + (intSize - (buf.length % intSize));
28032 buf = Buffer.concat([buf, zeroBuffer], len);
28033 }
28034
28035 var arr = [];
28036 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
28037 for (var i = 0; i < buf.length; i += intSize) {
28038 arr.push(fn.call(buf, i));
28039 }
28040 return arr;
28041 }
28042
28043 function toBuffer(arr, size, bigEndian) {
28044 var buf = new Buffer(size);
28045 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
28046 for (var i = 0; i < arr.length; i++) {
28047 fn.call(buf, arr[i], i * 4, true);
28048 }
28049 return buf;
28050 }
28051
28052 function hash(buf, fn, hashSize, bigEndian) {
28053 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
28054 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
28055 return toBuffer(arr, hashSize, bigEndian);
28056 }
28057 exports.hash = hash;
28058 }).call(this,require("buffer").Buffer)
28059 },{"buffer":5}],38:[function(require,module,exports){
28060 'use strict';
28061 /*
28062 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
28063 * Digest Algorithm, as defined in RFC 1321.
28064 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
28065 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
28066 * Distributed under the BSD License
28067 * See http://pajhome.org.uk/crypt/md5 for more info.
28068 */
28069
28070 var helpers = require('./helpers');
28071
28072 /*
28073 * Calculate the MD5 of an array of little-endian words, and a bit length
28074 */
28075 function core_md5(x, len)
28076 {
28077 /* append padding */
28078 x[len >> 5] |= 0x80 << ((len) % 32);
28079 x[(((len + 64) >>> 9) << 4) + 14] = len;
28080
28081 var a = 1732584193;
28082 var b = -271733879;
28083 var c = -1732584194;
28084 var d = 271733878;
28085
28086 for(var i = 0; i < x.length; i += 16)
28087 {
28088 var olda = a;
28089 var oldb = b;
28090 var oldc = c;
28091 var oldd = d;
28092
28093 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
28094 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
28095 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
28096 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
28097 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
28098 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
28099 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
28100 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
28101 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
28102 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
28103 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
28104 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
28105 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
28106 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
28107 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
28108 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
28109
28110 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
28111 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
28112 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
28113 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
28114 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
28115 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
28116 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
28117 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
28118 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
28119 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
28120 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
28121 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
28122 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
28123 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
28124 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
28125 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
28126
28127 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
28128 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
28129 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
28130 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
28131 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
28132 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
28133 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
28134 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
28135 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
28136 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
28137 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
28138 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
28139 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
28140 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
28141 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
28142 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
28143
28144 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
28145 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
28146 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
28147 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
28148 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
28149 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
28150 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
28151 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
28152 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
28153 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
28154 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
28155 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
28156 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
28157 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
28158 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
28159 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
28160
28161 a = safe_add(a, olda);
28162 b = safe_add(b, oldb);
28163 c = safe_add(c, oldc);
28164 d = safe_add(d, oldd);
28165 }
28166 return Array(a, b, c, d);
28167
28168 }
28169
28170 /*
28171 * These functions implement the four basic operations the algorithm uses.
28172 */
28173 function md5_cmn(q, a, b, x, s, t)
28174 {
28175 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
28176 }
28177 function md5_ff(a, b, c, d, x, s, t)
28178 {
28179 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
28180 }
28181 function md5_gg(a, b, c, d, x, s, t)
28182 {
28183 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
28184 }
28185 function md5_hh(a, b, c, d, x, s, t)
28186 {
28187 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
28188 }
28189 function md5_ii(a, b, c, d, x, s, t)
28190 {
28191 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
28192 }
28193
28194 /*
28195 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
28196 * to work around bugs in some JS interpreters.
28197 */
28198 function safe_add(x, y)
28199 {
28200 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
28201 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
28202 return (msw << 16) | (lsw & 0xFFFF);
28203 }
28204
28205 /*
28206 * Bitwise rotate a 32-bit number to the left.
28207 */
28208 function bit_rol(num, cnt)
28209 {
28210 return (num << cnt) | (num >>> (32 - cnt));
28211 }
28212
28213 module.exports = function md5(buf) {
28214 return helpers.hash(buf, core_md5, 16);
28215 };
28216 },{"./helpers":37}],39:[function(require,module,exports){
28217 'use strict';
28218
28219 var elliptic = exports;
28220
28221 elliptic.version = require('../package.json').version;
28222 elliptic.utils = require('./elliptic/utils');
28223 elliptic.rand = require('brorand');
28224 elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
28225 elliptic.curve = require('./elliptic/curve');
28226 elliptic.curves = require('./elliptic/curves');
28227
28228 // Protocols
28229 elliptic.ec = require('./elliptic/ec');
28230 elliptic.eddsa = require('./elliptic/eddsa');
28231
28232 },{"../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){
28233 'use strict';
28234
28235 var BN = require('bn.js');
28236 var elliptic = require('../../elliptic');
28237 var utils = elliptic.utils;
28238 var getNAF = utils.getNAF;
28239 var getJSF = utils.getJSF;
28240 var assert = utils.assert;
28241
28242 function BaseCurve(type, conf) {
28243 this.type = type;
28244 this.p = new BN(conf.p, 16);
28245
28246 // Use Montgomery, when there is no fast reduction for the prime
28247 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
28248
28249 // Useful for many curves
28250 this.zero = new BN(0).toRed(this.red);
28251 this.one = new BN(1).toRed(this.red);
28252 this.two = new BN(2).toRed(this.red);
28253
28254 // Curve configuration, optional
28255 this.n = conf.n && new BN(conf.n, 16);
28256 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
28257
28258 // Temporary arrays
28259 this._wnafT1 = new Array(4);
28260 this._wnafT2 = new Array(4);
28261 this._wnafT3 = new Array(4);
28262 this._wnafT4 = new Array(4);
28263
28264 // Generalized Greg Maxwell's trick
28265 var adjustCount = this.n && this.p.div(this.n);
28266 if (!adjustCount || adjustCount.cmpn(100) > 0) {
28267 this.redN = null;
28268 } else {
28269 this._maxwellTrick = true;
28270 this.redN = this.n.toRed(this.red);
28271 }
28272 }
28273 module.exports = BaseCurve;
28274
28275 BaseCurve.prototype.point = function point() {
28276 throw new Error('Not implemented');
28277 };
28278
28279 BaseCurve.prototype.validate = function validate() {
28280 throw new Error('Not implemented');
28281 };
28282
28283 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
28284 assert(p.precomputed);
28285 var doubles = p._getDoubles();
28286
28287 var naf = getNAF(k, 1);
28288 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
28289 I /= 3;
28290
28291 // Translate into more windowed form
28292 var repr = [];
28293 for (var j = 0; j < naf.length; j += doubles.step) {
28294 var nafW = 0;
28295 for (var k = j + doubles.step - 1; k >= j; k--)
28296 nafW = (nafW << 1) + naf[k];
28297 repr.push(nafW);
28298 }
28299
28300 var a = this.jpoint(null, null, null);
28301 var b = this.jpoint(null, null, null);
28302 for (var i = I; i > 0; i--) {
28303 for (var j = 0; j < repr.length; j++) {
28304 var nafW = repr[j];
28305 if (nafW === i)
28306 b = b.mixedAdd(doubles.points[j]);
28307 else if (nafW === -i)
28308 b = b.mixedAdd(doubles.points[j].neg());
28309 }
28310 a = a.add(b);
28311 }
28312 return a.toP();
28313 };
28314
28315 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
28316 var w = 4;
28317
28318 // Precompute window
28319 var nafPoints = p._getNAFPoints(w);
28320 w = nafPoints.wnd;
28321 var wnd = nafPoints.points;
28322
28323 // Get NAF form
28324 var naf = getNAF(k, w);
28325
28326 // Add `this`*(N+1) for every w-NAF index
28327 var acc = this.jpoint(null, null, null);
28328 for (var i = naf.length - 1; i >= 0; i--) {
28329 // Count zeroes
28330 for (var k = 0; i >= 0 && naf[i] === 0; i--)
28331 k++;
28332 if (i >= 0)
28333 k++;
28334 acc = acc.dblp(k);
28335
28336 if (i < 0)
28337 break;
28338 var z = naf[i];
28339 assert(z !== 0);
28340 if (p.type === 'affine') {
28341 // J +- P
28342 if (z > 0)
28343 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
28344 else
28345 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
28346 } else {
28347 // J +- J
28348 if (z > 0)
28349 acc = acc.add(wnd[(z - 1) >> 1]);
28350 else
28351 acc = acc.add(wnd[(-z - 1) >> 1].neg());
28352 }
28353 }
28354 return p.type === 'affine' ? acc.toP() : acc;
28355 };
28356
28357 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
28358 points,
28359 coeffs,
28360 len,
28361 jacobianResult) {
28362 var wndWidth = this._wnafT1;
28363 var wnd = this._wnafT2;
28364 var naf = this._wnafT3;
28365
28366 // Fill all arrays
28367 var max = 0;
28368 for (var i = 0; i < len; i++) {
28369 var p = points[i];
28370 var nafPoints = p._getNAFPoints(defW);
28371 wndWidth[i] = nafPoints.wnd;
28372 wnd[i] = nafPoints.points;
28373 }
28374
28375 // Comb small window NAFs
28376 for (var i = len - 1; i >= 1; i -= 2) {
28377 var a = i - 1;
28378 var b = i;
28379 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
28380 naf[a] = getNAF(coeffs[a], wndWidth[a]);
28381 naf[b] = getNAF(coeffs[b], wndWidth[b]);
28382 max = Math.max(naf[a].length, max);
28383 max = Math.max(naf[b].length, max);
28384 continue;
28385 }
28386
28387 var comb = [
28388 points[a], /* 1 */
28389 null, /* 3 */
28390 null, /* 5 */
28391 points[b] /* 7 */
28392 ];
28393
28394 // Try to avoid Projective points, if possible
28395 if (points[a].y.cmp(points[b].y) === 0) {
28396 comb[1] = points[a].add(points[b]);
28397 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
28398 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
28399 comb[1] = points[a].toJ().mixedAdd(points[b]);
28400 comb[2] = points[a].add(points[b].neg());
28401 } else {
28402 comb[1] = points[a].toJ().mixedAdd(points[b]);
28403 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
28404 }
28405
28406 var index = [
28407 -3, /* -1 -1 */
28408 -1, /* -1 0 */
28409 -5, /* -1 1 */
28410 -7, /* 0 -1 */
28411 0, /* 0 0 */
28412 7, /* 0 1 */
28413 5, /* 1 -1 */
28414 1, /* 1 0 */
28415 3 /* 1 1 */
28416 ];
28417
28418 var jsf = getJSF(coeffs[a], coeffs[b]);
28419 max = Math.max(jsf[0].length, max);
28420 naf[a] = new Array(max);
28421 naf[b] = new Array(max);
28422 for (var j = 0; j < max; j++) {
28423 var ja = jsf[0][j] | 0;
28424 var jb = jsf[1][j] | 0;
28425
28426 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
28427 naf[b][j] = 0;
28428 wnd[a] = comb;
28429 }
28430 }
28431
28432 var acc = this.jpoint(null, null, null);
28433 var tmp = this._wnafT4;
28434 for (var i = max; i >= 0; i--) {
28435 var k = 0;
28436
28437 while (i >= 0) {
28438 var zero = true;
28439 for (var j = 0; j < len; j++) {
28440 tmp[j] = naf[j][i] | 0;
28441 if (tmp[j] !== 0)
28442 zero = false;
28443 }
28444 if (!zero)
28445 break;
28446 k++;
28447 i--;
28448 }
28449 if (i >= 0)
28450 k++;
28451 acc = acc.dblp(k);
28452 if (i < 0)
28453 break;
28454
28455 for (var j = 0; j < len; j++) {
28456 var z = tmp[j];
28457 var p;
28458 if (z === 0)
28459 continue;
28460 else if (z > 0)
28461 p = wnd[j][(z - 1) >> 1];
28462 else if (z < 0)
28463 p = wnd[j][(-z - 1) >> 1].neg();
28464
28465 if (p.type === 'affine')
28466 acc = acc.mixedAdd(p);
28467 else
28468 acc = acc.add(p);
28469 }
28470 }
28471 // Zeroify references
28472 for (var i = 0; i < len; i++)
28473 wnd[i] = null;
28474
28475 if (jacobianResult)
28476 return acc;
28477 else
28478 return acc.toP();
28479 };
28480
28481 function BasePoint(curve, type) {
28482 this.curve = curve;
28483 this.type = type;
28484 this.precomputed = null;
28485 }
28486 BaseCurve.BasePoint = BasePoint;
28487
28488 BasePoint.prototype.eq = function eq(/*other*/) {
28489 throw new Error('Not implemented');
28490 };
28491
28492 BasePoint.prototype.validate = function validate() {
28493 return this.curve.validate(this);
28494 };
28495
28496 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
28497 bytes = utils.toArray(bytes, enc);
28498
28499 var len = this.p.byteLength();
28500
28501 // uncompressed, hybrid-odd, hybrid-even
28502 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
28503 bytes.length - 1 === 2 * len) {
28504 if (bytes[0] === 0x06)
28505 assert(bytes[bytes.length - 1] % 2 === 0);
28506 else if (bytes[0] === 0x07)
28507 assert(bytes[bytes.length - 1] % 2 === 1);
28508
28509 var res = this.point(bytes.slice(1, 1 + len),
28510 bytes.slice(1 + len, 1 + 2 * len));
28511
28512 return res;
28513 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
28514 bytes.length - 1 === len) {
28515 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
28516 }
28517 throw new Error('Unknown point format');
28518 };
28519
28520 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
28521 return this.encode(enc, true);
28522 };
28523
28524 BasePoint.prototype._encode = function _encode(compact) {
28525 var len = this.curve.p.byteLength();
28526 var x = this.getX().toArray('be', len);
28527
28528 if (compact)
28529 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
28530
28531 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
28532 };
28533
28534 BasePoint.prototype.encode = function encode(enc, compact) {
28535 return utils.encode(this._encode(compact), enc);
28536 };
28537
28538 BasePoint.prototype.precompute = function precompute(power) {
28539 if (this.precomputed)
28540 return this;
28541
28542 var precomputed = {
28543 doubles: null,
28544 naf: null,
28545 beta: null
28546 };
28547 precomputed.naf = this._getNAFPoints(8);
28548 precomputed.doubles = this._getDoubles(4, power);
28549 precomputed.beta = this._getBeta();
28550 this.precomputed = precomputed;
28551
28552 return this;
28553 };
28554
28555 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
28556 if (!this.precomputed)
28557 return false;
28558
28559 var doubles = this.precomputed.doubles;
28560 if (!doubles)
28561 return false;
28562
28563 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
28564 };
28565
28566 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
28567 if (this.precomputed && this.precomputed.doubles)
28568 return this.precomputed.doubles;
28569
28570 var doubles = [ this ];
28571 var acc = this;
28572 for (var i = 0; i < power; i += step) {
28573 for (var j = 0; j < step; j++)
28574 acc = acc.dbl();
28575 doubles.push(acc);
28576 }
28577 return {
28578 step: step,
28579 points: doubles
28580 };
28581 };
28582
28583 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
28584 if (this.precomputed && this.precomputed.naf)
28585 return this.precomputed.naf;
28586
28587 var res = [ this ];
28588 var max = (1 << wnd) - 1;
28589 var dbl = max === 1 ? null : this.dbl();
28590 for (var i = 1; i < max; i++)
28591 res[i] = res[i - 1].add(dbl);
28592 return {
28593 wnd: wnd,
28594 points: res
28595 };
28596 };
28597
28598 BasePoint.prototype._getBeta = function _getBeta() {
28599 return null;
28600 };
28601
28602 BasePoint.prototype.dblp = function dblp(k) {
28603 var r = this;
28604 for (var i = 0; i < k; i++)
28605 r = r.dbl();
28606 return r;
28607 };
28608
28609 },{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
28610 'use strict';
28611
28612 var curve = require('../curve');
28613 var elliptic = require('../../elliptic');
28614 var BN = require('bn.js');
28615 var inherits = require('inherits');
28616 var Base = curve.base;
28617
28618 var assert = elliptic.utils.assert;
28619
28620 function EdwardsCurve(conf) {
28621 // NOTE: Important as we are creating point in Base.call()
28622 this.twisted = (conf.a | 0) !== 1;
28623 this.mOneA = this.twisted && (conf.a | 0) === -1;
28624 this.extended = this.mOneA;
28625
28626 Base.call(this, 'edwards', conf);
28627
28628 this.a = new BN(conf.a, 16).umod(this.red.m);
28629 this.a = this.a.toRed(this.red);
28630 this.c = new BN(conf.c, 16).toRed(this.red);
28631 this.c2 = this.c.redSqr();
28632 this.d = new BN(conf.d, 16).toRed(this.red);
28633 this.dd = this.d.redAdd(this.d);
28634
28635 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
28636 this.oneC = (conf.c | 0) === 1;
28637 }
28638 inherits(EdwardsCurve, Base);
28639 module.exports = EdwardsCurve;
28640
28641 EdwardsCurve.prototype._mulA = function _mulA(num) {
28642 if (this.mOneA)
28643 return num.redNeg();
28644 else
28645 return this.a.redMul(num);
28646 };
28647
28648 EdwardsCurve.prototype._mulC = function _mulC(num) {
28649 if (this.oneC)
28650 return num;
28651 else
28652 return this.c.redMul(num);
28653 };
28654
28655 // Just for compatibility with Short curve
28656 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
28657 return this.point(x, y, z, t);
28658 };
28659
28660 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
28661 x = new BN(x, 16);
28662 if (!x.red)
28663 x = x.toRed(this.red);
28664
28665 var x2 = x.redSqr();
28666 var rhs = this.c2.redSub(this.a.redMul(x2));
28667 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
28668
28669 var y2 = rhs.redMul(lhs.redInvm());
28670 var y = y2.redSqrt();
28671 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
28672 throw new Error('invalid point');
28673
28674 var isOdd = y.fromRed().isOdd();
28675 if (odd && !isOdd || !odd && isOdd)
28676 y = y.redNeg();
28677
28678 return this.point(x, y);
28679 };
28680
28681 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
28682 y = new BN(y, 16);
28683 if (!y.red)
28684 y = y.toRed(this.red);
28685
28686 // x^2 = (y^2 - 1) / (d y^2 + 1)
28687 var y2 = y.redSqr();
28688 var lhs = y2.redSub(this.one);
28689 var rhs = y2.redMul(this.d).redAdd(this.one);
28690 var x2 = lhs.redMul(rhs.redInvm());
28691
28692 if (x2.cmp(this.zero) === 0) {
28693 if (odd)
28694 throw new Error('invalid point');
28695 else
28696 return this.point(this.zero, y);
28697 }
28698
28699 var x = x2.redSqrt();
28700 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
28701 throw new Error('invalid point');
28702
28703 if (x.isOdd() !== odd)
28704 x = x.redNeg();
28705
28706 return this.point(x, y);
28707 };
28708
28709 EdwardsCurve.prototype.validate = function validate(point) {
28710 if (point.isInfinity())
28711 return true;
28712
28713 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
28714 point.normalize();
28715
28716 var x2 = point.x.redSqr();
28717 var y2 = point.y.redSqr();
28718 var lhs = x2.redMul(this.a).redAdd(y2);
28719 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
28720
28721 return lhs.cmp(rhs) === 0;
28722 };
28723
28724 function Point(curve, x, y, z, t) {
28725 Base.BasePoint.call(this, curve, 'projective');
28726 if (x === null && y === null && z === null) {
28727 this.x = this.curve.zero;
28728 this.y = this.curve.one;
28729 this.z = this.curve.one;
28730 this.t = this.curve.zero;
28731 this.zOne = true;
28732 } else {
28733 this.x = new BN(x, 16);
28734 this.y = new BN(y, 16);
28735 this.z = z ? new BN(z, 16) : this.curve.one;
28736 this.t = t && new BN(t, 16);
28737 if (!this.x.red)
28738 this.x = this.x.toRed(this.curve.red);
28739 if (!this.y.red)
28740 this.y = this.y.toRed(this.curve.red);
28741 if (!this.z.red)
28742 this.z = this.z.toRed(this.curve.red);
28743 if (this.t && !this.t.red)
28744 this.t = this.t.toRed(this.curve.red);
28745 this.zOne = this.z === this.curve.one;
28746
28747 // Use extended coordinates
28748 if (this.curve.extended && !this.t) {
28749 this.t = this.x.redMul(this.y);
28750 if (!this.zOne)
28751 this.t = this.t.redMul(this.z.redInvm());
28752 }
28753 }
28754 }
28755 inherits(Point, Base.BasePoint);
28756
28757 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
28758 return Point.fromJSON(this, obj);
28759 };
28760
28761 EdwardsCurve.prototype.point = function point(x, y, z, t) {
28762 return new Point(this, x, y, z, t);
28763 };
28764
28765 Point.fromJSON = function fromJSON(curve, obj) {
28766 return new Point(curve, obj[0], obj[1], obj[2]);
28767 };
28768
28769 Point.prototype.inspect = function inspect() {
28770 if (this.isInfinity())
28771 return '<EC Point Infinity>';
28772 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
28773 ' y: ' + this.y.fromRed().toString(16, 2) +
28774 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
28775 };
28776
28777 Point.prototype.isInfinity = function isInfinity() {
28778 // XXX This code assumes that zero is always zero in red
28779 return this.x.cmpn(0) === 0 &&
28780 this.y.cmp(this.z) === 0;
28781 };
28782
28783 Point.prototype._extDbl = function _extDbl() {
28784 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
28785 // #doubling-dbl-2008-hwcd
28786 // 4M + 4S
28787
28788 // A = X1^2
28789 var a = this.x.redSqr();
28790 // B = Y1^2
28791 var b = this.y.redSqr();
28792 // C = 2 * Z1^2
28793 var c = this.z.redSqr();
28794 c = c.redIAdd(c);
28795 // D = a * A
28796 var d = this.curve._mulA(a);
28797 // E = (X1 + Y1)^2 - A - B
28798 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
28799 // G = D + B
28800 var g = d.redAdd(b);
28801 // F = G - C
28802 var f = g.redSub(c);
28803 // H = D - B
28804 var h = d.redSub(b);
28805 // X3 = E * F
28806 var nx = e.redMul(f);
28807 // Y3 = G * H
28808 var ny = g.redMul(h);
28809 // T3 = E * H
28810 var nt = e.redMul(h);
28811 // Z3 = F * G
28812 var nz = f.redMul(g);
28813 return this.curve.point(nx, ny, nz, nt);
28814 };
28815
28816 Point.prototype._projDbl = function _projDbl() {
28817 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
28818 // #doubling-dbl-2008-bbjlp
28819 // #doubling-dbl-2007-bl
28820 // and others
28821 // Generally 3M + 4S or 2M + 4S
28822
28823 // B = (X1 + Y1)^2
28824 var b = this.x.redAdd(this.y).redSqr();
28825 // C = X1^2
28826 var c = this.x.redSqr();
28827 // D = Y1^2
28828 var d = this.y.redSqr();
28829
28830 var nx;
28831 var ny;
28832 var nz;
28833 if (this.curve.twisted) {
28834 // E = a * C
28835 var e = this.curve._mulA(c);
28836 // F = E + D
28837 var f = e.redAdd(d);
28838 if (this.zOne) {
28839 // X3 = (B - C - D) * (F - 2)
28840 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
28841 // Y3 = F * (E - D)
28842 ny = f.redMul(e.redSub(d));
28843 // Z3 = F^2 - 2 * F
28844 nz = f.redSqr().redSub(f).redSub(f);
28845 } else {
28846 // H = Z1^2
28847 var h = this.z.redSqr();
28848 // J = F - 2 * H
28849 var j = f.redSub(h).redISub(h);
28850 // X3 = (B-C-D)*J
28851 nx = b.redSub(c).redISub(d).redMul(j);
28852 // Y3 = F * (E - D)
28853 ny = f.redMul(e.redSub(d));
28854 // Z3 = F * J
28855 nz = f.redMul(j);
28856 }
28857 } else {
28858 // E = C + D
28859 var e = c.redAdd(d);
28860 // H = (c * Z1)^2
28861 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
28862 // J = E - 2 * H
28863 var j = e.redSub(h).redSub(h);
28864 // X3 = c * (B - E) * J
28865 nx = this.curve._mulC(b.redISub(e)).redMul(j);
28866 // Y3 = c * E * (C - D)
28867 ny = this.curve._mulC(e).redMul(c.redISub(d));
28868 // Z3 = E * J
28869 nz = e.redMul(j);
28870 }
28871 return this.curve.point(nx, ny, nz);
28872 };
28873
28874 Point.prototype.dbl = function dbl() {
28875 if (this.isInfinity())
28876 return this;
28877
28878 // Double in extended coordinates
28879 if (this.curve.extended)
28880 return this._extDbl();
28881 else
28882 return this._projDbl();
28883 };
28884
28885 Point.prototype._extAdd = function _extAdd(p) {
28886 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
28887 // #addition-add-2008-hwcd-3
28888 // 8M
28889
28890 // A = (Y1 - X1) * (Y2 - X2)
28891 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
28892 // B = (Y1 + X1) * (Y2 + X2)
28893 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
28894 // C = T1 * k * T2
28895 var c = this.t.redMul(this.curve.dd).redMul(p.t);
28896 // D = Z1 * 2 * Z2
28897 var d = this.z.redMul(p.z.redAdd(p.z));
28898 // E = B - A
28899 var e = b.redSub(a);
28900 // F = D - C
28901 var f = d.redSub(c);
28902 // G = D + C
28903 var g = d.redAdd(c);
28904 // H = B + A
28905 var h = b.redAdd(a);
28906 // X3 = E * F
28907 var nx = e.redMul(f);
28908 // Y3 = G * H
28909 var ny = g.redMul(h);
28910 // T3 = E * H
28911 var nt = e.redMul(h);
28912 // Z3 = F * G
28913 var nz = f.redMul(g);
28914 return this.curve.point(nx, ny, nz, nt);
28915 };
28916
28917 Point.prototype._projAdd = function _projAdd(p) {
28918 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
28919 // #addition-add-2008-bbjlp
28920 // #addition-add-2007-bl
28921 // 10M + 1S
28922
28923 // A = Z1 * Z2
28924 var a = this.z.redMul(p.z);
28925 // B = A^2
28926 var b = a.redSqr();
28927 // C = X1 * X2
28928 var c = this.x.redMul(p.x);
28929 // D = Y1 * Y2
28930 var d = this.y.redMul(p.y);
28931 // E = d * C * D
28932 var e = this.curve.d.redMul(c).redMul(d);
28933 // F = B - E
28934 var f = b.redSub(e);
28935 // G = B + E
28936 var g = b.redAdd(e);
28937 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
28938 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
28939 var nx = a.redMul(f).redMul(tmp);
28940 var ny;
28941 var nz;
28942 if (this.curve.twisted) {
28943 // Y3 = A * G * (D - a * C)
28944 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
28945 // Z3 = F * G
28946 nz = f.redMul(g);
28947 } else {
28948 // Y3 = A * G * (D - C)
28949 ny = a.redMul(g).redMul(d.redSub(c));
28950 // Z3 = c * F * G
28951 nz = this.curve._mulC(f).redMul(g);
28952 }
28953 return this.curve.point(nx, ny, nz);
28954 };
28955
28956 Point.prototype.add = function add(p) {
28957 if (this.isInfinity())
28958 return p;
28959 if (p.isInfinity())
28960 return this;
28961
28962 if (this.curve.extended)
28963 return this._extAdd(p);
28964 else
28965 return this._projAdd(p);
28966 };
28967
28968 Point.prototype.mul = function mul(k) {
28969 if (this._hasDoubles(k))
28970 return this.curve._fixedNafMul(this, k);
28971 else
28972 return this.curve._wnafMul(this, k);
28973 };
28974
28975 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
28976 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
28977 };
28978
28979 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
28980 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
28981 };
28982
28983 Point.prototype.normalize = function normalize() {
28984 if (this.zOne)
28985 return this;
28986
28987 // Normalize coordinates
28988 var zi = this.z.redInvm();
28989 this.x = this.x.redMul(zi);
28990 this.y = this.y.redMul(zi);
28991 if (this.t)
28992 this.t = this.t.redMul(zi);
28993 this.z = this.curve.one;
28994 this.zOne = true;
28995 return this;
28996 };
28997
28998 Point.prototype.neg = function neg() {
28999 return this.curve.point(this.x.redNeg(),
29000 this.y,
29001 this.z,
29002 this.t && this.t.redNeg());
29003 };
29004
29005 Point.prototype.getX = function getX() {
29006 this.normalize();
29007 return this.x.fromRed();
29008 };
29009
29010 Point.prototype.getY = function getY() {
29011 this.normalize();
29012 return this.y.fromRed();
29013 };
29014
29015 Point.prototype.eq = function eq(other) {
29016 return this === other ||
29017 this.getX().cmp(other.getX()) === 0 &&
29018 this.getY().cmp(other.getY()) === 0;
29019 };
29020
29021 Point.prototype.eqXToP = function eqXToP(x) {
29022 var rx = x.toRed(this.curve.red).redMul(this.z);
29023 if (this.x.cmp(rx) === 0)
29024 return true;
29025
29026 var xc = x.clone();
29027 var t = this.curve.redN.redMul(this.z);
29028 for (;;) {
29029 xc.iadd(this.curve.n);
29030 if (xc.cmp(this.curve.p) >= 0)
29031 return false;
29032
29033 rx.redIAdd(t);
29034 if (this.x.cmp(rx) === 0)
29035 return true;
29036 }
29037 return false;
29038 };
29039
29040 // Compatibility with BaseCurve
29041 Point.prototype.toP = Point.prototype.normalize;
29042 Point.prototype.mixedAdd = Point.prototype.add;
29043
29044 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
29045 'use strict';
29046
29047 var curve = exports;
29048
29049 curve.base = require('./base');
29050 curve.short = require('./short');
29051 curve.mont = require('./mont');
29052 curve.edwards = require('./edwards');
29053
29054 },{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
29055 'use strict';
29056
29057 var curve = require('../curve');
29058 var BN = require('bn.js');
29059 var inherits = require('inherits');
29060 var Base = curve.base;
29061
29062 var elliptic = require('../../elliptic');
29063 var utils = elliptic.utils;
29064
29065 function MontCurve(conf) {
29066 Base.call(this, 'mont', conf);
29067
29068 this.a = new BN(conf.a, 16).toRed(this.red);
29069 this.b = new BN(conf.b, 16).toRed(this.red);
29070 this.i4 = new BN(4).toRed(this.red).redInvm();
29071 this.two = new BN(2).toRed(this.red);
29072 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
29073 }
29074 inherits(MontCurve, Base);
29075 module.exports = MontCurve;
29076
29077 MontCurve.prototype.validate = function validate(point) {
29078 var x = point.normalize().x;
29079 var x2 = x.redSqr();
29080 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
29081 var y = rhs.redSqrt();
29082
29083 return y.redSqr().cmp(rhs) === 0;
29084 };
29085
29086 function Point(curve, x, z) {
29087 Base.BasePoint.call(this, curve, 'projective');
29088 if (x === null && z === null) {
29089 this.x = this.curve.one;
29090 this.z = this.curve.zero;
29091 } else {
29092 this.x = new BN(x, 16);
29093 this.z = new BN(z, 16);
29094 if (!this.x.red)
29095 this.x = this.x.toRed(this.curve.red);
29096 if (!this.z.red)
29097 this.z = this.z.toRed(this.curve.red);
29098 }
29099 }
29100 inherits(Point, Base.BasePoint);
29101
29102 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
29103 return this.point(utils.toArray(bytes, enc), 1);
29104 };
29105
29106 MontCurve.prototype.point = function point(x, z) {
29107 return new Point(this, x, z);
29108 };
29109
29110 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
29111 return Point.fromJSON(this, obj);
29112 };
29113
29114 Point.prototype.precompute = function precompute() {
29115 // No-op
29116 };
29117
29118 Point.prototype._encode = function _encode() {
29119 return this.getX().toArray('be', this.curve.p.byteLength());
29120 };
29121
29122 Point.fromJSON = function fromJSON(curve, obj) {
29123 return new Point(curve, obj[0], obj[1] || curve.one);
29124 };
29125
29126 Point.prototype.inspect = function inspect() {
29127 if (this.isInfinity())
29128 return '<EC Point Infinity>';
29129 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
29130 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
29131 };
29132
29133 Point.prototype.isInfinity = function isInfinity() {
29134 // XXX This code assumes that zero is always zero in red
29135 return this.z.cmpn(0) === 0;
29136 };
29137
29138 Point.prototype.dbl = function dbl() {
29139 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
29140 // 2M + 2S + 4A
29141
29142 // A = X1 + Z1
29143 var a = this.x.redAdd(this.z);
29144 // AA = A^2
29145 var aa = a.redSqr();
29146 // B = X1 - Z1
29147 var b = this.x.redSub(this.z);
29148 // BB = B^2
29149 var bb = b.redSqr();
29150 // C = AA - BB
29151 var c = aa.redSub(bb);
29152 // X3 = AA * BB
29153 var nx = aa.redMul(bb);
29154 // Z3 = C * (BB + A24 * C)
29155 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
29156 return this.curve.point(nx, nz);
29157 };
29158
29159 Point.prototype.add = function add() {
29160 throw new Error('Not supported on Montgomery curve');
29161 };
29162
29163 Point.prototype.diffAdd = function diffAdd(p, diff) {
29164 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
29165 // 4M + 2S + 6A
29166
29167 // A = X2 + Z2
29168 var a = this.x.redAdd(this.z);
29169 // B = X2 - Z2
29170 var b = this.x.redSub(this.z);
29171 // C = X3 + Z3
29172 var c = p.x.redAdd(p.z);
29173 // D = X3 - Z3
29174 var d = p.x.redSub(p.z);
29175 // DA = D * A
29176 var da = d.redMul(a);
29177 // CB = C * B
29178 var cb = c.redMul(b);
29179 // X5 = Z1 * (DA + CB)^2
29180 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
29181 // Z5 = X1 * (DA - CB)^2
29182 var nz = diff.x.redMul(da.redISub(cb).redSqr());
29183 return this.curve.point(nx, nz);
29184 };
29185
29186 Point.prototype.mul = function mul(k) {
29187 var t = k.clone();
29188 var a = this; // (N / 2) * Q + Q
29189 var b = this.curve.point(null, null); // (N / 2) * Q
29190 var c = this; // Q
29191
29192 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
29193 bits.push(t.andln(1));
29194
29195 for (var i = bits.length - 1; i >= 0; i--) {
29196 if (bits[i] === 0) {
29197 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
29198 a = a.diffAdd(b, c);
29199 // N * Q = 2 * ((N / 2) * Q + Q))
29200 b = b.dbl();
29201 } else {
29202 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
29203 b = a.diffAdd(b, c);
29204 // N * Q + Q = 2 * ((N / 2) * Q + Q)
29205 a = a.dbl();
29206 }
29207 }
29208 return b;
29209 };
29210
29211 Point.prototype.mulAdd = function mulAdd() {
29212 throw new Error('Not supported on Montgomery curve');
29213 };
29214
29215 Point.prototype.jumlAdd = function jumlAdd() {
29216 throw new Error('Not supported on Montgomery curve');
29217 };
29218
29219 Point.prototype.eq = function eq(other) {
29220 return this.getX().cmp(other.getX()) === 0;
29221 };
29222
29223 Point.prototype.normalize = function normalize() {
29224 this.x = this.x.redMul(this.z.redInvm());
29225 this.z = this.curve.one;
29226 return this;
29227 };
29228
29229 Point.prototype.getX = function getX() {
29230 // Normalize coordinates
29231 this.normalize();
29232
29233 return this.x.fromRed();
29234 };
29235
29236 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
29237 'use strict';
29238
29239 var curve = require('../curve');
29240 var elliptic = require('../../elliptic');
29241 var BN = require('bn.js');
29242 var inherits = require('inherits');
29243 var Base = curve.base;
29244
29245 var assert = elliptic.utils.assert;
29246
29247 function ShortCurve(conf) {
29248 Base.call(this, 'short', conf);
29249
29250 this.a = new BN(conf.a, 16).toRed(this.red);
29251 this.b = new BN(conf.b, 16).toRed(this.red);
29252 this.tinv = this.two.redInvm();
29253
29254 this.zeroA = this.a.fromRed().cmpn(0) === 0;
29255 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
29256
29257 // If the curve is endomorphic, precalculate beta and lambda
29258 this.endo = this._getEndomorphism(conf);
29259 this._endoWnafT1 = new Array(4);
29260 this._endoWnafT2 = new Array(4);
29261 }
29262 inherits(ShortCurve, Base);
29263 module.exports = ShortCurve;
29264
29265 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
29266 // No efficient endomorphism
29267 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
29268 return;
29269
29270 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
29271 var beta;
29272 var lambda;
29273 if (conf.beta) {
29274 beta = new BN(conf.beta, 16).toRed(this.red);
29275 } else {
29276 var betas = this._getEndoRoots(this.p);
29277 // Choose the smallest beta
29278 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
29279 beta = beta.toRed(this.red);
29280 }
29281 if (conf.lambda) {
29282 lambda = new BN(conf.lambda, 16);
29283 } else {
29284 // Choose the lambda that is matching selected beta
29285 var lambdas = this._getEndoRoots(this.n);
29286 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
29287 lambda = lambdas[0];
29288 } else {
29289 lambda = lambdas[1];
29290 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
29291 }
29292 }
29293
29294 // Get basis vectors, used for balanced length-two representation
29295 var basis;
29296 if (conf.basis) {
29297 basis = conf.basis.map(function(vec) {
29298 return {
29299 a: new BN(vec.a, 16),
29300 b: new BN(vec.b, 16)
29301 };
29302 });
29303 } else {
29304 basis = this._getEndoBasis(lambda);
29305 }
29306
29307 return {
29308 beta: beta,
29309 lambda: lambda,
29310 basis: basis
29311 };
29312 };
29313
29314 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
29315 // Find roots of for x^2 + x + 1 in F
29316 // Root = (-1 +- Sqrt(-3)) / 2
29317 //
29318 var red = num === this.p ? this.red : BN.mont(num);
29319 var tinv = new BN(2).toRed(red).redInvm();
29320 var ntinv = tinv.redNeg();
29321
29322 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
29323
29324 var l1 = ntinv.redAdd(s).fromRed();
29325 var l2 = ntinv.redSub(s).fromRed();
29326 return [ l1, l2 ];
29327 };
29328
29329 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
29330 // aprxSqrt >= sqrt(this.n)
29331 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
29332
29333 // 3.74
29334 // Run EGCD, until r(L + 1) < aprxSqrt
29335 var u = lambda;
29336 var v = this.n.clone();
29337 var x1 = new BN(1);
29338 var y1 = new BN(0);
29339 var x2 = new BN(0);
29340 var y2 = new BN(1);
29341
29342 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
29343 var a0;
29344 var b0;
29345 // First vector
29346 var a1;
29347 var b1;
29348 // Second vector
29349 var a2;
29350 var b2;
29351
29352 var prevR;
29353 var i = 0;
29354 var r;
29355 var x;
29356 while (u.cmpn(0) !== 0) {
29357 var q = v.div(u);
29358 r = v.sub(q.mul(u));
29359 x = x2.sub(q.mul(x1));
29360 var y = y2.sub(q.mul(y1));
29361
29362 if (!a1 && r.cmp(aprxSqrt) < 0) {
29363 a0 = prevR.neg();
29364 b0 = x1;
29365 a1 = r.neg();
29366 b1 = x;
29367 } else if (a1 && ++i === 2) {
29368 break;
29369 }
29370 prevR = r;
29371
29372 v = u;
29373 u = r;
29374 x2 = x1;
29375 x1 = x;
29376 y2 = y1;
29377 y1 = y;
29378 }
29379 a2 = r.neg();
29380 b2 = x;
29381
29382 var len1 = a1.sqr().add(b1.sqr());
29383 var len2 = a2.sqr().add(b2.sqr());
29384 if (len2.cmp(len1) >= 0) {
29385 a2 = a0;
29386 b2 = b0;
29387 }
29388
29389 // Normalize signs
29390 if (a1.negative) {
29391 a1 = a1.neg();
29392 b1 = b1.neg();
29393 }
29394 if (a2.negative) {
29395 a2 = a2.neg();
29396 b2 = b2.neg();
29397 }
29398
29399 return [
29400 { a: a1, b: b1 },
29401 { a: a2, b: b2 }
29402 ];
29403 };
29404
29405 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
29406 var basis = this.endo.basis;
29407 var v1 = basis[0];
29408 var v2 = basis[1];
29409
29410 var c1 = v2.b.mul(k).divRound(this.n);
29411 var c2 = v1.b.neg().mul(k).divRound(this.n);
29412
29413 var p1 = c1.mul(v1.a);
29414 var p2 = c2.mul(v2.a);
29415 var q1 = c1.mul(v1.b);
29416 var q2 = c2.mul(v2.b);
29417
29418 // Calculate answer
29419 var k1 = k.sub(p1).sub(p2);
29420 var k2 = q1.add(q2).neg();
29421 return { k1: k1, k2: k2 };
29422 };
29423
29424 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
29425 x = new BN(x, 16);
29426 if (!x.red)
29427 x = x.toRed(this.red);
29428
29429 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
29430 var y = y2.redSqrt();
29431 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
29432 throw new Error('invalid point');
29433
29434 // XXX Is there any way to tell if the number is odd without converting it
29435 // to non-red form?
29436 var isOdd = y.fromRed().isOdd();
29437 if (odd && !isOdd || !odd && isOdd)
29438 y = y.redNeg();
29439
29440 return this.point(x, y);
29441 };
29442
29443 ShortCurve.prototype.validate = function validate(point) {
29444 if (point.inf)
29445 return true;
29446
29447 var x = point.x;
29448 var y = point.y;
29449
29450 var ax = this.a.redMul(x);
29451 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
29452 return y.redSqr().redISub(rhs).cmpn(0) === 0;
29453 };
29454
29455 ShortCurve.prototype._endoWnafMulAdd =
29456 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
29457 var npoints = this._endoWnafT1;
29458 var ncoeffs = this._endoWnafT2;
29459 for (var i = 0; i < points.length; i++) {
29460 var split = this._endoSplit(coeffs[i]);
29461 var p = points[i];
29462 var beta = p._getBeta();
29463
29464 if (split.k1.negative) {
29465 split.k1.ineg();
29466 p = p.neg(true);
29467 }
29468 if (split.k2.negative) {
29469 split.k2.ineg();
29470 beta = beta.neg(true);
29471 }
29472
29473 npoints[i * 2] = p;
29474 npoints[i * 2 + 1] = beta;
29475 ncoeffs[i * 2] = split.k1;
29476 ncoeffs[i * 2 + 1] = split.k2;
29477 }
29478 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
29479
29480 // Clean-up references to points and coefficients
29481 for (var j = 0; j < i * 2; j++) {
29482 npoints[j] = null;
29483 ncoeffs[j] = null;
29484 }
29485 return res;
29486 };
29487
29488 function Point(curve, x, y, isRed) {
29489 Base.BasePoint.call(this, curve, 'affine');
29490 if (x === null && y === null) {
29491 this.x = null;
29492 this.y = null;
29493 this.inf = true;
29494 } else {
29495 this.x = new BN(x, 16);
29496 this.y = new BN(y, 16);
29497 // Force redgomery representation when loading from JSON
29498 if (isRed) {
29499 this.x.forceRed(this.curve.red);
29500 this.y.forceRed(this.curve.red);
29501 }
29502 if (!this.x.red)
29503 this.x = this.x.toRed(this.curve.red);
29504 if (!this.y.red)
29505 this.y = this.y.toRed(this.curve.red);
29506 this.inf = false;
29507 }
29508 }
29509 inherits(Point, Base.BasePoint);
29510
29511 ShortCurve.prototype.point = function point(x, y, isRed) {
29512 return new Point(this, x, y, isRed);
29513 };
29514
29515 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
29516 return Point.fromJSON(this, obj, red);
29517 };
29518
29519 Point.prototype._getBeta = function _getBeta() {
29520 if (!this.curve.endo)
29521 return;
29522
29523 var pre = this.precomputed;
29524 if (pre && pre.beta)
29525 return pre.beta;
29526
29527 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
29528 if (pre) {
29529 var curve = this.curve;
29530 var endoMul = function(p) {
29531 return curve.point(p.x.redMul(curve.endo.beta), p.y);
29532 };
29533 pre.beta = beta;
29534 beta.precomputed = {
29535 beta: null,
29536 naf: pre.naf && {
29537 wnd: pre.naf.wnd,
29538 points: pre.naf.points.map(endoMul)
29539 },
29540 doubles: pre.doubles && {
29541 step: pre.doubles.step,
29542 points: pre.doubles.points.map(endoMul)
29543 }
29544 };
29545 }
29546 return beta;
29547 };
29548
29549 Point.prototype.toJSON = function toJSON() {
29550 if (!this.precomputed)
29551 return [ this.x, this.y ];
29552
29553 return [ this.x, this.y, this.precomputed && {
29554 doubles: this.precomputed.doubles && {
29555 step: this.precomputed.doubles.step,
29556 points: this.precomputed.doubles.points.slice(1)
29557 },
29558 naf: this.precomputed.naf && {
29559 wnd: this.precomputed.naf.wnd,
29560 points: this.precomputed.naf.points.slice(1)
29561 }
29562 } ];
29563 };
29564
29565 Point.fromJSON = function fromJSON(curve, obj, red) {
29566 if (typeof obj === 'string')
29567 obj = JSON.parse(obj);
29568 var res = curve.point(obj[0], obj[1], red);
29569 if (!obj[2])
29570 return res;
29571
29572 function obj2point(obj) {
29573 return curve.point(obj[0], obj[1], red);
29574 }
29575
29576 var pre = obj[2];
29577 res.precomputed = {
29578 beta: null,
29579 doubles: pre.doubles && {
29580 step: pre.doubles.step,
29581 points: [ res ].concat(pre.doubles.points.map(obj2point))
29582 },
29583 naf: pre.naf && {
29584 wnd: pre.naf.wnd,
29585 points: [ res ].concat(pre.naf.points.map(obj2point))
29586 }
29587 };
29588 return res;
29589 };
29590
29591 Point.prototype.inspect = function inspect() {
29592 if (this.isInfinity())
29593 return '<EC Point Infinity>';
29594 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
29595 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
29596 };
29597
29598 Point.prototype.isInfinity = function isInfinity() {
29599 return this.inf;
29600 };
29601
29602 Point.prototype.add = function add(p) {
29603 // O + P = P
29604 if (this.inf)
29605 return p;
29606
29607 // P + O = P
29608 if (p.inf)
29609 return this;
29610
29611 // P + P = 2P
29612 if (this.eq(p))
29613 return this.dbl();
29614
29615 // P + (-P) = O
29616 if (this.neg().eq(p))
29617 return this.curve.point(null, null);
29618
29619 // P + Q = O
29620 if (this.x.cmp(p.x) === 0)
29621 return this.curve.point(null, null);
29622
29623 var c = this.y.redSub(p.y);
29624 if (c.cmpn(0) !== 0)
29625 c = c.redMul(this.x.redSub(p.x).redInvm());
29626 var nx = c.redSqr().redISub(this.x).redISub(p.x);
29627 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
29628 return this.curve.point(nx, ny);
29629 };
29630
29631 Point.prototype.dbl = function dbl() {
29632 if (this.inf)
29633 return this;
29634
29635 // 2P = O
29636 var ys1 = this.y.redAdd(this.y);
29637 if (ys1.cmpn(0) === 0)
29638 return this.curve.point(null, null);
29639
29640 var a = this.curve.a;
29641
29642 var x2 = this.x.redSqr();
29643 var dyinv = ys1.redInvm();
29644 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
29645
29646 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
29647 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
29648 return this.curve.point(nx, ny);
29649 };
29650
29651 Point.prototype.getX = function getX() {
29652 return this.x.fromRed();
29653 };
29654
29655 Point.prototype.getY = function getY() {
29656 return this.y.fromRed();
29657 };
29658
29659 Point.prototype.mul = function mul(k) {
29660 k = new BN(k, 16);
29661
29662 if (this._hasDoubles(k))
29663 return this.curve._fixedNafMul(this, k);
29664 else if (this.curve.endo)
29665 return this.curve._endoWnafMulAdd([ this ], [ k ]);
29666 else
29667 return this.curve._wnafMul(this, k);
29668 };
29669
29670 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
29671 var points = [ this, p2 ];
29672 var coeffs = [ k1, k2 ];
29673 if (this.curve.endo)
29674 return this.curve._endoWnafMulAdd(points, coeffs);
29675 else
29676 return this.curve._wnafMulAdd(1, points, coeffs, 2);
29677 };
29678
29679 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
29680 var points = [ this, p2 ];
29681 var coeffs = [ k1, k2 ];
29682 if (this.curve.endo)
29683 return this.curve._endoWnafMulAdd(points, coeffs, true);
29684 else
29685 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
29686 };
29687
29688 Point.prototype.eq = function eq(p) {
29689 return this === p ||
29690 this.inf === p.inf &&
29691 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
29692 };
29693
29694 Point.prototype.neg = function neg(_precompute) {
29695 if (this.inf)
29696 return this;
29697
29698 var res = this.curve.point(this.x, this.y.redNeg());
29699 if (_precompute && this.precomputed) {
29700 var pre = this.precomputed;
29701 var negate = function(p) {
29702 return p.neg();
29703 };
29704 res.precomputed = {
29705 naf: pre.naf && {
29706 wnd: pre.naf.wnd,
29707 points: pre.naf.points.map(negate)
29708 },
29709 doubles: pre.doubles && {
29710 step: pre.doubles.step,
29711 points: pre.doubles.points.map(negate)
29712 }
29713 };
29714 }
29715 return res;
29716 };
29717
29718 Point.prototype.toJ = function toJ() {
29719 if (this.inf)
29720 return this.curve.jpoint(null, null, null);
29721
29722 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
29723 return res;
29724 };
29725
29726 function JPoint(curve, x, y, z) {
29727 Base.BasePoint.call(this, curve, 'jacobian');
29728 if (x === null && y === null && z === null) {
29729 this.x = this.curve.one;
29730 this.y = this.curve.one;
29731 this.z = new BN(0);
29732 } else {
29733 this.x = new BN(x, 16);
29734 this.y = new BN(y, 16);
29735 this.z = new BN(z, 16);
29736 }
29737 if (!this.x.red)
29738 this.x = this.x.toRed(this.curve.red);
29739 if (!this.y.red)
29740 this.y = this.y.toRed(this.curve.red);
29741 if (!this.z.red)
29742 this.z = this.z.toRed(this.curve.red);
29743
29744 this.zOne = this.z === this.curve.one;
29745 }
29746 inherits(JPoint, Base.BasePoint);
29747
29748 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
29749 return new JPoint(this, x, y, z);
29750 };
29751
29752 JPoint.prototype.toP = function toP() {
29753 if (this.isInfinity())
29754 return this.curve.point(null, null);
29755
29756 var zinv = this.z.redInvm();
29757 var zinv2 = zinv.redSqr();
29758 var ax = this.x.redMul(zinv2);
29759 var ay = this.y.redMul(zinv2).redMul(zinv);
29760
29761 return this.curve.point(ax, ay);
29762 };
29763
29764 JPoint.prototype.neg = function neg() {
29765 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
29766 };
29767
29768 JPoint.prototype.add = function add(p) {
29769 // O + P = P
29770 if (this.isInfinity())
29771 return p;
29772
29773 // P + O = P
29774 if (p.isInfinity())
29775 return this;
29776
29777 // 12M + 4S + 7A
29778 var pz2 = p.z.redSqr();
29779 var z2 = this.z.redSqr();
29780 var u1 = this.x.redMul(pz2);
29781 var u2 = p.x.redMul(z2);
29782 var s1 = this.y.redMul(pz2.redMul(p.z));
29783 var s2 = p.y.redMul(z2.redMul(this.z));
29784
29785 var h = u1.redSub(u2);
29786 var r = s1.redSub(s2);
29787 if (h.cmpn(0) === 0) {
29788 if (r.cmpn(0) !== 0)
29789 return this.curve.jpoint(null, null, null);
29790 else
29791 return this.dbl();
29792 }
29793
29794 var h2 = h.redSqr();
29795 var h3 = h2.redMul(h);
29796 var v = u1.redMul(h2);
29797
29798 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
29799 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
29800 var nz = this.z.redMul(p.z).redMul(h);
29801
29802 return this.curve.jpoint(nx, ny, nz);
29803 };
29804
29805 JPoint.prototype.mixedAdd = function mixedAdd(p) {
29806 // O + P = P
29807 if (this.isInfinity())
29808 return p.toJ();
29809
29810 // P + O = P
29811 if (p.isInfinity())
29812 return this;
29813
29814 // 8M + 3S + 7A
29815 var z2 = this.z.redSqr();
29816 var u1 = this.x;
29817 var u2 = p.x.redMul(z2);
29818 var s1 = this.y;
29819 var s2 = p.y.redMul(z2).redMul(this.z);
29820
29821 var h = u1.redSub(u2);
29822 var r = s1.redSub(s2);
29823 if (h.cmpn(0) === 0) {
29824 if (r.cmpn(0) !== 0)
29825 return this.curve.jpoint(null, null, null);
29826 else
29827 return this.dbl();
29828 }
29829
29830 var h2 = h.redSqr();
29831 var h3 = h2.redMul(h);
29832 var v = u1.redMul(h2);
29833
29834 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
29835 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
29836 var nz = this.z.redMul(h);
29837
29838 return this.curve.jpoint(nx, ny, nz);
29839 };
29840
29841 JPoint.prototype.dblp = function dblp(pow) {
29842 if (pow === 0)
29843 return this;
29844 if (this.isInfinity())
29845 return this;
29846 if (!pow)
29847 return this.dbl();
29848
29849 if (this.curve.zeroA || this.curve.threeA) {
29850 var r = this;
29851 for (var i = 0; i < pow; i++)
29852 r = r.dbl();
29853 return r;
29854 }
29855
29856 // 1M + 2S + 1A + N * (4S + 5M + 8A)
29857 // N = 1 => 6M + 6S + 9A
29858 var a = this.curve.a;
29859 var tinv = this.curve.tinv;
29860
29861 var jx = this.x;
29862 var jy = this.y;
29863 var jz = this.z;
29864 var jz4 = jz.redSqr().redSqr();
29865
29866 // Reuse results
29867 var jyd = jy.redAdd(jy);
29868 for (var i = 0; i < pow; i++) {
29869 var jx2 = jx.redSqr();
29870 var jyd2 = jyd.redSqr();
29871 var jyd4 = jyd2.redSqr();
29872 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
29873
29874 var t1 = jx.redMul(jyd2);
29875 var nx = c.redSqr().redISub(t1.redAdd(t1));
29876 var t2 = t1.redISub(nx);
29877 var dny = c.redMul(t2);
29878 dny = dny.redIAdd(dny).redISub(jyd4);
29879 var nz = jyd.redMul(jz);
29880 if (i + 1 < pow)
29881 jz4 = jz4.redMul(jyd4);
29882
29883 jx = nx;
29884 jz = nz;
29885 jyd = dny;
29886 }
29887
29888 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
29889 };
29890
29891 JPoint.prototype.dbl = function dbl() {
29892 if (this.isInfinity())
29893 return this;
29894
29895 if (this.curve.zeroA)
29896 return this._zeroDbl();
29897 else if (this.curve.threeA)
29898 return this._threeDbl();
29899 else
29900 return this._dbl();
29901 };
29902
29903 JPoint.prototype._zeroDbl = function _zeroDbl() {
29904 var nx;
29905 var ny;
29906 var nz;
29907 // Z = 1
29908 if (this.zOne) {
29909 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
29910 // #doubling-mdbl-2007-bl
29911 // 1M + 5S + 14A
29912
29913 // XX = X1^2
29914 var xx = this.x.redSqr();
29915 // YY = Y1^2
29916 var yy = this.y.redSqr();
29917 // YYYY = YY^2
29918 var yyyy = yy.redSqr();
29919 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
29920 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
29921 s = s.redIAdd(s);
29922 // M = 3 * XX + a; a = 0
29923 var m = xx.redAdd(xx).redIAdd(xx);
29924 // T = M ^ 2 - 2*S
29925 var t = m.redSqr().redISub(s).redISub(s);
29926
29927 // 8 * YYYY
29928 var yyyy8 = yyyy.redIAdd(yyyy);
29929 yyyy8 = yyyy8.redIAdd(yyyy8);
29930 yyyy8 = yyyy8.redIAdd(yyyy8);
29931
29932 // X3 = T
29933 nx = t;
29934 // Y3 = M * (S - T) - 8 * YYYY
29935 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
29936 // Z3 = 2*Y1
29937 nz = this.y.redAdd(this.y);
29938 } else {
29939 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
29940 // #doubling-dbl-2009-l
29941 // 2M + 5S + 13A
29942
29943 // A = X1^2
29944 var a = this.x.redSqr();
29945 // B = Y1^2
29946 var b = this.y.redSqr();
29947 // C = B^2
29948 var c = b.redSqr();
29949 // D = 2 * ((X1 + B)^2 - A - C)
29950 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
29951 d = d.redIAdd(d);
29952 // E = 3 * A
29953 var e = a.redAdd(a).redIAdd(a);
29954 // F = E^2
29955 var f = e.redSqr();
29956
29957 // 8 * C
29958 var c8 = c.redIAdd(c);
29959 c8 = c8.redIAdd(c8);
29960 c8 = c8.redIAdd(c8);
29961
29962 // X3 = F - 2 * D
29963 nx = f.redISub(d).redISub(d);
29964 // Y3 = E * (D - X3) - 8 * C
29965 ny = e.redMul(d.redISub(nx)).redISub(c8);
29966 // Z3 = 2 * Y1 * Z1
29967 nz = this.y.redMul(this.z);
29968 nz = nz.redIAdd(nz);
29969 }
29970
29971 return this.curve.jpoint(nx, ny, nz);
29972 };
29973
29974 JPoint.prototype._threeDbl = function _threeDbl() {
29975 var nx;
29976 var ny;
29977 var nz;
29978 // Z = 1
29979 if (this.zOne) {
29980 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
29981 // #doubling-mdbl-2007-bl
29982 // 1M + 5S + 15A
29983
29984 // XX = X1^2
29985 var xx = this.x.redSqr();
29986 // YY = Y1^2
29987 var yy = this.y.redSqr();
29988 // YYYY = YY^2
29989 var yyyy = yy.redSqr();
29990 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
29991 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
29992 s = s.redIAdd(s);
29993 // M = 3 * XX + a
29994 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
29995 // T = M^2 - 2 * S
29996 var t = m.redSqr().redISub(s).redISub(s);
29997 // X3 = T
29998 nx = t;
29999 // Y3 = M * (S - T) - 8 * YYYY
30000 var yyyy8 = yyyy.redIAdd(yyyy);
30001 yyyy8 = yyyy8.redIAdd(yyyy8);
30002 yyyy8 = yyyy8.redIAdd(yyyy8);
30003 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
30004 // Z3 = 2 * Y1
30005 nz = this.y.redAdd(this.y);
30006 } else {
30007 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
30008 // 3M + 5S
30009
30010 // delta = Z1^2
30011 var delta = this.z.redSqr();
30012 // gamma = Y1^2
30013 var gamma = this.y.redSqr();
30014 // beta = X1 * gamma
30015 var beta = this.x.redMul(gamma);
30016 // alpha = 3 * (X1 - delta) * (X1 + delta)
30017 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
30018 alpha = alpha.redAdd(alpha).redIAdd(alpha);
30019 // X3 = alpha^2 - 8 * beta
30020 var beta4 = beta.redIAdd(beta);
30021 beta4 = beta4.redIAdd(beta4);
30022 var beta8 = beta4.redAdd(beta4);
30023 nx = alpha.redSqr().redISub(beta8);
30024 // Z3 = (Y1 + Z1)^2 - gamma - delta
30025 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
30026 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
30027 var ggamma8 = gamma.redSqr();
30028 ggamma8 = ggamma8.redIAdd(ggamma8);
30029 ggamma8 = ggamma8.redIAdd(ggamma8);
30030 ggamma8 = ggamma8.redIAdd(ggamma8);
30031 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
30032 }
30033
30034 return this.curve.jpoint(nx, ny, nz);
30035 };
30036
30037 JPoint.prototype._dbl = function _dbl() {
30038 var a = this.curve.a;
30039
30040 // 4M + 6S + 10A
30041 var jx = this.x;
30042 var jy = this.y;
30043 var jz = this.z;
30044 var jz4 = jz.redSqr().redSqr();
30045
30046 var jx2 = jx.redSqr();
30047 var jy2 = jy.redSqr();
30048
30049 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
30050
30051 var jxd4 = jx.redAdd(jx);
30052 jxd4 = jxd4.redIAdd(jxd4);
30053 var t1 = jxd4.redMul(jy2);
30054 var nx = c.redSqr().redISub(t1.redAdd(t1));
30055 var t2 = t1.redISub(nx);
30056
30057 var jyd8 = jy2.redSqr();
30058 jyd8 = jyd8.redIAdd(jyd8);
30059 jyd8 = jyd8.redIAdd(jyd8);
30060 jyd8 = jyd8.redIAdd(jyd8);
30061 var ny = c.redMul(t2).redISub(jyd8);
30062 var nz = jy.redAdd(jy).redMul(jz);
30063
30064 return this.curve.jpoint(nx, ny, nz);
30065 };
30066
30067 JPoint.prototype.trpl = function trpl() {
30068 if (!this.curve.zeroA)
30069 return this.dbl().add(this);
30070
30071 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
30072 // 5M + 10S + ...
30073
30074 // XX = X1^2
30075 var xx = this.x.redSqr();
30076 // YY = Y1^2
30077 var yy = this.y.redSqr();
30078 // ZZ = Z1^2
30079 var zz = this.z.redSqr();
30080 // YYYY = YY^2
30081 var yyyy = yy.redSqr();
30082 // M = 3 * XX + a * ZZ2; a = 0
30083 var m = xx.redAdd(xx).redIAdd(xx);
30084 // MM = M^2
30085 var mm = m.redSqr();
30086 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
30087 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30088 e = e.redIAdd(e);
30089 e = e.redAdd(e).redIAdd(e);
30090 e = e.redISub(mm);
30091 // EE = E^2
30092 var ee = e.redSqr();
30093 // T = 16*YYYY
30094 var t = yyyy.redIAdd(yyyy);
30095 t = t.redIAdd(t);
30096 t = t.redIAdd(t);
30097 t = t.redIAdd(t);
30098 // U = (M + E)^2 - MM - EE - T
30099 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
30100 // X3 = 4 * (X1 * EE - 4 * YY * U)
30101 var yyu4 = yy.redMul(u);
30102 yyu4 = yyu4.redIAdd(yyu4);
30103 yyu4 = yyu4.redIAdd(yyu4);
30104 var nx = this.x.redMul(ee).redISub(yyu4);
30105 nx = nx.redIAdd(nx);
30106 nx = nx.redIAdd(nx);
30107 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
30108 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
30109 ny = ny.redIAdd(ny);
30110 ny = ny.redIAdd(ny);
30111 ny = ny.redIAdd(ny);
30112 // Z3 = (Z1 + E)^2 - ZZ - EE
30113 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
30114
30115 return this.curve.jpoint(nx, ny, nz);
30116 };
30117
30118 JPoint.prototype.mul = function mul(k, kbase) {
30119 k = new BN(k, kbase);
30120
30121 return this.curve._wnafMul(this, k);
30122 };
30123
30124 JPoint.prototype.eq = function eq(p) {
30125 if (p.type === 'affine')
30126 return this.eq(p.toJ());
30127
30128 if (this === p)
30129 return true;
30130
30131 // x1 * z2^2 == x2 * z1^2
30132 var z2 = this.z.redSqr();
30133 var pz2 = p.z.redSqr();
30134 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
30135 return false;
30136
30137 // y1 * z2^3 == y2 * z1^3
30138 var z3 = z2.redMul(this.z);
30139 var pz3 = pz2.redMul(p.z);
30140 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
30141 };
30142
30143 JPoint.prototype.eqXToP = function eqXToP(x) {
30144 var zs = this.z.redSqr();
30145 var rx = x.toRed(this.curve.red).redMul(zs);
30146 if (this.x.cmp(rx) === 0)
30147 return true;
30148
30149 var xc = x.clone();
30150 var t = this.curve.redN.redMul(zs);
30151 for (;;) {
30152 xc.iadd(this.curve.n);
30153 if (xc.cmp(this.curve.p) >= 0)
30154 return false;
30155
30156 rx.redIAdd(t);
30157 if (this.x.cmp(rx) === 0)
30158 return true;
30159 }
30160 return false;
30161 };
30162
30163 JPoint.prototype.inspect = function inspect() {
30164 if (this.isInfinity())
30165 return '<EC JPoint Infinity>';
30166 return '<EC JPoint x: ' + this.x.toString(16, 2) +
30167 ' y: ' + this.y.toString(16, 2) +
30168 ' z: ' + this.z.toString(16, 2) + '>';
30169 };
30170
30171 JPoint.prototype.isInfinity = function isInfinity() {
30172 // XXX This code assumes that zero is always zero in red
30173 return this.z.cmpn(0) === 0;
30174 };
30175
30176 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
30177 'use strict';
30178
30179 var curves = exports;
30180
30181 var hash = require('hash.js');
30182 var elliptic = require('../elliptic');
30183
30184 var assert = elliptic.utils.assert;
30185
30186 function PresetCurve(options) {
30187 if (options.type === 'short')
30188 this.curve = new elliptic.curve.short(options);
30189 else if (options.type === 'edwards')
30190 this.curve = new elliptic.curve.edwards(options);
30191 else
30192 this.curve = new elliptic.curve.mont(options);
30193 this.g = this.curve.g;
30194 this.n = this.curve.n;
30195 this.hash = options.hash;
30196
30197 assert(this.g.validate(), 'Invalid curve');
30198 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
30199 }
30200 curves.PresetCurve = PresetCurve;
30201
30202 function defineCurve(name, options) {
30203 Object.defineProperty(curves, name, {
30204 configurable: true,
30205 enumerable: true,
30206 get: function() {
30207 var curve = new PresetCurve(options);
30208 Object.defineProperty(curves, name, {
30209 configurable: true,
30210 enumerable: true,
30211 value: curve
30212 });
30213 return curve;
30214 }
30215 });
30216 }
30217
30218 defineCurve('p192', {
30219 type: 'short',
30220 prime: 'p192',
30221 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
30222 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
30223 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
30224 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
30225 hash: hash.sha256,
30226 gRed: false,
30227 g: [
30228 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
30229 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
30230 ]
30231 });
30232
30233 defineCurve('p224', {
30234 type: 'short',
30235 prime: 'p224',
30236 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
30237 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
30238 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
30239 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
30240 hash: hash.sha256,
30241 gRed: false,
30242 g: [
30243 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
30244 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
30245 ]
30246 });
30247
30248 defineCurve('p256', {
30249 type: 'short',
30250 prime: null,
30251 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
30252 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
30253 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
30254 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
30255 hash: hash.sha256,
30256 gRed: false,
30257 g: [
30258 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
30259 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
30260 ]
30261 });
30262
30263 defineCurve('p384', {
30264 type: 'short',
30265 prime: null,
30266 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30267 'fffffffe ffffffff 00000000 00000000 ffffffff',
30268 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30269 'fffffffe ffffffff 00000000 00000000 fffffffc',
30270 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
30271 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
30272 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
30273 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
30274 hash: hash.sha384,
30275 gRed: false,
30276 g: [
30277 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
30278 '5502f25d bf55296c 3a545e38 72760ab7',
30279 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
30280 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
30281 ]
30282 });
30283
30284 defineCurve('p521', {
30285 type: 'short',
30286 prime: null,
30287 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30288 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30289 'ffffffff ffffffff ffffffff ffffffff ffffffff',
30290 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30291 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30292 'ffffffff ffffffff ffffffff ffffffff fffffffc',
30293 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
30294 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
30295 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
30296 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30297 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
30298 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
30299 hash: hash.sha512,
30300 gRed: false,
30301 g: [
30302 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
30303 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
30304 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
30305 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
30306 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
30307 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
30308 ]
30309 });
30310
30311 defineCurve('curve25519', {
30312 type: 'mont',
30313 prime: 'p25519',
30314 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
30315 a: '76d06',
30316 b: '1',
30317 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
30318 hash: hash.sha256,
30319 gRed: false,
30320 g: [
30321 '9'
30322 ]
30323 });
30324
30325 defineCurve('ed25519', {
30326 type: 'edwards',
30327 prime: 'p25519',
30328 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
30329 a: '-1',
30330 c: '1',
30331 // -121665 * (121666^(-1)) (mod P)
30332 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
30333 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
30334 hash: hash.sha256,
30335 gRed: false,
30336 g: [
30337 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
30338
30339 // 4/5
30340 '6666666666666666666666666666666666666666666666666666666666666658'
30341 ]
30342 });
30343
30344 var pre;
30345 try {
30346 pre = require('./precomputed/secp256k1');
30347 } catch (e) {
30348 pre = undefined;
30349 }
30350
30351 defineCurve('secp256k1', {
30352 type: 'short',
30353 prime: 'k256',
30354 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
30355 a: '0',
30356 b: '7',
30357 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
30358 h: '1',
30359 hash: hash.sha256,
30360
30361 // Precomputed endomorphism
30362 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
30363 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
30364 basis: [
30365 {
30366 a: '3086d221a7d46bcde86c90e49284eb15',
30367 b: '-e4437ed6010e88286f547fa90abfe4c3'
30368 },
30369 {
30370 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
30371 b: '3086d221a7d46bcde86c90e49284eb15'
30372 }
30373 ],
30374
30375 gRed: false,
30376 g: [
30377 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
30378 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
30379 pre
30380 ]
30381 });
30382
30383 },{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
30384 'use strict';
30385
30386 var BN = require('bn.js');
30387 var elliptic = require('../../elliptic');
30388 var utils = elliptic.utils;
30389 var assert = utils.assert;
30390
30391 var KeyPair = require('./key');
30392 var Signature = require('./signature');
30393
30394 function EC(options) {
30395 if (!(this instanceof EC))
30396 return new EC(options);
30397
30398 // Shortcut `elliptic.ec(curve-name)`
30399 if (typeof options === 'string') {
30400 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
30401
30402 options = elliptic.curves[options];
30403 }
30404
30405 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
30406 if (options instanceof elliptic.curves.PresetCurve)
30407 options = { curve: options };
30408
30409 this.curve = options.curve.curve;
30410 this.n = this.curve.n;
30411 this.nh = this.n.ushrn(1);
30412 this.g = this.curve.g;
30413
30414 // Point on curve
30415 this.g = options.curve.g;
30416 this.g.precompute(options.curve.n.bitLength() + 1);
30417
30418 // Hash for function for DRBG
30419 this.hash = options.hash || options.curve.hash;
30420 }
30421 module.exports = EC;
30422
30423 EC.prototype.keyPair = function keyPair(options) {
30424 return new KeyPair(this, options);
30425 };
30426
30427 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
30428 return KeyPair.fromPrivate(this, priv, enc);
30429 };
30430
30431 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
30432 return KeyPair.fromPublic(this, pub, enc);
30433 };
30434
30435 EC.prototype.genKeyPair = function genKeyPair(options) {
30436 if (!options)
30437 options = {};
30438
30439 // Instantiate Hmac_DRBG
30440 var drbg = new elliptic.hmacDRBG({
30441 hash: this.hash,
30442 pers: options.pers,
30443 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
30444 nonce: this.n.toArray()
30445 });
30446
30447 var bytes = this.n.byteLength();
30448 var ns2 = this.n.sub(new BN(2));
30449 do {
30450 var priv = new BN(drbg.generate(bytes));
30451 if (priv.cmp(ns2) > 0)
30452 continue;
30453
30454 priv.iaddn(1);
30455 return this.keyFromPrivate(priv);
30456 } while (true);
30457 };
30458
30459 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
30460 var delta = msg.byteLength() * 8 - this.n.bitLength();
30461 if (delta > 0)
30462 msg = msg.ushrn(delta);
30463 if (!truncOnly && msg.cmp(this.n) >= 0)
30464 return msg.sub(this.n);
30465 else
30466 return msg;
30467 };
30468
30469 EC.prototype.sign = function sign(msg, key, enc, options) {
30470 if (typeof enc === 'object') {
30471 options = enc;
30472 enc = null;
30473 }
30474 if (!options)
30475 options = {};
30476
30477 key = this.keyFromPrivate(key, enc);
30478 msg = this._truncateToN(new BN(msg, 16));
30479
30480 // Zero-extend key to provide enough entropy
30481 var bytes = this.n.byteLength();
30482 var bkey = key.getPrivate().toArray('be', bytes);
30483
30484 // Zero-extend nonce to have the same byte size as N
30485 var nonce = msg.toArray('be', bytes);
30486
30487 // Instantiate Hmac_DRBG
30488 var drbg = new elliptic.hmacDRBG({
30489 hash: this.hash,
30490 entropy: bkey,
30491 nonce: nonce,
30492 pers: options.pers,
30493 persEnc: options.persEnc
30494 });
30495
30496 // Number of bytes to generate
30497 var ns1 = this.n.sub(new BN(1));
30498
30499 for (var iter = 0; true; iter++) {
30500 var k = options.k ?
30501 options.k(iter) :
30502 new BN(drbg.generate(this.n.byteLength()));
30503 k = this._truncateToN(k, true);
30504 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
30505 continue;
30506
30507 var kp = this.g.mul(k);
30508 if (kp.isInfinity())
30509 continue;
30510
30511 var kpX = kp.getX();
30512 var r = kpX.umod(this.n);
30513 if (r.cmpn(0) === 0)
30514 continue;
30515
30516 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
30517 s = s.umod(this.n);
30518 if (s.cmpn(0) === 0)
30519 continue;
30520
30521 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
30522 (kpX.cmp(r) !== 0 ? 2 : 0);
30523
30524 // Use complement of `s`, if it is > `n / 2`
30525 if (options.canonical && s.cmp(this.nh) > 0) {
30526 s = this.n.sub(s);
30527 recoveryParam ^= 1;
30528 }
30529
30530 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
30531 }
30532 };
30533
30534 EC.prototype.verify = function verify(msg, signature, key, enc) {
30535 msg = this._truncateToN(new BN(msg, 16));
30536 key = this.keyFromPublic(key, enc);
30537 signature = new Signature(signature, 'hex');
30538
30539 // Perform primitive values validation
30540 var r = signature.r;
30541 var s = signature.s;
30542 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
30543 return false;
30544 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
30545 return false;
30546
30547 // Validate signature
30548 var sinv = s.invm(this.n);
30549 var u1 = sinv.mul(msg).umod(this.n);
30550 var u2 = sinv.mul(r).umod(this.n);
30551
30552 if (!this.curve._maxwellTrick) {
30553 var p = this.g.mulAdd(u1, key.getPublic(), u2);
30554 if (p.isInfinity())
30555 return false;
30556
30557 return p.getX().umod(this.n).cmp(r) === 0;
30558 }
30559
30560 // NOTE: Greg Maxwell's trick, inspired by:
30561 // https://git.io/vad3K
30562
30563 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
30564 if (p.isInfinity())
30565 return false;
30566
30567 // Compare `p.x` of Jacobian point with `r`,
30568 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
30569 // inverse of `p.z^2`
30570 return p.eqXToP(r);
30571 };
30572
30573 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
30574 assert((3 & j) === j, 'The recovery param is more than two bits');
30575 signature = new Signature(signature, enc);
30576
30577 var n = this.n;
30578 var e = new BN(msg);
30579 var r = signature.r;
30580 var s = signature.s;
30581
30582 // A set LSB signifies that the y-coordinate is odd
30583 var isYOdd = j & 1;
30584 var isSecondKey = j >> 1;
30585 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
30586 throw new Error('Unable to find sencond key candinate');
30587
30588 // 1.1. Let x = r + jn.
30589 if (isSecondKey)
30590 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
30591 else
30592 r = this.curve.pointFromX(r, isYOdd);
30593
30594 var rInv = signature.r.invm(n);
30595 var s1 = n.sub(e).mul(rInv).umod(n);
30596 var s2 = s.mul(rInv).umod(n);
30597
30598 // 1.6.1 Compute Q = r^-1 (sR - eG)
30599 // Q = r^-1 (sR + -eG)
30600 return this.g.mulAdd(s1, r, s2);
30601 };
30602
30603 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
30604 signature = new Signature(signature, enc);
30605 if (signature.recoveryParam !== null)
30606 return signature.recoveryParam;
30607
30608 for (var i = 0; i < 4; i++) {
30609 var Qprime;
30610 try {
30611 Qprime = this.recoverPubKey(e, signature, i);
30612 } catch (e) {
30613 continue;
30614 }
30615
30616 if (Qprime.eq(Q))
30617 return i;
30618 }
30619 throw new Error('Unable to find valid recovery factor');
30620 };
30621
30622 },{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
30623 'use strict';
30624
30625 var BN = require('bn.js');
30626 var elliptic = require('../../elliptic');
30627 var utils = elliptic.utils;
30628 var assert = utils.assert;
30629
30630 function KeyPair(ec, options) {
30631 this.ec = ec;
30632 this.priv = null;
30633 this.pub = null;
30634
30635 // KeyPair(ec, { priv: ..., pub: ... })
30636 if (options.priv)
30637 this._importPrivate(options.priv, options.privEnc);
30638 if (options.pub)
30639 this._importPublic(options.pub, options.pubEnc);
30640 }
30641 module.exports = KeyPair;
30642
30643 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
30644 if (pub instanceof KeyPair)
30645 return pub;
30646
30647 return new KeyPair(ec, {
30648 pub: pub,
30649 pubEnc: enc
30650 });
30651 };
30652
30653 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
30654 if (priv instanceof KeyPair)
30655 return priv;
30656
30657 return new KeyPair(ec, {
30658 priv: priv,
30659 privEnc: enc
30660 });
30661 };
30662
30663 KeyPair.prototype.validate = function validate() {
30664 var pub = this.getPublic();
30665
30666 if (pub.isInfinity())
30667 return { result: false, reason: 'Invalid public key' };
30668 if (!pub.validate())
30669 return { result: false, reason: 'Public key is not a point' };
30670 if (!pub.mul(this.ec.curve.n).isInfinity())
30671 return { result: false, reason: 'Public key * N != O' };
30672
30673 return { result: true, reason: null };
30674 };
30675
30676 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
30677 // compact is optional argument
30678 if (typeof compact === 'string') {
30679 enc = compact;
30680 compact = null;
30681 }
30682
30683 if (!this.pub)
30684 this.pub = this.ec.g.mul(this.priv);
30685
30686 if (!enc)
30687 return this.pub;
30688
30689 return this.pub.encode(enc, compact);
30690 };
30691
30692 KeyPair.prototype.getPrivate = function getPrivate(enc) {
30693 if (enc === 'hex')
30694 return this.priv.toString(16, 2);
30695 else
30696 return this.priv;
30697 };
30698
30699 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
30700 this.priv = new BN(key, enc || 16);
30701
30702 // Ensure that the priv won't be bigger than n, otherwise we may fail
30703 // in fixed multiplication method
30704 this.priv = this.priv.umod(this.ec.curve.n);
30705 };
30706
30707 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
30708 if (key.x || key.y) {
30709 // Montgomery points only have an `x` coordinate.
30710 // Weierstrass/Edwards points on the other hand have both `x` and
30711 // `y` coordinates.
30712 if (this.ec.curve.type === 'mont') {
30713 assert(key.x, 'Need x coordinate');
30714 } else if (this.ec.curve.type === 'short' ||
30715 this.ec.curve.type === 'edwards') {
30716 assert(key.x && key.y, 'Need both x and y coordinate');
30717 }
30718 this.pub = this.ec.curve.point(key.x, key.y);
30719 return;
30720 }
30721 this.pub = this.ec.curve.decodePoint(key, enc);
30722 };
30723
30724 // ECDH
30725 KeyPair.prototype.derive = function derive(pub) {
30726 return pub.mul(this.priv).getX();
30727 };
30728
30729 // ECDSA
30730 KeyPair.prototype.sign = function sign(msg, enc, options) {
30731 return this.ec.sign(msg, this, enc, options);
30732 };
30733
30734 KeyPair.prototype.verify = function verify(msg, signature) {
30735 return this.ec.verify(msg, signature, this);
30736 };
30737
30738 KeyPair.prototype.inspect = function inspect() {
30739 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
30740 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
30741 };
30742
30743 },{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
30744 'use strict';
30745
30746 var BN = require('bn.js');
30747
30748 var elliptic = require('../../elliptic');
30749 var utils = elliptic.utils;
30750 var assert = utils.assert;
30751
30752 function Signature(options, enc) {
30753 if (options instanceof Signature)
30754 return options;
30755
30756 if (this._importDER(options, enc))
30757 return;
30758
30759 assert(options.r && options.s, 'Signature without r or s');
30760 this.r = new BN(options.r, 16);
30761 this.s = new BN(options.s, 16);
30762 if (options.recoveryParam === undefined)
30763 this.recoveryParam = null;
30764 else
30765 this.recoveryParam = options.recoveryParam;
30766 }
30767 module.exports = Signature;
30768
30769 function Position() {
30770 this.place = 0;
30771 }
30772
30773 function getLength(buf, p) {
30774 var initial = buf[p.place++];
30775 if (!(initial & 0x80)) {
30776 return initial;
30777 }
30778 var octetLen = initial & 0xf;
30779 var val = 0;
30780 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
30781 val <<= 8;
30782 val |= buf[off];
30783 }
30784 p.place = off;
30785 return val;
30786 }
30787
30788 function rmPadding(buf) {
30789 var i = 0;
30790 var len = buf.length - 1;
30791 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
30792 i++;
30793 }
30794 if (i === 0) {
30795 return buf;
30796 }
30797 return buf.slice(i);
30798 }
30799
30800 Signature.prototype._importDER = function _importDER(data, enc) {
30801 data = utils.toArray(data, enc);
30802 var p = new Position();
30803 if (data[p.place++] !== 0x30) {
30804 return false;
30805 }
30806 var len = getLength(data, p);
30807 if ((len + p.place) !== data.length) {
30808 return false;
30809 }
30810 if (data[p.place++] !== 0x02) {
30811 return false;
30812 }
30813 var rlen = getLength(data, p);
30814 var r = data.slice(p.place, rlen + p.place);
30815 p.place += rlen;
30816 if (data[p.place++] !== 0x02) {
30817 return false;
30818 }
30819 var slen = getLength(data, p);
30820 if (data.length !== slen + p.place) {
30821 return false;
30822 }
30823 var s = data.slice(p.place, slen + p.place);
30824 if (r[0] === 0 && (r[1] & 0x80)) {
30825 r = r.slice(1);
30826 }
30827 if (s[0] === 0 && (s[1] & 0x80)) {
30828 s = s.slice(1);
30829 }
30830
30831 this.r = new BN(r);
30832 this.s = new BN(s);
30833 this.recoveryParam = null;
30834
30835 return true;
30836 };
30837
30838 function constructLength(arr, len) {
30839 if (len < 0x80) {
30840 arr.push(len);
30841 return;
30842 }
30843 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
30844 arr.push(octets | 0x80);
30845 while (--octets) {
30846 arr.push((len >>> (octets << 3)) & 0xff);
30847 }
30848 arr.push(len);
30849 }
30850
30851 Signature.prototype.toDER = function toDER(enc) {
30852 var r = this.r.toArray();
30853 var s = this.s.toArray();
30854
30855 // Pad values
30856 if (r[0] & 0x80)
30857 r = [ 0 ].concat(r);
30858 // Pad values
30859 if (s[0] & 0x80)
30860 s = [ 0 ].concat(s);
30861
30862 r = rmPadding(r);
30863 s = rmPadding(s);
30864
30865 while (!s[0] && !(s[1] & 0x80)) {
30866 s = s.slice(1);
30867 }
30868 var arr = [ 0x02 ];
30869 constructLength(arr, r.length);
30870 arr = arr.concat(r);
30871 arr.push(0x02);
30872 constructLength(arr, s.length);
30873 var backHalf = arr.concat(s);
30874 var res = [ 0x30 ];
30875 constructLength(res, backHalf.length);
30876 res = res.concat(backHalf);
30877 return utils.encode(res, enc);
30878 };
30879
30880 },{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
30881 'use strict';
30882
30883 var hash = require('hash.js');
30884 var elliptic = require('../../elliptic');
30885 var utils = elliptic.utils;
30886 var assert = utils.assert;
30887 var parseBytes = utils.parseBytes;
30888 var KeyPair = require('./key');
30889 var Signature = require('./signature');
30890
30891 function EDDSA(curve) {
30892 assert(curve === 'ed25519', 'only tested with ed25519 so far');
30893
30894 if (!(this instanceof EDDSA))
30895 return new EDDSA(curve);
30896
30897 var curve = elliptic.curves[curve].curve;
30898 this.curve = curve;
30899 this.g = curve.g;
30900 this.g.precompute(curve.n.bitLength() + 1);
30901
30902 this.pointClass = curve.point().constructor;
30903 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
30904 this.hash = hash.sha512;
30905 }
30906
30907 module.exports = EDDSA;
30908
30909 /**
30910 * @param {Array|String} message - message bytes
30911 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
30912 * @returns {Signature} - signature
30913 */
30914 EDDSA.prototype.sign = function sign(message, secret) {
30915 message = parseBytes(message);
30916 var key = this.keyFromSecret(secret);
30917 var r = this.hashInt(key.messagePrefix(), message);
30918 var R = this.g.mul(r);
30919 var Rencoded = this.encodePoint(R);
30920 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
30921 .mul(key.priv());
30922 var S = r.add(s_).umod(this.curve.n);
30923 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
30924 };
30925
30926 /**
30927 * @param {Array} message - message bytes
30928 * @param {Array|String|Signature} sig - sig bytes
30929 * @param {Array|String|Point|KeyPair} pub - public key
30930 * @returns {Boolean} - true if public key matches sig of message
30931 */
30932 EDDSA.prototype.verify = function verify(message, sig, pub) {
30933 message = parseBytes(message);
30934 sig = this.makeSignature(sig);
30935 var key = this.keyFromPublic(pub);
30936 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
30937 var SG = this.g.mul(sig.S());
30938 var RplusAh = sig.R().add(key.pub().mul(h));
30939 return RplusAh.eq(SG);
30940 };
30941
30942 EDDSA.prototype.hashInt = function hashInt() {
30943 var hash = this.hash();
30944 for (var i = 0; i < arguments.length; i++)
30945 hash.update(arguments[i]);
30946 return utils.intFromLE(hash.digest()).umod(this.curve.n);
30947 };
30948
30949 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
30950 return KeyPair.fromPublic(this, pub);
30951 };
30952
30953 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
30954 return KeyPair.fromSecret(this, secret);
30955 };
30956
30957 EDDSA.prototype.makeSignature = function makeSignature(sig) {
30958 if (sig instanceof Signature)
30959 return sig;
30960 return new Signature(this, sig);
30961 };
30962
30963 /**
30964 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
30965 *
30966 * EDDSA defines methods for encoding and decoding points and integers. These are
30967 * helper convenience methods, that pass along to utility functions implied
30968 * parameters.
30969 *
30970 */
30971 EDDSA.prototype.encodePoint = function encodePoint(point) {
30972 var enc = point.getY().toArray('le', this.encodingLength);
30973 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
30974 return enc;
30975 };
30976
30977 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
30978 bytes = utils.parseBytes(bytes);
30979
30980 var lastIx = bytes.length - 1;
30981 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
30982 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
30983
30984 var y = utils.intFromLE(normed);
30985 return this.curve.pointFromY(y, xIsOdd);
30986 };
30987
30988 EDDSA.prototype.encodeInt = function encodeInt(num) {
30989 return num.toArray('le', this.encodingLength);
30990 };
30991
30992 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
30993 return utils.intFromLE(bytes);
30994 };
30995
30996 EDDSA.prototype.isPoint = function isPoint(val) {
30997 return val instanceof this.pointClass;
30998 };
30999
31000 },{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
31001 'use strict';
31002
31003 var elliptic = require('../../elliptic');
31004 var utils = elliptic.utils;
31005 var assert = utils.assert;
31006 var parseBytes = utils.parseBytes;
31007 var cachedProperty = utils.cachedProperty;
31008
31009 /**
31010 * @param {EDDSA} eddsa - instance
31011 * @param {Object} params - public/private key parameters
31012 *
31013 * @param {Array<Byte>} [params.secret] - secret seed bytes
31014 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
31015 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
31016 *
31017 */
31018 function KeyPair(eddsa, params) {
31019 this.eddsa = eddsa;
31020 this._secret = parseBytes(params.secret);
31021 if (eddsa.isPoint(params.pub))
31022 this._pub = params.pub;
31023 else
31024 this._pubBytes = parseBytes(params.pub);
31025 }
31026
31027 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
31028 if (pub instanceof KeyPair)
31029 return pub;
31030 return new KeyPair(eddsa, { pub: pub });
31031 };
31032
31033 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
31034 if (secret instanceof KeyPair)
31035 return secret;
31036 return new KeyPair(eddsa, { secret: secret });
31037 };
31038
31039 KeyPair.prototype.secret = function secret() {
31040 return this._secret;
31041 };
31042
31043 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
31044 return this.eddsa.encodePoint(this.pub());
31045 });
31046
31047 cachedProperty(KeyPair, 'pub', function pub() {
31048 if (this._pubBytes)
31049 return this.eddsa.decodePoint(this._pubBytes);
31050 return this.eddsa.g.mul(this.priv());
31051 });
31052
31053 cachedProperty(KeyPair, 'privBytes', function privBytes() {
31054 var eddsa = this.eddsa;
31055 var hash = this.hash();
31056 var lastIx = eddsa.encodingLength - 1;
31057
31058 var a = hash.slice(0, eddsa.encodingLength);
31059 a[0] &= 248;
31060 a[lastIx] &= 127;
31061 a[lastIx] |= 64;
31062
31063 return a;
31064 });
31065
31066 cachedProperty(KeyPair, 'priv', function priv() {
31067 return this.eddsa.decodeInt(this.privBytes());
31068 });
31069
31070 cachedProperty(KeyPair, 'hash', function hash() {
31071 return this.eddsa.hash().update(this.secret()).digest();
31072 });
31073
31074 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
31075 return this.hash().slice(this.eddsa.encodingLength);
31076 });
31077
31078 KeyPair.prototype.sign = function sign(message) {
31079 assert(this._secret, 'KeyPair can only verify');
31080 return this.eddsa.sign(message, this);
31081 };
31082
31083 KeyPair.prototype.verify = function verify(message, sig) {
31084 return this.eddsa.verify(message, sig, this);
31085 };
31086
31087 KeyPair.prototype.getSecret = function getSecret(enc) {
31088 assert(this._secret, 'KeyPair is public only');
31089 return utils.encode(this.secret(), enc);
31090 };
31091
31092 KeyPair.prototype.getPublic = function getPublic(enc) {
31093 return utils.encode(this.pubBytes(), enc);
31094 };
31095
31096 module.exports = KeyPair;
31097
31098 },{"../../elliptic":39}],51:[function(require,module,exports){
31099 'use strict';
31100
31101 var BN = require('bn.js');
31102 var elliptic = require('../../elliptic');
31103 var utils = elliptic.utils;
31104 var assert = utils.assert;
31105 var cachedProperty = utils.cachedProperty;
31106 var parseBytes = utils.parseBytes;
31107
31108 /**
31109 * @param {EDDSA} eddsa - eddsa instance
31110 * @param {Array<Bytes>|Object} sig -
31111 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
31112 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
31113 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
31114 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
31115 */
31116 function Signature(eddsa, sig) {
31117 this.eddsa = eddsa;
31118
31119 if (typeof sig !== 'object')
31120 sig = parseBytes(sig);
31121
31122 if (Array.isArray(sig)) {
31123 sig = {
31124 R: sig.slice(0, eddsa.encodingLength),
31125 S: sig.slice(eddsa.encodingLength)
31126 };
31127 }
31128
31129 assert(sig.R && sig.S, 'Signature without R or S');
31130
31131 if (eddsa.isPoint(sig.R))
31132 this._R = sig.R;
31133 if (sig.S instanceof BN)
31134 this._S = sig.S;
31135
31136 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
31137 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
31138 }
31139
31140 cachedProperty(Signature, 'S', function S() {
31141 return this.eddsa.decodeInt(this.Sencoded());
31142 });
31143
31144 cachedProperty(Signature, 'R', function R() {
31145 return this.eddsa.decodePoint(this.Rencoded());
31146 });
31147
31148 cachedProperty(Signature, 'Rencoded', function Rencoded() {
31149 return this.eddsa.encodePoint(this.R());
31150 });
31151
31152 cachedProperty(Signature, 'Sencoded', function Sencoded() {
31153 return this.eddsa.encodeInt(this.S());
31154 });
31155
31156 Signature.prototype.toBytes = function toBytes() {
31157 return this.Rencoded().concat(this.Sencoded());
31158 };
31159
31160 Signature.prototype.toHex = function toHex() {
31161 return utils.encode(this.toBytes(), 'hex').toUpperCase();
31162 };
31163
31164 module.exports = Signature;
31165
31166 },{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
31167 'use strict';
31168
31169 var hash = require('hash.js');
31170 var elliptic = require('../elliptic');
31171 var utils = elliptic.utils;
31172 var assert = utils.assert;
31173
31174 function HmacDRBG(options) {
31175 if (!(this instanceof HmacDRBG))
31176 return new HmacDRBG(options);
31177 this.hash = options.hash;
31178 this.predResist = !!options.predResist;
31179
31180 this.outLen = this.hash.outSize;
31181 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
31182
31183 this.reseed = null;
31184 this.reseedInterval = null;
31185 this.K = null;
31186 this.V = null;
31187
31188 var entropy = utils.toArray(options.entropy, options.entropyEnc);
31189 var nonce = utils.toArray(options.nonce, options.nonceEnc);
31190 var pers = utils.toArray(options.pers, options.persEnc);
31191 assert(entropy.length >= (this.minEntropy / 8),
31192 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
31193 this._init(entropy, nonce, pers);
31194 }
31195 module.exports = HmacDRBG;
31196
31197 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
31198 var seed = entropy.concat(nonce).concat(pers);
31199
31200 this.K = new Array(this.outLen / 8);
31201 this.V = new Array(this.outLen / 8);
31202 for (var i = 0; i < this.V.length; i++) {
31203 this.K[i] = 0x00;
31204 this.V[i] = 0x01;
31205 }
31206
31207 this._update(seed);
31208 this.reseed = 1;
31209 this.reseedInterval = 0x1000000000000; // 2^48
31210 };
31211
31212 HmacDRBG.prototype._hmac = function hmac() {
31213 return new hash.hmac(this.hash, this.K);
31214 };
31215
31216 HmacDRBG.prototype._update = function update(seed) {
31217 var kmac = this._hmac()
31218 .update(this.V)
31219 .update([ 0x00 ]);
31220 if (seed)
31221 kmac = kmac.update(seed);
31222 this.K = kmac.digest();
31223 this.V = this._hmac().update(this.V).digest();
31224 if (!seed)
31225 return;
31226
31227 this.K = this._hmac()
31228 .update(this.V)
31229 .update([ 0x01 ])
31230 .update(seed)
31231 .digest();
31232 this.V = this._hmac().update(this.V).digest();
31233 };
31234
31235 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
31236 // Optional entropy enc
31237 if (typeof entropyEnc !== 'string') {
31238 addEnc = add;
31239 add = entropyEnc;
31240 entropyEnc = null;
31241 }
31242
31243 entropy = utils.toBuffer(entropy, entropyEnc);
31244 add = utils.toBuffer(add, addEnc);
31245
31246 assert(entropy.length >= (this.minEntropy / 8),
31247 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
31248
31249 this._update(entropy.concat(add || []));
31250 this.reseed = 1;
31251 };
31252
31253 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
31254 if (this.reseed > this.reseedInterval)
31255 throw new Error('Reseed is required');
31256
31257 // Optional encoding
31258 if (typeof enc !== 'string') {
31259 addEnc = add;
31260 add = enc;
31261 enc = null;
31262 }
31263
31264 // Optional additional data
31265 if (add) {
31266 add = utils.toArray(add, addEnc);
31267 this._update(add);
31268 }
31269
31270 var temp = [];
31271 while (temp.length < len) {
31272 this.V = this._hmac().update(this.V).digest();
31273 temp = temp.concat(this.V);
31274 }
31275
31276 var res = temp.slice(0, len);
31277 this._update(add);
31278 this.reseed++;
31279 return utils.encode(res, enc);
31280 };
31281
31282 },{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
31283 module.exports = {
31284 doubles: {
31285 step: 4,
31286 points: [
31287 [
31288 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
31289 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
31290 ],
31291 [
31292 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
31293 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
31294 ],
31295 [
31296 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
31297 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
31298 ],
31299 [
31300 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
31301 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
31302 ],
31303 [
31304 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
31305 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
31306 ],
31307 [
31308 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
31309 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
31310 ],
31311 [
31312 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
31313 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
31314 ],
31315 [
31316 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
31317 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
31318 ],
31319 [
31320 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
31321 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
31322 ],
31323 [
31324 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
31325 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
31326 ],
31327 [
31328 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
31329 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
31330 ],
31331 [
31332 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
31333 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
31334 ],
31335 [
31336 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
31337 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
31338 ],
31339 [
31340 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
31341 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
31342 ],
31343 [
31344 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
31345 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
31346 ],
31347 [
31348 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
31349 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
31350 ],
31351 [
31352 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
31353 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
31354 ],
31355 [
31356 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
31357 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
31358 ],
31359 [
31360 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
31361 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
31362 ],
31363 [
31364 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
31365 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
31366 ],
31367 [
31368 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
31369 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
31370 ],
31371 [
31372 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
31373 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
31374 ],
31375 [
31376 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
31377 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
31378 ],
31379 [
31380 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
31381 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
31382 ],
31383 [
31384 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
31385 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
31386 ],
31387 [
31388 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
31389 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
31390 ],
31391 [
31392 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
31393 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
31394 ],
31395 [
31396 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
31397 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
31398 ],
31399 [
31400 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
31401 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
31402 ],
31403 [
31404 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
31405 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
31406 ],
31407 [
31408 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
31409 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
31410 ],
31411 [
31412 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
31413 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
31414 ],
31415 [
31416 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
31417 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
31418 ],
31419 [
31420 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
31421 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
31422 ],
31423 [
31424 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
31425 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
31426 ],
31427 [
31428 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
31429 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
31430 ],
31431 [
31432 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
31433 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
31434 ],
31435 [
31436 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
31437 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
31438 ],
31439 [
31440 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
31441 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
31442 ],
31443 [
31444 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
31445 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
31446 ],
31447 [
31448 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
31449 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
31450 ],
31451 [
31452 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
31453 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
31454 ],
31455 [
31456 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
31457 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
31458 ],
31459 [
31460 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
31461 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
31462 ],
31463 [
31464 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
31465 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
31466 ],
31467 [
31468 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
31469 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
31470 ],
31471 [
31472 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
31473 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
31474 ],
31475 [
31476 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
31477 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
31478 ],
31479 [
31480 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
31481 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
31482 ],
31483 [
31484 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
31485 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
31486 ],
31487 [
31488 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
31489 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
31490 ],
31491 [
31492 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
31493 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
31494 ],
31495 [
31496 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
31497 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
31498 ],
31499 [
31500 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
31501 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
31502 ],
31503 [
31504 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
31505 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
31506 ],
31507 [
31508 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
31509 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
31510 ],
31511 [
31512 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
31513 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
31514 ],
31515 [
31516 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
31517 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
31518 ],
31519 [
31520 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
31521 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
31522 ],
31523 [
31524 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
31525 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
31526 ],
31527 [
31528 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
31529 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
31530 ],
31531 [
31532 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
31533 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
31534 ],
31535 [
31536 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
31537 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
31538 ],
31539 [
31540 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
31541 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
31542 ],
31543 [
31544 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
31545 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
31546 ]
31547 ]
31548 },
31549 naf: {
31550 wnd: 7,
31551 points: [
31552 [
31553 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
31554 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
31555 ],
31556 [
31557 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
31558 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
31559 ],
31560 [
31561 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
31562 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
31563 ],
31564 [
31565 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
31566 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
31567 ],
31568 [
31569 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
31570 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
31571 ],
31572 [
31573 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
31574 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
31575 ],
31576 [
31577 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
31578 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
31579 ],
31580 [
31581 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
31582 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
31583 ],
31584 [
31585 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
31586 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
31587 ],
31588 [
31589 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
31590 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
31591 ],
31592 [
31593 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
31594 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
31595 ],
31596 [
31597 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
31598 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
31599 ],
31600 [
31601 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
31602 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
31603 ],
31604 [
31605 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
31606 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
31607 ],
31608 [
31609 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
31610 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
31611 ],
31612 [
31613 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
31614 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
31615 ],
31616 [
31617 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
31618 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
31619 ],
31620 [
31621 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
31622 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
31623 ],
31624 [
31625 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
31626 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
31627 ],
31628 [
31629 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
31630 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
31631 ],
31632 [
31633 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
31634 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
31635 ],
31636 [
31637 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
31638 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
31639 ],
31640 [
31641 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
31642 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
31643 ],
31644 [
31645 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
31646 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
31647 ],
31648 [
31649 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
31650 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
31651 ],
31652 [
31653 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
31654 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
31655 ],
31656 [
31657 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
31658 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
31659 ],
31660 [
31661 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
31662 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
31663 ],
31664 [
31665 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
31666 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
31667 ],
31668 [
31669 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
31670 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
31671 ],
31672 [
31673 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
31674 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
31675 ],
31676 [
31677 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
31678 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
31679 ],
31680 [
31681 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
31682 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
31683 ],
31684 [
31685 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
31686 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
31687 ],
31688 [
31689 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
31690 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
31691 ],
31692 [
31693 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
31694 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
31695 ],
31696 [
31697 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
31698 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
31699 ],
31700 [
31701 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
31702 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
31703 ],
31704 [
31705 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
31706 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
31707 ],
31708 [
31709 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
31710 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
31711 ],
31712 [
31713 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
31714 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
31715 ],
31716 [
31717 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
31718 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
31719 ],
31720 [
31721 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
31722 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
31723 ],
31724 [
31725 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
31726 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
31727 ],
31728 [
31729 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
31730 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
31731 ],
31732 [
31733 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
31734 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
31735 ],
31736 [
31737 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
31738 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
31739 ],
31740 [
31741 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
31742 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
31743 ],
31744 [
31745 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
31746 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
31747 ],
31748 [
31749 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
31750 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
31751 ],
31752 [
31753 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
31754 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
31755 ],
31756 [
31757 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
31758 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
31759 ],
31760 [
31761 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
31762 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
31763 ],
31764 [
31765 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
31766 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
31767 ],
31768 [
31769 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
31770 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
31771 ],
31772 [
31773 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
31774 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
31775 ],
31776 [
31777 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
31778 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
31779 ],
31780 [
31781 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
31782 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
31783 ],
31784 [
31785 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
31786 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
31787 ],
31788 [
31789 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
31790 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
31791 ],
31792 [
31793 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
31794 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
31795 ],
31796 [
31797 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
31798 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
31799 ],
31800 [
31801 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
31802 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
31803 ],
31804 [
31805 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
31806 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
31807 ],
31808 [
31809 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
31810 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
31811 ],
31812 [
31813 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
31814 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
31815 ],
31816 [
31817 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
31818 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
31819 ],
31820 [
31821 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
31822 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
31823 ],
31824 [
31825 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
31826 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
31827 ],
31828 [
31829 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
31830 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
31831 ],
31832 [
31833 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
31834 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
31835 ],
31836 [
31837 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
31838 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
31839 ],
31840 [
31841 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
31842 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
31843 ],
31844 [
31845 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
31846 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
31847 ],
31848 [
31849 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
31850 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
31851 ],
31852 [
31853 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
31854 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
31855 ],
31856 [
31857 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
31858 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
31859 ],
31860 [
31861 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
31862 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
31863 ],
31864 [
31865 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
31866 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
31867 ],
31868 [
31869 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
31870 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
31871 ],
31872 [
31873 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
31874 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
31875 ],
31876 [
31877 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
31878 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
31879 ],
31880 [
31881 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
31882 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
31883 ],
31884 [
31885 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
31886 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
31887 ],
31888 [
31889 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
31890 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
31891 ],
31892 [
31893 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
31894 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
31895 ],
31896 [
31897 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
31898 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
31899 ],
31900 [
31901 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
31902 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
31903 ],
31904 [
31905 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
31906 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
31907 ],
31908 [
31909 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
31910 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
31911 ],
31912 [
31913 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
31914 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
31915 ],
31916 [
31917 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
31918 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
31919 ],
31920 [
31921 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
31922 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
31923 ],
31924 [
31925 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
31926 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
31927 ],
31928 [
31929 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
31930 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
31931 ],
31932 [
31933 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
31934 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
31935 ],
31936 [
31937 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
31938 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
31939 ],
31940 [
31941 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
31942 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
31943 ],
31944 [
31945 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
31946 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
31947 ],
31948 [
31949 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
31950 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
31951 ],
31952 [
31953 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
31954 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
31955 ],
31956 [
31957 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
31958 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
31959 ],
31960 [
31961 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
31962 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
31963 ],
31964 [
31965 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
31966 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
31967 ],
31968 [
31969 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
31970 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
31971 ],
31972 [
31973 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
31974 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
31975 ],
31976 [
31977 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
31978 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
31979 ],
31980 [
31981 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
31982 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
31983 ],
31984 [
31985 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
31986 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
31987 ],
31988 [
31989 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
31990 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
31991 ],
31992 [
31993 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
31994 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
31995 ],
31996 [
31997 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
31998 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
31999 ],
32000 [
32001 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
32002 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
32003 ],
32004 [
32005 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
32006 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
32007 ],
32008 [
32009 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
32010 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
32011 ],
32012 [
32013 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
32014 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
32015 ],
32016 [
32017 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
32018 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
32019 ],
32020 [
32021 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
32022 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
32023 ],
32024 [
32025 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
32026 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
32027 ],
32028 [
32029 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
32030 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
32031 ],
32032 [
32033 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
32034 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
32035 ],
32036 [
32037 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
32038 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
32039 ],
32040 [
32041 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
32042 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
32043 ],
32044 [
32045 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
32046 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
32047 ],
32048 [
32049 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
32050 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
32051 ],
32052 [
32053 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
32054 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
32055 ],
32056 [
32057 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
32058 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
32059 ]
32060 ]
32061 }
32062 };
32063
32064 },{}],54:[function(require,module,exports){
32065 'use strict';
32066
32067 var utils = exports;
32068 var BN = require('bn.js');
32069
32070 utils.assert = function assert(val, msg) {
32071 if (!val)
32072 throw new Error(msg || 'Assertion failed');
32073 };
32074
32075 function toArray(msg, enc) {
32076 if (Array.isArray(msg))
32077 return msg.slice();
32078 if (!msg)
32079 return [];
32080 var res = [];
32081 if (typeof msg !== 'string') {
32082 for (var i = 0; i < msg.length; i++)
32083 res[i] = msg[i] | 0;
32084 return res;
32085 }
32086 if (!enc) {
32087 for (var i = 0; i < msg.length; i++) {
32088 var c = msg.charCodeAt(i);
32089 var hi = c >> 8;
32090 var lo = c & 0xff;
32091 if (hi)
32092 res.push(hi, lo);
32093 else
32094 res.push(lo);
32095 }
32096 } else if (enc === 'hex') {
32097 msg = msg.replace(/[^a-z0-9]+/ig, '');
32098 if (msg.length % 2 !== 0)
32099 msg = '0' + msg;
32100 for (var i = 0; i < msg.length; i += 2)
32101 res.push(parseInt(msg[i] + msg[i + 1], 16));
32102 }
32103 return res;
32104 }
32105 utils.toArray = toArray;
32106
32107 function zero2(word) {
32108 if (word.length === 1)
32109 return '0' + word;
32110 else
32111 return word;
32112 }
32113 utils.zero2 = zero2;
32114
32115 function toHex(msg) {
32116 var res = '';
32117 for (var i = 0; i < msg.length; i++)
32118 res += zero2(msg[i].toString(16));
32119 return res;
32120 }
32121 utils.toHex = toHex;
32122
32123 utils.encode = function encode(arr, enc) {
32124 if (enc === 'hex')
32125 return toHex(arr);
32126 else
32127 return arr;
32128 };
32129
32130 // Represent num in a w-NAF form
32131 function getNAF(num, w) {
32132 var naf = [];
32133 var ws = 1 << (w + 1);
32134 var k = num.clone();
32135 while (k.cmpn(1) >= 0) {
32136 var z;
32137 if (k.isOdd()) {
32138 var mod = k.andln(ws - 1);
32139 if (mod > (ws >> 1) - 1)
32140 z = (ws >> 1) - mod;
32141 else
32142 z = mod;
32143 k.isubn(z);
32144 } else {
32145 z = 0;
32146 }
32147 naf.push(z);
32148
32149 // Optimization, shift by word if possible
32150 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
32151 for (var i = 1; i < shift; i++)
32152 naf.push(0);
32153 k.iushrn(shift);
32154 }
32155
32156 return naf;
32157 }
32158 utils.getNAF = getNAF;
32159
32160 // Represent k1, k2 in a Joint Sparse Form
32161 function getJSF(k1, k2) {
32162 var jsf = [
32163 [],
32164 []
32165 ];
32166
32167 k1 = k1.clone();
32168 k2 = k2.clone();
32169 var d1 = 0;
32170 var d2 = 0;
32171 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
32172
32173 // First phase
32174 var m14 = (k1.andln(3) + d1) & 3;
32175 var m24 = (k2.andln(3) + d2) & 3;
32176 if (m14 === 3)
32177 m14 = -1;
32178 if (m24 === 3)
32179 m24 = -1;
32180 var u1;
32181 if ((m14 & 1) === 0) {
32182 u1 = 0;
32183 } else {
32184 var m8 = (k1.andln(7) + d1) & 7;
32185 if ((m8 === 3 || m8 === 5) && m24 === 2)
32186 u1 = -m14;
32187 else
32188 u1 = m14;
32189 }
32190 jsf[0].push(u1);
32191
32192 var u2;
32193 if ((m24 & 1) === 0) {
32194 u2 = 0;
32195 } else {
32196 var m8 = (k2.andln(7) + d2) & 7;
32197 if ((m8 === 3 || m8 === 5) && m14 === 2)
32198 u2 = -m24;
32199 else
32200 u2 = m24;
32201 }
32202 jsf[1].push(u2);
32203
32204 // Second phase
32205 if (2 * d1 === u1 + 1)
32206 d1 = 1 - d1;
32207 if (2 * d2 === u2 + 1)
32208 d2 = 1 - d2;
32209 k1.iushrn(1);
32210 k2.iushrn(1);
32211 }
32212
32213 return jsf;
32214 }
32215 utils.getJSF = getJSF;
32216
32217 function cachedProperty(obj, name, computer) {
32218 var key = '_' + name;
32219 obj.prototype[name] = function cachedProperty() {
32220 return this[key] !== undefined ? this[key] :
32221 this[key] = computer.call(this);
32222 };
32223 }
32224 utils.cachedProperty = cachedProperty;
32225
32226 function parseBytes(bytes) {
32227 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
32228 bytes;
32229 }
32230 utils.parseBytes = parseBytes;
32231
32232 function intFromLE(bytes) {
32233 return new BN(bytes, 'hex', 'le');
32234 }
32235 utils.intFromLE = intFromLE;
32236
32237
32238 },{"bn.js":33}],55:[function(require,module,exports){
32239 module.exports={
32240 "_args": [
32241 [
32242 {
32243 "raw": "elliptic@^6.2.3",
32244 "scope": null,
32245 "escapedName": "elliptic",
32246 "name": "elliptic",
32247 "rawSpec": "^6.2.3",
32248 "spec": ">=6.2.3 <7.0.0",
32249 "type": "range"
32250 },
32251 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
32252 ]
32253 ],
32254 "_from": "elliptic@>=6.2.3 <7.0.0",
32255 "_id": "elliptic@6.3.3",
32256 "_inCache": true,
32257 "_location": "/elliptic",
32258 "_nodeVersion": "7.0.0",
32259 "_npmOperationalInternal": {
32260 "host": "packages-18-east.internal.npmjs.com",
32261 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
32262 },
32263 "_npmUser": {
32264 "name": "indutny",
32265 "email": "fedor@indutny.com"
32266 },
32267 "_npmVersion": "3.10.8",
32268 "_phantomChildren": {},
32269 "_requested": {
32270 "raw": "elliptic@^6.2.3",
32271 "scope": null,
32272 "escapedName": "elliptic",
32273 "name": "elliptic",
32274 "rawSpec": "^6.2.3",
32275 "spec": ">=6.2.3 <7.0.0",
32276 "type": "range"
32277 },
32278 "_requiredBy": [
32279 "/browserify-sign",
32280 "/create-ecdh",
32281 "/secp256k1"
32282 ],
32283 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
32284 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
32285 "_shrinkwrap": null,
32286 "_spec": "elliptic@^6.2.3",
32287 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
32288 "author": {
32289 "name": "Fedor Indutny",
32290 "email": "fedor@indutny.com"
32291 },
32292 "bugs": {
32293 "url": "https://github.com/indutny/elliptic/issues"
32294 },
32295 "dependencies": {
32296 "bn.js": "^4.4.0",
32297 "brorand": "^1.0.1",
32298 "hash.js": "^1.0.0",
32299 "inherits": "^2.0.1"
32300 },
32301 "description": "EC cryptography",
32302 "devDependencies": {
32303 "brfs": "^1.4.3",
32304 "coveralls": "^2.11.3",
32305 "grunt": "^0.4.5",
32306 "grunt-browserify": "^5.0.0",
32307 "grunt-cli": "^1.2.0",
32308 "grunt-contrib-connect": "^1.0.0",
32309 "grunt-contrib-copy": "^1.0.0",
32310 "grunt-contrib-uglify": "^1.0.1",
32311 "grunt-mocha-istanbul": "^3.0.1",
32312 "grunt-saucelabs": "^8.6.2",
32313 "istanbul": "^0.4.2",
32314 "jscs": "^2.9.0",
32315 "jshint": "^2.6.0",
32316 "mocha": "^2.1.0"
32317 },
32318 "directories": {},
32319 "dist": {
32320 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
32321 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
32322 },
32323 "files": [
32324 "lib"
32325 ],
32326 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
32327 "homepage": "https://github.com/indutny/elliptic",
32328 "keywords": [
32329 "EC",
32330 "Elliptic",
32331 "curve",
32332 "Cryptography"
32333 ],
32334 "license": "MIT",
32335 "main": "lib/elliptic.js",
32336 "maintainers": [
32337 {
32338 "name": "indutny",
32339 "email": "fedor@indutny.com"
32340 }
32341 ],
32342 "name": "elliptic",
32343 "optionalDependencies": {},
32344 "readme": "ERROR: No README data found!",
32345 "repository": {
32346 "type": "git",
32347 "url": "git+ssh://git@github.com/indutny/elliptic.git"
32348 },
32349 "scripts": {
32350 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
32351 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
32352 "lint": "npm run jscs && npm run jshint",
32353 "test": "npm run lint && npm run unit",
32354 "unit": "istanbul test _mocha --reporter=spec test/index.js",
32355 "version": "grunt dist && git add dist/"
32356 },
32357 "version": "6.3.3"
32358 }
32359
32360 },{}],56:[function(require,module,exports){
32361 (function (Buffer){
32362 'use strict';
32363
32364 var isHexPrefixed = require('is-hex-prefixed');
32365 var stripHexPrefix = require('strip-hex-prefix');
32366
32367 /**
32368 * Pads a `String` to have an even length
32369 * @param {String} value
32370 * @return {String} output
32371 */
32372 function padToEven(value) {
32373 var a = value; // eslint-disable-line
32374
32375 if (typeof a !== 'string') {
32376 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
32377 }
32378
32379 if (a.length % 2) {
32380 a = '0' + a;
32381 }
32382
32383 return a;
32384 }
32385
32386 /**
32387 * Converts a `Number` into a hex `String`
32388 * @param {Number} i
32389 * @return {String}
32390 */
32391 function intToHex(i) {
32392 var hex = i.toString(16); // eslint-disable-line
32393
32394 return '0x' + padToEven(hex);
32395 }
32396
32397 /**
32398 * Converts an `Number` to a `Buffer`
32399 * @param {Number} i
32400 * @return {Buffer}
32401 */
32402 function intToBuffer(i) {
32403 var hex = intToHex(i);
32404
32405 return new Buffer(hex.slice(2), 'hex');
32406 }
32407
32408 /**
32409 * Get the binary size of a string
32410 * @param {String} str
32411 * @return {Number}
32412 */
32413 function getBinarySize(str) {
32414 if (typeof str !== 'string') {
32415 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
32416 }
32417
32418 return Buffer.byteLength(str, 'utf8');
32419 }
32420
32421 /**
32422 * Returns TRUE if the first specified array contains all elements
32423 * from the second one. FALSE otherwise.
32424 *
32425 * @param {array} superset
32426 * @param {array} subset
32427 *
32428 * @returns {boolean}
32429 */
32430 function arrayContainsArray(superset, subset, some) {
32431 if (Array.isArray(superset) !== true) {
32432 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
32433 }
32434 if (Array.isArray(subset) !== true) {
32435 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
32436 }
32437
32438 return subset[Boolean(some) && 'some' || 'every'](function (value) {
32439 return superset.indexOf(value) >= 0;
32440 });
32441 }
32442
32443 /**
32444 * Should be called to get utf8 from it's hex representation
32445 *
32446 * @method toUtf8
32447 * @param {String} string in hex
32448 * @returns {String} ascii string representation of hex value
32449 */
32450 function toUtf8(hex) {
32451 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
32452
32453 return bufferValue.toString('utf8');
32454 }
32455
32456 /**
32457 * Should be called to get ascii from it's hex representation
32458 *
32459 * @method toAscii
32460 * @param {String} string in hex
32461 * @returns {String} ascii string representation of hex value
32462 */
32463 function toAscii(hex) {
32464 var str = ''; // eslint-disable-line
32465 var i = 0,
32466 l = hex.length; // eslint-disable-line
32467
32468 if (hex.substring(0, 2) === '0x') {
32469 i = 2;
32470 }
32471
32472 for (; i < l; i += 2) {
32473 var code = parseInt(hex.substr(i, 2), 16);
32474 str += String.fromCharCode(code);
32475 }
32476
32477 return str;
32478 }
32479
32480 /**
32481 * Should be called to get hex representation (prefixed by 0x) of utf8 string
32482 *
32483 * @method fromUtf8
32484 * @param {String} string
32485 * @param {Number} optional padding
32486 * @returns {String} hex representation of input string
32487 */
32488 function fromUtf8(stringValue) {
32489 var str = new Buffer(stringValue, 'utf8');
32490
32491 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
32492 }
32493
32494 /**
32495 * Should be called to get hex representation (prefixed by 0x) of ascii string
32496 *
32497 * @method fromAscii
32498 * @param {String} string
32499 * @param {Number} optional padding
32500 * @returns {String} hex representation of input string
32501 */
32502 function fromAscii(stringValue) {
32503 var hex = ''; // eslint-disable-line
32504 for (var i = 0; i < stringValue.length; i++) {
32505 // eslint-disable-line
32506 var code = stringValue.charCodeAt(i);
32507 var n = code.toString(16);
32508 hex += n.length < 2 ? '0' + n : n;
32509 }
32510
32511 return '0x' + hex;
32512 }
32513
32514 /**
32515 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
32516 *
32517 * @method getKeys get specific key from inner object array of objects
32518 * @param {String} params
32519 * @param {String} key
32520 * @param {Boolean} allowEmpty
32521 * @returns {Array} output just a simple array of output keys
32522 */
32523 function getKeys(params, key, allowEmpty) {
32524 if (!Array.isArray(params)) {
32525 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
32526 }
32527 if (typeof key !== 'string') {
32528 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
32529 }
32530
32531 var result = []; // eslint-disable-line
32532
32533 for (var i = 0; i < params.length; i++) {
32534 // eslint-disable-line
32535 var value = params[i][key]; // eslint-disable-line
32536 if (allowEmpty && !value) {
32537 value = '';
32538 } else if (typeof value !== 'string') {
32539 throw new Error('invalid abi');
32540 }
32541 result.push(value);
32542 }
32543
32544 return result;
32545 }
32546
32547 /**
32548 * Is the string a hex string.
32549 *
32550 * @method check if string is hex string of specific length
32551 * @param {String} value
32552 * @param {Number} length
32553 * @returns {Boolean} output the string is a hex string
32554 */
32555 function isHexString(value, length) {
32556 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
32557 return false;
32558 }
32559
32560 if (length && value.length !== 2 + 2 * length) {
32561 return false;
32562 }
32563
32564 return true;
32565 }
32566
32567 module.exports = {
32568 arrayContainsArray: arrayContainsArray,
32569 intToBuffer: intToBuffer,
32570 getBinarySize: getBinarySize,
32571 isHexPrefixed: isHexPrefixed,
32572 stripHexPrefix: stripHexPrefix,
32573 padToEven: padToEven,
32574 intToHex: intToHex,
32575 fromAscii: fromAscii,
32576 fromUtf8: fromUtf8,
32577 toAscii: toAscii,
32578 toUtf8: toUtf8,
32579 getKeys: getKeys,
32580 isHexString: isHexString
32581 };
32582 }).call(this,require("buffer").Buffer)
32583 },{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
32584 var hash = exports;
32585
32586 hash.utils = require('./hash/utils');
32587 hash.common = require('./hash/common');
32588 hash.sha = require('./hash/sha');
32589 hash.ripemd = require('./hash/ripemd');
32590 hash.hmac = require('./hash/hmac');
32591
32592 // Proxy hash functions to the main object
32593 hash.sha1 = hash.sha.sha1;
32594 hash.sha256 = hash.sha.sha256;
32595 hash.sha224 = hash.sha.sha224;
32596 hash.sha384 = hash.sha.sha384;
32597 hash.sha512 = hash.sha.sha512;
32598 hash.ripemd160 = hash.ripemd.ripemd160;
32599
32600 },{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
32601 var hash = require('../hash');
32602 var utils = hash.utils;
32603 var assert = utils.assert;
32604
32605 function BlockHash() {
32606 this.pending = null;
32607 this.pendingTotal = 0;
32608 this.blockSize = this.constructor.blockSize;
32609 this.outSize = this.constructor.outSize;
32610 this.hmacStrength = this.constructor.hmacStrength;
32611 this.padLength = this.constructor.padLength / 8;
32612 this.endian = 'big';
32613
32614 this._delta8 = this.blockSize / 8;
32615 this._delta32 = this.blockSize / 32;
32616 }
32617 exports.BlockHash = BlockHash;
32618
32619 BlockHash.prototype.update = function update(msg, enc) {
32620 // Convert message to array, pad it, and join into 32bit blocks
32621 msg = utils.toArray(msg, enc);
32622 if (!this.pending)
32623 this.pending = msg;
32624 else
32625 this.pending = this.pending.concat(msg);
32626 this.pendingTotal += msg.length;
32627
32628 // Enough data, try updating
32629 if (this.pending.length >= this._delta8) {
32630 msg = this.pending;
32631
32632 // Process pending data in blocks
32633 var r = msg.length % this._delta8;
32634 this.pending = msg.slice(msg.length - r, msg.length);
32635 if (this.pending.length === 0)
32636 this.pending = null;
32637
32638 msg = utils.join32(msg, 0, msg.length - r, this.endian);
32639 for (var i = 0; i < msg.length; i += this._delta32)
32640 this._update(msg, i, i + this._delta32);
32641 }
32642
32643 return this;
32644 };
32645
32646 BlockHash.prototype.digest = function digest(enc) {
32647 this.update(this._pad());
32648 assert(this.pending === null);
32649
32650 return this._digest(enc);
32651 };
32652
32653 BlockHash.prototype._pad = function pad() {
32654 var len = this.pendingTotal;
32655 var bytes = this._delta8;
32656 var k = bytes - ((len + this.padLength) % bytes);
32657 var res = new Array(k + this.padLength);
32658 res[0] = 0x80;
32659 for (var i = 1; i < k; i++)
32660 res[i] = 0;
32661
32662 // Append length
32663 len <<= 3;
32664 if (this.endian === 'big') {
32665 for (var t = 8; t < this.padLength; t++)
32666 res[i++] = 0;
32667
32668 res[i++] = 0;
32669 res[i++] = 0;
32670 res[i++] = 0;
32671 res[i++] = 0;
32672 res[i++] = (len >>> 24) & 0xff;
32673 res[i++] = (len >>> 16) & 0xff;
32674 res[i++] = (len >>> 8) & 0xff;
32675 res[i++] = len & 0xff;
32676 } else {
32677 res[i++] = len & 0xff;
32678 res[i++] = (len >>> 8) & 0xff;
32679 res[i++] = (len >>> 16) & 0xff;
32680 res[i++] = (len >>> 24) & 0xff;
32681 res[i++] = 0;
32682 res[i++] = 0;
32683 res[i++] = 0;
32684 res[i++] = 0;
32685
32686 for (var t = 8; t < this.padLength; t++)
32687 res[i++] = 0;
32688 }
32689
32690 return res;
32691 };
32692
32693 },{"../hash":57}],59:[function(require,module,exports){
32694 var hmac = exports;
32695
32696 var hash = require('../hash');
32697 var utils = hash.utils;
32698 var assert = utils.assert;
32699
32700 function Hmac(hash, key, enc) {
32701 if (!(this instanceof Hmac))
32702 return new Hmac(hash, key, enc);
32703 this.Hash = hash;
32704 this.blockSize = hash.blockSize / 8;
32705 this.outSize = hash.outSize / 8;
32706 this.inner = null;
32707 this.outer = null;
32708
32709 this._init(utils.toArray(key, enc));
32710 }
32711 module.exports = Hmac;
32712
32713 Hmac.prototype._init = function init(key) {
32714 // Shorten key, if needed
32715 if (key.length > this.blockSize)
32716 key = new this.Hash().update(key).digest();
32717 assert(key.length <= this.blockSize);
32718
32719 // Add padding to key
32720 for (var i = key.length; i < this.blockSize; i++)
32721 key.push(0);
32722
32723 for (var i = 0; i < key.length; i++)
32724 key[i] ^= 0x36;
32725 this.inner = new this.Hash().update(key);
32726
32727 // 0x36 ^ 0x5c = 0x6a
32728 for (var i = 0; i < key.length; i++)
32729 key[i] ^= 0x6a;
32730 this.outer = new this.Hash().update(key);
32731 };
32732
32733 Hmac.prototype.update = function update(msg, enc) {
32734 this.inner.update(msg, enc);
32735 return this;
32736 };
32737
32738 Hmac.prototype.digest = function digest(enc) {
32739 this.outer.update(this.inner.digest());
32740 return this.outer.digest(enc);
32741 };
32742
32743 },{"../hash":57}],60:[function(require,module,exports){
32744 var hash = require('../hash');
32745 var utils = hash.utils;
32746
32747 var rotl32 = utils.rotl32;
32748 var sum32 = utils.sum32;
32749 var sum32_3 = utils.sum32_3;
32750 var sum32_4 = utils.sum32_4;
32751 var BlockHash = hash.common.BlockHash;
32752
32753 function RIPEMD160() {
32754 if (!(this instanceof RIPEMD160))
32755 return new RIPEMD160();
32756
32757 BlockHash.call(this);
32758
32759 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
32760 this.endian = 'little';
32761 }
32762 utils.inherits(RIPEMD160, BlockHash);
32763 exports.ripemd160 = RIPEMD160;
32764
32765 RIPEMD160.blockSize = 512;
32766 RIPEMD160.outSize = 160;
32767 RIPEMD160.hmacStrength = 192;
32768 RIPEMD160.padLength = 64;
32769
32770 RIPEMD160.prototype._update = function update(msg, start) {
32771 var A = this.h[0];
32772 var B = this.h[1];
32773 var C = this.h[2];
32774 var D = this.h[3];
32775 var E = this.h[4];
32776 var Ah = A;
32777 var Bh = B;
32778 var Ch = C;
32779 var Dh = D;
32780 var Eh = E;
32781 for (var j = 0; j < 80; j++) {
32782 var T = sum32(
32783 rotl32(
32784 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
32785 s[j]),
32786 E);
32787 A = E;
32788 E = D;
32789 D = rotl32(C, 10);
32790 C = B;
32791 B = T;
32792 T = sum32(
32793 rotl32(
32794 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
32795 sh[j]),
32796 Eh);
32797 Ah = Eh;
32798 Eh = Dh;
32799 Dh = rotl32(Ch, 10);
32800 Ch = Bh;
32801 Bh = T;
32802 }
32803 T = sum32_3(this.h[1], C, Dh);
32804 this.h[1] = sum32_3(this.h[2], D, Eh);
32805 this.h[2] = sum32_3(this.h[3], E, Ah);
32806 this.h[3] = sum32_3(this.h[4], A, Bh);
32807 this.h[4] = sum32_3(this.h[0], B, Ch);
32808 this.h[0] = T;
32809 };
32810
32811 RIPEMD160.prototype._digest = function digest(enc) {
32812 if (enc === 'hex')
32813 return utils.toHex32(this.h, 'little');
32814 else
32815 return utils.split32(this.h, 'little');
32816 };
32817
32818 function f(j, x, y, z) {
32819 if (j <= 15)
32820 return x ^ y ^ z;
32821 else if (j <= 31)
32822 return (x & y) | ((~x) & z);
32823 else if (j <= 47)
32824 return (x | (~y)) ^ z;
32825 else if (j <= 63)
32826 return (x & z) | (y & (~z));
32827 else
32828 return x ^ (y | (~z));
32829 }
32830
32831 function K(j) {
32832 if (j <= 15)
32833 return 0x00000000;
32834 else if (j <= 31)
32835 return 0x5a827999;
32836 else if (j <= 47)
32837 return 0x6ed9eba1;
32838 else if (j <= 63)
32839 return 0x8f1bbcdc;
32840 else
32841 return 0xa953fd4e;
32842 }
32843
32844 function Kh(j) {
32845 if (j <= 15)
32846 return 0x50a28be6;
32847 else if (j <= 31)
32848 return 0x5c4dd124;
32849 else if (j <= 47)
32850 return 0x6d703ef3;
32851 else if (j <= 63)
32852 return 0x7a6d76e9;
32853 else
32854 return 0x00000000;
32855 }
32856
32857 var r = [
32858 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
32859 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
32860 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
32861 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
32862 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
32863 ];
32864
32865 var rh = [
32866 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
32867 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
32868 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
32869 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
32870 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
32871 ];
32872
32873 var s = [
32874 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
32875 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
32876 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
32877 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
32878 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
32879 ];
32880
32881 var sh = [
32882 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
32883 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
32884 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
32885 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
32886 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
32887 ];
32888
32889 },{"../hash":57}],61:[function(require,module,exports){
32890 var hash = require('../hash');
32891 var utils = hash.utils;
32892 var assert = utils.assert;
32893
32894 var rotr32 = utils.rotr32;
32895 var rotl32 = utils.rotl32;
32896 var sum32 = utils.sum32;
32897 var sum32_4 = utils.sum32_4;
32898 var sum32_5 = utils.sum32_5;
32899 var rotr64_hi = utils.rotr64_hi;
32900 var rotr64_lo = utils.rotr64_lo;
32901 var shr64_hi = utils.shr64_hi;
32902 var shr64_lo = utils.shr64_lo;
32903 var sum64 = utils.sum64;
32904 var sum64_hi = utils.sum64_hi;
32905 var sum64_lo = utils.sum64_lo;
32906 var sum64_4_hi = utils.sum64_4_hi;
32907 var sum64_4_lo = utils.sum64_4_lo;
32908 var sum64_5_hi = utils.sum64_5_hi;
32909 var sum64_5_lo = utils.sum64_5_lo;
32910 var BlockHash = hash.common.BlockHash;
32911
32912 var sha256_K = [
32913 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
32914 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
32915 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
32916 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
32917 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
32918 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
32919 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
32920 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
32921 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
32922 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
32923 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
32924 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
32925 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
32926 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
32927 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
32928 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
32929 ];
32930
32931 var sha512_K = [
32932 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
32933 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
32934 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
32935 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
32936 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
32937 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
32938 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
32939 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
32940 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
32941 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
32942 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
32943 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
32944 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
32945 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
32946 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
32947 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
32948 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
32949 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
32950 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
32951 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
32952 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
32953 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
32954 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
32955 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
32956 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
32957 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
32958 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
32959 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
32960 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
32961 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
32962 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
32963 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
32964 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
32965 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
32966 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
32967 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
32968 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
32969 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
32970 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
32971 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
32972 ];
32973
32974 var sha1_K = [
32975 0x5A827999, 0x6ED9EBA1,
32976 0x8F1BBCDC, 0xCA62C1D6
32977 ];
32978
32979 function SHA256() {
32980 if (!(this instanceof SHA256))
32981 return new SHA256();
32982
32983 BlockHash.call(this);
32984 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
32985 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
32986 this.k = sha256_K;
32987 this.W = new Array(64);
32988 }
32989 utils.inherits(SHA256, BlockHash);
32990 exports.sha256 = SHA256;
32991
32992 SHA256.blockSize = 512;
32993 SHA256.outSize = 256;
32994 SHA256.hmacStrength = 192;
32995 SHA256.padLength = 64;
32996
32997 SHA256.prototype._update = function _update(msg, start) {
32998 var W = this.W;
32999
33000 for (var i = 0; i < 16; i++)
33001 W[i] = msg[start + i];
33002 for (; i < W.length; i++)
33003 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
33004
33005 var a = this.h[0];
33006 var b = this.h[1];
33007 var c = this.h[2];
33008 var d = this.h[3];
33009 var e = this.h[4];
33010 var f = this.h[5];
33011 var g = this.h[6];
33012 var h = this.h[7];
33013
33014 assert(this.k.length === W.length);
33015 for (var i = 0; i < W.length; i++) {
33016 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
33017 var T2 = sum32(s0_256(a), maj32(a, b, c));
33018 h = g;
33019 g = f;
33020 f = e;
33021 e = sum32(d, T1);
33022 d = c;
33023 c = b;
33024 b = a;
33025 a = sum32(T1, T2);
33026 }
33027
33028 this.h[0] = sum32(this.h[0], a);
33029 this.h[1] = sum32(this.h[1], b);
33030 this.h[2] = sum32(this.h[2], c);
33031 this.h[3] = sum32(this.h[3], d);
33032 this.h[4] = sum32(this.h[4], e);
33033 this.h[5] = sum32(this.h[5], f);
33034 this.h[6] = sum32(this.h[6], g);
33035 this.h[7] = sum32(this.h[7], h);
33036 };
33037
33038 SHA256.prototype._digest = function digest(enc) {
33039 if (enc === 'hex')
33040 return utils.toHex32(this.h, 'big');
33041 else
33042 return utils.split32(this.h, 'big');
33043 };
33044
33045 function SHA224() {
33046 if (!(this instanceof SHA224))
33047 return new SHA224();
33048
33049 SHA256.call(this);
33050 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
33051 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
33052 }
33053 utils.inherits(SHA224, SHA256);
33054 exports.sha224 = SHA224;
33055
33056 SHA224.blockSize = 512;
33057 SHA224.outSize = 224;
33058 SHA224.hmacStrength = 192;
33059 SHA224.padLength = 64;
33060
33061 SHA224.prototype._digest = function digest(enc) {
33062 // Just truncate output
33063 if (enc === 'hex')
33064 return utils.toHex32(this.h.slice(0, 7), 'big');
33065 else
33066 return utils.split32(this.h.slice(0, 7), 'big');
33067 };
33068
33069 function SHA512() {
33070 if (!(this instanceof SHA512))
33071 return new SHA512();
33072
33073 BlockHash.call(this);
33074 this.h = [ 0x6a09e667, 0xf3bcc908,
33075 0xbb67ae85, 0x84caa73b,
33076 0x3c6ef372, 0xfe94f82b,
33077 0xa54ff53a, 0x5f1d36f1,
33078 0x510e527f, 0xade682d1,
33079 0x9b05688c, 0x2b3e6c1f,
33080 0x1f83d9ab, 0xfb41bd6b,
33081 0x5be0cd19, 0x137e2179 ];
33082 this.k = sha512_K;
33083 this.W = new Array(160);
33084 }
33085 utils.inherits(SHA512, BlockHash);
33086 exports.sha512 = SHA512;
33087
33088 SHA512.blockSize = 1024;
33089 SHA512.outSize = 512;
33090 SHA512.hmacStrength = 192;
33091 SHA512.padLength = 128;
33092
33093 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
33094 var W = this.W;
33095
33096 // 32 x 32bit words
33097 for (var i = 0; i < 32; i++)
33098 W[i] = msg[start + i];
33099 for (; i < W.length; i += 2) {
33100 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
33101 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
33102 var c1_hi = W[i - 14]; // i - 7
33103 var c1_lo = W[i - 13];
33104 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
33105 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
33106 var c3_hi = W[i - 32]; // i - 16
33107 var c3_lo = W[i - 31];
33108
33109 W[i] = sum64_4_hi(c0_hi, c0_lo,
33110 c1_hi, c1_lo,
33111 c2_hi, c2_lo,
33112 c3_hi, c3_lo);
33113 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
33114 c1_hi, c1_lo,
33115 c2_hi, c2_lo,
33116 c3_hi, c3_lo);
33117 }
33118 };
33119
33120 SHA512.prototype._update = function _update(msg, start) {
33121 this._prepareBlock(msg, start);
33122
33123 var W = this.W;
33124
33125 var ah = this.h[0];
33126 var al = this.h[1];
33127 var bh = this.h[2];
33128 var bl = this.h[3];
33129 var ch = this.h[4];
33130 var cl = this.h[5];
33131 var dh = this.h[6];
33132 var dl = this.h[7];
33133 var eh = this.h[8];
33134 var el = this.h[9];
33135 var fh = this.h[10];
33136 var fl = this.h[11];
33137 var gh = this.h[12];
33138 var gl = this.h[13];
33139 var hh = this.h[14];
33140 var hl = this.h[15];
33141
33142 assert(this.k.length === W.length);
33143 for (var i = 0; i < W.length; i += 2) {
33144 var c0_hi = hh;
33145 var c0_lo = hl;
33146 var c1_hi = s1_512_hi(eh, el);
33147 var c1_lo = s1_512_lo(eh, el);
33148 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
33149 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
33150 var c3_hi = this.k[i];
33151 var c3_lo = this.k[i + 1];
33152 var c4_hi = W[i];
33153 var c4_lo = W[i + 1];
33154
33155 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
33156 c1_hi, c1_lo,
33157 c2_hi, c2_lo,
33158 c3_hi, c3_lo,
33159 c4_hi, c4_lo);
33160 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
33161 c1_hi, c1_lo,
33162 c2_hi, c2_lo,
33163 c3_hi, c3_lo,
33164 c4_hi, c4_lo);
33165
33166 var c0_hi = s0_512_hi(ah, al);
33167 var c0_lo = s0_512_lo(ah, al);
33168 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
33169 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
33170
33171 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
33172 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
33173
33174 hh = gh;
33175 hl = gl;
33176
33177 gh = fh;
33178 gl = fl;
33179
33180 fh = eh;
33181 fl = el;
33182
33183 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
33184 el = sum64_lo(dl, dl, T1_hi, T1_lo);
33185
33186 dh = ch;
33187 dl = cl;
33188
33189 ch = bh;
33190 cl = bl;
33191
33192 bh = ah;
33193 bl = al;
33194
33195 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
33196 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
33197 }
33198
33199 sum64(this.h, 0, ah, al);
33200 sum64(this.h, 2, bh, bl);
33201 sum64(this.h, 4, ch, cl);
33202 sum64(this.h, 6, dh, dl);
33203 sum64(this.h, 8, eh, el);
33204 sum64(this.h, 10, fh, fl);
33205 sum64(this.h, 12, gh, gl);
33206 sum64(this.h, 14, hh, hl);
33207 };
33208
33209 SHA512.prototype._digest = function digest(enc) {
33210 if (enc === 'hex')
33211 return utils.toHex32(this.h, 'big');
33212 else
33213 return utils.split32(this.h, 'big');
33214 };
33215
33216 function SHA384() {
33217 if (!(this instanceof SHA384))
33218 return new SHA384();
33219
33220 SHA512.call(this);
33221 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
33222 0x629a292a, 0x367cd507,
33223 0x9159015a, 0x3070dd17,
33224 0x152fecd8, 0xf70e5939,
33225 0x67332667, 0xffc00b31,
33226 0x8eb44a87, 0x68581511,
33227 0xdb0c2e0d, 0x64f98fa7,
33228 0x47b5481d, 0xbefa4fa4 ];
33229 }
33230 utils.inherits(SHA384, SHA512);
33231 exports.sha384 = SHA384;
33232
33233 SHA384.blockSize = 1024;
33234 SHA384.outSize = 384;
33235 SHA384.hmacStrength = 192;
33236 SHA384.padLength = 128;
33237
33238 SHA384.prototype._digest = function digest(enc) {
33239 if (enc === 'hex')
33240 return utils.toHex32(this.h.slice(0, 12), 'big');
33241 else
33242 return utils.split32(this.h.slice(0, 12), 'big');
33243 };
33244
33245 function SHA1() {
33246 if (!(this instanceof SHA1))
33247 return new SHA1();
33248
33249 BlockHash.call(this);
33250 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
33251 0x10325476, 0xc3d2e1f0 ];
33252 this.W = new Array(80);
33253 }
33254
33255 utils.inherits(SHA1, BlockHash);
33256 exports.sha1 = SHA1;
33257
33258 SHA1.blockSize = 512;
33259 SHA1.outSize = 160;
33260 SHA1.hmacStrength = 80;
33261 SHA1.padLength = 64;
33262
33263 SHA1.prototype._update = function _update(msg, start) {
33264 var W = this.W;
33265
33266 for (var i = 0; i < 16; i++)
33267 W[i] = msg[start + i];
33268
33269 for(; i < W.length; i++)
33270 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
33271
33272 var a = this.h[0];
33273 var b = this.h[1];
33274 var c = this.h[2];
33275 var d = this.h[3];
33276 var e = this.h[4];
33277
33278 for (var i = 0; i < W.length; i++) {
33279 var s = ~~(i / 20);
33280 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
33281 e = d;
33282 d = c;
33283 c = rotl32(b, 30);
33284 b = a;
33285 a = t;
33286 }
33287
33288 this.h[0] = sum32(this.h[0], a);
33289 this.h[1] = sum32(this.h[1], b);
33290 this.h[2] = sum32(this.h[2], c);
33291 this.h[3] = sum32(this.h[3], d);
33292 this.h[4] = sum32(this.h[4], e);
33293 };
33294
33295 SHA1.prototype._digest = function digest(enc) {
33296 if (enc === 'hex')
33297 return utils.toHex32(this.h, 'big');
33298 else
33299 return utils.split32(this.h, 'big');
33300 };
33301
33302 function ch32(x, y, z) {
33303 return (x & y) ^ ((~x) & z);
33304 }
33305
33306 function maj32(x, y, z) {
33307 return (x & y) ^ (x & z) ^ (y & z);
33308 }
33309
33310 function p32(x, y, z) {
33311 return x ^ y ^ z;
33312 }
33313
33314 function s0_256(x) {
33315 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
33316 }
33317
33318 function s1_256(x) {
33319 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
33320 }
33321
33322 function g0_256(x) {
33323 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
33324 }
33325
33326 function g1_256(x) {
33327 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
33328 }
33329
33330 function ft_1(s, x, y, z) {
33331 if (s === 0)
33332 return ch32(x, y, z);
33333 if (s === 1 || s === 3)
33334 return p32(x, y, z);
33335 if (s === 2)
33336 return maj32(x, y, z);
33337 }
33338
33339 function ch64_hi(xh, xl, yh, yl, zh, zl) {
33340 var r = (xh & yh) ^ ((~xh) & zh);
33341 if (r < 0)
33342 r += 0x100000000;
33343 return r;
33344 }
33345
33346 function ch64_lo(xh, xl, yh, yl, zh, zl) {
33347 var r = (xl & yl) ^ ((~xl) & zl);
33348 if (r < 0)
33349 r += 0x100000000;
33350 return r;
33351 }
33352
33353 function maj64_hi(xh, xl, yh, yl, zh, zl) {
33354 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
33355 if (r < 0)
33356 r += 0x100000000;
33357 return r;
33358 }
33359
33360 function maj64_lo(xh, xl, yh, yl, zh, zl) {
33361 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
33362 if (r < 0)
33363 r += 0x100000000;
33364 return r;
33365 }
33366
33367 function s0_512_hi(xh, xl) {
33368 var c0_hi = rotr64_hi(xh, xl, 28);
33369 var c1_hi = rotr64_hi(xl, xh, 2); // 34
33370 var c2_hi = rotr64_hi(xl, xh, 7); // 39
33371
33372 var r = c0_hi ^ c1_hi ^ c2_hi;
33373 if (r < 0)
33374 r += 0x100000000;
33375 return r;
33376 }
33377
33378 function s0_512_lo(xh, xl) {
33379 var c0_lo = rotr64_lo(xh, xl, 28);
33380 var c1_lo = rotr64_lo(xl, xh, 2); // 34
33381 var c2_lo = rotr64_lo(xl, xh, 7); // 39
33382
33383 var r = c0_lo ^ c1_lo ^ c2_lo;
33384 if (r < 0)
33385 r += 0x100000000;
33386 return r;
33387 }
33388
33389 function s1_512_hi(xh, xl) {
33390 var c0_hi = rotr64_hi(xh, xl, 14);
33391 var c1_hi = rotr64_hi(xh, xl, 18);
33392 var c2_hi = rotr64_hi(xl, xh, 9); // 41
33393
33394 var r = c0_hi ^ c1_hi ^ c2_hi;
33395 if (r < 0)
33396 r += 0x100000000;
33397 return r;
33398 }
33399
33400 function s1_512_lo(xh, xl) {
33401 var c0_lo = rotr64_lo(xh, xl, 14);
33402 var c1_lo = rotr64_lo(xh, xl, 18);
33403 var c2_lo = rotr64_lo(xl, xh, 9); // 41
33404
33405 var r = c0_lo ^ c1_lo ^ c2_lo;
33406 if (r < 0)
33407 r += 0x100000000;
33408 return r;
33409 }
33410
33411 function g0_512_hi(xh, xl) {
33412 var c0_hi = rotr64_hi(xh, xl, 1);
33413 var c1_hi = rotr64_hi(xh, xl, 8);
33414 var c2_hi = shr64_hi(xh, xl, 7);
33415
33416 var r = c0_hi ^ c1_hi ^ c2_hi;
33417 if (r < 0)
33418 r += 0x100000000;
33419 return r;
33420 }
33421
33422 function g0_512_lo(xh, xl) {
33423 var c0_lo = rotr64_lo(xh, xl, 1);
33424 var c1_lo = rotr64_lo(xh, xl, 8);
33425 var c2_lo = shr64_lo(xh, xl, 7);
33426
33427 var r = c0_lo ^ c1_lo ^ c2_lo;
33428 if (r < 0)
33429 r += 0x100000000;
33430 return r;
33431 }
33432
33433 function g1_512_hi(xh, xl) {
33434 var c0_hi = rotr64_hi(xh, xl, 19);
33435 var c1_hi = rotr64_hi(xl, xh, 29); // 61
33436 var c2_hi = shr64_hi(xh, xl, 6);
33437
33438 var r = c0_hi ^ c1_hi ^ c2_hi;
33439 if (r < 0)
33440 r += 0x100000000;
33441 return r;
33442 }
33443
33444 function g1_512_lo(xh, xl) {
33445 var c0_lo = rotr64_lo(xh, xl, 19);
33446 var c1_lo = rotr64_lo(xl, xh, 29); // 61
33447 var c2_lo = shr64_lo(xh, xl, 6);
33448
33449 var r = c0_lo ^ c1_lo ^ c2_lo;
33450 if (r < 0)
33451 r += 0x100000000;
33452 return r;
33453 }
33454
33455 },{"../hash":57}],62:[function(require,module,exports){
33456 var utils = exports;
33457 var inherits = require('inherits');
33458
33459 function toArray(msg, enc) {
33460 if (Array.isArray(msg))
33461 return msg.slice();
33462 if (!msg)
33463 return [];
33464 var res = [];
33465 if (typeof msg === 'string') {
33466 if (!enc) {
33467 for (var i = 0; i < msg.length; i++) {
33468 var c = msg.charCodeAt(i);
33469 var hi = c >> 8;
33470 var lo = c & 0xff;
33471 if (hi)
33472 res.push(hi, lo);
33473 else
33474 res.push(lo);
33475 }
33476 } else if (enc === 'hex') {
33477 msg = msg.replace(/[^a-z0-9]+/ig, '');
33478 if (msg.length % 2 !== 0)
33479 msg = '0' + msg;
33480 for (var i = 0; i < msg.length; i += 2)
33481 res.push(parseInt(msg[i] + msg[i + 1], 16));
33482 }
33483 } else {
33484 for (var i = 0; i < msg.length; i++)
33485 res[i] = msg[i] | 0;
33486 }
33487 return res;
33488 }
33489 utils.toArray = toArray;
33490
33491 function toHex(msg) {
33492 var res = '';
33493 for (var i = 0; i < msg.length; i++)
33494 res += zero2(msg[i].toString(16));
33495 return res;
33496 }
33497 utils.toHex = toHex;
33498
33499 function htonl(w) {
33500 var res = (w >>> 24) |
33501 ((w >>> 8) & 0xff00) |
33502 ((w << 8) & 0xff0000) |
33503 ((w & 0xff) << 24);
33504 return res >>> 0;
33505 }
33506 utils.htonl = htonl;
33507
33508 function toHex32(msg, endian) {
33509 var res = '';
33510 for (var i = 0; i < msg.length; i++) {
33511 var w = msg[i];
33512 if (endian === 'little')
33513 w = htonl(w);
33514 res += zero8(w.toString(16));
33515 }
33516 return res;
33517 }
33518 utils.toHex32 = toHex32;
33519
33520 function zero2(word) {
33521 if (word.length === 1)
33522 return '0' + word;
33523 else
33524 return word;
33525 }
33526 utils.zero2 = zero2;
33527
33528 function zero8(word) {
33529 if (word.length === 7)
33530 return '0' + word;
33531 else if (word.length === 6)
33532 return '00' + word;
33533 else if (word.length === 5)
33534 return '000' + word;
33535 else if (word.length === 4)
33536 return '0000' + word;
33537 else if (word.length === 3)
33538 return '00000' + word;
33539 else if (word.length === 2)
33540 return '000000' + word;
33541 else if (word.length === 1)
33542 return '0000000' + word;
33543 else
33544 return word;
33545 }
33546 utils.zero8 = zero8;
33547
33548 function join32(msg, start, end, endian) {
33549 var len = end - start;
33550 assert(len % 4 === 0);
33551 var res = new Array(len / 4);
33552 for (var i = 0, k = start; i < res.length; i++, k += 4) {
33553 var w;
33554 if (endian === 'big')
33555 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
33556 else
33557 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
33558 res[i] = w >>> 0;
33559 }
33560 return res;
33561 }
33562 utils.join32 = join32;
33563
33564 function split32(msg, endian) {
33565 var res = new Array(msg.length * 4);
33566 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
33567 var m = msg[i];
33568 if (endian === 'big') {
33569 res[k] = m >>> 24;
33570 res[k + 1] = (m >>> 16) & 0xff;
33571 res[k + 2] = (m >>> 8) & 0xff;
33572 res[k + 3] = m & 0xff;
33573 } else {
33574 res[k + 3] = m >>> 24;
33575 res[k + 2] = (m >>> 16) & 0xff;
33576 res[k + 1] = (m >>> 8) & 0xff;
33577 res[k] = m & 0xff;
33578 }
33579 }
33580 return res;
33581 }
33582 utils.split32 = split32;
33583
33584 function rotr32(w, b) {
33585 return (w >>> b) | (w << (32 - b));
33586 }
33587 utils.rotr32 = rotr32;
33588
33589 function rotl32(w, b) {
33590 return (w << b) | (w >>> (32 - b));
33591 }
33592 utils.rotl32 = rotl32;
33593
33594 function sum32(a, b) {
33595 return (a + b) >>> 0;
33596 }
33597 utils.sum32 = sum32;
33598
33599 function sum32_3(a, b, c) {
33600 return (a + b + c) >>> 0;
33601 }
33602 utils.sum32_3 = sum32_3;
33603
33604 function sum32_4(a, b, c, d) {
33605 return (a + b + c + d) >>> 0;
33606 }
33607 utils.sum32_4 = sum32_4;
33608
33609 function sum32_5(a, b, c, d, e) {
33610 return (a + b + c + d + e) >>> 0;
33611 }
33612 utils.sum32_5 = sum32_5;
33613
33614 function assert(cond, msg) {
33615 if (!cond)
33616 throw new Error(msg || 'Assertion failed');
33617 }
33618 utils.assert = assert;
33619
33620 utils.inherits = inherits;
33621
33622 function sum64(buf, pos, ah, al) {
33623 var bh = buf[pos];
33624 var bl = buf[pos + 1];
33625
33626 var lo = (al + bl) >>> 0;
33627 var hi = (lo < al ? 1 : 0) + ah + bh;
33628 buf[pos] = hi >>> 0;
33629 buf[pos + 1] = lo;
33630 }
33631 exports.sum64 = sum64;
33632
33633 function sum64_hi(ah, al, bh, bl) {
33634 var lo = (al + bl) >>> 0;
33635 var hi = (lo < al ? 1 : 0) + ah + bh;
33636 return hi >>> 0;
33637 };
33638 exports.sum64_hi = sum64_hi;
33639
33640 function sum64_lo(ah, al, bh, bl) {
33641 var lo = al + bl;
33642 return lo >>> 0;
33643 };
33644 exports.sum64_lo = sum64_lo;
33645
33646 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
33647 var carry = 0;
33648 var lo = al;
33649 lo = (lo + bl) >>> 0;
33650 carry += lo < al ? 1 : 0;
33651 lo = (lo + cl) >>> 0;
33652 carry += lo < cl ? 1 : 0;
33653 lo = (lo + dl) >>> 0;
33654 carry += lo < dl ? 1 : 0;
33655
33656 var hi = ah + bh + ch + dh + carry;
33657 return hi >>> 0;
33658 };
33659 exports.sum64_4_hi = sum64_4_hi;
33660
33661 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
33662 var lo = al + bl + cl + dl;
33663 return lo >>> 0;
33664 };
33665 exports.sum64_4_lo = sum64_4_lo;
33666
33667 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
33668 var carry = 0;
33669 var lo = al;
33670 lo = (lo + bl) >>> 0;
33671 carry += lo < al ? 1 : 0;
33672 lo = (lo + cl) >>> 0;
33673 carry += lo < cl ? 1 : 0;
33674 lo = (lo + dl) >>> 0;
33675 carry += lo < dl ? 1 : 0;
33676 lo = (lo + el) >>> 0;
33677 carry += lo < el ? 1 : 0;
33678
33679 var hi = ah + bh + ch + dh + eh + carry;
33680 return hi >>> 0;
33681 };
33682 exports.sum64_5_hi = sum64_5_hi;
33683
33684 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
33685 var lo = al + bl + cl + dl + el;
33686
33687 return lo >>> 0;
33688 };
33689 exports.sum64_5_lo = sum64_5_lo;
33690
33691 function rotr64_hi(ah, al, num) {
33692 var r = (al << (32 - num)) | (ah >>> num);
33693 return r >>> 0;
33694 };
33695 exports.rotr64_hi = rotr64_hi;
33696
33697 function rotr64_lo(ah, al, num) {
33698 var r = (ah << (32 - num)) | (al >>> num);
33699 return r >>> 0;
33700 };
33701 exports.rotr64_lo = rotr64_lo;
33702
33703 function shr64_hi(ah, al, num) {
33704 return ah >>> num;
33705 };
33706 exports.shr64_hi = shr64_hi;
33707
33708 function shr64_lo(ah, al, num) {
33709 var r = (ah << (32 - num)) | (al >>> num);
33710 return r >>> 0;
33711 };
33712 exports.shr64_lo = shr64_lo;
33713
33714 },{"inherits":63}],63:[function(require,module,exports){
33715 arguments[4][9][0].apply(exports,arguments)
33716 },{"dup":9}],64:[function(require,module,exports){
33717 /**
33718 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
33719 * @param {String} str the string input value
33720 * @return {Boolean} a boolean if it is or is not hex prefixed
33721 * @throws if the str input is not a string
33722 */
33723 module.exports = function isHexPrefixed(str) {
33724 if (typeof str !== 'string') {
33725 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
33726 }
33727
33728 return str.slice(0, 2) === '0x';
33729 }
33730
33731 },{}],65:[function(require,module,exports){
33732 'use strict'
33733 module.exports = require('./lib/api')(require('./lib/keccak'))
33734
33735 },{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
33736 'use strict'
33737 var createKeccak = require('./keccak')
33738 var createShake = require('./shake')
33739
33740 module.exports = function (KeccakState) {
33741 var Keccak = createKeccak(KeccakState)
33742 var Shake = createShake(KeccakState)
33743
33744 return function (algorithm, options) {
33745 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
33746 switch (hash) {
33747 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
33748 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
33749 case 'keccak384': return new Keccak(832, 768, null, 384, options)
33750 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
33751
33752 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
33753 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
33754 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
33755 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
33756
33757 case 'shake128': return new Shake(1344, 256, 0x1f, options)
33758 case 'shake256': return new Shake(1088, 512, 0x1f, options)
33759
33760 default: throw new Error('Invald algorithm: ' + algorithm)
33761 }
33762 }
33763 }
33764
33765 },{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
33766 (function (Buffer){
33767 'use strict'
33768 var Transform = require('stream').Transform
33769 var inherits = require('inherits')
33770
33771 module.exports = function (KeccakState) {
33772 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
33773 Transform.call(this, options)
33774
33775 this._rate = rate
33776 this._capacity = capacity
33777 this._delimitedSuffix = delimitedSuffix
33778 this._hashBitLength = hashBitLength
33779 this._options = options
33780
33781 this._state = new KeccakState()
33782 this._state.initialize(rate, capacity)
33783 this._finalized = false
33784 }
33785
33786 inherits(Keccak, Transform)
33787
33788 Keccak.prototype._transform = function (chunk, encoding, callback) {
33789 var error = null
33790 try {
33791 this.update(chunk, encoding)
33792 } catch (err) {
33793 error = err
33794 }
33795
33796 callback(error)
33797 }
33798
33799 Keccak.prototype._flush = function (callback) {
33800 var error = null
33801 try {
33802 this.push(this.digest())
33803 } catch (err) {
33804 error = err
33805 }
33806
33807 callback(error)
33808 }
33809
33810 Keccak.prototype.update = function (data, encoding) {
33811 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
33812 if (this._finalized) throw new Error('Digest already called')
33813 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
33814
33815 this._state.absorb(data)
33816
33817 return this
33818 }
33819
33820 Keccak.prototype.digest = function (encoding) {
33821 if (this._finalized) throw new Error('Digest already called')
33822 this._finalized = true
33823
33824 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
33825 var digest = this._state.squeeze(this._hashBitLength / 8)
33826 if (encoding !== undefined) digest = digest.toString(encoding)
33827
33828 this._resetState()
33829
33830 return digest
33831 }
33832
33833 // remove result from memory
33834 Keccak.prototype._resetState = function () {
33835 this._state.initialize(this._rate, this._capacity)
33836 return this
33837 }
33838
33839 // because sometimes we need hash right now and little later
33840 Keccak.prototype._clone = function () {
33841 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
33842 this._state.copy(clone._state)
33843 clone._finalized = this._finalized
33844
33845 return clone
33846 }
33847
33848 return Keccak
33849 }
33850
33851 }).call(this,require("buffer").Buffer)
33852 },{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
33853 (function (Buffer){
33854 'use strict'
33855 var Transform = require('stream').Transform
33856 var inherits = require('inherits')
33857
33858 module.exports = function (KeccakState) {
33859 function Shake (rate, capacity, delimitedSuffix, options) {
33860 Transform.call(this, options)
33861
33862 this._rate = rate
33863 this._capacity = capacity
33864 this._delimitedSuffix = delimitedSuffix
33865 this._options = options
33866
33867 this._state = new KeccakState()
33868 this._state.initialize(rate, capacity)
33869 this._finalized = false
33870 }
33871
33872 inherits(Shake, Transform)
33873
33874 Shake.prototype._transform = function (chunk, encoding, callback) {
33875 var error = null
33876 try {
33877 this.update(chunk, encoding)
33878 } catch (err) {
33879 error = err
33880 }
33881
33882 callback(error)
33883 }
33884
33885 Shake.prototype._flush = function () {}
33886
33887 Shake.prototype._read = function (size) {
33888 this.push(this.squeeze(size))
33889 }
33890
33891 Shake.prototype.update = function (data, encoding) {
33892 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
33893 if (this._finalized) throw new Error('Squeeze already called')
33894 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
33895
33896 this._state.absorb(data)
33897
33898 return this
33899 }
33900
33901 Shake.prototype.squeeze = function (dataByteLength, encoding) {
33902 if (!this._finalized) {
33903 this._finalized = true
33904 this._state.absorbLastFewBits(this._delimitedSuffix)
33905 }
33906
33907 var data = this._state.squeeze(dataByteLength)
33908 if (encoding !== undefined) data = data.toString(encoding)
33909
33910 return data
33911 }
33912
33913 Shake.prototype._resetState = function () {
33914 this._state.initialize(this._rate, this._capacity)
33915 return this
33916 }
33917
33918 Shake.prototype._clone = function () {
33919 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
33920 this._state.copy(clone._state)
33921 clone._finalized = this._finalized
33922
33923 return clone
33924 }
33925
33926 return Shake
33927 }
33928
33929 }).call(this,require("buffer").Buffer)
33930 },{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
33931 'use strict'
33932 var 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]
33933
33934 exports.p1600 = function (s) {
33935 for (var round = 0; round < 24; ++round) {
33936 // theta
33937 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
33938 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
33939 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
33940 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
33941 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
33942 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
33943 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
33944 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
33945 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
33946 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
33947
33948 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
33949 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
33950 var t1slo0 = s[0] ^ lo
33951 var t1shi0 = s[1] ^ hi
33952 var t1slo5 = s[10] ^ lo
33953 var t1shi5 = s[11] ^ hi
33954 var t1slo10 = s[20] ^ lo
33955 var t1shi10 = s[21] ^ hi
33956 var t1slo15 = s[30] ^ lo
33957 var t1shi15 = s[31] ^ hi
33958 var t1slo20 = s[40] ^ lo
33959 var t1shi20 = s[41] ^ hi
33960 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
33961 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
33962 var t1slo1 = s[2] ^ lo
33963 var t1shi1 = s[3] ^ hi
33964 var t1slo6 = s[12] ^ lo
33965 var t1shi6 = s[13] ^ hi
33966 var t1slo11 = s[22] ^ lo
33967 var t1shi11 = s[23] ^ hi
33968 var t1slo16 = s[32] ^ lo
33969 var t1shi16 = s[33] ^ hi
33970 var t1slo21 = s[42] ^ lo
33971 var t1shi21 = s[43] ^ hi
33972 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
33973 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
33974 var t1slo2 = s[4] ^ lo
33975 var t1shi2 = s[5] ^ hi
33976 var t1slo7 = s[14] ^ lo
33977 var t1shi7 = s[15] ^ hi
33978 var t1slo12 = s[24] ^ lo
33979 var t1shi12 = s[25] ^ hi
33980 var t1slo17 = s[34] ^ lo
33981 var t1shi17 = s[35] ^ hi
33982 var t1slo22 = s[44] ^ lo
33983 var t1shi22 = s[45] ^ hi
33984 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
33985 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
33986 var t1slo3 = s[6] ^ lo
33987 var t1shi3 = s[7] ^ hi
33988 var t1slo8 = s[16] ^ lo
33989 var t1shi8 = s[17] ^ hi
33990 var t1slo13 = s[26] ^ lo
33991 var t1shi13 = s[27] ^ hi
33992 var t1slo18 = s[36] ^ lo
33993 var t1shi18 = s[37] ^ hi
33994 var t1slo23 = s[46] ^ lo
33995 var t1shi23 = s[47] ^ hi
33996 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
33997 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
33998 var t1slo4 = s[8] ^ lo
33999 var t1shi4 = s[9] ^ hi
34000 var t1slo9 = s[18] ^ lo
34001 var t1shi9 = s[19] ^ hi
34002 var t1slo14 = s[28] ^ lo
34003 var t1shi14 = s[29] ^ hi
34004 var t1slo19 = s[38] ^ lo
34005 var t1shi19 = s[39] ^ hi
34006 var t1slo24 = s[48] ^ lo
34007 var t1shi24 = s[49] ^ hi
34008
34009 // rho & pi
34010 var t2slo0 = t1slo0
34011 var t2shi0 = t1shi0
34012 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
34013 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
34014 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
34015 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
34016 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
34017 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
34018 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
34019 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
34020 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
34021 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
34022 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
34023 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
34024 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
34025 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
34026 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
34027 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
34028 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
34029 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
34030 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
34031 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
34032 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
34033 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
34034 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
34035 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
34036 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
34037 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
34038 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
34039 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
34040 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
34041 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
34042 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
34043 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
34044 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
34045 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
34046 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
34047 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
34048 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
34049 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
34050 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
34051 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
34052 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
34053 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
34054 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
34055 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
34056 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
34057 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
34058 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
34059 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
34060
34061 // chi
34062 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
34063 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
34064 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
34065 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
34066 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
34067 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
34068 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
34069 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
34070 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
34071 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
34072 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
34073 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
34074 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
34075 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
34076 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
34077 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
34078 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
34079 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
34080 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
34081 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
34082 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
34083 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
34084 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
34085 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
34086 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
34087 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
34088 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
34089 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
34090 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
34091 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
34092 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
34093 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
34094 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
34095 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
34096 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
34097 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
34098 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
34099 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
34100 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
34101 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
34102 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
34103 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
34104 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
34105 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
34106 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
34107 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
34108 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
34109 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
34110 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
34111 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
34112
34113 // iota
34114 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
34115 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
34116 }
34117 }
34118
34119 },{}],70:[function(require,module,exports){
34120 (function (Buffer){
34121 'use strict'
34122 var keccakState = require('./keccak-state-unroll')
34123
34124 function Keccak () {
34125 // much faster than `new Array(50)`
34126 this.state = [
34127 0, 0, 0, 0, 0,
34128 0, 0, 0, 0, 0,
34129 0, 0, 0, 0, 0,
34130 0, 0, 0, 0, 0,
34131 0, 0, 0, 0, 0
34132 ]
34133
34134 this.blockSize = null
34135 this.count = 0
34136 this.squeezing = false
34137 }
34138
34139 Keccak.prototype.initialize = function (rate, capacity) {
34140 for (var i = 0; i < 50; ++i) this.state[i] = 0
34141 this.blockSize = rate / 8
34142 this.count = 0
34143 this.squeezing = false
34144 }
34145
34146 Keccak.prototype.absorb = function (data) {
34147 for (var i = 0; i < data.length; ++i) {
34148 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
34149 this.count += 1
34150 if (this.count === this.blockSize) {
34151 keccakState.p1600(this.state)
34152 this.count = 0
34153 }
34154 }
34155 }
34156
34157 Keccak.prototype.absorbLastFewBits = function (bits) {
34158 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
34159 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
34160 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
34161 keccakState.p1600(this.state)
34162 this.count = 0
34163 this.squeezing = true
34164 }
34165
34166 Keccak.prototype.squeeze = function (length) {
34167 if (!this.squeezing) this.absorbLastFewBits(0x01)
34168
34169 var output = Buffer.allocUnsafe(length)
34170 for (var i = 0; i < length; ++i) {
34171 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
34172 this.count += 1
34173 if (this.count === this.blockSize) {
34174 keccakState.p1600(this.state)
34175 this.count = 0
34176 }
34177 }
34178
34179 return output
34180 }
34181
34182 Keccak.prototype.copy = function (dest) {
34183 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
34184 dest.blockSize = this.blockSize
34185 dest.count = this.count
34186 dest.squeezing = this.squeezing
34187 }
34188
34189 module.exports = Keccak
34190
34191 }).call(this,require("buffer").Buffer)
34192 },{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
34193 (function (Buffer){
34194 /*
34195 CryptoJS v3.1.2
34196 code.google.com/p/crypto-js
34197 (c) 2009-2013 by Jeff Mott. All rights reserved.
34198 code.google.com/p/crypto-js/wiki/License
34199 */
34200 /** @preserve
34201 (c) 2012 by Cédric Mesnil. All rights reserved.
34202
34203 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
34204
34205 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
34206 - 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.
34207
34208 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34209 */
34210
34211 // constants table
34212 var zl = [
34213 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
34214 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
34215 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
34216 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
34217 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
34218 ]
34219
34220 var zr = [
34221 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
34222 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
34223 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
34224 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
34225 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
34226 ]
34227
34228 var sl = [
34229 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
34230 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
34231 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
34232 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
34233 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
34234 ]
34235
34236 var sr = [
34237 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
34238 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
34239 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
34240 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
34241 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
34242 ]
34243
34244 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
34245 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
34246
34247 function bytesToWords (bytes) {
34248 var words = []
34249 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
34250 words[b >>> 5] |= bytes[i] << (24 - b % 32)
34251 }
34252 return words
34253 }
34254
34255 function wordsToBytes (words) {
34256 var bytes = []
34257 for (var b = 0; b < words.length * 32; b += 8) {
34258 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
34259 }
34260 return bytes
34261 }
34262
34263 function processBlock (H, M, offset) {
34264 // swap endian
34265 for (var i = 0; i < 16; i++) {
34266 var offset_i = offset + i
34267 var M_offset_i = M[offset_i]
34268
34269 // Swap
34270 M[offset_i] = (
34271 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
34272 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
34273 )
34274 }
34275
34276 // Working variables
34277 var al, bl, cl, dl, el
34278 var ar, br, cr, dr, er
34279
34280 ar = al = H[0]
34281 br = bl = H[1]
34282 cr = cl = H[2]
34283 dr = dl = H[3]
34284 er = el = H[4]
34285
34286 // computation
34287 var t
34288 for (i = 0; i < 80; i += 1) {
34289 t = (al + M[offset + zl[i]]) | 0
34290 if (i < 16) {
34291 t += f1(bl, cl, dl) + hl[0]
34292 } else if (i < 32) {
34293 t += f2(bl, cl, dl) + hl[1]
34294 } else if (i < 48) {
34295 t += f3(bl, cl, dl) + hl[2]
34296 } else if (i < 64) {
34297 t += f4(bl, cl, dl) + hl[3]
34298 } else {// if (i<80) {
34299 t += f5(bl, cl, dl) + hl[4]
34300 }
34301 t = t | 0
34302 t = rotl(t, sl[i])
34303 t = (t + el) | 0
34304 al = el
34305 el = dl
34306 dl = rotl(cl, 10)
34307 cl = bl
34308 bl = t
34309
34310 t = (ar + M[offset + zr[i]]) | 0
34311 if (i < 16) {
34312 t += f5(br, cr, dr) + hr[0]
34313 } else if (i < 32) {
34314 t += f4(br, cr, dr) + hr[1]
34315 } else if (i < 48) {
34316 t += f3(br, cr, dr) + hr[2]
34317 } else if (i < 64) {
34318 t += f2(br, cr, dr) + hr[3]
34319 } else {// if (i<80) {
34320 t += f1(br, cr, dr) + hr[4]
34321 }
34322
34323 t = t | 0
34324 t = rotl(t, sr[i])
34325 t = (t + er) | 0
34326 ar = er
34327 er = dr
34328 dr = rotl(cr, 10)
34329 cr = br
34330 br = t
34331 }
34332
34333 // intermediate hash value
34334 t = (H[1] + cl + dr) | 0
34335 H[1] = (H[2] + dl + er) | 0
34336 H[2] = (H[3] + el + ar) | 0
34337 H[3] = (H[4] + al + br) | 0
34338 H[4] = (H[0] + bl + cr) | 0
34339 H[0] = t
34340 }
34341
34342 function f1 (x, y, z) {
34343 return ((x) ^ (y) ^ (z))
34344 }
34345
34346 function f2 (x, y, z) {
34347 return (((x) & (y)) | ((~x) & (z)))
34348 }
34349
34350 function f3 (x, y, z) {
34351 return (((x) | (~(y))) ^ (z))
34352 }
34353
34354 function f4 (x, y, z) {
34355 return (((x) & (z)) | ((y) & (~(z))))
34356 }
34357
34358 function f5 (x, y, z) {
34359 return ((x) ^ ((y) | (~(z))))
34360 }
34361
34362 function rotl (x, n) {
34363 return (x << n) | (x >>> (32 - n))
34364 }
34365
34366 function ripemd160 (message) {
34367 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
34368
34369 if (typeof message === 'string') {
34370 message = new Buffer(message, 'utf8')
34371 }
34372
34373 var m = bytesToWords(message)
34374
34375 var nBitsLeft = message.length * 8
34376 var nBitsTotal = message.length * 8
34377
34378 // Add padding
34379 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
34380 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
34381 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
34382 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
34383 )
34384
34385 for (var i = 0; i < m.length; i += 16) {
34386 processBlock(H, m, i)
34387 }
34388
34389 // swap endian
34390 for (i = 0; i < 5; i++) {
34391 // shortcut
34392 var H_i = H[i]
34393
34394 // Swap
34395 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
34396 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
34397 }
34398
34399 var digestbytes = wordsToBytes(H)
34400 return new Buffer(digestbytes)
34401 }
34402
34403 module.exports = ripemd160
34404
34405 }).call(this,require("buffer").Buffer)
34406 },{"buffer":5}],72:[function(require,module,exports){
34407 (function (Buffer){
34408 const assert = require('assert')
34409 /**
34410 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
34411 * This function takes in a data, convert it to buffer if not, and a length for recursion
34412 *
34413 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
34414 * @returns {Buffer} - returns buffer of encoded data
34415 **/
34416 exports.encode = function (input) {
34417 if (input instanceof Array) {
34418 var output = []
34419 for (var i = 0; i < input.length; i++) {
34420 output.push(exports.encode(input[i]))
34421 }
34422 var buf = Buffer.concat(output)
34423 return Buffer.concat([encodeLength(buf.length, 192), buf])
34424 } else {
34425 input = toBuffer(input)
34426 if (input.length === 1 && input[0] < 128) {
34427 return input
34428 } else {
34429 return Buffer.concat([encodeLength(input.length, 128), input])
34430 }
34431 }
34432 }
34433
34434 function safeParseInt (v, base) {
34435 if (v.slice(0, 2) === '00') {
34436 throw (new Error('invalid RLP: extra zeros'))
34437 }
34438
34439 return parseInt(v, base)
34440 }
34441
34442 function encodeLength (len, offset) {
34443 if (len < 56) {
34444 return new Buffer([len + offset])
34445 } else {
34446 var hexLength = intToHex(len)
34447 var lLength = hexLength.length / 2
34448 var firstByte = intToHex(offset + 55 + lLength)
34449 return new Buffer(firstByte + hexLength, 'hex')
34450 }
34451 }
34452
34453 /**
34454 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
34455 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
34456 * @returns {Array} - returns decode Array of Buffers containg the original message
34457 **/
34458 exports.decode = function (input, stream) {
34459 if (!input || input.length === 0) {
34460 return new Buffer([])
34461 }
34462
34463 input = toBuffer(input)
34464 var decoded = _decode(input)
34465
34466 if (stream) {
34467 return decoded
34468 }
34469
34470 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
34471 return decoded.data
34472 }
34473
34474 exports.getLength = function (input) {
34475 if (!input || input.length === 0) {
34476 return new Buffer([])
34477 }
34478
34479 input = toBuffer(input)
34480 var firstByte = input[0]
34481 if (firstByte <= 0x7f) {
34482 return input.length
34483 } else if (firstByte <= 0xb7) {
34484 return firstByte - 0x7f
34485 } else if (firstByte <= 0xbf) {
34486 return firstByte - 0xb6
34487 } else if (firstByte <= 0xf7) {
34488 // a list between 0-55 bytes long
34489 return firstByte - 0xbf
34490 } else {
34491 // a list over 55 bytes long
34492 var llength = firstByte - 0xf6
34493 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
34494 return llength + length
34495 }
34496 }
34497
34498 function _decode (input) {
34499 var length, llength, data, innerRemainder, d
34500 var decoded = []
34501 var firstByte = input[0]
34502
34503 if (firstByte <= 0x7f) {
34504 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
34505 return {
34506 data: input.slice(0, 1),
34507 remainder: input.slice(1)
34508 }
34509 } else if (firstByte <= 0xb7) {
34510 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
34511 // The range of the first byte is [0x80, 0xb7]
34512 length = firstByte - 0x7f
34513
34514 // set 0x80 null to 0
34515 if (firstByte === 0x80) {
34516 data = new Buffer([])
34517 } else {
34518 data = input.slice(1, length)
34519 }
34520
34521 if (length === 2 && data[0] < 0x80) {
34522 throw new Error('invalid rlp encoding: byte must be less 0x80')
34523 }
34524
34525 return {
34526 data: data,
34527 remainder: input.slice(length)
34528 }
34529 } else if (firstByte <= 0xbf) {
34530 llength = firstByte - 0xb6
34531 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
34532 data = input.slice(llength, length + llength)
34533 if (data.length < length) {
34534 throw (new Error('invalid RLP'))
34535 }
34536
34537 return {
34538 data: data,
34539 remainder: input.slice(length + llength)
34540 }
34541 } else if (firstByte <= 0xf7) {
34542 // a list between 0-55 bytes long
34543 length = firstByte - 0xbf
34544 innerRemainder = input.slice(1, length)
34545 while (innerRemainder.length) {
34546 d = _decode(innerRemainder)
34547 decoded.push(d.data)
34548 innerRemainder = d.remainder
34549 }
34550
34551 return {
34552 data: decoded,
34553 remainder: input.slice(length)
34554 }
34555 } else {
34556 // a list over 55 bytes long
34557 llength = firstByte - 0xf6
34558 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
34559 var totalLength = llength + length
34560 if (totalLength > input.length) {
34561 throw new Error('invalid rlp: total length is larger than the data')
34562 }
34563
34564 innerRemainder = input.slice(llength, totalLength)
34565 if (innerRemainder.length === 0) {
34566 throw new Error('invalid rlp, List has a invalid length')
34567 }
34568
34569 while (innerRemainder.length) {
34570 d = _decode(innerRemainder)
34571 decoded.push(d.data)
34572 innerRemainder = d.remainder
34573 }
34574 return {
34575 data: decoded,
34576 remainder: input.slice(totalLength)
34577 }
34578 }
34579 }
34580
34581 function isHexPrefixed (str) {
34582 return str.slice(0, 2) === '0x'
34583 }
34584
34585 // Removes 0x from a given String
34586 function stripHexPrefix (str) {
34587 if (typeof str !== 'string') {
34588 return str
34589 }
34590 return isHexPrefixed(str) ? str.slice(2) : str
34591 }
34592
34593 function intToHex (i) {
34594 var hex = i.toString(16)
34595 if (hex.length % 2) {
34596 hex = '0' + hex
34597 }
34598
34599 return hex
34600 }
34601
34602 function padToEven (a) {
34603 if (a.length % 2) a = '0' + a
34604 return a
34605 }
34606
34607 function intToBuffer (i) {
34608 var hex = intToHex(i)
34609 return new Buffer(hex, 'hex')
34610 }
34611
34612 function toBuffer (v) {
34613 if (!Buffer.isBuffer(v)) {
34614 if (typeof v === 'string') {
34615 if (isHexPrefixed(v)) {
34616 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
34617 } else {
34618 v = new Buffer(v)
34619 }
34620 } else if (typeof v === 'number') {
34621 if (!v) {
34622 v = new Buffer([])
34623 } else {
34624 v = intToBuffer(v)
34625 }
34626 } else if (v === null || v === undefined) {
34627 v = new Buffer([])
34628 } else if (v.toArray) {
34629 // converts a BN to a Buffer
34630 v = new Buffer(v.toArray())
34631 } else {
34632 throw new Error('invalid type')
34633 }
34634 }
34635 return v
34636 }
34637
34638 }).call(this,require("buffer").Buffer)
34639 },{"assert":1,"buffer":5}],73:[function(require,module,exports){
34640 'use strict'
34641 module.exports = require('./lib')(require('./lib/elliptic'))
34642
34643 },{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
34644 (function (Buffer){
34645 'use strict'
34646 var toString = Object.prototype.toString
34647
34648 // TypeError
34649 exports.isArray = function (value, message) {
34650 if (!Array.isArray(value)) throw TypeError(message)
34651 }
34652
34653 exports.isBoolean = function (value, message) {
34654 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
34655 }
34656
34657 exports.isBuffer = function (value, message) {
34658 if (!Buffer.isBuffer(value)) throw TypeError(message)
34659 }
34660
34661 exports.isFunction = function (value, message) {
34662 if (toString.call(value) !== '[object Function]') throw TypeError(message)
34663 }
34664
34665 exports.isNumber = function (value, message) {
34666 if (toString.call(value) !== '[object Number]') throw TypeError(message)
34667 }
34668
34669 exports.isObject = function (value, message) {
34670 if (toString.call(value) !== '[object Object]') throw TypeError(message)
34671 }
34672
34673 // RangeError
34674 exports.isBufferLength = function (buffer, length, message) {
34675 if (buffer.length !== length) throw RangeError(message)
34676 }
34677
34678 exports.isBufferLength2 = function (buffer, length1, length2, message) {
34679 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
34680 }
34681
34682 exports.isLengthGTZero = function (value, message) {
34683 if (value.length === 0) throw RangeError(message)
34684 }
34685
34686 exports.isNumberInInterval = function (number, x, y, message) {
34687 if (number <= x || number >= y) throw RangeError(message)
34688 }
34689
34690 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
34691 },{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
34692 (function (Buffer){
34693 'use strict'
34694 var bip66 = require('bip66')
34695
34696 var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
34697 // begin
34698 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
34699 // private key
34700 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34701 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34702 // middle
34703 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
34704 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34705 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34706 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
34707 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
34708 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
34709 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34710 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
34711 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
34712 // public key
34713 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34714 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34715 0x00
34716 ])
34717
34718 var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
34719 // begin
34720 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
34721 // private key
34722 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34723 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34724 // middle
34725 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
34726 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34727 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34728 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
34729 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
34730 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
34731 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
34732 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
34733 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34734 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
34735 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
34736 // public key
34737 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34738 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34739 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34740 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34741 0x00
34742 ])
34743
34744 var ZERO_BUFFER_32 = new Buffer([
34745 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34746 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
34747 ])
34748
34749 exports.privateKeyExport = function (privateKey, publicKey, compressed) {
34750 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
34751 privateKey.copy(result, compressed ? 8 : 9)
34752 publicKey.copy(result, compressed ? 181 : 214)
34753 return result
34754 }
34755
34756 exports.privateKeyImport = function (privateKey) {
34757 var length = privateKey.length
34758
34759 // sequence header
34760 var index = 0
34761 if (length < index + 1 || privateKey[index] !== 0x30) return
34762 index += 1
34763
34764 // sequence length constructor
34765 if (length < index + 1 || !(privateKey[index] & 0x80)) return
34766
34767 var lenb = privateKey[index] & 0x7f
34768 index += 1
34769 if (lenb < 1 || lenb > 2) return
34770 if (length < index + lenb) return
34771
34772 // sequence length
34773 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
34774 index += lenb
34775 if (length < index + len) return
34776
34777 // sequence element 0: version number (=1)
34778 if (length < index + 3 ||
34779 privateKey[index] !== 0x02 ||
34780 privateKey[index + 1] !== 0x01 ||
34781 privateKey[index + 2] !== 0x01) {
34782 return
34783 }
34784 index += 3
34785
34786 // sequence element 1: octet string, up to 32 bytes
34787 if (length < index + 2 ||
34788 privateKey[index] !== 0x04 ||
34789 privateKey[index + 1] > 0x20 ||
34790 length < index + 2 + privateKey[index + 1]) {
34791 return
34792 }
34793
34794 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
34795 }
34796
34797 exports.signatureExport = function (sigObj) {
34798 var r = Buffer.concat([new Buffer([0]), sigObj.r])
34799 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
34800
34801 var s = Buffer.concat([new Buffer([0]), sigObj.s])
34802 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
34803
34804 return bip66.encode(r.slice(posR), s.slice(posS))
34805 }
34806
34807 exports.signatureImport = function (sig) {
34808 var r = new Buffer(ZERO_BUFFER_32)
34809 var s = new Buffer(ZERO_BUFFER_32)
34810
34811 try {
34812 var sigObj = bip66.decode(sig)
34813 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
34814 if (sigObj.r.length > 32) throw new Error('R length is too long')
34815 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
34816 if (sigObj.s.length > 32) throw new Error('S length is too long')
34817 } catch (err) {
34818 return
34819 }
34820
34821 sigObj.r.copy(r, 32 - sigObj.r.length)
34822 sigObj.s.copy(s, 32 - sigObj.s.length)
34823
34824 return { r: r, s: s }
34825 }
34826
34827 exports.signatureImportLax = function (sig) {
34828 var r = new Buffer(ZERO_BUFFER_32)
34829 var s = new Buffer(ZERO_BUFFER_32)
34830
34831 var length = sig.length
34832 var index = 0
34833
34834 // sequence tag byte
34835 if (sig[index++] !== 0x30) return
34836
34837 // sequence length byte
34838 var lenbyte = sig[index++]
34839 if (lenbyte & 0x80) {
34840 index += lenbyte - 0x80
34841 if (index > length) return
34842 }
34843
34844 // sequence tag byte for r
34845 if (sig[index++] !== 0x02) return
34846
34847 // length for r
34848 var rlen = sig[index++]
34849 if (rlen & 0x80) {
34850 lenbyte = rlen - 0x80
34851 if (index + lenbyte > length) return
34852 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
34853 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
34854 }
34855 if (rlen > length - index) return
34856 var rindex = index
34857 index += rlen
34858
34859 // sequence tag byte for s
34860 if (sig[index++] !== 0x02) return
34861
34862 // length for s
34863 var slen = sig[index++]
34864 if (slen & 0x80) {
34865 lenbyte = slen - 0x80
34866 if (index + lenbyte > length) return
34867 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
34868 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
34869 }
34870 if (slen > length - index) return
34871 var sindex = index
34872 index += slen
34873
34874 // ignore leading zeros in r
34875 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
34876 // copy r value
34877 if (rlen > 32) return
34878 var rvalue = sig.slice(rindex, rindex + rlen)
34879 rvalue.copy(r, 32 - rvalue.length)
34880
34881 // ignore leading zeros in s
34882 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
34883 // copy s value
34884 if (slen > 32) return
34885 var svalue = sig.slice(sindex, sindex + slen)
34886 svalue.copy(s, 32 - svalue.length)
34887
34888 return { r: r, s: s }
34889 }
34890
34891 }).call(this,require("buffer").Buffer)
34892 },{"bip66":32,"buffer":5}],76:[function(require,module,exports){
34893 (function (Buffer){
34894 'use strict'
34895 var createHash = require('create-hash')
34896 var BN = require('bn.js')
34897 var EC = require('elliptic').ec
34898
34899 var messages = require('../messages.json')
34900
34901 var ec = new EC('secp256k1')
34902 var ecparams = ec.curve
34903
34904 function loadCompressedPublicKey (first, xBuffer) {
34905 var x = new BN(xBuffer)
34906
34907 // overflow
34908 if (x.cmp(ecparams.p) >= 0) return null
34909 x = x.toRed(ecparams.red)
34910
34911 // compute corresponding Y
34912 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
34913 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
34914
34915 return ec.keyPair({ pub: { x: x, y: y } })
34916 }
34917
34918 function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
34919 var x = new BN(xBuffer)
34920 var y = new BN(yBuffer)
34921
34922 // overflow
34923 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
34924
34925 x = x.toRed(ecparams.red)
34926 y = y.toRed(ecparams.red)
34927
34928 // is odd flag
34929 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
34930
34931 // x*x*x + b = y*y
34932 var x3 = x.redSqr().redIMul(x)
34933 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
34934
34935 return ec.keyPair({ pub: { x: x, y: y } })
34936 }
34937
34938 function loadPublicKey (publicKey) {
34939 var first = publicKey[0]
34940 switch (first) {
34941 case 0x02:
34942 case 0x03:
34943 if (publicKey.length !== 33) return null
34944 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
34945 case 0x04:
34946 case 0x06:
34947 case 0x07:
34948 if (publicKey.length !== 65) return null
34949 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
34950 default:
34951 return null
34952 }
34953 }
34954
34955 exports.privateKeyVerify = function (privateKey) {
34956 var bn = new BN(privateKey)
34957 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
34958 }
34959
34960 exports.privateKeyExport = function (privateKey, compressed) {
34961 var d = new BN(privateKey)
34962 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
34963
34964 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
34965 }
34966
34967 exports.privateKeyTweakAdd = function (privateKey, tweak) {
34968 var bn = new BN(tweak)
34969 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
34970
34971 bn.iadd(new BN(privateKey))
34972 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
34973 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
34974
34975 return bn.toArrayLike(Buffer, 'be', 32)
34976 }
34977
34978 exports.privateKeyTweakMul = function (privateKey, tweak) {
34979 var bn = new BN(tweak)
34980 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
34981
34982 bn.imul(new BN(privateKey))
34983 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
34984
34985 return bn.toArrayLike(Buffer, 'be', 32)
34986 }
34987
34988 exports.publicKeyCreate = function (privateKey, compressed) {
34989 var d = new BN(privateKey)
34990 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
34991
34992 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
34993 }
34994
34995 exports.publicKeyConvert = function (publicKey, compressed) {
34996 var pair = loadPublicKey(publicKey)
34997 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
34998
34999 return new Buffer(pair.getPublic(compressed, true))
35000 }
35001
35002 exports.publicKeyVerify = function (publicKey) {
35003 return loadPublicKey(publicKey) !== null
35004 }
35005
35006 exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
35007 var pair = loadPublicKey(publicKey)
35008 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35009
35010 tweak = new BN(tweak)
35011 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
35012
35013 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
35014 }
35015
35016 exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
35017 var pair = loadPublicKey(publicKey)
35018 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35019
35020 tweak = new BN(tweak)
35021 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
35022
35023 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
35024 }
35025
35026 exports.publicKeyCombine = function (publicKeys, compressed) {
35027 var pairs = new Array(publicKeys.length)
35028 for (var i = 0; i < publicKeys.length; ++i) {
35029 pairs[i] = loadPublicKey(publicKeys[i])
35030 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35031 }
35032
35033 var point = pairs[0].pub
35034 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
35035 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
35036
35037 return new Buffer(point.encode(true, compressed))
35038 }
35039
35040 exports.signatureNormalize = function (signature) {
35041 var r = new BN(signature.slice(0, 32))
35042 var s = new BN(signature.slice(32, 64))
35043 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35044
35045 var result = new Buffer(signature)
35046 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
35047
35048 return result
35049 }
35050
35051 exports.signatureExport = function (signature) {
35052 var r = signature.slice(0, 32)
35053 var s = signature.slice(32, 64)
35054 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35055
35056 return { r: r, s: s }
35057 }
35058
35059 exports.signatureImport = function (sigObj) {
35060 var r = new BN(sigObj.r)
35061 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
35062
35063 var s = new BN(sigObj.s)
35064 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
35065
35066 return Buffer.concat([
35067 r.toArrayLike(Buffer, 'be', 32),
35068 s.toArrayLike(Buffer, 'be', 32)
35069 ])
35070 }
35071
35072 exports.sign = function (message, privateKey, noncefn, data) {
35073 if (typeof noncefn === 'function') {
35074 var getNonce = noncefn
35075 noncefn = function (counter) {
35076 var nonce = getNonce(message, privateKey, null, data, counter)
35077 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
35078
35079 return new BN(nonce)
35080 }
35081 }
35082
35083 var d = new BN(privateKey)
35084 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
35085
35086 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
35087 return {
35088 signature: Buffer.concat([
35089 result.r.toArrayLike(Buffer, 'be', 32),
35090 result.s.toArrayLike(Buffer, 'be', 32)
35091 ]),
35092 recovery: result.recoveryParam
35093 }
35094 }
35095
35096 exports.verify = function (message, signature, publicKey) {
35097 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
35098
35099 var sigr = new BN(sigObj.r)
35100 var sigs = new BN(sigObj.s)
35101 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35102 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
35103
35104 var pair = loadPublicKey(publicKey)
35105 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35106
35107 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
35108 }
35109
35110 exports.recover = function (message, signature, recovery, compressed) {
35111 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
35112
35113 var sigr = new BN(sigObj.r)
35114 var sigs = new BN(sigObj.s)
35115 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35116
35117 try {
35118 if (sigr.isZero() || sigs.isZero()) throw new Error()
35119
35120 var point = ec.recoverPubKey(message, sigObj, recovery)
35121 return new Buffer(point.encode(true, compressed))
35122 } catch (err) {
35123 throw new Error(messages.ECDSA_RECOVER_FAIL)
35124 }
35125 }
35126
35127 exports.ecdh = function (publicKey, privateKey) {
35128 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
35129 return createHash('sha256').update(shared).digest()
35130 }
35131
35132 exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
35133 var pair = loadPublicKey(publicKey)
35134 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35135
35136 var scalar = new BN(privateKey)
35137 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
35138
35139 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
35140 }
35141
35142 }).call(this,require("buffer").Buffer)
35143 },{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
35144 'use strict'
35145 var assert = require('./assert')
35146 var der = require('./der')
35147 var messages = require('./messages.json')
35148
35149 function initCompressedValue (value, defaultValue) {
35150 if (value === undefined) return defaultValue
35151
35152 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
35153 return value
35154 }
35155
35156 module.exports = function (secp256k1) {
35157 return {
35158 privateKeyVerify: function (privateKey) {
35159 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35160 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
35161 },
35162
35163 privateKeyExport: function (privateKey, compressed) {
35164 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35165 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35166
35167 compressed = initCompressedValue(compressed, true)
35168 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
35169
35170 return der.privateKeyExport(privateKey, publicKey, compressed)
35171 },
35172
35173 privateKeyImport: function (privateKey) {
35174 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35175
35176 privateKey = der.privateKeyImport(privateKey)
35177 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
35178
35179 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
35180 },
35181
35182 privateKeyTweakAdd: function (privateKey, tweak) {
35183 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35184 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35185
35186 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35187 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35188
35189 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
35190 },
35191
35192 privateKeyTweakMul: function (privateKey, tweak) {
35193 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35194 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35195
35196 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35197 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35198
35199 return secp256k1.privateKeyTweakMul(privateKey, tweak)
35200 },
35201
35202 publicKeyCreate: function (privateKey, compressed) {
35203 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35204 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35205
35206 compressed = initCompressedValue(compressed, true)
35207
35208 return secp256k1.publicKeyCreate(privateKey, compressed)
35209 },
35210
35211 publicKeyConvert: function (publicKey, compressed) {
35212 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35213 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35214
35215 compressed = initCompressedValue(compressed, true)
35216
35217 return secp256k1.publicKeyConvert(publicKey, compressed)
35218 },
35219
35220 publicKeyVerify: function (publicKey) {
35221 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35222 return secp256k1.publicKeyVerify(publicKey)
35223 },
35224
35225 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
35226 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35227 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35228
35229 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35230 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35231
35232 compressed = initCompressedValue(compressed, true)
35233
35234 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
35235 },
35236
35237 publicKeyTweakMul: function (publicKey, tweak, compressed) {
35238 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35239 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35240
35241 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35242 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35243
35244 compressed = initCompressedValue(compressed, true)
35245
35246 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
35247 },
35248
35249 publicKeyCombine: function (publicKeys, compressed) {
35250 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
35251 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
35252 for (var i = 0; i < publicKeys.length; ++i) {
35253 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
35254 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35255 }
35256
35257 compressed = initCompressedValue(compressed, true)
35258
35259 return secp256k1.publicKeyCombine(publicKeys, compressed)
35260 },
35261
35262 signatureNormalize: function (signature) {
35263 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35264 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35265
35266 return secp256k1.signatureNormalize(signature)
35267 },
35268
35269 signatureExport: function (signature) {
35270 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35271 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35272
35273 var sigObj = secp256k1.signatureExport(signature)
35274 return der.signatureExport(sigObj)
35275 },
35276
35277 signatureImport: function (sig) {
35278 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35279 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35280
35281 var sigObj = der.signatureImport(sig)
35282 if (sigObj) return secp256k1.signatureImport(sigObj)
35283
35284 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
35285 },
35286
35287 signatureImportLax: function (sig) {
35288 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35289 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35290
35291 var sigObj = der.signatureImportLax(sig)
35292 if (sigObj) return secp256k1.signatureImport(sigObj)
35293
35294 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
35295 },
35296
35297 sign: function (message, privateKey, options) {
35298 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35299 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
35300
35301 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35302 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35303
35304 var data = null
35305 var noncefn = null
35306 if (options !== undefined) {
35307 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
35308
35309 if (options.data !== undefined) {
35310 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
35311 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
35312 data = options.data
35313 }
35314
35315 if (options.noncefn !== undefined) {
35316 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
35317 noncefn = options.noncefn
35318 }
35319 }
35320
35321 return secp256k1.sign(message, privateKey, noncefn, data)
35322 },
35323
35324 verify: function (message, signature, publicKey) {
35325 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35326 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
35327
35328 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35329 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35330
35331 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35332 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35333
35334 return secp256k1.verify(message, signature, publicKey)
35335 },
35336
35337 recover: function (message, signature, recovery, compressed) {
35338 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35339 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
35340
35341 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35342 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35343
35344 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
35345 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
35346
35347 compressed = initCompressedValue(compressed, true)
35348
35349 return secp256k1.recover(message, signature, recovery, compressed)
35350 },
35351
35352 ecdh: function (publicKey, privateKey) {
35353 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35354 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35355
35356 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35357 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35358
35359 return secp256k1.ecdh(publicKey, privateKey)
35360 },
35361
35362 ecdhUnsafe: function (publicKey, privateKey, compressed) {
35363 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35364 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35365
35366 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35367 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35368
35369 compressed = initCompressedValue(compressed, true)
35370
35371 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
35372 }
35373 }
35374 }
35375
35376 },{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
35377 module.exports={
35378 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
35379 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
35380 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
35381 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
35382 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
35383 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
35384 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
35385 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
35386 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
35387 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
35388 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
35389 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
35390 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
35391 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
35392 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
35393 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
35394 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
35395 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
35396 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
35397 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
35398 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
35399 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
35400 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
35401 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
35402 "MSG32_TYPE_INVALID": "message should be a Buffer",
35403 "MSG32_LENGTH_INVALID": "message length is invalid",
35404 "OPTIONS_TYPE_INVALID": "options should be an Object",
35405 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
35406 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
35407 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
35408 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
35409 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
35410 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
35411 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
35412 }
35413
35414 },{}],79:[function(require,module,exports){
35415 (function (Buffer){
35416 // prototype class for hash functions
35417 function Hash (blockSize, finalSize) {
35418 this._block = new Buffer(blockSize)
35419 this._finalSize = finalSize
35420 this._blockSize = blockSize
35421 this._len = 0
35422 this._s = 0
35423 }
35424
35425 Hash.prototype.update = function (data, enc) {
35426 if (typeof data === 'string') {
35427 enc = enc || 'utf8'
35428 data = new Buffer(data, enc)
35429 }
35430
35431 var l = this._len += data.length
35432 var s = this._s || 0
35433 var f = 0
35434 var buffer = this._block
35435
35436 while (s < l) {
35437 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
35438 var ch = (t - f)
35439
35440 for (var i = 0; i < ch; i++) {
35441 buffer[(s % this._blockSize) + i] = data[i + f]
35442 }
35443
35444 s += ch
35445 f += ch
35446
35447 if ((s % this._blockSize) === 0) {
35448 this._update(buffer)
35449 }
35450 }
35451 this._s = s
35452
35453 return this
35454 }
35455
35456 Hash.prototype.digest = function (enc) {
35457 // Suppose the length of the message M, in bits, is l
35458 var l = this._len * 8
35459
35460 // Append the bit 1 to the end of the message
35461 this._block[this._len % this._blockSize] = 0x80
35462
35463 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
35464 this._block.fill(0, this._len % this._blockSize + 1)
35465
35466 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
35467 this._update(this._block)
35468 this._block.fill(0)
35469 }
35470
35471 // to this append the block which is equal to the number l written in binary
35472 // TODO: handle case where l is > Math.pow(2, 29)
35473 this._block.writeInt32BE(l, this._blockSize - 4)
35474
35475 var hash = this._update(this._block) || this._hash()
35476
35477 return enc ? hash.toString(enc) : hash
35478 }
35479
35480 Hash.prototype._update = function () {
35481 throw new Error('_update must be implemented by subclass')
35482 }
35483
35484 module.exports = Hash
35485
35486 }).call(this,require("buffer").Buffer)
35487 },{"buffer":5}],80:[function(require,module,exports){
35488 var exports = module.exports = function SHA (algorithm) {
35489 algorithm = algorithm.toLowerCase()
35490
35491 var Algorithm = exports[algorithm]
35492 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
35493
35494 return new Algorithm()
35495 }
35496
35497 exports.sha = require('./sha')
35498 exports.sha1 = require('./sha1')
35499 exports.sha224 = require('./sha224')
35500 exports.sha256 = require('./sha256')
35501 exports.sha384 = require('./sha384')
35502 exports.sha512 = require('./sha512')
35503
35504 },{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
35505 (function (Buffer){
35506 /*
35507 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
35508 * in FIPS PUB 180-1
35509 * This source code is derived from sha1.js of the same repository.
35510 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
35511 * operation was added.
35512 */
35513
35514 var inherits = require('inherits')
35515 var Hash = require('./hash')
35516
35517 var K = [
35518 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
35519 ]
35520
35521 var W = new Array(80)
35522
35523 function Sha () {
35524 this.init()
35525 this._w = W
35526
35527 Hash.call(this, 64, 56)
35528 }
35529
35530 inherits(Sha, Hash)
35531
35532 Sha.prototype.init = function () {
35533 this._a = 0x67452301
35534 this._b = 0xefcdab89
35535 this._c = 0x98badcfe
35536 this._d = 0x10325476
35537 this._e = 0xc3d2e1f0
35538
35539 return this
35540 }
35541
35542 function rotl5 (num) {
35543 return (num << 5) | (num >>> 27)
35544 }
35545
35546 function rotl30 (num) {
35547 return (num << 30) | (num >>> 2)
35548 }
35549
35550 function ft (s, b, c, d) {
35551 if (s === 0) return (b & c) | ((~b) & d)
35552 if (s === 2) return (b & c) | (b & d) | (c & d)
35553 return b ^ c ^ d
35554 }
35555
35556 Sha.prototype._update = function (M) {
35557 var W = this._w
35558
35559 var a = this._a | 0
35560 var b = this._b | 0
35561 var c = this._c | 0
35562 var d = this._d | 0
35563 var e = this._e | 0
35564
35565 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
35566 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
35567
35568 for (var j = 0; j < 80; ++j) {
35569 var s = ~~(j / 20)
35570 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
35571
35572 e = d
35573 d = c
35574 c = rotl30(b)
35575 b = a
35576 a = t
35577 }
35578
35579 this._a = (a + this._a) | 0
35580 this._b = (b + this._b) | 0
35581 this._c = (c + this._c) | 0
35582 this._d = (d + this._d) | 0
35583 this._e = (e + this._e) | 0
35584 }
35585
35586 Sha.prototype._hash = function () {
35587 var H = new Buffer(20)
35588
35589 H.writeInt32BE(this._a | 0, 0)
35590 H.writeInt32BE(this._b | 0, 4)
35591 H.writeInt32BE(this._c | 0, 8)
35592 H.writeInt32BE(this._d | 0, 12)
35593 H.writeInt32BE(this._e | 0, 16)
35594
35595 return H
35596 }
35597
35598 module.exports = Sha
35599
35600 }).call(this,require("buffer").Buffer)
35601 },{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
35602 (function (Buffer){
35603 /*
35604 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
35605 * in FIPS PUB 180-1
35606 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
35607 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
35608 * Distributed under the BSD License
35609 * See http://pajhome.org.uk/crypt/md5 for details.
35610 */
35611
35612 var inherits = require('inherits')
35613 var Hash = require('./hash')
35614
35615 var K = [
35616 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
35617 ]
35618
35619 var W = new Array(80)
35620
35621 function Sha1 () {
35622 this.init()
35623 this._w = W
35624
35625 Hash.call(this, 64, 56)
35626 }
35627
35628 inherits(Sha1, Hash)
35629
35630 Sha1.prototype.init = function () {
35631 this._a = 0x67452301
35632 this._b = 0xefcdab89
35633 this._c = 0x98badcfe
35634 this._d = 0x10325476
35635 this._e = 0xc3d2e1f0
35636
35637 return this
35638 }
35639
35640 function rotl1 (num) {
35641 return (num << 1) | (num >>> 31)
35642 }
35643
35644 function rotl5 (num) {
35645 return (num << 5) | (num >>> 27)
35646 }
35647
35648 function rotl30 (num) {
35649 return (num << 30) | (num >>> 2)
35650 }
35651
35652 function ft (s, b, c, d) {
35653 if (s === 0) return (b & c) | ((~b) & d)
35654 if (s === 2) return (b & c) | (b & d) | (c & d)
35655 return b ^ c ^ d
35656 }
35657
35658 Sha1.prototype._update = function (M) {
35659 var W = this._w
35660
35661 var a = this._a | 0
35662 var b = this._b | 0
35663 var c = this._c | 0
35664 var d = this._d | 0
35665 var e = this._e | 0
35666
35667 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
35668 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
35669
35670 for (var j = 0; j < 80; ++j) {
35671 var s = ~~(j / 20)
35672 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
35673
35674 e = d
35675 d = c
35676 c = rotl30(b)
35677 b = a
35678 a = t
35679 }
35680
35681 this._a = (a + this._a) | 0
35682 this._b = (b + this._b) | 0
35683 this._c = (c + this._c) | 0
35684 this._d = (d + this._d) | 0
35685 this._e = (e + this._e) | 0
35686 }
35687
35688 Sha1.prototype._hash = function () {
35689 var H = new Buffer(20)
35690
35691 H.writeInt32BE(this._a | 0, 0)
35692 H.writeInt32BE(this._b | 0, 4)
35693 H.writeInt32BE(this._c | 0, 8)
35694 H.writeInt32BE(this._d | 0, 12)
35695 H.writeInt32BE(this._e | 0, 16)
35696
35697 return H
35698 }
35699
35700 module.exports = Sha1
35701
35702 }).call(this,require("buffer").Buffer)
35703 },{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
35704 (function (Buffer){
35705 /**
35706 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
35707 * in FIPS 180-2
35708 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
35709 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
35710 *
35711 */
35712
35713 var inherits = require('inherits')
35714 var Sha256 = require('./sha256')
35715 var Hash = require('./hash')
35716
35717 var W = new Array(64)
35718
35719 function Sha224 () {
35720 this.init()
35721
35722 this._w = W // new Array(64)
35723
35724 Hash.call(this, 64, 56)
35725 }
35726
35727 inherits(Sha224, Sha256)
35728
35729 Sha224.prototype.init = function () {
35730 this._a = 0xc1059ed8
35731 this._b = 0x367cd507
35732 this._c = 0x3070dd17
35733 this._d = 0xf70e5939
35734 this._e = 0xffc00b31
35735 this._f = 0x68581511
35736 this._g = 0x64f98fa7
35737 this._h = 0xbefa4fa4
35738
35739 return this
35740 }
35741
35742 Sha224.prototype._hash = function () {
35743 var H = new Buffer(28)
35744
35745 H.writeInt32BE(this._a, 0)
35746 H.writeInt32BE(this._b, 4)
35747 H.writeInt32BE(this._c, 8)
35748 H.writeInt32BE(this._d, 12)
35749 H.writeInt32BE(this._e, 16)
35750 H.writeInt32BE(this._f, 20)
35751 H.writeInt32BE(this._g, 24)
35752
35753 return H
35754 }
35755
35756 module.exports = Sha224
35757
35758 }).call(this,require("buffer").Buffer)
35759 },{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
35760 (function (Buffer){
35761 /**
35762 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
35763 * in FIPS 180-2
35764 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
35765 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
35766 *
35767 */
35768
35769 var inherits = require('inherits')
35770 var Hash = require('./hash')
35771
35772 var K = [
35773 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
35774 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
35775 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
35776 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
35777 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
35778 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
35779 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
35780 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
35781 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
35782 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
35783 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
35784 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
35785 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
35786 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
35787 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
35788 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
35789 ]
35790
35791 var W = new Array(64)
35792
35793 function Sha256 () {
35794 this.init()
35795
35796 this._w = W // new Array(64)
35797
35798 Hash.call(this, 64, 56)
35799 }
35800
35801 inherits(Sha256, Hash)
35802
35803 Sha256.prototype.init = function () {
35804 this._a = 0x6a09e667
35805 this._b = 0xbb67ae85
35806 this._c = 0x3c6ef372
35807 this._d = 0xa54ff53a
35808 this._e = 0x510e527f
35809 this._f = 0x9b05688c
35810 this._g = 0x1f83d9ab
35811 this._h = 0x5be0cd19
35812
35813 return this
35814 }
35815
35816 function ch (x, y, z) {
35817 return z ^ (x & (y ^ z))
35818 }
35819
35820 function maj (x, y, z) {
35821 return (x & y) | (z & (x | y))
35822 }
35823
35824 function sigma0 (x) {
35825 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
35826 }
35827
35828 function sigma1 (x) {
35829 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
35830 }
35831
35832 function gamma0 (x) {
35833 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
35834 }
35835
35836 function gamma1 (x) {
35837 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
35838 }
35839
35840 Sha256.prototype._update = function (M) {
35841 var W = this._w
35842
35843 var a = this._a | 0
35844 var b = this._b | 0
35845 var c = this._c | 0
35846 var d = this._d | 0
35847 var e = this._e | 0
35848 var f = this._f | 0
35849 var g = this._g | 0
35850 var h = this._h | 0
35851
35852 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
35853 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
35854
35855 for (var j = 0; j < 64; ++j) {
35856 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
35857 var T2 = (sigma0(a) + maj(a, b, c)) | 0
35858
35859 h = g
35860 g = f
35861 f = e
35862 e = (d + T1) | 0
35863 d = c
35864 c = b
35865 b = a
35866 a = (T1 + T2) | 0
35867 }
35868
35869 this._a = (a + this._a) | 0
35870 this._b = (b + this._b) | 0
35871 this._c = (c + this._c) | 0
35872 this._d = (d + this._d) | 0
35873 this._e = (e + this._e) | 0
35874 this._f = (f + this._f) | 0
35875 this._g = (g + this._g) | 0
35876 this._h = (h + this._h) | 0
35877 }
35878
35879 Sha256.prototype._hash = function () {
35880 var H = new Buffer(32)
35881
35882 H.writeInt32BE(this._a, 0)
35883 H.writeInt32BE(this._b, 4)
35884 H.writeInt32BE(this._c, 8)
35885 H.writeInt32BE(this._d, 12)
35886 H.writeInt32BE(this._e, 16)
35887 H.writeInt32BE(this._f, 20)
35888 H.writeInt32BE(this._g, 24)
35889 H.writeInt32BE(this._h, 28)
35890
35891 return H
35892 }
35893
35894 module.exports = Sha256
35895
35896 }).call(this,require("buffer").Buffer)
35897 },{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
35898 (function (Buffer){
35899 var inherits = require('inherits')
35900 var SHA512 = require('./sha512')
35901 var Hash = require('./hash')
35902
35903 var W = new Array(160)
35904
35905 function Sha384 () {
35906 this.init()
35907 this._w = W
35908
35909 Hash.call(this, 128, 112)
35910 }
35911
35912 inherits(Sha384, SHA512)
35913
35914 Sha384.prototype.init = function () {
35915 this._ah = 0xcbbb9d5d
35916 this._bh = 0x629a292a
35917 this._ch = 0x9159015a
35918 this._dh = 0x152fecd8
35919 this._eh = 0x67332667
35920 this._fh = 0x8eb44a87
35921 this._gh = 0xdb0c2e0d
35922 this._hh = 0x47b5481d
35923
35924 this._al = 0xc1059ed8
35925 this._bl = 0x367cd507
35926 this._cl = 0x3070dd17
35927 this._dl = 0xf70e5939
35928 this._el = 0xffc00b31
35929 this._fl = 0x68581511
35930 this._gl = 0x64f98fa7
35931 this._hl = 0xbefa4fa4
35932
35933 return this
35934 }
35935
35936 Sha384.prototype._hash = function () {
35937 var H = new Buffer(48)
35938
35939 function writeInt64BE (h, l, offset) {
35940 H.writeInt32BE(h, offset)
35941 H.writeInt32BE(l, offset + 4)
35942 }
35943
35944 writeInt64BE(this._ah, this._al, 0)
35945 writeInt64BE(this._bh, this._bl, 8)
35946 writeInt64BE(this._ch, this._cl, 16)
35947 writeInt64BE(this._dh, this._dl, 24)
35948 writeInt64BE(this._eh, this._el, 32)
35949 writeInt64BE(this._fh, this._fl, 40)
35950
35951 return H
35952 }
35953
35954 module.exports = Sha384
35955
35956 }).call(this,require("buffer").Buffer)
35957 },{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
35958 (function (Buffer){
35959 var inherits = require('inherits')
35960 var Hash = require('./hash')
35961
35962 var K = [
35963 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
35964 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
35965 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
35966 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
35967 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
35968 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
35969 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
35970 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
35971 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
35972 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
35973 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
35974 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
35975 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
35976 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
35977 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
35978 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
35979 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
35980 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
35981 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
35982 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
35983 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
35984 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
35985 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
35986 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
35987 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
35988 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
35989 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
35990 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
35991 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
35992 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
35993 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
35994 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
35995 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
35996 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
35997 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
35998 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
35999 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
36000 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
36001 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
36002 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
36003 ]
36004
36005 var W = new Array(160)
36006
36007 function Sha512 () {
36008 this.init()
36009 this._w = W
36010
36011 Hash.call(this, 128, 112)
36012 }
36013
36014 inherits(Sha512, Hash)
36015
36016 Sha512.prototype.init = function () {
36017 this._ah = 0x6a09e667
36018 this._bh = 0xbb67ae85
36019 this._ch = 0x3c6ef372
36020 this._dh = 0xa54ff53a
36021 this._eh = 0x510e527f
36022 this._fh = 0x9b05688c
36023 this._gh = 0x1f83d9ab
36024 this._hh = 0x5be0cd19
36025
36026 this._al = 0xf3bcc908
36027 this._bl = 0x84caa73b
36028 this._cl = 0xfe94f82b
36029 this._dl = 0x5f1d36f1
36030 this._el = 0xade682d1
36031 this._fl = 0x2b3e6c1f
36032 this._gl = 0xfb41bd6b
36033 this._hl = 0x137e2179
36034
36035 return this
36036 }
36037
36038 function Ch (x, y, z) {
36039 return z ^ (x & (y ^ z))
36040 }
36041
36042 function maj (x, y, z) {
36043 return (x & y) | (z & (x | y))
36044 }
36045
36046 function sigma0 (x, xl) {
36047 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
36048 }
36049
36050 function sigma1 (x, xl) {
36051 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
36052 }
36053
36054 function Gamma0 (x, xl) {
36055 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
36056 }
36057
36058 function Gamma0l (x, xl) {
36059 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
36060 }
36061
36062 function Gamma1 (x, xl) {
36063 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
36064 }
36065
36066 function Gamma1l (x, xl) {
36067 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
36068 }
36069
36070 function getCarry (a, b) {
36071 return (a >>> 0) < (b >>> 0) ? 1 : 0
36072 }
36073
36074 Sha512.prototype._update = function (M) {
36075 var W = this._w
36076
36077 var ah = this._ah | 0
36078 var bh = this._bh | 0
36079 var ch = this._ch | 0
36080 var dh = this._dh | 0
36081 var eh = this._eh | 0
36082 var fh = this._fh | 0
36083 var gh = this._gh | 0
36084 var hh = this._hh | 0
36085
36086 var al = this._al | 0
36087 var bl = this._bl | 0
36088 var cl = this._cl | 0
36089 var dl = this._dl | 0
36090 var el = this._el | 0
36091 var fl = this._fl | 0
36092 var gl = this._gl | 0
36093 var hl = this._hl | 0
36094
36095 for (var i = 0; i < 32; i += 2) {
36096 W[i] = M.readInt32BE(i * 4)
36097 W[i + 1] = M.readInt32BE(i * 4 + 4)
36098 }
36099 for (; i < 160; i += 2) {
36100 var xh = W[i - 15 * 2]
36101 var xl = W[i - 15 * 2 + 1]
36102 var gamma0 = Gamma0(xh, xl)
36103 var gamma0l = Gamma0l(xl, xh)
36104
36105 xh = W[i - 2 * 2]
36106 xl = W[i - 2 * 2 + 1]
36107 var gamma1 = Gamma1(xh, xl)
36108 var gamma1l = Gamma1l(xl, xh)
36109
36110 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
36111 var Wi7h = W[i - 7 * 2]
36112 var Wi7l = W[i - 7 * 2 + 1]
36113
36114 var Wi16h = W[i - 16 * 2]
36115 var Wi16l = W[i - 16 * 2 + 1]
36116
36117 var Wil = (gamma0l + Wi7l) | 0
36118 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
36119 Wil = (Wil + gamma1l) | 0
36120 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
36121 Wil = (Wil + Wi16l) | 0
36122 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
36123
36124 W[i] = Wih
36125 W[i + 1] = Wil
36126 }
36127
36128 for (var j = 0; j < 160; j += 2) {
36129 Wih = W[j]
36130 Wil = W[j + 1]
36131
36132 var majh = maj(ah, bh, ch)
36133 var majl = maj(al, bl, cl)
36134
36135 var sigma0h = sigma0(ah, al)
36136 var sigma0l = sigma0(al, ah)
36137 var sigma1h = sigma1(eh, el)
36138 var sigma1l = sigma1(el, eh)
36139
36140 // t1 = h + sigma1 + ch + K[j] + W[j]
36141 var Kih = K[j]
36142 var Kil = K[j + 1]
36143
36144 var chh = Ch(eh, fh, gh)
36145 var chl = Ch(el, fl, gl)
36146
36147 var t1l = (hl + sigma1l) | 0
36148 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
36149 t1l = (t1l + chl) | 0
36150 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
36151 t1l = (t1l + Kil) | 0
36152 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
36153 t1l = (t1l + Wil) | 0
36154 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
36155
36156 // t2 = sigma0 + maj
36157 var t2l = (sigma0l + majl) | 0
36158 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
36159
36160 hh = gh
36161 hl = gl
36162 gh = fh
36163 gl = fl
36164 fh = eh
36165 fl = el
36166 el = (dl + t1l) | 0
36167 eh = (dh + t1h + getCarry(el, dl)) | 0
36168 dh = ch
36169 dl = cl
36170 ch = bh
36171 cl = bl
36172 bh = ah
36173 bl = al
36174 al = (t1l + t2l) | 0
36175 ah = (t1h + t2h + getCarry(al, t1l)) | 0
36176 }
36177
36178 this._al = (this._al + al) | 0
36179 this._bl = (this._bl + bl) | 0
36180 this._cl = (this._cl + cl) | 0
36181 this._dl = (this._dl + dl) | 0
36182 this._el = (this._el + el) | 0
36183 this._fl = (this._fl + fl) | 0
36184 this._gl = (this._gl + gl) | 0
36185 this._hl = (this._hl + hl) | 0
36186
36187 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
36188 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
36189 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
36190 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
36191 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
36192 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
36193 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
36194 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
36195 }
36196
36197 Sha512.prototype._hash = function () {
36198 var H = new Buffer(64)
36199
36200 function writeInt64BE (h, l, offset) {
36201 H.writeInt32BE(h, offset)
36202 H.writeInt32BE(l, offset + 4)
36203 }
36204
36205 writeInt64BE(this._ah, this._al, 0)
36206 writeInt64BE(this._bh, this._bl, 8)
36207 writeInt64BE(this._ch, this._cl, 16)
36208 writeInt64BE(this._dh, this._dl, 24)
36209 writeInt64BE(this._eh, this._el, 32)
36210 writeInt64BE(this._fh, this._fl, 40)
36211 writeInt64BE(this._gh, this._gl, 48)
36212 writeInt64BE(this._hh, this._hl, 56)
36213
36214 return H
36215 }
36216
36217 module.exports = Sha512
36218
36219 }).call(this,require("buffer").Buffer)
36220 },{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
36221 var isHexPrefixed = require('is-hex-prefixed');
36222
36223 /**
36224 * Removes '0x' from a given `String` is present
36225 * @param {String} str the string value
36226 * @return {String|Optional} a string by pass if necessary
36227 */
36228 module.exports = function stripHexPrefix(str) {
36229 if (typeof str !== 'string') {
36230 return str;
36231 }
36232
36233 return isHexPrefixed(str) ? str.slice(2) : str;
36234 }
36235
36236 },{"is-hex-prefixed":64}]},{},[31])(31)
36237 });</script>
36238 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
36239
36240 //// base.js
36241
36242 /** @fileOverview Javascript cryptography implementation.
36243 *
36244 * Crush to remove comments, shorten variable names and
36245 * generally reduce transmission size.
36246 *
36247 * @author Emily Stark
36248 * @author Mike Hamburg
36249 * @author Dan Boneh
36250 */
36251
36252 "use strict";
36253 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
36254 /*global document, window, escape, unescape, module, require, Uint32Array */
36255
36256 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
36257 var sjcl = {
36258 /** @namespace Symmetric ciphers. */
36259 cipher: {},
36260
36261 /** @namespace Hash functions. Right now only SHA256 is implemented. */
36262 hash: {},
36263
36264 /** @namespace Key exchange functions. Right now only SRP is implemented. */
36265 keyexchange: {},
36266
36267 /** @namespace Block cipher modes of operation. */
36268 mode: {},
36269
36270 /** @namespace Miscellaneous. HMAC and PBKDF2. */
36271 misc: {},
36272
36273 /**
36274 * @namespace Bit array encoders and decoders.
36275 *
36276 * @description
36277 * The members of this namespace are functions which translate between
36278 * SJCL's bitArrays and other objects (usually strings). Because it
36279 * isn't always clear which direction is encoding and which is decoding,
36280 * the method names are "fromBits" and "toBits".
36281 */
36282 codec: {},
36283
36284 /** @namespace Exceptions. */
36285 exception: {
36286 /** @constructor Ciphertext is corrupt. */
36287 corrupt: function(message) {
36288 this.toString = function() { return "CORRUPT: "+this.message; };
36289 this.message = message;
36290 },
36291
36292 /** @constructor Invalid parameter. */
36293 invalid: function(message) {
36294 this.toString = function() { return "INVALID: "+this.message; };
36295 this.message = message;
36296 },
36297
36298 /** @constructor Bug or missing feature in SJCL. @constructor */
36299 bug: function(message) {
36300 this.toString = function() { return "BUG: "+this.message; };
36301 this.message = message;
36302 },
36303
36304 /** @constructor Something isn't ready. */
36305 notReady: function(message) {
36306 this.toString = function() { return "NOT READY: "+this.message; };
36307 this.message = message;
36308 }
36309 }
36310 };
36311
36312 if(typeof module !== 'undefined' && module.exports){
36313 module.exports = sjcl;
36314 }
36315 if (typeof define === "function") {
36316 define([], function () {
36317 return sjcl;
36318 });
36319 }
36320
36321
36322 //// bitArray.js
36323
36324 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
36325 *
36326 * @author Emily Stark
36327 * @author Mike Hamburg
36328 * @author Dan Boneh
36329 */
36330
36331 /** @namespace Arrays of bits, encoded as arrays of Numbers.
36332 *
36333 * @description
36334 * <p>
36335 * These objects are the currency accepted by SJCL's crypto functions.
36336 * </p>
36337 *
36338 * <p>
36339 * Most of our crypto primitives operate on arrays of 4-byte words internally,
36340 * but many of them can take arguments that are not a multiple of 4 bytes.
36341 * This library encodes arrays of bits (whose size need not be a multiple of 8
36342 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
36343 * array of words, 32 bits at a time. Since the words are double-precision
36344 * floating point numbers, they fit some extra data. We use this (in a private,
36345 * possibly-changing manner) to encode the number of bits actually present
36346 * in the last word of the array.
36347 * </p>
36348 *
36349 * <p>
36350 * Because bitwise ops clear this out-of-band data, these arrays can be passed
36351 * to ciphers like AES which want arrays of words.
36352 * </p>
36353 */
36354 sjcl.bitArray = {
36355 /**
36356 * Array slices in units of bits.
36357 * @param {bitArray} a The array to slice.
36358 * @param {Number} bstart The offset to the start of the slice, in bits.
36359 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
36360 * slice until the end of the array.
36361 * @return {bitArray} The requested slice.
36362 */
36363 bitSlice: function (a, bstart, bend) {
36364 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
36365 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
36366 },
36367
36368 /**
36369 * Extract a number packed into a bit array.
36370 * @param {bitArray} a The array to slice.
36371 * @param {Number} bstart The offset to the start of the slice, in bits.
36372 * @param {Number} length The length of the number to extract.
36373 * @return {Number} The requested slice.
36374 */
36375 extract: function(a, bstart, blength) {
36376 // FIXME: this Math.floor is not necessary at all, but for some reason
36377 // seems to suppress a bug in the Chromium JIT.
36378 var x, sh = Math.floor((-bstart-blength) & 31);
36379 if ((bstart + blength - 1 ^ bstart) & -32) {
36380 // it crosses a boundary
36381 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
36382 } else {
36383 // within a single word
36384 x = a[bstart/32|0] >>> sh;
36385 }
36386 return x & ((1<<blength) - 1);
36387 },
36388
36389 /**
36390 * Concatenate two bit arrays.
36391 * @param {bitArray} a1 The first array.
36392 * @param {bitArray} a2 The second array.
36393 * @return {bitArray} The concatenation of a1 and a2.
36394 */
36395 concat: function (a1, a2) {
36396 if (a1.length === 0 || a2.length === 0) {
36397 return a1.concat(a2);
36398 }
36399
36400 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
36401 if (shift === 32) {
36402 return a1.concat(a2);
36403 } else {
36404 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
36405 }
36406 },
36407
36408 /**
36409 * Find the length of an array of bits.
36410 * @param {bitArray} a The array.
36411 * @return {Number} The length of a, in bits.
36412 */
36413 bitLength: function (a) {
36414 var l = a.length, x;
36415 if (l === 0) { return 0; }
36416 x = a[l - 1];
36417 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
36418 },
36419
36420 /**
36421 * Truncate an array.
36422 * @param {bitArray} a The array.
36423 * @param {Number} len The length to truncate to, in bits.
36424 * @return {bitArray} A new array, truncated to len bits.
36425 */
36426 clamp: function (a, len) {
36427 if (a.length * 32 < len) { return a; }
36428 a = a.slice(0, Math.ceil(len / 32));
36429 var l = a.length;
36430 len = len & 31;
36431 if (l > 0 && len) {
36432 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
36433 }
36434 return a;
36435 },
36436
36437 /**
36438 * Make a partial word for a bit array.
36439 * @param {Number} len The number of bits in the word.
36440 * @param {Number} x The bits.
36441 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
36442 * @return {Number} The partial word.
36443 */
36444 partial: function (len, x, _end) {
36445 if (len === 32) { return x; }
36446 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
36447 },
36448
36449 /**
36450 * Get the number of bits used by a partial word.
36451 * @param {Number} x The partial word.
36452 * @return {Number} The number of bits used by the partial word.
36453 */
36454 getPartial: function (x) {
36455 return Math.round(x/0x10000000000) || 32;
36456 },
36457
36458 /**
36459 * Compare two arrays for equality in a predictable amount of time.
36460 * @param {bitArray} a The first array.
36461 * @param {bitArray} b The second array.
36462 * @return {boolean} true if a == b; false otherwise.
36463 */
36464 equal: function (a, b) {
36465 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
36466 return false;
36467 }
36468 var x = 0, i;
36469 for (i=0; i<a.length; i++) {
36470 x |= a[i]^b[i];
36471 }
36472 return (x === 0);
36473 },
36474
36475 /** Shift an array right.
36476 * @param {bitArray} a The array to shift.
36477 * @param {Number} shift The number of bits to shift.
36478 * @param {Number} [carry=0] A byte to carry in
36479 * @param {bitArray} [out=[]] An array to prepend to the output.
36480 * @private
36481 */
36482 _shiftRight: function (a, shift, carry, out) {
36483 var i, last2=0, shift2;
36484 if (out === undefined) { out = []; }
36485
36486 for (; shift >= 32; shift -= 32) {
36487 out.push(carry);
36488 carry = 0;
36489 }
36490 if (shift === 0) {
36491 return out.concat(a);
36492 }
36493
36494 for (i=0; i<a.length; i++) {
36495 out.push(carry | a[i]>>>shift);
36496 carry = a[i] << (32-shift);
36497 }
36498 last2 = a.length ? a[a.length-1] : 0;
36499 shift2 = sjcl.bitArray.getPartial(last2);
36500 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
36501 return out;
36502 },
36503
36504 /** xor a block of 4 words together.
36505 * @private
36506 */
36507 _xor4: function(x,y) {
36508 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
36509 },
36510
36511 /** byteswap a word array inplace.
36512 * (does not handle partial words)
36513 * @param {sjcl.bitArray} a word array
36514 * @return {sjcl.bitArray} byteswapped array
36515 */
36516 byteswapM: function(a) {
36517 var i, v, m = 0xff00;
36518 for (i = 0; i < a.length; ++i) {
36519 v = a[i];
36520 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
36521 }
36522 return a;
36523 }
36524 };
36525
36526
36527 //// codecString.js
36528
36529 /** @fileOverview Bit array codec implementations.
36530 *
36531 * @author Emily Stark
36532 * @author Mike Hamburg
36533 * @author Dan Boneh
36534 */
36535
36536 /** @namespace UTF-8 strings */
36537 sjcl.codec.utf8String = {
36538 /** Convert from a bitArray to a UTF-8 string. */
36539 fromBits: function (arr) {
36540 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
36541 for (i=0; i<bl/8; i++) {
36542 if ((i&3) === 0) {
36543 tmp = arr[i/4];
36544 }
36545 out += String.fromCharCode(tmp >>> 24);
36546 tmp <<= 8;
36547 }
36548 return decodeURIComponent(escape(out));
36549 },
36550
36551 /** Convert from a UTF-8 string to a bitArray. */
36552 toBits: function (str) {
36553 str = unescape(encodeURIComponent(str));
36554 var out = [], i, tmp=0;
36555 for (i=0; i<str.length; i++) {
36556 tmp = tmp << 8 | str.charCodeAt(i);
36557 if ((i&3) === 3) {
36558 out.push(tmp);
36559 tmp = 0;
36560 }
36561 }
36562 if (i&3) {
36563 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
36564 }
36565 return out;
36566 }
36567 };
36568
36569
36570 //// codecHex.js
36571
36572 /** @fileOverview Bit array codec implementations.
36573 *
36574 * @author Emily Stark
36575 * @author Mike Hamburg
36576 * @author Dan Boneh
36577 */
36578
36579 /** @namespace Hexadecimal */
36580 sjcl.codec.hex = {
36581 /** Convert from a bitArray to a hex string. */
36582 fromBits: function (arr) {
36583 var out = "", i;
36584 for (i=0; i<arr.length; i++) {
36585 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
36586 }
36587 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
36588 },
36589 /** Convert from a hex string to a bitArray. */
36590 toBits: function (str) {
36591 var i, out=[], len;
36592 str = str.replace(/\s|0x/g, "");
36593 len = str.length;
36594 str = str + "00000000";
36595 for (i=0; i<str.length; i+=8) {
36596 out.push(parseInt(str.substr(i,8),16)^0);
36597 }
36598 return sjcl.bitArray.clamp(out, len*4);
36599 }
36600 };
36601
36602
36603 //// sha512.js
36604
36605 /** @fileOverview Javascript SHA-512 implementation.
36606 *
36607 * This implementation was written for CryptoJS by Jeff Mott and adapted for
36608 * SJCL by Stefan Thomas.
36609 *
36610 * CryptoJS (c) 20092012 by Jeff Mott. All rights reserved.
36611 * Released with New BSD License
36612 *
36613 * @author Emily Stark
36614 * @author Mike Hamburg
36615 * @author Dan Boneh
36616 * @author Jeff Mott
36617 * @author Stefan Thomas
36618 */
36619
36620 /**
36621 * Context for a SHA-512 operation in progress.
36622 * @constructor
36623 * @class Secure Hash Algorithm, 512 bits.
36624 */
36625 sjcl.hash.sha512 = function (hash) {
36626 if (!this._key[0]) { this._precompute(); }
36627 if (hash) {
36628 this._h = hash._h.slice(0);
36629 this._buffer = hash._buffer.slice(0);
36630 this._length = hash._length;
36631 } else {
36632 this.reset();
36633 }
36634 };
36635
36636 /**
36637 * Hash a string or an array of words.
36638 * @static
36639 * @param {bitArray|String} data the data to hash.
36640 * @return {bitArray} The hash value, an array of 16 big-endian words.
36641 */
36642 sjcl.hash.sha512.hash = function (data) {
36643 return (new sjcl.hash.sha512()).update(data).finalize();
36644 };
36645
36646 sjcl.hash.sha512.prototype = {
36647 /**
36648 * The hash's block size, in bits.
36649 * @constant
36650 */
36651 blockSize: 1024,
36652
36653 /**
36654 * Reset the hash state.
36655 * @return this
36656 */
36657 reset:function () {
36658 this._h = this._init.slice(0);
36659 this._buffer = [];
36660 this._length = 0;
36661 return this;
36662 },
36663
36664 /**
36665 * Input several words to the hash.
36666 * @param {bitArray|String} data the data to hash.
36667 * @return this
36668 */
36669 update: function (data) {
36670 if (typeof data === "string") {
36671 data = sjcl.codec.utf8String.toBits(data);
36672 }
36673 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
36674 ol = this._length,
36675 nl = this._length = ol + sjcl.bitArray.bitLength(data);
36676 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
36677 this._block(b.splice(0,32));
36678 }
36679 return this;
36680 },
36681
36682 /**
36683 * Complete hashing and output the hash value.
36684 * @return {bitArray} The hash value, an array of 16 big-endian words.
36685 */
36686 finalize:function () {
36687 var i, b = this._buffer, h = this._h;
36688
36689 // Round out and push the buffer
36690 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
36691
36692 // Round out the buffer to a multiple of 32 words, less the 4 length words.
36693 for (i = b.length + 4; i & 31; i++) {
36694 b.push(0);
36695 }
36696
36697 // append the length
36698 b.push(0);
36699 b.push(0);
36700 b.push(Math.floor(this._length / 0x100000000));
36701 b.push(this._length | 0);
36702
36703 while (b.length) {
36704 this._block(b.splice(0,32));
36705 }
36706
36707 this.reset();
36708 return h;
36709 },
36710
36711 /**
36712 * The SHA-512 initialization vector, to be precomputed.
36713 * @private
36714 */
36715 _init:[],
36716
36717 /**
36718 * Least significant 24 bits of SHA512 initialization values.
36719 *
36720 * Javascript only has 53 bits of precision, so we compute the 40 most
36721 * significant bits and add the remaining 24 bits as constants.
36722 *
36723 * @private
36724 */
36725 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
36726
36727 /*
36728 _init:
36729 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
36730 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
36731 */
36732
36733 /**
36734 * The SHA-512 hash key, to be precomputed.
36735 * @private
36736 */
36737 _key:[],
36738
36739 /**
36740 * Least significant 24 bits of SHA512 key values.
36741 * @private
36742 */
36743 _keyr:
36744 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
36745 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
36746 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
36747 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
36748 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
36749 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
36750 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
36751 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
36752 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
36753 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
36754
36755 /*
36756 _key:
36757 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
36758 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
36759 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
36760 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
36761 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
36762 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
36763 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
36764 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
36765 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
36766 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
36767 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
36768 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
36769 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
36770 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
36771 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
36772 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
36773 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
36774 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
36775 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
36776 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
36777 */
36778
36779 /**
36780 * Function to precompute _init and _key.
36781 * @private
36782 */
36783 _precompute: function () {
36784 // XXX: This code is for precomputing the SHA256 constants, change for
36785 // SHA512 and re-enable.
36786 var i = 0, prime = 2, factor;
36787
36788 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
36789 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
36790
36791 outer: for (; i<80; prime++) {
36792 for (factor=2; factor*factor <= prime; factor++) {
36793 if (prime % factor === 0) {
36794 // not a prime
36795 continue outer;
36796 }
36797 }
36798
36799 if (i<8) {
36800 this._init[i*2] = frac(Math.pow(prime, 1/2));
36801 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
36802 }
36803 this._key[i*2] = frac(Math.pow(prime, 1/3));
36804 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
36805 i++;
36806 }
36807 },
36808
36809 /**
36810 * Perform one cycle of SHA-512.
36811 * @param {bitArray} words one block of words.
36812 * @private
36813 */
36814 _block:function (words) {
36815 var i, wrh, wrl,
36816 w = words.slice(0),
36817 h = this._h,
36818 k = this._key,
36819 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
36820 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
36821 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
36822 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
36823
36824 // Working variables
36825 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
36826 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
36827 eh = h4h, el = h4l, fh = h5h, fl = h5l,
36828 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
36829
36830 for (i=0; i<80; i++) {
36831 // load up the input word for this round
36832 if (i<16) {
36833 wrh = w[i * 2];
36834 wrl = w[i * 2 + 1];
36835 } else {
36836 // Gamma0
36837 var gamma0xh = w[(i-15) * 2];
36838 var gamma0xl = w[(i-15) * 2 + 1];
36839 var gamma0h =
36840 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
36841 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
36842 (gamma0xh >>> 7);
36843 var gamma0l =
36844 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
36845 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
36846 ((gamma0xh << 25) | (gamma0xl >>> 7));
36847
36848 // Gamma1
36849 var gamma1xh = w[(i-2) * 2];
36850 var gamma1xl = w[(i-2) * 2 + 1];
36851 var gamma1h =
36852 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
36853 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
36854 (gamma1xh >>> 6);
36855 var gamma1l =
36856 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
36857 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
36858 ((gamma1xh << 26) | (gamma1xl >>> 6));
36859
36860 // Shortcuts
36861 var wr7h = w[(i-7) * 2];
36862 var wr7l = w[(i-7) * 2 + 1];
36863
36864 var wr16h = w[(i-16) * 2];
36865 var wr16l = w[(i-16) * 2 + 1];
36866
36867 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
36868 wrl = gamma0l + wr7l;
36869 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
36870 wrl += gamma1l;
36871 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
36872 wrl += wr16l;
36873 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
36874 }
36875
36876 w[i*2] = wrh |= 0;
36877 w[i*2 + 1] = wrl |= 0;
36878
36879 // Ch
36880 var chh = (eh & fh) ^ (~eh & gh);
36881 var chl = (el & fl) ^ (~el & gl);
36882
36883 // Maj
36884 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
36885 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
36886
36887 // Sigma0
36888 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
36889 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
36890
36891 // Sigma1
36892 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
36893 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
36894
36895 // K(round)
36896 var krh = k[i*2];
36897 var krl = k[i*2+1];
36898
36899 // t1 = h + sigma1 + ch + K(round) + W(round)
36900 var t1l = hl + sigma1l;
36901 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
36902 t1l += chl;
36903 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
36904 t1l += krl;
36905 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
36906 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
36907 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
36908
36909 // t2 = sigma0 + maj
36910 var t2l = sigma0l + majl;
36911 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
36912
36913 // Update working variables
36914 hh = gh;
36915 hl = gl;
36916 gh = fh;
36917 gl = fl;
36918 fh = eh;
36919 fl = el;
36920 el = (dl + t1l) | 0;
36921 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
36922 dh = ch;
36923 dl = cl;
36924 ch = bh;
36925 cl = bl;
36926 bh = ah;
36927 bl = al;
36928 al = (t1l + t2l) | 0;
36929 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
36930 }
36931
36932 // Intermediate hash
36933 h0l = h[1] = (h0l + al) | 0;
36934 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
36935 h1l = h[3] = (h1l + bl) | 0;
36936 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
36937 h2l = h[5] = (h2l + cl) | 0;
36938 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
36939 h3l = h[7] = (h3l + dl) | 0;
36940 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
36941 h4l = h[9] = (h4l + el) | 0;
36942 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
36943 h5l = h[11] = (h5l + fl) | 0;
36944 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
36945 h6l = h[13] = (h6l + gl) | 0;
36946 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
36947 h7l = h[15] = (h7l + hl) | 0;
36948 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
36949 }
36950 };
36951
36952
36953 //// hmac.js
36954
36955 /** @fileOverview HMAC implementation.
36956 *
36957 * @author Emily Stark
36958 * @author Mike Hamburg
36959 * @author Dan Boneh
36960 */
36961
36962 /** HMAC with the specified hash function.
36963 * @constructor
36964 * @param {bitArray} key the key for HMAC.
36965 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
36966 */
36967 sjcl.misc.hmac = function (key, Hash) {
36968 this._hash = Hash = Hash || sjcl.hash.sha256;
36969 var exKey = [[],[]], i,
36970 bs = Hash.prototype.blockSize / 32;
36971 this._baseHash = [new Hash(), new Hash()];
36972
36973 if (key.length > bs) {
36974 key = Hash.hash(key);
36975 }
36976
36977 for (i=0; i<bs; i++) {
36978 exKey[0][i] = key[i]^0x36363636;
36979 exKey[1][i] = key[i]^0x5C5C5C5C;
36980 }
36981
36982 this._baseHash[0].update(exKey[0]);
36983 this._baseHash[1].update(exKey[1]);
36984 this._resultHash = new Hash(this._baseHash[0]);
36985 };
36986
36987 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
36988 * @param {bitArray|String} data The data to mac.
36989 */
36990 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
36991 if (!this._updated) {
36992 this.update(data);
36993 return this.digest(data);
36994 } else {
36995 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
36996 }
36997 };
36998
36999 sjcl.misc.hmac.prototype.reset = function () {
37000 this._resultHash = new this._hash(this._baseHash[0]);
37001 this._updated = false;
37002 };
37003
37004 sjcl.misc.hmac.prototype.update = function (data) {
37005 this._updated = true;
37006 this._resultHash.update(data);
37007 };
37008
37009 sjcl.misc.hmac.prototype.digest = function () {
37010 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
37011
37012 this.reset();
37013
37014 return result;
37015 };
37016
37017
37018 //// pbkdf2.js
37019
37020
37021 /** @fileOverview Password-based key-derivation function, version 2.0.
37022 *
37023 * @author Emily Stark
37024 * @author Mike Hamburg
37025 * @author Dan Boneh
37026 */
37027
37028 /** Password-Based Key-Derivation Function, version 2.0.
37029 *
37030 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
37031 *
37032 * This is the method specified by RSA's PKCS #5 standard.
37033 *
37034 * @param {bitArray|String} password The password.
37035 * @param {bitArray|String} salt The salt. Should have lots of entropy.
37036 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
37037 * @param {Number} [length] The length of the derived key. Defaults to the
37038 output size of the hash function.
37039 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
37040 * @return {bitArray} the derived key.
37041 */
37042 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
37043 count = count || 1000;
37044
37045 if (length < 0 || count < 0) {
37046 throw sjcl.exception.invalid("invalid params to pbkdf2");
37047 }
37048
37049 if (typeof password === "string") {
37050 password = sjcl.codec.utf8String.toBits(password);
37051 }
37052
37053 if (typeof salt === "string") {
37054 salt = sjcl.codec.utf8String.toBits(salt);
37055 }
37056
37057 Prff = Prff || sjcl.misc.hmac;
37058
37059 var prf = new Prff(password),
37060 u, ui, i, j, k, out = [], b = sjcl.bitArray;
37061
37062 for (k = 1; 32 * out.length < (length || 1); k++) {
37063 u = ui = prf.encrypt(b.concat(salt,[k]));
37064
37065 for (i=1; i<count; i++) {
37066 ui = prf.encrypt(ui);
37067 for (j=0; j<ui.length; j++) {
37068 u[j] ^= ui[j];
37069 }
37070 }
37071
37072 out = out.concat(u);
37073 }
37074
37075 if (length) { out = b.clamp(out, length); }
37076
37077 return out;
37078 };
37079
37080
37081 //// sha256.js
37082
37083 /** @fileOverview Javascript SHA-256 implementation.
37084 *
37085 * An older version of this implementation is available in the public
37086 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
37087 * Stanford University 2008-2010 and BSD-licensed for liability
37088 * reasons.
37089 *
37090 * Special thanks to Aldo Cortesi for pointing out several bugs in
37091 * this code.
37092 *
37093 * @author Emily Stark
37094 * @author Mike Hamburg
37095 * @author Dan Boneh
37096 */
37097
37098 /**
37099 * Context for a SHA-256 operation in progress.
37100 * @constructor
37101 * @class Secure Hash Algorithm, 256 bits.
37102 */
37103 sjcl.hash.sha256 = function (hash) {
37104 if (!this._key[0]) { this._precompute(); }
37105 if (hash) {
37106 this._h = hash._h.slice(0);
37107 this._buffer = hash._buffer.slice(0);
37108 this._length = hash._length;
37109 } else {
37110 this.reset();
37111 }
37112 };
37113
37114 /**
37115 * Hash a string or an array of words.
37116 * @static
37117 * @param {bitArray|String} data the data to hash.
37118 * @return {bitArray} The hash value, an array of 16 big-endian words.
37119 */
37120 sjcl.hash.sha256.hash = function (data) {
37121 return (new sjcl.hash.sha256()).update(data).finalize();
37122 };
37123
37124 sjcl.hash.sha256.prototype = {
37125 /**
37126 * The hash's block size, in bits.
37127 * @constant
37128 */
37129 blockSize: 512,
37130
37131 /**
37132 * Reset the hash state.
37133 * @return this
37134 */
37135 reset:function () {
37136 this._h = this._init.slice(0);
37137 this._buffer = [];
37138 this._length = 0;
37139 return this;
37140 },
37141
37142 /**
37143 * Input several words to the hash.
37144 * @param {bitArray|String} data the data to hash.
37145 * @return this
37146 */
37147 update: function (data) {
37148 if (typeof data === "string") {
37149 data = sjcl.codec.utf8String.toBits(data);
37150 }
37151 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
37152 ol = this._length,
37153 nl = this._length = ol + sjcl.bitArray.bitLength(data);
37154 for (i = 512+ol & -512; i <= nl; i+= 512) {
37155 this._block(b.splice(0,16));
37156 }
37157 return this;
37158 },
37159
37160 /**
37161 * Complete hashing and output the hash value.
37162 * @return {bitArray} The hash value, an array of 8 big-endian words.
37163 */
37164 finalize:function () {
37165 var i, b = this._buffer, h = this._h;
37166
37167 // Round out and push the buffer
37168 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
37169
37170 // Round out the buffer to a multiple of 16 words, less the 2 length words.
37171 for (i = b.length + 2; i & 15; i++) {
37172 b.push(0);
37173 }
37174
37175 // append the length
37176 b.push(Math.floor(this._length / 0x100000000));
37177 b.push(this._length | 0);
37178
37179 while (b.length) {
37180 this._block(b.splice(0,16));
37181 }
37182
37183 this.reset();
37184 return h;
37185 },
37186
37187 /**
37188 * The SHA-256 initialization vector, to be precomputed.
37189 * @private
37190 */
37191 _init:[],
37192 /*
37193 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
37194 */
37195
37196 /**
37197 * The SHA-256 hash key, to be precomputed.
37198 * @private
37199 */
37200 _key:[],
37201 /*
37202 _key:
37203 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
37204 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
37205 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
37206 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
37207 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
37208 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
37209 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
37210 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
37211 */
37212
37213
37214 /**
37215 * Function to precompute _init and _key.
37216 * @private
37217 */
37218 _precompute: function () {
37219 var i = 0, prime = 2, factor;
37220
37221 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
37222
37223 outer: for (; i<64; prime++) {
37224 for (factor=2; factor*factor <= prime; factor++) {
37225 if (prime % factor === 0) {
37226 // not a prime
37227 continue outer;
37228 }
37229 }
37230
37231 if (i<8) {
37232 this._init[i] = frac(Math.pow(prime, 1/2));
37233 }
37234 this._key[i] = frac(Math.pow(prime, 1/3));
37235 i++;
37236 }
37237 },
37238
37239 /**
37240 * Perform one cycle of SHA-256.
37241 * @param {bitArray} words one block of words.
37242 * @private
37243 */
37244 _block:function (words) {
37245 var i, tmp, a, b,
37246 w = words.slice(0),
37247 h = this._h,
37248 k = this._key,
37249 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
37250 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
37251
37252 /* Rationale for placement of |0 :
37253 * If a value can overflow is original 32 bits by a factor of more than a few
37254 * million (2^23 ish), there is a possibility that it might overflow the
37255 * 53-bit mantissa and lose precision.
37256 *
37257 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
37258 * propagates around the loop, and on the hash state h[]. I don't believe
37259 * that the clamps on h4 and on h0 are strictly necessary, but it's close
37260 * (for h4 anyway), and better safe than sorry.
37261 *
37262 * The clamps on h[] are necessary for the output to be correct even in the
37263 * common case and for short inputs.
37264 */
37265 for (i=0; i<64; i++) {
37266 // load up the input word for this round
37267 if (i<16) {
37268 tmp = w[i];
37269 } else {
37270 a = w[(i+1 ) & 15];
37271 b = w[(i+14) & 15];
37272 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
37273 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
37274 w[i&15] + w[(i+9) & 15]) | 0;
37275 }
37276
37277 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
37278
37279 // shift register
37280 h7 = h6; h6 = h5; h5 = h4;
37281 h4 = h3 + tmp | 0;
37282 h3 = h2; h2 = h1; h1 = h0;
37283
37284 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
37285 }
37286
37287 h[0] = h[0]+h0 | 0;
37288 h[1] = h[1]+h1 | 0;
37289 h[2] = h[2]+h2 | 0;
37290 h[3] = h[3]+h3 | 0;
37291 h[4] = h[4]+h4 | 0;
37292 h[5] = h[5]+h5 | 0;
37293 h[6] = h[6]+h6 | 0;
37294 h[7] = h[7]+h7 | 0;
37295 }
37296 };
37297 </script>
37298 <script>// An extremely basic translation library
37299 //
37300 // Example usage:
37301 //
37302 // Set some html to be translated. Do this using the 'data-translate' attribute:
37303 //
37304 // <div data-translate>Test</div>
37305 // <div data-translate-html><em>keep em tag</em></div>
37306 // <input data-translate-placeholder placeholder="Example placeholder">
37307 // <span data-translate-title title="Example title"></span>
37308 //
37309 // Obtain all the phrases to be translated via js debug console:
37310 //
37311 // Translate.phrasesAsJson();
37312 //
37313 // Use that template to translate the phrases into another language.
37314 // Leave the key the same. Change the value to the new language.
37315 //
37316 // Create a js file to load the new phrases. In this example for Spanish,
37317 // es.js will contain the following code:
37318 //
37319 // Translate.loadForeignPhrases("es", {
37320 // "Test": "Test in Spanish",
37321 // "<em>keep em tag</em>": "<em>keep em tag in Spanish</em>",
37322 // "Example placeholder": "Example placeholder in Spanish"
37323 // "Example title": "Example title in Spanish"
37324 // });
37325 //
37326 // In your UI put a listener for clicking on the Spanish button:
37327 //
37328 // mySpanishButton.addEventListener("click", function() {
37329 // Translate.setLanguage("es");
37330 // });
37331 // myEnglishButton.addEventListener("click", function() {
37332 // Translate.setLanguage("en");
37333 // });
37334
37335 Translate = new (function() {
37336
37337 var defaultLanguage = "en";
37338
37339 var allPhrases = {};
37340 allPhrases[defaultLanguage] = {};
37341
37342 // Node types
37343
37344 var text = {
37345 selector: "[data-translate]",
37346 getKey: function() {
37347 return this.textContent.trim().replace(/\s+/g, " ");
37348 },
37349 setPhrase: function(p) {
37350 this.textContent = p;
37351 },
37352 }
37353
37354 var html = {
37355 selector: "[data-translate-html]",
37356 getKey: function() {
37357 return this.innerHTML.trim().replace(/\s+/g, " ");
37358 },
37359 setPhrase: function(p) {
37360 this.innerHTML = p;
37361 },
37362 }
37363
37364 var placeholder = {
37365 selector: "[data-translate-placeholder]",
37366 getKey: function() {
37367 return this.getAttribute("placeholder").trim().replace(/\s+/g, " ");
37368 },
37369 setPhrase: function(p) {
37370 this.setAttribute("placeholder", p);
37371 },
37372 }
37373
37374 var title = {
37375 selector: "[data-translate-title]",
37376 getKey: function() {
37377 return this.getAttribute("title").trim().replace(/\s+/g, " ");
37378 },
37379 setPhrase: function(p) {
37380 this.setAttribute("title", p);
37381 },
37382 }
37383
37384 // Get elements to be translated
37385 var allEls = getEls(text)
37386 .concat(getEls(html))
37387 .concat(getEls(placeholder))
37388 .concat(getEls(title));
37389
37390 // Provides access to phrases from a non-default language.
37391 // See phrases_en.js for example usage.
37392 this.loadForeignPhrases = function(language, phrases) {
37393 allPhrases[language] = phrases;
37394 }
37395
37396 // Displays a different language, eg "en" or "fr"
37397 this.setLanguage = function(language) {
37398 for (var i=0; i<allEls.length; i++) {
37399 var el = allEls[i];
37400 var key = el.key;
37401 if (!(language in allPhrases)) {
37402 console.log(language + " not in allPhrases");
37403 return;
37404 }
37405 if (!(key in allPhrases[language])) {
37406 console.log(language + " does not contain phrase: " + key);
37407 return;
37408 }
37409 var phrase = allPhrases[language][key];
37410 el.setPhrase(phrase);
37411 }
37412 }
37413
37414 // Converts the phrases to a key-pair json file.
37415 // This is a good way to export phrases for use in translation tools.
37416 this.phrasesAsJson = function(language) {
37417 var keys = [];
37418 for (var i=0; i<allEls.length; i++) {
37419 var el = allEls[i];
37420 var key = el.key;
37421 keys.push(key);
37422 }
37423 keys.sort();
37424 var output = {};
37425 for (var i=0; i<keys.length; i++) {
37426 var key = keys[i];
37427 var translated = "";
37428 if (language in allPhrases && key in allPhrases[language]) {
37429 translated = allPhrases[language][key];
37430 }
37431 output[key] = translated;
37432 }
37433 return JSON.stringify(output, null, 2);
37434 }
37435
37436 function getEls(nodeType) {
37437 var nodes = document.querySelectorAll(nodeType.selector);
37438 var els = [];
37439 for (var i=0; i<nodes.length; i++) {
37440 var node = nodes[i];
37441 node.getKey = nodeType.getKey;
37442 node.setPhrase = nodeType.setPhrase;
37443 node.key = node.getKey();
37444 allPhrases[defaultLanguage][node.key] = node.key;
37445 els.push(node);
37446 }
37447 return els;
37448 }
37449
37450 })();
37451 </script>
37452 <script>Translate.loadForeignPhrases("en",
37453 {
37454 "<code>m/44'/0'/0'/0</code> generates public addresses": "<code>m/44'/0'/0'/0</code> generates public addresses",
37455 "<code>m/44'/0'/0'/1</code> generates change addresses": "<code>m/44'/0'/0'/1</code> generates change addresses",
37456 "<code>m/44'/0'/0'</code> generates extended keys for import / export": "<code>m/44'/0'/0'</code> generates extended keys for import / export",
37457 "<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).": "<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).",
37458 "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards": "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards",
37459 "Account": "Account",
37460 "Address": "Address",
37461 "Alternatively, download the file from the repository": "Alternatively, download the file from the repository",
37462 "BIP32 Derivation Path": "BIP32 Derivation Path",
37463 "BIP32 Extended Key": "BIP32 Extended Key",
37464 "BIP32 Extended Key (addresses only)": "BIP32 Extended Key (addresses only)",
37465 "BIP32 Root Key": "BIP32 Root Key",
37466 "BIP39 Mnemonic": "BIP39 Mnemonic",
37467 "BIP39 Passphrase (optional)": "BIP39 Passphrase (optional)",
37468 "BIP39 Seed": "BIP39 Seed",
37469 "Base 10": "Base 10",
37470 "Base 6": "Base 6",
37471 "Be careful - it can be easy to make mistakes if you don't know what you're doing.": "Be careful - it can be easy to make mistakes if you don't know what you're doing.",
37472 "Binary": "Binary",
37473 "Bitcoin Core": "Bitcoin Core",
37474 "Bits Per Event": "Bits Per Event",
37475 "Block Explorers": "Block Explorers",
37476 "Can be used with": "Can be used with",
37477 "Card": "Card",
37478 "Coin": "Coin",
37479 "Dice": "Dice",
37480 "Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't random enough for the needs of this tool.": "Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't random enough for the needs of this tool.",
37481 "Double-click that file to open it in a browser on any offline computer.": "Double-click that file to open it in a browser on any offline computer.",
37482 "Entropy": "Entropy",
37483 "Entropy Type": "Entropy Type",
37484 "Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.": "Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.",
37485 "Entropy values must be sourced from a <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\" target=\"_blank\">strong source of randomness</a>.": "Entropy values must be sourced from a <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\" target=\"_blank\">strong source of randomness</a>.",
37486 "Event Count": "Event Count",
37487 "External / Internal": "External / Internal",
37488 "Filtered Entropy": "Filtered Entropy",
37489 "For more info see the <a href=\"http://www.mycelium.com/\" target=\"_blank\">Mycelium Wallet homepage</a>": "For more info see the <a href=\"http://www.mycelium.com/\" target=\"_blank\">Mycelium Wallet homepage</a>",
37490 "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\" target=\"_blank\">BIP39 spec</a>.": "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\" target=\"_blank\">BIP39 spec</a>.",
37491 "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">BIP44 spec</a>.": "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">BIP44 spec</a>.",
37492 "For more info see the <a href=\"https://github.com/bitcoin/bitcoin/pull/8035\" target=\"_blank\">Bitcoin Core BIP32 implementation</a>": "For more info see the <a href=\"https://github.com/bitcoin/bitcoin/pull/8035\" target=\"_blank\">Bitcoin Core BIP32 implementation</a>",
37493 "For more info see the BIP32 spec": "For more info see the BIP32 spec",
37494 "From entropy length (3 words per 32 bits)": "From entropy length (3 words per 32 bits)",
37495 "Generate a random mnemonic, or enter your own below": "Generate a random mnemonic, or enter your own below",
37496 "Get the source code from the repository": "Get the source code from the repository",
37497 "Hex": "Hex",
37498 "Hierarchical Deterministic Wallets": "Hierarchical Deterministic Wallets",
37499 "If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.": "If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.",
37500 "In that case you might choose to use your own source of entropy.": "In that case you might choose to use your own source of entropy.",
37501 "In your browser, select file save-as, and save this page as a file.": "In your browser, select file save-as, and save this page as a file.",
37502 "Libraries": "Libraries",
37503 "Mnemonic Language": "Mnemonic Language",
37504 "Mnemonic Length": "Mnemonic Length",
37505 "Mnemonic code for generating deterministic keys": "Mnemonic code for generating deterministic keys",
37506 "More info": "More info",
37507 "Multi-Account Hierarchy for Deterministic Wallets": "Multi-Account Hierarchy for Deterministic Wallets",
37508 "Mycelium Wallet": "Mycelium Wallet",
37509 "Note these addreses are derived from the BIP32 Extended Key": "Note these addreses are derived from the BIP32 Extended Key",
37510 "Offline Usage": "Offline Usage",
37511 "Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.": "Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.",
37512 "Path": "Path",
37513 "Private Key": "Private Key",
37514 "Private Keys": "Private Keys",
37515 "Public Key": "Public Key",
37516 "Purpose": "Purpose",
37517 "Raw Binary": "Raw Binary",
37518 "Read more": "Read more",
37519 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\" target=\"_blank\">official BIP32 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\" target=\"_blank\">official BIP32 spec</a>",
37520 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">official BIP39 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">official BIP39 spec</a>",
37521 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">official BIP44 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">official BIP44 spec</a>",
37522 "See the demo at <a href=\"http://bip32.org/\" target=\"_blank\">bip32.org</a>": "See the demo at <a href=\"http://bip32.org/\" target=\"_blank\">bip32.org</a>",
37523 "Show": "Show",
37524 "Show more rows": "Show more rows",
37525 "Strength": "Strength",
37526 "Supply my own source of entropy": "Supply my own source of entropy",
37527 "The built in random generator can generally be trusted more than your own intuition about randomness.": "The built in random generator can generally be trusted more than your own intuition about randomness.",
37528 "The random mnemonic generator on this page uses a <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues\" target=\"_blank\">cryptographically secure random number generator</a>.": "The random mnemonic generator on this page uses a <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues\" target=\"_blank\">cryptographically secure random number generator</a>.",
37529 "This means flipping a fair coin, rolling a fair dice, noise measurements etc.": "This means flipping a fair coin, rolling a fair dice, noise measurements etc.",
37530 "This project is 100% open-source code": "This project is 100% open-source code",
37531 "Toggle": "Toggle",
37532 "Total Bits": "Total Bits",
37533 "Use hardened addresses": "Use hardened addresses",
37534 "Use path <code>m/0'/0'</code> with hardened addresses.": "Use path <code>m/0'/0'</code> with hardened addresses.",
37535 "Use path <code>m/44'/0'/0'</code>.": "Use path <code>m/44'/0'/0'</code>.",
37536 "Use private keys at <a href=\"https://web.archive.org/web/20150707020924/https://brainwallet.org/\" target=\"_blank\">brainwallet.org</a>.": "Use private keys at <a href=\"https://web.archive.org/web/20150707020924/https://brainwallet.org/\" target=\"_blank\">brainwallet.org</a>.",
37537 "Valid entropy values include:": "Valid entropy values include:",
37538 "Warning": "Warning",
37539 "Word Count": "Word Count",
37540 "You are not a good source of entropy.": "You are not a good source of entropy.",
37541 "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).": "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).",
37542 "You can use this tool without having to be online.": "You can use this tool without having to be online.",
37543 "words": "words"
37544 }
37545 );
37546 </script>
37547 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
37548 WORDLISTS["english"] = [
37549 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
37550 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
37551 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
37552 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
37553 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
37554 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
37555 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
37556 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
37557 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
37558 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
37559 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
37560 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
37561 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
37562 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
37563 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
37564 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
37565 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
37566 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
37567 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
37568 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
37569 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
37570 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
37571 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
37572 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
37573 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
37574 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
37575 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
37576 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
37577 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
37578 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
37579 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
37580 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
37581 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
37582 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
37583 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
37584 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
37585 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
37586 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
37587 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
37588 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
37589 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
37590 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
37591 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
37592 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
37593 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
37594 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
37595 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
37596 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
37597 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
37598 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
37599 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
37600 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
37601 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
37602 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
37603 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
37604 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
37605 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
37606 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
37607 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
37608 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
37609 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
37610 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
37611 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
37612 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
37613 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
37614 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
37615 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
37616 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
37617 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
37618 "film","filter","final","find","fine","finger","finish","fire","firm","first",
37619 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
37620 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
37621 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
37622 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
37623 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
37624 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
37625 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
37626 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
37627 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
37628 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
37629 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
37630 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
37631 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
37632 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
37633 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
37634 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
37635 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
37636 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
37637 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
37638 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
37639 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
37640 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
37641 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
37642 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
37643 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
37644 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
37645 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
37646 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
37647 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
37648 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
37649 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
37650 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
37651 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
37652 "liar","liberty","library","license","life","lift","light","like","limb","limit",
37653 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
37654 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
37655 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
37656 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
37657 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
37658 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
37659 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
37660 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
37661 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
37662 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
37663 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
37664 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
37665 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
37666 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
37667 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
37668 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
37669 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
37670 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
37671 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
37672 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
37673 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
37674 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
37675 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
37676 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
37677 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
37678 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
37679 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
37680 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
37681 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
37682 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
37683 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
37684 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
37685 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
37686 "prize","problem","process","produce","profit","program","project","promote","proof","property",
37687 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
37688 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
37689 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
37690 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
37691 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
37692 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
37693 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
37694 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
37695 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
37696 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
37697 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
37698 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
37699 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
37700 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
37701 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
37702 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
37703 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
37704 "scrub","sea","search","season","seat","second","secret","section","security","seed",
37705 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
37706 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
37707 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
37708 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
37709 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
37710 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
37711 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
37712 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
37713 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
37714 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
37715 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
37716 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
37717 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
37718 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
37719 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
37720 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
37721 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
37722 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
37723 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
37724 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
37725 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
37726 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
37727 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
37728 "thank","that","theme","then","theory","there","they","thing","this","thought",
37729 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
37730 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
37731 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
37732 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
37733 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
37734 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
37735 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
37736 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
37737 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
37738 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
37739 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
37740 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
37741 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
37742 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
37743 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
37744 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
37745 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
37746 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
37747 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
37748 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
37749 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
37750 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
37751 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
37752 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
37753 "yellow","you","young","youth","zebra","zero","zone","zoo"]
37754 </script>
37755 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
37756 WORDLISTS["japanese"] = [
37757 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
37758 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
37759 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
37760 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
37761 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
37762 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
37763 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
37764 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
37765 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
37766 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
37767 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
37768 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
37769 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
37770 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
37771 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
37772 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
37773 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
37774 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
37775 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
37776 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
37777 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
37778 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
37779 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
37780 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
37781 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
37782 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
37783 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
37784 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
37785 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
37786 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
37787 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
37788 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
37789 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
37790 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
37791 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
37792 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
37793 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
37794 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
37795 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
37796 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
37797 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
37798 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
37799 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
37800 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
37801 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
37802 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
37803 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
37804 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
37805 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
37806 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
37807 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
37808 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
37809 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
37810 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
37811 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
37812 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
37813 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
37814 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
37815 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
37816 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
37817 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
37818 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
37819 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
37820 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
37821 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
37822 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
37823 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
37824 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
37825 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
37826 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
37827 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
37828 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
37829 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
37830 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
37831 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
37832 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
37833 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
37834 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
37835 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
37836 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
37837 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
37838 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
37839 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
37840 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
37841 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
37842 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
37843 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
37844 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
37845 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
37846 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
37847 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
37848 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
37849 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
37850 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
37851 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
37852 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
37853 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
37854 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
37855 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
37856 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
37857 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
37858 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
37859 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
37860 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
37861 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
37862 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
37863 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
37864 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
37865 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
37866 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
37867 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
37868 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
37869 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
37870 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
37871 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
37872 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
37873 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
37874 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
37875 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
37876 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
37877 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
37878 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
37879 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
37880 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
37881 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
37882 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
37883 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
37884 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
37885 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
37886 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
37887 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
37888 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
37889 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
37890 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
37891 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
37892 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
37893 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
37894 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
37895 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
37896 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
37897 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
37898 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
37899 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
37900 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
37901 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
37902 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
37903 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
37904 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
37905 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
37906 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
37907 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
37908 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
37909 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
37910 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
37911 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
37912 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
37913 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
37914 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
37915 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
37916 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
37917 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
37918 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
37919 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
37920 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
37921 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
37922 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
37923 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
37924 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
37925 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
37926 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
37927 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
37928 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
37929 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
37930 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
37931 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
37932 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
37933 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
37934 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
37935 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
37936 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
37937 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
37938 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
37939 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
37940 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
37941 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
37942 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
37943 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
37944 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
37945 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
37946 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
37947 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
37948 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
37949 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
37950 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
37951 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
37952 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
37953 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
37954 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
37955 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
37956 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
37957 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
37958 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
37959 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
37960 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
37961 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
37962 </script>
37963 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
37964 WORDLISTS["spanish"] = [
37965 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
37966 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
37967 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
37968 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
37969 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
37970 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
37971 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
37972 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
37973 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
37974 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
37975 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
37976 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
37977 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
37978 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
37979 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
37980 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
37981 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
37982 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
37983 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
37984 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
37985 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
37986 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
37987 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
37988 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
37989 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
37990 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
37991 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
37992 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
37993 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
37994 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
37995 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
37996 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
37997 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
37998 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
37999 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
38000 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
38001 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
38002 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
38003 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
38004 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
38005 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
38006 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
38007 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
38008 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
38009 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
38010 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
38011 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
38012 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
38013 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
38014 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
38015 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
38016 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
38017 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
38018 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
38019 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
38020 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
38021 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
38022 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
38023 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
38024 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
38025 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
38026 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
38027 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
38028 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
38029 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
38030 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
38031 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
38032 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
38033 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
38034 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
38035 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
38036 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
38037 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
38038 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
38039 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
38040 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
38041 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
38042 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
38043 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
38044 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
38045 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
38046 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
38047 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
38048 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
38049 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
38050 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
38051 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
38052 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
38053 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
38054 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
38055 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
38056 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
38057 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
38058 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
38059 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
38060 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
38061 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
38062 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
38063 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
38064 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
38065 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
38066 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
38067 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
38068 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
38069 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
38070 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
38071 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
38072 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
38073 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
38074 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
38075 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
38076 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
38077 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
38078 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
38079 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
38080 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
38081 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
38082 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
38083 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
38084 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
38085 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
38086 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
38087 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
38088 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
38089 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
38090 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
38091 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
38092 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
38093 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
38094 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
38095 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
38096 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
38097 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
38098 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
38099 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
38100 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
38101 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
38102 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
38103 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
38104 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
38105 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
38106 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
38107 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
38108 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
38109 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
38110 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
38111 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
38112 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
38113 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
38114 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
38115 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
38116 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
38117 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
38118 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
38119 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
38120 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
38121 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
38122 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
38123 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
38124 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
38125 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
38126 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
38127 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
38128 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
38129 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
38130 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
38131 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
38132 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
38133 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
38134 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
38135 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
38136 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
38137 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
38138 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
38139 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
38140 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
38141 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
38142 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
38143 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
38144 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
38145 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
38146 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
38147 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
38148 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
38149 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
38150 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
38151 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
38152 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
38153 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
38154 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
38155 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
38156 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
38157 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
38158 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
38159 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
38160 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
38161 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
38162 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
38163 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
38164 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
38165 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
38166 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
38167 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
38168 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
38169 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
38170 </script>
38171 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38172 WORDLISTS["chinese_simplified"] = [
38173 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
38174 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
38175 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
38176 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
38177 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
38178 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
38179 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
38180 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
38181 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
38182 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
38183 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
38184 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
38185 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
38186 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
38187 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
38188 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
38189 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
38190 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
38191 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
38192 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
38193 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
38194 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
38195 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
38196 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
38197 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
38198 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
38199 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
38200 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
38201 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
38202 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
38203 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
38204 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
38205 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
38206 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
38207 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
38208 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
38209 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
38210 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
38211 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
38212 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
38213 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
38214 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
38215 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
38216 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
38217 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
38218 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
38219 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
38220 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
38221 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
38222 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
38223 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
38224 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
38225 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
38226 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
38227 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
38228 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
38229 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
38230 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
38231 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
38232 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
38233 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
38234 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
38235 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
38236 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
38237 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
38238 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
38239 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
38240 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
38241 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
38242 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
38243 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
38244 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
38245 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
38246 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
38247 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
38248 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
38249 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
38250 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
38251 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
38252 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
38253 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
38254 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
38255 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
38256 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
38257 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
38258 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
38259 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
38260 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
38261 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
38262 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
38263 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
38264 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
38265 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
38266 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
38267 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
38268 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
38269 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
38270 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
38271 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
38272 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
38273 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
38274 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
38275 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
38276 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
38277 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
38278 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
38279 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
38280 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
38281 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
38282 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
38283 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
38284 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
38285 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
38286 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
38287 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
38288 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
38289 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
38290 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
38291 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
38292 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
38293 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
38294 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
38295 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
38296 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
38297 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
38298 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
38299 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
38300 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
38301 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
38302 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
38303 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
38304 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
38305 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
38306 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
38307 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
38308 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
38309 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
38310 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
38311 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
38312 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
38313 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
38314 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
38315 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
38316 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
38317 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
38318 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
38319 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
38320 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
38321 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
38322 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
38323 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
38324 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
38325 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
38326 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
38327 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
38328 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
38329 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
38330 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
38331 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
38332 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
38333 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
38334 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
38335 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
38336 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
38337 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
38338 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
38339 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
38340 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
38341 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
38342 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
38343 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
38344 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
38345 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
38346 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
38347 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
38348 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
38349 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
38350 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
38351 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
38352 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
38353 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
38354 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
38355 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
38356 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
38357 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
38358 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
38359 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
38360 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
38361 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
38362 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
38363 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
38364 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
38365 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
38366 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
38367 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
38368 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
38369 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
38370 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
38371 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
38372 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
38373 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
38374 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
38375 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
38376 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
38377 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
38378 </script>
38379 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38380 WORDLISTS["chinese_traditional"] = [
38381 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
38382 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
38383 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
38384 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
38385 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
38386 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
38387 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
38388 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
38389 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
38390 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
38391 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
38392 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
38393 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
38394 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
38395 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
38396 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
38397 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
38398 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
38399 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
38400 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
38401 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
38402 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
38403 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
38404 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
38405 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
38406 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
38407 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
38408 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
38409 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
38410 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
38411 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
38412 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
38413 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
38414 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
38415 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
38416 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
38417 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
38418 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
38419 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
38420 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
38421 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
38422 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
38423 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
38424 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
38425 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
38426 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
38427 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
38428 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
38429 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
38430 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
38431 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
38432 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
38433 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
38434 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
38435 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
38436 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
38437 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
38438 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
38439 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
38440 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
38441 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
38442 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
38443 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
38444 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
38445 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
38446 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
38447 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
38448 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
38449 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
38450 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
38451 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
38452 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
38453 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
38454 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
38455 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
38456 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
38457 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
38458 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
38459 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
38460 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
38461 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
38462 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
38463 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
38464 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
38465 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
38466 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
38467 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
38468 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
38469 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
38470 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
38471 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
38472 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
38473 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
38474 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
38475 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
38476 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
38477 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
38478 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
38479 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
38480 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
38481 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
38482 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
38483 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
38484 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
38485 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
38486 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
38487 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
38488 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
38489 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
38490 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
38491 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
38492 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
38493 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
38494 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
38495 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
38496 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
38497 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
38498 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
38499 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
38500 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
38501 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
38502 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
38503 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
38504 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
38505 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
38506 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
38507 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
38508 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
38509 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
38510 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
38511 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
38512 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
38513 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
38514 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
38515 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
38516 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
38517 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
38518 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
38519 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
38520 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
38521 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
38522 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
38523 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
38524 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
38525 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
38526 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
38527 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
38528 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
38529 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
38530 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
38531 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
38532 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
38533 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
38534 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
38535 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
38536 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
38537 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
38538 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
38539 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
38540 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
38541 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
38542 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
38543 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
38544 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
38545 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
38546 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
38547 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
38548 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
38549 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
38550 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
38551 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
38552 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
38553 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
38554 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
38555 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
38556 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
38557 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
38558 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
38559 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
38560 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
38561 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
38562 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
38563 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
38564 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
38565 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
38566 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
38567 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
38568 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
38569 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
38570 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
38571 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
38572 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
38573 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
38574 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
38575 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
38576 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
38577 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
38578 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
38579 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
38580 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
38581 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
38582 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
38583 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
38584 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
38585 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
38586 </script>
38587 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38588 WORDLISTS["french"] = [
38589 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
38590 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
38591 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
38592 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
38593 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
38594 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
38595 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
38596 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
38597 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
38598 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
38599 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
38600 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
38601 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
38602 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
38603 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
38604 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
38605 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
38606 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
38607 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
38608 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
38609 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
38610 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
38611 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
38612 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
38613 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
38614 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
38615 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
38616 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
38617 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
38618 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
38619 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
38620 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
38621 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
38622 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
38623 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
38624 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
38625 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
38626 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
38627 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
38628 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
38629 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
38630 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
38631 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
38632 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
38633 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
38634 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
38635 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
38636 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
38637 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
38638 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
38639 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
38640 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
38641 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
38642 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
38643 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
38644 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
38645 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
38646 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
38647 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
38648 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
38649 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
38650 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
38651 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
38652 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
38653 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
38654 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
38655 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
38656 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
38657 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
38658 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
38659 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
38660 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
38661 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
38662 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
38663 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
38664 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
38665 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
38666 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
38667 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
38668 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
38669 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
38670 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
38671 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
38672 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
38673 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
38674 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
38675 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
38676 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
38677 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
38678 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
38679 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
38680 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
38681 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
38682 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
38683 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
38684 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
38685 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
38686 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
38687 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
38688 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
38689 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
38690 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
38691 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
38692 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
38693 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
38694 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
38695 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
38696 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
38697 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
38698 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
38699 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
38700 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
38701 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
38702 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
38703 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
38704 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
38705 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
38706 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
38707 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
38708 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
38709 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
38710 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
38711 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
38712 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
38713 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
38714 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
38715 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
38716 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
38717 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
38718 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
38719 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
38720 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
38721 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
38722 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
38723 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
38724 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
38725 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
38726 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
38727 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
38728 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
38729 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
38730 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
38731 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
38732 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
38733 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
38734 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
38735 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
38736 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
38737 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
38738 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
38739 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
38740 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
38741 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
38742 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
38743 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
38744 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
38745 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
38746 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
38747 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
38748 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
38749 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
38750 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
38751 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
38752 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
38753 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
38754 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
38755 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
38756 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
38757 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
38758 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
38759 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
38760 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
38761 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
38762 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
38763 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
38764 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
38765 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
38766 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
38767 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
38768 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
38769 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
38770 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
38771 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
38772 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
38773 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
38774 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
38775 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
38776 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
38777 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
38778 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
38779 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
38780 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
38781 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
38782 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
38783 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
38784 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
38785 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
38786 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
38787 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
38788 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
38789 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
38790 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
38791 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
38792 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
38793 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
38794 </script>
38795 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38796 WORDLISTS["italian"] = [
38797 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
38798 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
38799 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
38800 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
38801 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
38802 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
38803 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
38804 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
38805 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
38806 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
38807 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
38808 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
38809 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
38810 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
38811 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
38812 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
38813 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
38814 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
38815 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
38816 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
38817 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
38818 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
38819 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
38820 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
38821 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
38822 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
38823 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
38824 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
38825 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
38826 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
38827 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
38828 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
38829 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
38830 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
38831 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
38832 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
38833 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
38834 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
38835 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
38836 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
38837 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
38838 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
38839 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
38840 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
38841 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
38842 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
38843 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
38844 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
38845 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
38846 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
38847 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
38848 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
38849 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
38850 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
38851 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
38852 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
38853 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
38854 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
38855 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
38856 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
38857 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
38858 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
38859 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
38860 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
38861 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
38862 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
38863 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
38864 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
38865 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
38866 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
38867 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
38868 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
38869 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
38870 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
38871 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
38872 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
38873 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
38874 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
38875 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
38876 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
38877 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
38878 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
38879 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
38880 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
38881 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
38882 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
38883 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
38884 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
38885 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
38886 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
38887 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
38888 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
38889 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
38890 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
38891 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
38892 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
38893 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
38894 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
38895 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
38896 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
38897 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
38898 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
38899 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
38900 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
38901 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
38902 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
38903 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
38904 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
38905 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
38906 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
38907 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
38908 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
38909 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
38910 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
38911 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
38912 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
38913 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
38914 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
38915 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
38916 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
38917 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
38918 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
38919 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
38920 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
38921 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
38922 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
38923 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
38924 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
38925 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
38926 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
38927 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
38928 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
38929 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
38930 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
38931 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
38932 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
38933 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
38934 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
38935 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
38936 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
38937 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
38938 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
38939 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
38940 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
38941 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
38942 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
38943 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
38944 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
38945 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
38946 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
38947 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
38948 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
38949 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
38950 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
38951 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
38952 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
38953 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
38954 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
38955 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
38956 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
38957 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
38958 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
38959 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
38960 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
38961 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
38962 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
38963 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
38964 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
38965 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
38966 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
38967 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
38968 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
38969 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
38970 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
38971 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
38972 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
38973 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
38974 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
38975 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
38976 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
38977 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
38978 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
38979 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
38980 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
38981 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
38982 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
38983 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
38984 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
38985 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
38986 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
38987 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
38988 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
38989 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
38990 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
38991 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
38992 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
38993 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
38994 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
38995 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
38996 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
38997 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
38998 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
38999 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
39000 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
39001 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
39002 </script>
39003 <script>/*
39004 * Copyright (c) 2013 Pavol Rusnak
39005 *
39006 * Permission is hereby granted, free of charge, to any person obtaining a copy of
39007 * this software and associated documentation files (the "Software"), to deal in
39008 * the Software without restriction, including without limitation the rights to
39009 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
39010 * of the Software, and to permit persons to whom the Software is furnished to do
39011 * so, subject to the following conditions:
39012 *
39013 * The above copyright notice and this permission notice shall be included in all
39014 * copies or substantial portions of the Software.
39015 *
39016 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
39017 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
39018 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
39019 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
39020 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
39021 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39022 */
39023
39024 /*
39025 * Javascript port from python by Ian Coleman
39026 *
39027 * Requires code from sjcl
39028 * https://github.com/bitwiseshiftleft/sjcl
39029 */
39030
39031 var Mnemonic = function(language) {
39032
39033 var PBKDF2_ROUNDS = 2048;
39034 var RADIX = 2048;
39035
39036 var self = this;
39037 var wordlist = [];
39038
39039 var hmacSHA512 = function(key) {
39040 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
39041 this.encrypt = function() {
39042 return hasher.encrypt.apply(hasher, arguments);
39043 };
39044 };
39045
39046 function init() {
39047 wordlist = WORDLISTS[language];
39048 if (wordlist.length != RADIX) {
39049 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
39050 throw err;
39051 }
39052 }
39053
39054 self.generate = function(strength) {
39055 strength = strength || 128;
39056 var r = strength % 32;
39057 if (r > 0) {
39058 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
39059 }
39060 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
39061 if (!hasStrongCrypto) {
39062 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
39063 }
39064 var buffer = new Uint8Array(strength / 8);
39065 var data = crypto.getRandomValues(buffer);
39066 return self.toMnemonic(data);
39067 }
39068
39069 self.toMnemonic = function(byteArray) {
39070 if (byteArray.length % 4 > 0) {
39071 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
39072 }
39073
39074 //h = hashlib.sha256(data).hexdigest()
39075 var data = byteArrayToWordArray(byteArray);
39076 var hash = sjcl.hash.sha256.hash(data);
39077 var h = sjcl.codec.hex.fromBits(hash);
39078
39079 // b is a binary string, eg '00111010101100...'
39080 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
39081 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
39082 //
39083 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
39084 // c = bin(int(h, 16))[2:].zfill(256)
39085 // d = c[:len(data) * 8 / 32]
39086 var a = byteArrayToBinaryString(byteArray);
39087 var c = zfill(hexStringToBinaryString(h), 256);
39088 var d = c.substring(0, byteArray.length * 8 / 32);
39089 // b = line1 + line2
39090 var b = a + d;
39091
39092 var result = [];
39093 var blen = b.length / 11;
39094 for (var i=0; i<blen; i++) {
39095 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
39096 result.push(wordlist[idx]);
39097 }
39098 return self.joinWords(result);
39099 }
39100
39101 self.check = function(mnemonic) {
39102 var mnemonic = self.splitWords(mnemonic);
39103 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
39104 return false
39105 }
39106 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
39107 var idx = [];
39108 for (var i=0; i<mnemonic.length; i++) {
39109 var word = mnemonic[i];
39110 var wordIndex = wordlist.indexOf(word);
39111 if (wordIndex == -1) {
39112 return false;
39113 }
39114 var binaryIndex = zfill(wordIndex.toString(2), 11);
39115 idx.push(binaryIndex);
39116 }
39117 var b = idx.join('');
39118 var l = b.length;
39119 //d = b[:l / 33 * 32]
39120 //h = b[-l / 33:]
39121 var d = b.substring(0, l / 33 * 32);
39122 var h = b.substring(l - l / 33, l);
39123 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
39124 var nd = binaryStringToWordArray(d);
39125 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
39126 var ndHash = sjcl.hash.sha256.hash(nd);
39127 var ndHex = sjcl.codec.hex.fromBits(ndHash);
39128 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
39129 var nh = ndBstr.substring(0,l/33);
39130 return h == nh;
39131 }
39132
39133 self.toSeed = function(mnemonic, passphrase) {
39134 passphrase = passphrase || '';
39135 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
39136 passphrase = self.normalizeString(passphrase)
39137 passphrase = "mnemonic" + passphrase;
39138 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
39139 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
39140 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
39141 var hashHex = sjcl.codec.hex.fromBits(result);
39142 return hashHex;
39143 }
39144
39145 self.splitWords = function(mnemonic) {
39146 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
39147 }
39148
39149 self.joinWords = function(words) {
39150 // Set space correctly depending on the language
39151 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
39152 var space = " ";
39153 if (language == "japanese") {
39154 space = "\u3000"; // ideographic space
39155 }
39156 return words.join(space);
39157 }
39158
39159 self.normalizeString = function(str) {
39160 if (typeof str.normalize == "function") {
39161 return str.normalize("NFKD");
39162 }
39163 else {
39164 // TODO decide how to handle this in the future.
39165 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
39166 return str;
39167 }
39168 }
39169
39170 function byteArrayToWordArray(data) {
39171 var a = [];
39172 for (var i=0; i<data.length/4; i++) {
39173 v = 0;
39174 v += data[i*4 + 0] << 8 * 3;
39175 v += data[i*4 + 1] << 8 * 2;
39176 v += data[i*4 + 2] << 8 * 1;
39177 v += data[i*4 + 3] << 8 * 0;
39178 a.push(v);
39179 }
39180 return a;
39181 }
39182
39183 function byteArrayToBinaryString(data) {
39184 var bin = "";
39185 for (var i=0; i<data.length; i++) {
39186 bin += zfill(data[i].toString(2), 8);
39187 }
39188 return bin;
39189 }
39190
39191 function hexStringToBinaryString(hexString) {
39192 binaryString = "";
39193 for (var i=0; i<hexString.length; i++) {
39194 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
39195 }
39196 return binaryString;
39197 }
39198
39199 function binaryStringToWordArray(binary) {
39200 var aLen = binary.length / 32;
39201 var a = [];
39202 for (var i=0; i<aLen; i++) {
39203 var valueStr = binary.substring(0,32);
39204 var value = parseInt(valueStr, 2);
39205 a.push(value);
39206 binary = binary.slice(32);
39207 }
39208 return a;
39209 }
39210
39211 // Pad a numeric string on the left with zero digits until the given width
39212 // is reached.
39213 // Note this differs to the python implementation because it does not
39214 // handle numbers starting with a sign.
39215 function zfill(source, length) {
39216 source = source.toString();
39217 while (source.length < length) {
39218 source = '0' + source;
39219 }
39220 return source;
39221 }
39222
39223 init();
39224
39225 }
39226 </script>
39227 <script>/*
39228 JavaScript BigInteger library version 0.9.1
39229 http://silentmatt.com/biginteger/
39230
39231 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
39232 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
39233 Licensed under the MIT license.
39234
39235 Support for arbitrary internal representation base was added by
39236 Vitaly Magerya.
39237 */
39238
39239 /*
39240 File: biginteger.js
39241
39242 Exports:
39243
39244 <BigInteger>
39245 */
39246 (function(exports) {
39247 "use strict";
39248 /*
39249 Class: BigInteger
39250 An arbitrarily-large integer.
39251
39252 <BigInteger> objects should be considered immutable. None of the "built-in"
39253 methods modify *this* or their arguments. All properties should be
39254 considered private.
39255
39256 All the methods of <BigInteger> instances can be called "statically". The
39257 static versions are convenient if you don't already have a <BigInteger>
39258 object.
39259
39260 As an example, these calls are equivalent.
39261
39262 > BigInteger(4).multiply(5); // returns BigInteger(20);
39263 > BigInteger.multiply(4, 5); // returns BigInteger(20);
39264
39265 > var a = 42;
39266 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
39267 */
39268
39269 var CONSTRUCT = {}; // Unique token to call "private" version of constructor
39270
39271 /*
39272 Constructor: BigInteger()
39273 Convert a value to a <BigInteger>.
39274
39275 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
39276 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
39277 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
39278 without a radix argument.
39279
39280 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
39281 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
39282 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
39283 > var n3 = BigInteger(n2); // Return n2, unchanged
39284
39285 The constructor form only takes an array and a sign. *n* must be an
39286 array of numbers in little-endian order, where each digit is between 0
39287 and BigInteger.base. The second parameter sets the sign: -1 for
39288 negative, +1 for positive, or 0 for zero. The array is *not copied and
39289 may be modified*. If the array contains only zeros, the sign parameter
39290 is ignored and is forced to zero.
39291
39292 > new BigInteger([5], -1): create a new BigInteger with value -5
39293
39294 Parameters:
39295
39296 n - Value to convert to a <BigInteger>.
39297
39298 Returns:
39299
39300 A <BigInteger> value.
39301
39302 See Also:
39303
39304 <parse>, <BigInteger>
39305 */
39306 function BigInteger(n, s, token) {
39307 if (token !== CONSTRUCT) {
39308 if (n instanceof BigInteger) {
39309 return n;
39310 }
39311 else if (typeof n === "undefined") {
39312 return ZERO;
39313 }
39314 return BigInteger.parse(n);
39315 }
39316
39317 n = n || []; // Provide the nullary constructor for subclasses.
39318 while (n.length && !n[n.length - 1]) {
39319 --n.length;
39320 }
39321 this._d = n;
39322 this._s = n.length ? (s || 1) : 0;
39323 }
39324
39325 BigInteger._construct = function(n, s) {
39326 return new BigInteger(n, s, CONSTRUCT);
39327 };
39328
39329 // Base-10 speedup hacks in parse, toString, exp10 and log functions
39330 // require base to be a power of 10. 10^7 is the largest such power
39331 // that won't cause a precision loss when digits are multiplied.
39332 var BigInteger_base = 10000000;
39333 var BigInteger_base_log10 = 7;
39334
39335 BigInteger.base = BigInteger_base;
39336 BigInteger.base_log10 = BigInteger_base_log10;
39337
39338 var ZERO = new BigInteger([], 0, CONSTRUCT);
39339 // Constant: ZERO
39340 // <BigInteger> 0.
39341 BigInteger.ZERO = ZERO;
39342
39343 var ONE = new BigInteger([1], 1, CONSTRUCT);
39344 // Constant: ONE
39345 // <BigInteger> 1.
39346 BigInteger.ONE = ONE;
39347
39348 var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
39349 // Constant: M_ONE
39350 // <BigInteger> -1.
39351 BigInteger.M_ONE = M_ONE;
39352
39353 // Constant: _0
39354 // Shortcut for <ZERO>.
39355 BigInteger._0 = ZERO;
39356
39357 // Constant: _1
39358 // Shortcut for <ONE>.
39359 BigInteger._1 = ONE;
39360
39361 /*
39362 Constant: small
39363 Array of <BigIntegers> from 0 to 36.
39364
39365 These are used internally for parsing, but useful when you need a "small"
39366 <BigInteger>.
39367
39368 See Also:
39369
39370 <ZERO>, <ONE>, <_0>, <_1>
39371 */
39372 BigInteger.small = [
39373 ZERO,
39374 ONE,
39375 /* Assuming BigInteger_base > 36 */
39376 new BigInteger( [2], 1, CONSTRUCT),
39377 new BigInteger( [3], 1, CONSTRUCT),
39378 new BigInteger( [4], 1, CONSTRUCT),
39379 new BigInteger( [5], 1, CONSTRUCT),
39380 new BigInteger( [6], 1, CONSTRUCT),
39381 new BigInteger( [7], 1, CONSTRUCT),
39382 new BigInteger( [8], 1, CONSTRUCT),
39383 new BigInteger( [9], 1, CONSTRUCT),
39384 new BigInteger([10], 1, CONSTRUCT),
39385 new BigInteger([11], 1, CONSTRUCT),
39386 new BigInteger([12], 1, CONSTRUCT),
39387 new BigInteger([13], 1, CONSTRUCT),
39388 new BigInteger([14], 1, CONSTRUCT),
39389 new BigInteger([15], 1, CONSTRUCT),
39390 new BigInteger([16], 1, CONSTRUCT),
39391 new BigInteger([17], 1, CONSTRUCT),
39392 new BigInteger([18], 1, CONSTRUCT),
39393 new BigInteger([19], 1, CONSTRUCT),
39394 new BigInteger([20], 1, CONSTRUCT),
39395 new BigInteger([21], 1, CONSTRUCT),
39396 new BigInteger([22], 1, CONSTRUCT),
39397 new BigInteger([23], 1, CONSTRUCT),
39398 new BigInteger([24], 1, CONSTRUCT),
39399 new BigInteger([25], 1, CONSTRUCT),
39400 new BigInteger([26], 1, CONSTRUCT),
39401 new BigInteger([27], 1, CONSTRUCT),
39402 new BigInteger([28], 1, CONSTRUCT),
39403 new BigInteger([29], 1, CONSTRUCT),
39404 new BigInteger([30], 1, CONSTRUCT),
39405 new BigInteger([31], 1, CONSTRUCT),
39406 new BigInteger([32], 1, CONSTRUCT),
39407 new BigInteger([33], 1, CONSTRUCT),
39408 new BigInteger([34], 1, CONSTRUCT),
39409 new BigInteger([35], 1, CONSTRUCT),
39410 new BigInteger([36], 1, CONSTRUCT)
39411 ];
39412
39413 // Used for parsing/radix conversion
39414 BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
39415
39416 /*
39417 Method: toString
39418 Convert a <BigInteger> to a string.
39419
39420 When *base* is greater than 10, letters are upper case.
39421
39422 Parameters:
39423
39424 base - Optional base to represent the number in (default is base 10).
39425 Must be between 2 and 36 inclusive, or an Error will be thrown.
39426
39427 Returns:
39428
39429 The string representation of the <BigInteger>.
39430 */
39431 BigInteger.prototype.toString = function(base) {
39432 base = +base || 10;
39433 if (base < 2 || base > 36) {
39434 throw new Error("illegal radix " + base + ".");
39435 }
39436 if (this._s === 0) {
39437 return "0";
39438 }
39439 if (base === 10) {
39440 var str = this._s < 0 ? "-" : "";
39441 str += this._d[this._d.length - 1].toString();
39442 for (var i = this._d.length - 2; i >= 0; i--) {
39443 var group = this._d[i].toString();
39444 while (group.length < BigInteger_base_log10) group = '0' + group;
39445 str += group;
39446 }
39447 return str;
39448 }
39449 else {
39450 var numerals = BigInteger.digits;
39451 base = BigInteger.small[base];
39452 var sign = this._s;
39453
39454 var n = this.abs();
39455 var digits = [];
39456 var digit;
39457
39458 while (n._s !== 0) {
39459 var divmod = n.divRem(base);
39460 n = divmod[0];
39461 digit = divmod[1];
39462 // TODO: This could be changed to unshift instead of reversing at the end.
39463 // Benchmark both to compare speeds.
39464 digits.push(numerals[digit.valueOf()]);
39465 }
39466 return (sign < 0 ? "-" : "") + digits.reverse().join("");
39467 }
39468 };
39469
39470 // Verify strings for parsing
39471 BigInteger.radixRegex = [
39472 /^$/,
39473 /^$/,
39474 /^[01]*$/,
39475 /^[012]*$/,
39476 /^[0-3]*$/,
39477 /^[0-4]*$/,
39478 /^[0-5]*$/,
39479 /^[0-6]*$/,
39480 /^[0-7]*$/,
39481 /^[0-8]*$/,
39482 /^[0-9]*$/,
39483 /^[0-9aA]*$/,
39484 /^[0-9abAB]*$/,
39485 /^[0-9abcABC]*$/,
39486 /^[0-9a-dA-D]*$/,
39487 /^[0-9a-eA-E]*$/,
39488 /^[0-9a-fA-F]*$/,
39489 /^[0-9a-gA-G]*$/,
39490 /^[0-9a-hA-H]*$/,
39491 /^[0-9a-iA-I]*$/,
39492 /^[0-9a-jA-J]*$/,
39493 /^[0-9a-kA-K]*$/,
39494 /^[0-9a-lA-L]*$/,
39495 /^[0-9a-mA-M]*$/,
39496 /^[0-9a-nA-N]*$/,
39497 /^[0-9a-oA-O]*$/,
39498 /^[0-9a-pA-P]*$/,
39499 /^[0-9a-qA-Q]*$/,
39500 /^[0-9a-rA-R]*$/,
39501 /^[0-9a-sA-S]*$/,
39502 /^[0-9a-tA-T]*$/,
39503 /^[0-9a-uA-U]*$/,
39504 /^[0-9a-vA-V]*$/,
39505 /^[0-9a-wA-W]*$/,
39506 /^[0-9a-xA-X]*$/,
39507 /^[0-9a-yA-Y]*$/,
39508 /^[0-9a-zA-Z]*$/
39509 ];
39510
39511 /*
39512 Function: parse
39513 Parse a string into a <BigInteger>.
39514
39515 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
39516 *base* is not provided, it will be guessed based on the leading characters
39517 of *s* as follows:
39518
39519 - "0x" or "0X": *base* = 16
39520 - "0c" or "0C": *base* = 8
39521 - "0b" or "0B": *base* = 2
39522 - else: *base* = 10
39523
39524 If no base is provided, or *base* is 10, the number can be in exponential
39525 form. For example, these are all valid:
39526
39527 > BigInteger.parse("1e9"); // Same as "1000000000"
39528 > BigInteger.parse("1.234*10^3"); // Same as 1234
39529 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
39530
39531 If any characters fall outside the range defined by the radix, an exception
39532 will be thrown.
39533
39534 Parameters:
39535
39536 s - The string to parse.
39537 base - Optional radix (default is to guess based on *s*).
39538
39539 Returns:
39540
39541 a <BigInteger> instance.
39542 */
39543 BigInteger.parse = function(s, base) {
39544 // Expands a number in exponential form to decimal form.
39545 // expandExponential("-13.441*10^5") === "1344100";
39546 // expandExponential("1.12300e-1") === "0.112300";
39547 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
39548 function expandExponential(str) {
39549 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
39550
39551 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
39552 c = +c;
39553 var l = c < 0;
39554 var i = n.length + c;
39555 x = (l ? n : f).length;
39556 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
39557 var z = (new Array(c + 1)).join("0");
39558 var r = n + f;
39559 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
39560 });
39561 }
39562
39563 s = s.toString();
39564 if (typeof base === "undefined" || +base === 10) {
39565 s = expandExponential(s);
39566 }
39567
39568 var prefixRE;
39569 if (typeof base === "undefined") {
39570 prefixRE = '0[xcb]';
39571 }
39572 else if (base == 16) {
39573 prefixRE = '0x';
39574 }
39575 else if (base == 8) {
39576 prefixRE = '0c';
39577 }
39578 else if (base == 2) {
39579 prefixRE = '0b';
39580 }
39581 else {
39582 prefixRE = '';
39583 }
39584 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
39585 if (parts) {
39586 var sign = parts[1] || "+";
39587 var baseSection = parts[2] || "";
39588 var digits = parts[3] || "";
39589
39590 if (typeof base === "undefined") {
39591 // Guess base
39592 if (baseSection === "0x" || baseSection === "0X") { // Hex
39593 base = 16;
39594 }
39595 else if (baseSection === "0c" || baseSection === "0C") { // Octal
39596 base = 8;
39597 }
39598 else if (baseSection === "0b" || baseSection === "0B") { // Binary
39599 base = 2;
39600 }
39601 else {
39602 base = 10;
39603 }
39604 }
39605 else if (base < 2 || base > 36) {
39606 throw new Error("Illegal radix " + base + ".");
39607 }
39608
39609 base = +base;
39610
39611 // Check for digits outside the range
39612 if (!(BigInteger.radixRegex[base].test(digits))) {
39613 throw new Error("Bad digit for radix " + base);
39614 }
39615
39616 // Strip leading zeros, and convert to array
39617 digits = digits.replace(/^0+/, "").split("");
39618 if (digits.length === 0) {
39619 return ZERO;
39620 }
39621
39622 // Get the sign (we know it's not zero)
39623 sign = (sign === "-") ? -1 : 1;
39624
39625 // Optimize 10
39626 if (base == 10) {
39627 var d = [];
39628 while (digits.length >= BigInteger_base_log10) {
39629 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
39630 }
39631 d.push(parseInt(digits.join(''), 10));
39632 return new BigInteger(d, sign, CONSTRUCT);
39633 }
39634
39635 // Do the conversion
39636 var d = ZERO;
39637 base = BigInteger.small[base];
39638 var small = BigInteger.small;
39639 for (var i = 0; i < digits.length; i++) {
39640 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
39641 }
39642 return new BigInteger(d._d, sign, CONSTRUCT);
39643 }
39644 else {
39645 throw new Error("Invalid BigInteger format: " + s);
39646 }
39647 };
39648
39649 /*
39650 Function: add
39651 Add two <BigIntegers>.
39652
39653 Parameters:
39654
39655 n - The number to add to *this*. Will be converted to a <BigInteger>.
39656
39657 Returns:
39658
39659 The numbers added together.
39660
39661 See Also:
39662
39663 <subtract>, <multiply>, <quotient>, <next>
39664 */
39665 BigInteger.prototype.add = function(n) {
39666 if (this._s === 0) {
39667 return BigInteger(n);
39668 }
39669
39670 n = BigInteger(n);
39671 if (n._s === 0) {
39672 return this;
39673 }
39674 if (this._s !== n._s) {
39675 n = n.negate();
39676 return this.subtract(n);
39677 }
39678
39679 var a = this._d;
39680 var b = n._d;
39681 var al = a.length;
39682 var bl = b.length;
39683 var sum = new Array(Math.max(al, bl) + 1);
39684 var size = Math.min(al, bl);
39685 var carry = 0;
39686 var digit;
39687
39688 for (var i = 0; i < size; i++) {
39689 digit = a[i] + b[i] + carry;
39690 sum[i] = digit % BigInteger_base;
39691 carry = (digit / BigInteger_base) | 0;
39692 }
39693 if (bl > al) {
39694 a = b;
39695 al = bl;
39696 }
39697 for (i = size; carry && i < al; i++) {
39698 digit = a[i] + carry;
39699 sum[i] = digit % BigInteger_base;
39700 carry = (digit / BigInteger_base) | 0;
39701 }
39702 if (carry) {
39703 sum[i] = carry;
39704 }
39705
39706 for ( ; i < al; i++) {
39707 sum[i] = a[i];
39708 }
39709
39710 return new BigInteger(sum, this._s, CONSTRUCT);
39711 };
39712
39713 /*
39714 Function: negate
39715 Get the additive inverse of a <BigInteger>.
39716
39717 Returns:
39718
39719 A <BigInteger> with the same magnatude, but with the opposite sign.
39720
39721 See Also:
39722
39723 <abs>
39724 */
39725 BigInteger.prototype.negate = function() {
39726 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
39727 };
39728
39729 /*
39730 Function: abs
39731 Get the absolute value of a <BigInteger>.
39732
39733 Returns:
39734
39735 A <BigInteger> with the same magnatude, but always positive (or zero).
39736
39737 See Also:
39738
39739 <negate>
39740 */
39741 BigInteger.prototype.abs = function() {
39742 return (this._s < 0) ? this.negate() : this;
39743 };
39744
39745 /*
39746 Function: subtract
39747 Subtract two <BigIntegers>.
39748
39749 Parameters:
39750
39751 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
39752
39753 Returns:
39754
39755 The *n* subtracted from *this*.
39756
39757 See Also:
39758
39759 <add>, <multiply>, <quotient>, <prev>
39760 */
39761 BigInteger.prototype.subtract = function(n) {
39762 if (this._s === 0) {
39763 return BigInteger(n).negate();
39764 }
39765
39766 n = BigInteger(n);
39767 if (n._s === 0) {
39768 return this;
39769 }
39770 if (this._s !== n._s) {
39771 n = n.negate();
39772 return this.add(n);
39773 }
39774
39775 var m = this;
39776 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
39777 if (this._s < 0) {
39778 m = new BigInteger(n._d, 1, CONSTRUCT);
39779 n = new BigInteger(this._d, 1, CONSTRUCT);
39780 }
39781
39782 // Both are positive => a - b
39783 var sign = m.compareAbs(n);
39784 if (sign === 0) {
39785 return ZERO;
39786 }
39787 else if (sign < 0) {
39788 // swap m and n
39789 var t = n;
39790 n = m;
39791 m = t;
39792 }
39793
39794 // a > b
39795 var a = m._d;
39796 var b = n._d;
39797 var al = a.length;
39798 var bl = b.length;
39799 var diff = new Array(al); // al >= bl since a > b
39800 var borrow = 0;
39801 var i;
39802 var digit;
39803
39804 for (i = 0; i < bl; i++) {
39805 digit = a[i] - borrow - b[i];
39806 if (digit < 0) {
39807 digit += BigInteger_base;
39808 borrow = 1;
39809 }
39810 else {
39811 borrow = 0;
39812 }
39813 diff[i] = digit;
39814 }
39815 for (i = bl; i < al; i++) {
39816 digit = a[i] - borrow;
39817 if (digit < 0) {
39818 digit += BigInteger_base;
39819 }
39820 else {
39821 diff[i++] = digit;
39822 break;
39823 }
39824 diff[i] = digit;
39825 }
39826 for ( ; i < al; i++) {
39827 diff[i] = a[i];
39828 }
39829
39830 return new BigInteger(diff, sign, CONSTRUCT);
39831 };
39832
39833 (function() {
39834 function addOne(n, sign) {
39835 var a = n._d;
39836 var sum = a.slice();
39837 var carry = true;
39838 var i = 0;
39839
39840 while (true) {
39841 var digit = (a[i] || 0) + 1;
39842 sum[i] = digit % BigInteger_base;
39843 if (digit <= BigInteger_base - 1) {
39844 break;
39845 }
39846 ++i;
39847 }
39848
39849 return new BigInteger(sum, sign, CONSTRUCT);
39850 }
39851
39852 function subtractOne(n, sign) {
39853 var a = n._d;
39854 var sum = a.slice();
39855 var borrow = true;
39856 var i = 0;
39857
39858 while (true) {
39859 var digit = (a[i] || 0) - 1;
39860 if (digit < 0) {
39861 sum[i] = digit + BigInteger_base;
39862 }
39863 else {
39864 sum[i] = digit;
39865 break;
39866 }
39867 ++i;
39868 }
39869
39870 return new BigInteger(sum, sign, CONSTRUCT);
39871 }
39872
39873 /*
39874 Function: next
39875 Get the next <BigInteger> (add one).
39876
39877 Returns:
39878
39879 *this* + 1.
39880
39881 See Also:
39882
39883 <add>, <prev>
39884 */
39885 BigInteger.prototype.next = function() {
39886 switch (this._s) {
39887 case 0:
39888 return ONE;
39889 case -1:
39890 return subtractOne(this, -1);
39891 // case 1:
39892 default:
39893 return addOne(this, 1);
39894 }
39895 };
39896
39897 /*
39898 Function: prev
39899 Get the previous <BigInteger> (subtract one).
39900
39901 Returns:
39902
39903 *this* - 1.
39904
39905 See Also:
39906
39907 <next>, <subtract>
39908 */
39909 BigInteger.prototype.prev = function() {
39910 switch (this._s) {
39911 case 0:
39912 return M_ONE;
39913 case -1:
39914 return addOne(this, -1);
39915 // case 1:
39916 default:
39917 return subtractOne(this, 1);
39918 }
39919 };
39920 })();
39921
39922 /*
39923 Function: compareAbs
39924 Compare the absolute value of two <BigIntegers>.
39925
39926 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
39927
39928 Parameters:
39929
39930 n - The number to compare to *this*. Will be converted to a <BigInteger>.
39931
39932 Returns:
39933
39934 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
39935
39936 See Also:
39937
39938 <compare>, <abs>
39939 */
39940 BigInteger.prototype.compareAbs = function(n) {
39941 if (this === n) {
39942 return 0;
39943 }
39944
39945 if (!(n instanceof BigInteger)) {
39946 if (!isFinite(n)) {
39947 return(isNaN(n) ? n : -1);
39948 }
39949 n = BigInteger(n);
39950 }
39951
39952 if (this._s === 0) {
39953 return (n._s !== 0) ? -1 : 0;
39954 }
39955 if (n._s === 0) {
39956 return 1;
39957 }
39958
39959 var l = this._d.length;
39960 var nl = n._d.length;
39961 if (l < nl) {
39962 return -1;
39963 }
39964 else if (l > nl) {
39965 return 1;
39966 }
39967
39968 var a = this._d;
39969 var b = n._d;
39970 for (var i = l-1; i >= 0; i--) {
39971 if (a[i] !== b[i]) {
39972 return a[i] < b[i] ? -1 : 1;
39973 }
39974 }
39975
39976 return 0;
39977 };
39978
39979 /*
39980 Function: compare
39981 Compare two <BigIntegers>.
39982
39983 Parameters:
39984
39985 n - The number to compare to *this*. Will be converted to a <BigInteger>.
39986
39987 Returns:
39988
39989 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
39990
39991 See Also:
39992
39993 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
39994 */
39995 BigInteger.prototype.compare = function(n) {
39996 if (this === n) {
39997 return 0;
39998 }
39999
40000 n = BigInteger(n);
40001
40002 if (this._s === 0) {
40003 return -n._s;
40004 }
40005
40006 if (this._s === n._s) { // both positive or both negative
40007 var cmp = this.compareAbs(n);
40008 return cmp * this._s;
40009 }
40010 else {
40011 return this._s;
40012 }
40013 };
40014
40015 /*
40016 Function: isUnit
40017 Return true iff *this* is either 1 or -1.
40018
40019 Returns:
40020
40021 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
40022
40023 See Also:
40024
40025 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
40026 <BigInteger.ONE>, <BigInteger.M_ONE>
40027 */
40028 BigInteger.prototype.isUnit = function() {
40029 return this === ONE ||
40030 this === M_ONE ||
40031 (this._d.length === 1 && this._d[0] === 1);
40032 };
40033
40034 /*
40035 Function: multiply
40036 Multiply two <BigIntegers>.
40037
40038 Parameters:
40039
40040 n - The number to multiply *this* by. Will be converted to a
40041 <BigInteger>.
40042
40043 Returns:
40044
40045 The numbers multiplied together.
40046
40047 See Also:
40048
40049 <add>, <subtract>, <quotient>, <square>
40050 */
40051 BigInteger.prototype.multiply = function(n) {
40052 // TODO: Consider adding Karatsuba multiplication for large numbers
40053 if (this._s === 0) {
40054 return ZERO;
40055 }
40056
40057 n = BigInteger(n);
40058 if (n._s === 0) {
40059 return ZERO;
40060 }
40061 if (this.isUnit()) {
40062 if (this._s < 0) {
40063 return n.negate();
40064 }
40065 return n;
40066 }
40067 if (n.isUnit()) {
40068 if (n._s < 0) {
40069 return this.negate();
40070 }
40071 return this;
40072 }
40073 if (this === n) {
40074 return this.square();
40075 }
40076
40077 var r = (this._d.length >= n._d.length);
40078 var a = (r ? this : n)._d; // a will be longer than b
40079 var b = (r ? n : this)._d;
40080 var al = a.length;
40081 var bl = b.length;
40082
40083 var pl = al + bl;
40084 var partial = new Array(pl);
40085 var i;
40086 for (i = 0; i < pl; i++) {
40087 partial[i] = 0;
40088 }
40089
40090 for (i = 0; i < bl; i++) {
40091 var carry = 0;
40092 var bi = b[i];
40093 var jlimit = al + i;
40094 var digit;
40095 for (var j = i; j < jlimit; j++) {
40096 digit = partial[j] + bi * a[j - i] + carry;
40097 carry = (digit / BigInteger_base) | 0;
40098 partial[j] = (digit % BigInteger_base) | 0;
40099 }
40100 if (carry) {
40101 digit = partial[j] + carry;
40102 carry = (digit / BigInteger_base) | 0;
40103 partial[j] = digit % BigInteger_base;
40104 }
40105 }
40106 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
40107 };
40108
40109 // Multiply a BigInteger by a single-digit native number
40110 // Assumes that this and n are >= 0
40111 // This is not really intended to be used outside the library itself
40112 BigInteger.prototype.multiplySingleDigit = function(n) {
40113 if (n === 0 || this._s === 0) {
40114 return ZERO;
40115 }
40116 if (n === 1) {
40117 return this;
40118 }
40119
40120 var digit;
40121 if (this._d.length === 1) {
40122 digit = this._d[0] * n;
40123 if (digit >= BigInteger_base) {
40124 return new BigInteger([(digit % BigInteger_base)|0,
40125 (digit / BigInteger_base)|0], 1, CONSTRUCT);
40126 }
40127 return new BigInteger([digit], 1, CONSTRUCT);
40128 }
40129
40130 if (n === 2) {
40131 return this.add(this);
40132 }
40133 if (this.isUnit()) {
40134 return new BigInteger([n], 1, CONSTRUCT);
40135 }
40136
40137 var a = this._d;
40138 var al = a.length;
40139
40140 var pl = al + 1;
40141 var partial = new Array(pl);
40142 for (var i = 0; i < pl; i++) {
40143 partial[i] = 0;
40144 }
40145
40146 var carry = 0;
40147 for (var j = 0; j < al; j++) {
40148 digit = n * a[j] + carry;
40149 carry = (digit / BigInteger_base) | 0;
40150 partial[j] = (digit % BigInteger_base) | 0;
40151 }
40152 if (carry) {
40153 partial[j] = carry;
40154 }
40155
40156 return new BigInteger(partial, 1, CONSTRUCT);
40157 };
40158
40159 /*
40160 Function: square
40161 Multiply a <BigInteger> by itself.
40162
40163 This is slightly faster than regular multiplication, since it removes the
40164 duplicated multiplcations.
40165
40166 Returns:
40167
40168 > this.multiply(this)
40169
40170 See Also:
40171 <multiply>
40172 */
40173 BigInteger.prototype.square = function() {
40174 // Normally, squaring a 10-digit number would take 100 multiplications.
40175 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
40176 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
40177 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
40178
40179 if (this._s === 0) {
40180 return ZERO;
40181 }
40182 if (this.isUnit()) {
40183 return ONE;
40184 }
40185
40186 var digits = this._d;
40187 var length = digits.length;
40188 var imult1 = new Array(length + length + 1);
40189 var product, carry, k;
40190 var i;
40191
40192 // Calculate diagonal
40193 for (i = 0; i < length; i++) {
40194 k = i * 2;
40195 product = digits[i] * digits[i];
40196 carry = (product / BigInteger_base) | 0;
40197 imult1[k] = product % BigInteger_base;
40198 imult1[k + 1] = carry;
40199 }
40200
40201 // Calculate repeating part
40202 for (i = 0; i < length; i++) {
40203 carry = 0;
40204 k = i * 2 + 1;
40205 for (var j = i + 1; j < length; j++, k++) {
40206 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
40207 carry = (product / BigInteger_base) | 0;
40208 imult1[k] = product % BigInteger_base;
40209 }
40210 k = length + i;
40211 var digit = carry + imult1[k];
40212 carry = (digit / BigInteger_base) | 0;
40213 imult1[k] = digit % BigInteger_base;
40214 imult1[k + 1] += carry;
40215 }
40216
40217 return new BigInteger(imult1, 1, CONSTRUCT);
40218 };
40219
40220 /*
40221 Function: quotient
40222 Divide two <BigIntegers> and truncate towards zero.
40223
40224 <quotient> throws an exception if *n* is zero.
40225
40226 Parameters:
40227
40228 n - The number to divide *this* by. Will be converted to a <BigInteger>.
40229
40230 Returns:
40231
40232 The *this* / *n*, truncated to an integer.
40233
40234 See Also:
40235
40236 <add>, <subtract>, <multiply>, <divRem>, <remainder>
40237 */
40238 BigInteger.prototype.quotient = function(n) {
40239 return this.divRem(n)[0];
40240 };
40241
40242 /*
40243 Function: divide
40244 Deprecated synonym for <quotient>.
40245 */
40246 BigInteger.prototype.divide = BigInteger.prototype.quotient;
40247
40248 /*
40249 Function: remainder
40250 Calculate the remainder of two <BigIntegers>.
40251
40252 <remainder> throws an exception if *n* is zero.
40253
40254 Parameters:
40255
40256 n - The remainder after *this* is divided *this* by *n*. Will be
40257 converted to a <BigInteger>.
40258
40259 Returns:
40260
40261 *this* % *n*.
40262
40263 See Also:
40264
40265 <divRem>, <quotient>
40266 */
40267 BigInteger.prototype.remainder = function(n) {
40268 return this.divRem(n)[1];
40269 };
40270
40271 /*
40272 Function: divRem
40273 Calculate the integer quotient and remainder of two <BigIntegers>.
40274
40275 <divRem> throws an exception if *n* is zero.
40276
40277 Parameters:
40278
40279 n - The number to divide *this* by. Will be converted to a <BigInteger>.
40280
40281 Returns:
40282
40283 A two-element array containing the quotient and the remainder.
40284
40285 > a.divRem(b)
40286
40287 is exactly equivalent to
40288
40289 > [a.quotient(b), a.remainder(b)]
40290
40291 except it is faster, because they are calculated at the same time.
40292
40293 See Also:
40294
40295 <quotient>, <remainder>
40296 */
40297 BigInteger.prototype.divRem = function(n) {
40298 n = BigInteger(n);
40299 if (n._s === 0) {
40300 throw new Error("Divide by zero");
40301 }
40302 if (this._s === 0) {
40303 return [ZERO, ZERO];
40304 }
40305 if (n._d.length === 1) {
40306 return this.divRemSmall(n._s * n._d[0]);
40307 }
40308
40309 // Test for easy cases -- |n1| <= |n2|
40310 switch (this.compareAbs(n)) {
40311 case 0: // n1 == n2
40312 return [this._s === n._s ? ONE : M_ONE, ZERO];
40313 case -1: // |n1| < |n2|
40314 return [ZERO, this];
40315 }
40316
40317 var sign = this._s * n._s;
40318 var a = n.abs();
40319 var b_digits = this._d;
40320 var b_index = b_digits.length;
40321 var digits = n._d.length;
40322 var quot = [];
40323 var guess;
40324
40325 var part = new BigInteger([], 0, CONSTRUCT);
40326
40327 while (b_index) {
40328 part._d.unshift(b_digits[--b_index]);
40329 part = new BigInteger(part._d, 1, CONSTRUCT);
40330
40331 if (part.compareAbs(n) < 0) {
40332 quot.push(0);
40333 continue;
40334 }
40335 if (part._s === 0) {
40336 guess = 0;
40337 }
40338 else {
40339 var xlen = part._d.length, ylen = a._d.length;
40340 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
40341 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
40342 if (part._d.length > a._d.length) {
40343 // The length of part._d can either match a._d length,
40344 // or exceed it by one.
40345 highx = (highx+1)*BigInteger_base;
40346 }
40347 guess = Math.ceil(highx/highy);
40348 }
40349 do {
40350 var check = a.multiplySingleDigit(guess);
40351 if (check.compareAbs(part) <= 0) {
40352 break;
40353 }
40354 guess--;
40355 } while (guess);
40356
40357 quot.push(guess);
40358 if (!guess) {
40359 continue;
40360 }
40361 var diff = part.subtract(check);
40362 part._d = diff._d.slice();
40363 }
40364
40365 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
40366 new BigInteger(part._d, this._s, CONSTRUCT)];
40367 };
40368
40369 // Throws an exception if n is outside of (-BigInteger.base, -1] or
40370 // [1, BigInteger.base). It's not necessary to call this, since the
40371 // other division functions will call it if they are able to.
40372 BigInteger.prototype.divRemSmall = function(n) {
40373 var r;
40374 n = +n;
40375 if (n === 0) {
40376 throw new Error("Divide by zero");
40377 }
40378
40379 var n_s = n < 0 ? -1 : 1;
40380 var sign = this._s * n_s;
40381 n = Math.abs(n);
40382
40383 if (n < 1 || n >= BigInteger_base) {
40384 throw new Error("Argument out of range");
40385 }
40386
40387 if (this._s === 0) {
40388 return [ZERO, ZERO];
40389 }
40390
40391 if (n === 1 || n === -1) {
40392 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
40393 }
40394
40395 // 2 <= n < BigInteger_base
40396
40397 // divide a single digit by a single digit
40398 if (this._d.length === 1) {
40399 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
40400 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
40401 if (sign < 0) {
40402 q = q.negate();
40403 }
40404 if (this._s < 0) {
40405 r = r.negate();
40406 }
40407 return [q, r];
40408 }
40409
40410 var digits = this._d.slice();
40411 var quot = new Array(digits.length);
40412 var part = 0;
40413 var diff = 0;
40414 var i = 0;
40415 var guess;
40416
40417 while (digits.length) {
40418 part = part * BigInteger_base + digits[digits.length - 1];
40419 if (part < n) {
40420 quot[i++] = 0;
40421 digits.pop();
40422 diff = BigInteger_base * diff + part;
40423 continue;
40424 }
40425 if (part === 0) {
40426 guess = 0;
40427 }
40428 else {
40429 guess = (part / n) | 0;
40430 }
40431
40432 var check = n * guess;
40433 diff = part - check;
40434 quot[i++] = guess;
40435 if (!guess) {
40436 digits.pop();
40437 continue;
40438 }
40439
40440 digits.pop();
40441 part = diff;
40442 }
40443
40444 r = new BigInteger([diff], 1, CONSTRUCT);
40445 if (this._s < 0) {
40446 r = r.negate();
40447 }
40448 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
40449 };
40450
40451 /*
40452 Function: isEven
40453 Return true iff *this* is divisible by two.
40454
40455 Note that <BigInteger.ZERO> is even.
40456
40457 Returns:
40458
40459 true if *this* is even, false otherwise.
40460
40461 See Also:
40462
40463 <isOdd>
40464 */
40465 BigInteger.prototype.isEven = function() {
40466 var digits = this._d;
40467 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
40468 };
40469
40470 /*
40471 Function: isOdd
40472 Return true iff *this* is not divisible by two.
40473
40474 Returns:
40475
40476 true if *this* is odd, false otherwise.
40477
40478 See Also:
40479
40480 <isEven>
40481 */
40482 BigInteger.prototype.isOdd = function() {
40483 return !this.isEven();
40484 };
40485
40486 /*
40487 Function: sign
40488 Get the sign of a <BigInteger>.
40489
40490 Returns:
40491
40492 * -1 if *this* < 0
40493 * 0 if *this* == 0
40494 * +1 if *this* > 0
40495
40496 See Also:
40497
40498 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
40499 */
40500 BigInteger.prototype.sign = function() {
40501 return this._s;
40502 };
40503
40504 /*
40505 Function: isPositive
40506 Return true iff *this* > 0.
40507
40508 Returns:
40509
40510 true if *this*.compare(<BigInteger.ZERO>) == 1.
40511
40512 See Also:
40513
40514 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
40515 */
40516 BigInteger.prototype.isPositive = function() {
40517 return this._s > 0;
40518 };
40519
40520 /*
40521 Function: isNegative
40522 Return true iff *this* < 0.
40523
40524 Returns:
40525
40526 true if *this*.compare(<BigInteger.ZERO>) == -1.
40527
40528 See Also:
40529
40530 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
40531 */
40532 BigInteger.prototype.isNegative = function() {
40533 return this._s < 0;
40534 };
40535
40536 /*
40537 Function: isZero
40538 Return true iff *this* == 0.
40539
40540 Returns:
40541
40542 true if *this*.compare(<BigInteger.ZERO>) == 0.
40543
40544 See Also:
40545
40546 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
40547 */
40548 BigInteger.prototype.isZero = function() {
40549 return this._s === 0;
40550 };
40551
40552 /*
40553 Function: exp10
40554 Multiply a <BigInteger> by a power of 10.
40555
40556 This is equivalent to, but faster than
40557
40558 > if (n >= 0) {
40559 > return this.multiply(BigInteger("1e" + n));
40560 > }
40561 > else { // n <= 0
40562 > return this.quotient(BigInteger("1e" + -n));
40563 > }
40564
40565 Parameters:
40566
40567 n - The power of 10 to multiply *this* by. *n* is converted to a
40568 javascipt number and must be no greater than <BigInteger.MAX_EXP>
40569 (0x7FFFFFFF), or an exception will be thrown.
40570
40571 Returns:
40572
40573 *this* * (10 ** *n*), truncated to an integer if necessary.
40574
40575 See Also:
40576
40577 <pow>, <multiply>
40578 */
40579 BigInteger.prototype.exp10 = function(n) {
40580 n = +n;
40581 if (n === 0) {
40582 return this;
40583 }
40584 if (Math.abs(n) > Number(MAX_EXP)) {
40585 throw new Error("exponent too large in BigInteger.exp10");
40586 }
40587 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
40588 if (this._s === 0) {
40589 return ZERO;
40590 }
40591 if (n > 0) {
40592 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
40593
40594 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
40595 k._d.unshift(0);
40596 }
40597 if (n == 0)
40598 return k;
40599 k._s = 1;
40600 k = k.multiplySingleDigit(Math.pow(10, n));
40601 return (this._s < 0 ? k.negate() : k);
40602 } else if (-n >= this._d.length*BigInteger_base_log10) {
40603 return ZERO;
40604 } else {
40605 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
40606
40607 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
40608 k._d.shift();
40609 }
40610 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
40611 }
40612 };
40613
40614 /*
40615 Function: pow
40616 Raise a <BigInteger> to a power.
40617
40618 In this implementation, 0**0 is 1.
40619
40620 Parameters:
40621
40622 n - The exponent to raise *this* by. *n* must be no greater than
40623 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
40624
40625 Returns:
40626
40627 *this* raised to the *nth* power.
40628
40629 See Also:
40630
40631 <modPow>
40632 */
40633 BigInteger.prototype.pow = function(n) {
40634 if (this.isUnit()) {
40635 if (this._s > 0) {
40636 return this;
40637 }
40638 else {
40639 return BigInteger(n).isOdd() ? this : this.negate();
40640 }
40641 }
40642
40643 n = BigInteger(n);
40644 if (n._s === 0) {
40645 return ONE;
40646 }
40647 else if (n._s < 0) {
40648 if (this._s === 0) {
40649 throw new Error("Divide by zero");
40650 }
40651 else {
40652 return ZERO;
40653 }
40654 }
40655 if (this._s === 0) {
40656 return ZERO;
40657 }
40658 if (n.isUnit()) {
40659 return this;
40660 }
40661
40662 if (n.compareAbs(MAX_EXP) > 0) {
40663 throw new Error("exponent too large in BigInteger.pow");
40664 }
40665 var x = this;
40666 var aux = ONE;
40667 var two = BigInteger.small[2];
40668
40669 while (n.isPositive()) {
40670 if (n.isOdd()) {
40671 aux = aux.multiply(x);
40672 if (n.isUnit()) {
40673 return aux;
40674 }
40675 }
40676 x = x.square();
40677 n = n.quotient(two);
40678 }
40679
40680 return aux;
40681 };
40682
40683 /*
40684 Function: modPow
40685 Raise a <BigInteger> to a power (mod m).
40686
40687 Because it is reduced by a modulus, <modPow> is not limited by
40688 <BigInteger.MAX_EXP> like <pow>.
40689
40690 Parameters:
40691
40692 exponent - The exponent to raise *this* by. Must be positive.
40693 modulus - The modulus.
40694
40695 Returns:
40696
40697 *this* ^ *exponent* (mod *modulus*).
40698
40699 See Also:
40700
40701 <pow>, <mod>
40702 */
40703 BigInteger.prototype.modPow = function(exponent, modulus) {
40704 var result = ONE;
40705 var base = this;
40706
40707 while (exponent.isPositive()) {
40708 if (exponent.isOdd()) {
40709 result = result.multiply(base).remainder(modulus);
40710 }
40711
40712 exponent = exponent.quotient(BigInteger.small[2]);
40713 if (exponent.isPositive()) {
40714 base = base.square().remainder(modulus);
40715 }
40716 }
40717
40718 return result;
40719 };
40720
40721 /*
40722 Function: log
40723 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
40724
40725 This is equivalent to
40726
40727 > Math.log(this.toJSValue())
40728
40729 but handles values outside of the native number range.
40730
40731 Returns:
40732
40733 log( *this* )
40734
40735 See Also:
40736
40737 <toJSValue>
40738 */
40739 BigInteger.prototype.log = function() {
40740 switch (this._s) {
40741 case 0: return -Infinity;
40742 case -1: return NaN;
40743 default: // Fall through.
40744 }
40745
40746 var l = this._d.length;
40747
40748 if (l*BigInteger_base_log10 < 30) {
40749 return Math.log(this.valueOf());
40750 }
40751
40752 var N = Math.ceil(30/BigInteger_base_log10);
40753 var firstNdigits = this._d.slice(l - N);
40754 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
40755 };
40756
40757 /*
40758 Function: valueOf
40759 Convert a <BigInteger> to a native JavaScript integer.
40760
40761 This is called automatically by JavaScipt to convert a <BigInteger> to a
40762 native value.
40763
40764 Returns:
40765
40766 > parseInt(this.toString(), 10)
40767
40768 See Also:
40769
40770 <toString>, <toJSValue>
40771 */
40772 BigInteger.prototype.valueOf = function() {
40773 return parseInt(this.toString(), 10);
40774 };
40775
40776 /*
40777 Function: toJSValue
40778 Convert a <BigInteger> to a native JavaScript integer.
40779
40780 This is the same as valueOf, but more explicitly named.
40781
40782 Returns:
40783
40784 > parseInt(this.toString(), 10)
40785
40786 See Also:
40787
40788 <toString>, <valueOf>
40789 */
40790 BigInteger.prototype.toJSValue = function() {
40791 return parseInt(this.toString(), 10);
40792 };
40793
40794 var MAX_EXP = BigInteger(0x7FFFFFFF);
40795 // Constant: MAX_EXP
40796 // The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
40797 BigInteger.MAX_EXP = MAX_EXP;
40798
40799 (function() {
40800 function makeUnary(fn) {
40801 return function(a) {
40802 return fn.call(BigInteger(a));
40803 };
40804 }
40805
40806 function makeBinary(fn) {
40807 return function(a, b) {
40808 return fn.call(BigInteger(a), BigInteger(b));
40809 };
40810 }
40811
40812 function makeTrinary(fn) {
40813 return function(a, b, c) {
40814 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
40815 };
40816 }
40817
40818 (function() {
40819 var i, fn;
40820 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
40821 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
40822 var trinary = ["modPow"];
40823
40824 for (i = 0; i < unary.length; i++) {
40825 fn = unary[i];
40826 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
40827 }
40828
40829 for (i = 0; i < binary.length; i++) {
40830 fn = binary[i];
40831 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
40832 }
40833
40834 for (i = 0; i < trinary.length; i++) {
40835 fn = trinary[i];
40836 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
40837 }
40838
40839 BigInteger.exp10 = function(x, n) {
40840 return BigInteger(x).exp10(n);
40841 };
40842 })();
40843 })();
40844
40845 exports.BigInteger = BigInteger;
40846 })(typeof exports !== 'undefined' ? exports : this);
40847 </script>
40848 <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){
40849 var 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;
40850
40851 },{}],2:[function(require,module,exports){
40852 var 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;
40853
40854 },{"./scoring":6}],3:[function(require,module,exports){
40855 var 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(","),
40856 english_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(","),
40857 female_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(","),
40858 us_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(","),
40859 male_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;
40860
40861 },{}],4:[function(require,module,exports){
40862 var 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;
40863
40864 },{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
40865 var 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;
40866
40867 },{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
40868 var 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;
40869
40870 },{"./adjacency_graphs":1}],7:[function(require,module,exports){
40871 var 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;
40872
40873 },{}]},{},[4])(4)
40874 });
40875 //# sourceMappingURL=zxcvbn.js.map
40876 </script>
40877 <script>/*
40878 * Detects entropy from a string.
40879 *
40880 * Formats include:
40881 * binary [0-1]
40882 * base 6 [0-5]
40883 * dice 6 [1-6]
40884 * decimal [0-9]
40885 * hexadecimal [0-9A-F]
40886 * card [A2-9TJQK][CDHS]
40887 *
40888 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
40889 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
40890 * entropy.
40891 */
40892
40893 window.Entropy = new (function() {
40894
40895 var TWO = new BigInteger(2);
40896
40897 // matchers returns an array of the matched events for each type of entropy.
40898 // eg
40899 // matchers.binary("010") returns ["0", "1", "0"]
40900 // matchers.binary("a10") returns ["1", "0"]
40901 // matchers.hex("a10") returns ["a", "1", "0"]
40902 var matchers = {
40903 binary: function(str) {
40904 return str.match(/[0-1]/gi) || [];
40905 },
40906 base6: function(str) {
40907 return str.match(/[0-5]/gi) || [];
40908 },
40909 dice: function(str) {
40910 return str.match(/[1-6]/gi) || []; // ie dice numbers
40911 },
40912 base10: function(str) {
40913 return str.match(/[0-9]/gi) || [];
40914 },
40915 hex: function(str) {
40916 return str.match(/[0-9A-F]/gi) || [];
40917 },
40918 card: function(str) {
40919 // Format is NumberSuit, eg
40920 // AH ace of hearts
40921 // 8C eight of clubs
40922 // TD ten of diamonds
40923 // JS jack of spades
40924 // QH queen of hearts
40925 // KC king of clubs
40926 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
40927 }
40928 }
40929
40930 // Convert array of cards from ["ac", "4d", "ks"]
40931 // to numbers between 0 and 51 [0, 16, 51]
40932 function convertCardsToInts(cards) {
40933 var ints = [];
40934 var values = "a23456789tjqk";
40935 var suits = "cdhs";
40936 for (var i=0; i<cards.length; i++) {
40937 var card = cards[i].toLowerCase();
40938 var value = card[0];
40939 var suit = card[1];
40940 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
40941 ints.push(asInt);
40942 }
40943 return ints;
40944 }
40945
40946 this.fromString = function(rawEntropyStr) {
40947 // Find type of entropy being used (binary, hex, dice etc)
40948 var base = getBase(rawEntropyStr);
40949 // Convert dice to base6 entropy (ie 1-6 to 0-5)
40950 // This is done by changing all 6s to 0s
40951 if (base.str == "dice") {
40952 var newParts = [];
40953 var newInts = [];
40954 for (var i=0; i<base.parts.length; i++) {
40955 var c = base.parts[i];
40956 if ("12345".indexOf(c) > -1) {
40957 newParts[i] = base.parts[i];
40958 newInts[i] = base.ints[i];
40959 }
40960 else {
40961 newParts[i] = "0";
40962 newInts[i] = 0;
40963 }
40964 }
40965 base.str = "base 6 (dice)";
40966 base.ints = newInts;
40967 base.parts = newParts;
40968 base.matcher = matchers.base6;
40969 }
40970 // Detect empty entropy
40971 if (base.parts.length == 0) {
40972 return {
40973 binaryStr: "",
40974 cleanStr: "",
40975 cleanHtml: "",
40976 base: base,
40977 };
40978 }
40979 // Convert base.ints to BigInteger.
40980 // Due to using unusual bases, eg cards of base52, this is not as simple as
40981 // using BigInteger.parse()
40982 var entropyInt = BigInteger.ZERO;
40983 for (var i=base.ints.length-1; i>=0; i--) {
40984 var thisInt = BigInteger.parse(base.ints[i]);
40985 var power = (base.ints.length - 1) - i;
40986 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
40987 entropyInt = entropyInt.add(additionalEntropy);
40988 }
40989 // Convert entropy to binary
40990 var entropyBin = entropyInt.toString(2);
40991 // If the first integer is small, it must be padded with zeros.
40992 // Otherwise the chance of the first bit being 1 is 100%, which is
40993 // obviously incorrect.
40994 // This is not perfect for non-2^n bases.
40995 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
40996 while (entropyBin.length < expectedBits) {
40997 entropyBin = "0" + entropyBin;
40998 }
40999 // Calculate the number of bits per event
41000 var bitsPerEvent = Math.log2(base.asInt);
41001 // Cards binary must be handled differently, since they're not replaced
41002 if (base.asInt == 52) {
41003 var cardEntropy = processCardEntropy(base.parts);
41004 entropyBin = cardEntropy.binaryStr;
41005 bitsPerEvent = cardEntropy.bitsPerEvent;
41006 }
41007 // Supply a 'filtered' entropy string for display purposes
41008 var entropyClean = base.parts.join("");
41009 var entropyHtml = base.parts.join("");
41010 if (base.asInt == 52) {
41011 entropyClean = base.parts.join(" ").toUpperCase();
41012 entropyClean = entropyClean.replace(/C/g, "\u2663");
41013 entropyClean = entropyClean.replace(/D/g, "\u2666");
41014 entropyClean = entropyClean.replace(/H/g, "\u2665");
41015 entropyClean = entropyClean.replace(/S/g, "\u2660");
41016 entropyHtml = base.parts.join(" ").toUpperCase();
41017 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
41018 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
41019 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
41020 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
41021 }
41022 // Return the result
41023 var e = {
41024 binaryStr: entropyBin,
41025 cleanStr: entropyClean,
41026 cleanHtml: entropyHtml,
41027 bitsPerEvent: bitsPerEvent,
41028 base: base,
41029 }
41030 return e;
41031 }
41032
41033 function getSortedDeck() {
41034 var s = [];
41035 var suits = "CDHS";
41036 var values = "A23456789TJQK";
41037 for (var i=0; i<suits.length; i++) {
41038 for (var j=0; j<values.length; j++) {
41039 s.push(values[j]+suits[i]);
41040 }
41041 }
41042 return s;
41043 }
41044
41045 function getBase(str) {
41046 // Need to get the lowest base for the supplied entropy.
41047 // This prevents interpreting, say, dice rolls as hexadecimal.
41048 var binaryMatches = matchers.binary(str);
41049 var hexMatches = matchers.hex(str);
41050 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
41051 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
41052 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
41053 return {
41054 ints: ints,
41055 parts: binaryMatches,
41056 matcher: matchers.binary,
41057 asInt: 2,
41058 str: "binary",
41059 }
41060 }
41061 var cardMatches = matchers.card(str);
41062 if (cardMatches.length >= hexMatches.length / 2) {
41063 var ints = convertCardsToInts(cardMatches);
41064 return {
41065 ints: ints,
41066 parts: cardMatches,
41067 matcher: matchers.card,
41068 asInt: 52,
41069 str: "card",
41070 }
41071 }
41072 var diceMatches = matchers.dice(str);
41073 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
41074 var ints = diceMatches.map(function(i) { return parseInt(i) });
41075 return {
41076 ints: ints,
41077 parts: diceMatches,
41078 matcher: matchers.dice,
41079 asInt: 6,
41080 str: "dice",
41081 }
41082 }
41083 var base6Matches = matchers.base6(str);
41084 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
41085 var ints = base6Matches.map(function(i) { return parseInt(i) });
41086 return {
41087 ints: ints,
41088 parts: base6Matches,
41089 matcher: matchers.base6,
41090 asInt: 6,
41091 str: "base 6",
41092 }
41093 }
41094 var base10Matches = matchers.base10(str);
41095 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
41096 var ints = base10Matches.map(function(i) { return parseInt(i) });
41097 return {
41098 ints: ints,
41099 parts: base10Matches,
41100 matcher: matchers.base10,
41101 asInt: 10,
41102 str: "base 10",
41103 }
41104 }
41105 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
41106 return {
41107 ints: ints,
41108 parts: hexMatches,
41109 matcher: matchers.hex,
41110 asInt: 16,
41111 str: "hexadecimal",
41112 }
41113 }
41114
41115 // Assume cards are NOT replaced.
41116 // Additional entropy decreases as more cards are used. This means
41117 // total possible entropy is measured using n!, not base^n.
41118 // eg the second last card can be only one of two, not one of fifty two
41119 // so the added entropy for that card is only one bit at most
41120 function processCardEntropy(cards) {
41121 // Track how many instances of each card have been used, and thus
41122 // how many decks are in use.
41123 var cardCounts = {};
41124 var numberOfDecks = 0;
41125 // Work out number of decks by max(duplicates)
41126 for (var i=0; i<cards.length; i++) {
41127 // Get the card that was drawn
41128 var cardLower = cards[i];
41129 var card = cardLower.toUpperCase();
41130 // Initialize the count for this card if needed
41131 if (!(card in cardCounts)) {
41132 cardCounts[card] = 0;
41133 }
41134 cardCounts[card] += 1;
41135 // See if this is max(duplicates)
41136 if (cardCounts[card] > numberOfDecks) {
41137 numberOfDecks = cardCounts[card];
41138 }
41139 }
41140 // Work out the total number of bits for this many decks
41141 // See http://crypto.stackexchange.com/q/41886
41142 var gainedBits = 0;
41143 // Equivalent of Math.log2(factorial(52*numberOfDecks))
41144 // which becomes infinity for numberOfDecks > 4
41145 for (var i=1; i<=52*numberOfDecks; i++) {
41146 gainedBits = gainedBits + Math.log2(i);
41147 }
41148 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
41149 var maxBits = gainedBits - lostBits;
41150 // Convert the drawn cards to a binary representation.
41151 // The exact technique for doing this is unclear.
41152 // See
41153 // http://crypto.stackexchange.com/a/41896
41154 // "I even doubt that this is well defined (only the average entropy
41155 // is, I believe)."
41156 // See
41157 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
41158 // "The binary representation can be the first log(permutations,2) bits
41159 // of the sha-2 hash of the normalized deck string."
41160 //
41161 // In this specific implementation, the first N bits of the hash of the
41162 // normalized cards string is being used. Uppercase, no spaces; eg
41163 // sha256("AH8DQSTC2H")
41164 var totalCards = numberOfDecks * 52;
41165 var percentUsed = cards.length / totalCards;
41166 // Calculate the average number of bits of entropy for the number of
41167 // cards drawn.
41168 var numberOfBits = Math.floor(maxBits * percentUsed);
41169 // Create a normalized string of the selected cards
41170 var normalizedCards = cards.join("").toUpperCase();
41171 // Convert to binary using the SHA256 hash of the normalized cards.
41172 // If the number of bits is more than 256, multiple hashes
41173 // are used until the required number of bits is reached.
41174 var entropyBin = "";
41175 var iterations = 0;
41176 while (entropyBin.length < numberOfBits) {
41177 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
41178 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
41179 for (var i=0; i<hashHex.length; i++) {
41180 var decimal = parseInt(hashHex[i], 16);
41181 var binary = decimal.toString(2);
41182 while (binary.length < 4) {
41183 binary = "0" + binary;
41184 }
41185 entropyBin = entropyBin + binary;
41186 }
41187 iterations = iterations + 1;
41188 }
41189 // Truncate to the appropriate number of bits.
41190 entropyBin = entropyBin.substring(0, numberOfBits);
41191 // Get the number of bits per event
41192 bitsPerEvent = maxBits / totalCards;
41193 return {
41194 binaryStr: entropyBin,
41195 bitsPerEvent: bitsPerEvent,
41196 }
41197 }
41198
41199 // Polyfill for Math.log2
41200 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
41201 Math.log2 = Math.log2 || function(x) {
41202 // The polyfill isn't good enough because of the poor accuracy of
41203 // Math.LOG2E
41204 // log2(8) gave 2.9999999999999996 which when floored causes issues.
41205 // So instead use the BigInteger library to get it right.
41206 return BigInteger.log(x) / BigInteger.log(2);
41207 };
41208
41209 // Depends on BigInteger
41210 function factorial(n) {
41211 if (n == 0) {
41212 return 1;
41213 }
41214 f = BigInteger.ONE;
41215 for (var i=1; i<=n; i++) {
41216 f = f.multiply(new BigInteger(i));
41217 }
41218 return f;
41219 }
41220
41221 })();
41222 </script>
41223 <script>(function() {
41224
41225 // mnemonics is populated as required by getLanguage
41226 var mnemonics = { "english": new Mnemonic("english") };
41227 var mnemonic = mnemonics["english"];
41228 var seed = null;
41229 var bip32RootKey = null;
41230 var bip32ExtendedKey = null;
41231 var network = bitcoin.networks.bitcoin;
41232 var addressRowTemplate = $("#address-row-template");
41233
41234 var showIndex = true;
41235 var showAddress = true;
41236 var showPubKey = true;
41237 var showPrivKey = true;
41238 var showQr = false;
41239
41240 var entropyChangeTimeoutEvent = null;
41241 var phraseChangeTimeoutEvent = null;
41242 var rootKeyChangedTimeoutEvent = null;
41243
41244 var generationProcesses = [];
41245
41246 var DOM = {};
41247 DOM.network = $(".network");
41248 DOM.bip32Client = $("#bip32-client");
41249 DOM.phraseNetwork = $("#network-phrase");
41250 DOM.useEntropy = $(".use-entropy");
41251 DOM.entropyContainer = $(".entropy-container");
41252 DOM.entropy = $(".entropy");
41253 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
41254 DOM.entropyType = DOM.entropyContainer.find(".type");
41255 DOM.entropyStrength = DOM.entropyContainer.find(".strength");
41256 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
41257 DOM.entropyBits = DOM.entropyContainer.find(".bits");
41258 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
41259 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
41260 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
41261 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
41262 DOM.phrase = $(".phrase");
41263 DOM.passphrase = $(".passphrase");
41264 DOM.generateContainer = $(".generate-container");
41265 DOM.generate = $(".generate");
41266 DOM.seed = $(".seed");
41267 DOM.rootKey = $(".root-key");
41268 DOM.extendedPrivKey = $(".extended-priv-key");
41269 DOM.extendedPubKey = $(".extended-pub-key");
41270 DOM.bip32tab = $("#bip32-tab");
41271 DOM.bip44tab = $("#bip44-tab");
41272 DOM.bip32panel = $("#bip32");
41273 DOM.bip44panel = $("#bip44");
41274 DOM.bip32path = $("#bip32-path");
41275 DOM.bip44path = $("#bip44-path");
41276 DOM.bip44purpose = $("#bip44 .purpose");
41277 DOM.bip44coin = $("#bip44 .coin");
41278 DOM.bip44account = $("#bip44 .account");
41279 DOM.bip44accountXprv = $("#bip44 .account-xprv");
41280 DOM.bip44accountXpub = $("#bip44 .account-xpub");
41281 DOM.bip44change = $("#bip44 .change");
41282 DOM.generatedStrength = $(".generate-container .strength");
41283 DOM.hardenedAddresses = $(".hardened-addresses");
41284 DOM.addresses = $(".addresses");
41285 DOM.rowsToAdd = $(".rows-to-add");
41286 DOM.more = $(".more");
41287 DOM.feedback = $(".feedback");
41288 DOM.tab = $(".derivation-type a");
41289 DOM.indexToggle = $(".index-toggle");
41290 DOM.addressToggle = $(".address-toggle");
41291 DOM.publicKeyToggle = $(".public-key-toggle");
41292 DOM.privateKeyToggle = $(".private-key-toggle");
41293 DOM.languages = $(".languages a");
41294 DOM.qrContainer = $(".qr-container");
41295 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
41296 DOM.qrImage = DOM.qrContainer.find(".qr-image");
41297 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
41298 DOM.showQrEls = $("[data-show-qr]");
41299
41300 function init() {
41301 // Events
41302 DOM.network.on("change", networkChanged);
41303 DOM.bip32Client.on("change", bip32ClientChanged);
41304 DOM.useEntropy.on("change", setEntropyVisibility);
41305 DOM.entropy.on("input", delayedEntropyChanged);
41306 DOM.entropyMnemonicLength.on("change", entropyChanged);
41307 DOM.phrase.on("input", delayedPhraseChanged);
41308 DOM.passphrase.on("input", delayedPhraseChanged);
41309 DOM.generate.on("click", generateClicked);
41310 DOM.more.on("click", showMore);
41311 DOM.rootKey.on("input", delayedRootKeyChanged);
41312 DOM.bip32path.on("input", calcForDerivationPath);
41313 DOM.bip44purpose.on("input", calcForDerivationPath);
41314 DOM.bip44coin.on("input", calcForDerivationPath);
41315 DOM.bip44account.on("input", calcForDerivationPath);
41316 DOM.bip44change.on("input", calcForDerivationPath);
41317 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
41318 DOM.hardenedAddresses.on("change", calcForDerivationPath);
41319 DOM.indexToggle.on("click", toggleIndexes);
41320 DOM.addressToggle.on("click", toggleAddresses);
41321 DOM.publicKeyToggle.on("click", togglePublicKeys);
41322 DOM.privateKeyToggle.on("click", togglePrivateKeys);
41323 DOM.languages.on("click", languageChanged);
41324 setQrEvents(DOM.showQrEls);
41325 disableForms();
41326 hidePending();
41327 hideValidationError();
41328 populateNetworkSelect();
41329 populateClientSelect();
41330 }
41331
41332 // Event handlers
41333
41334 function networkChanged(e) {
41335 var networkIndex = e.target.value;
41336 networks[networkIndex].onSelect();
41337 if (seed != null) {
41338 phraseChanged();
41339 }
41340 else {
41341 rootKeyChanged();
41342 }
41343 }
41344
41345 function bip32ClientChanged(e) {
41346 var clientIndex = DOM.bip32Client.val();
41347 if (clientIndex == "custom") {
41348 DOM.bip32path.prop("readonly", false);
41349 }
41350 else {
41351 DOM.bip32path.prop("readonly", true);
41352 clients[clientIndex].onSelect();
41353 if (seed != null) {
41354 phraseChanged();
41355 }
41356 else {
41357 rootKeyChanged();
41358 }
41359 }
41360 }
41361
41362 function setEntropyVisibility() {
41363 if (isUsingOwnEntropy()) {
41364 DOM.entropyContainer.removeClass("hidden");
41365 DOM.generateContainer.addClass("hidden");
41366 DOM.phrase.prop("readonly", true);
41367 DOM.entropy.focus();
41368 entropyChanged();
41369 }
41370 else {
41371 DOM.entropyContainer.addClass("hidden");
41372 DOM.generateContainer.removeClass("hidden");
41373 DOM.phrase.prop("readonly", false);
41374 hidePending();
41375 }
41376 }
41377
41378 function delayedPhraseChanged() {
41379 hideValidationError();
41380 showPending();
41381 if (phraseChangeTimeoutEvent != null) {
41382 clearTimeout(phraseChangeTimeoutEvent);
41383 }
41384 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
41385 }
41386
41387 function phraseChanged() {
41388 showPending();
41389 hideValidationError();
41390 setMnemonicLanguage();
41391 // Get the mnemonic phrase
41392 var phrase = DOM.phrase.val();
41393 var errorText = findPhraseErrors(phrase);
41394 if (errorText) {
41395 showValidationError(errorText);
41396 return;
41397 }
41398 // Calculate and display
41399 var passphrase = DOM.passphrase.val();
41400 calcBip32RootKeyFromSeed(phrase, passphrase);
41401 calcForDerivationPath();
41402 hidePending();
41403 }
41404
41405 function delayedEntropyChanged() {
41406 hideValidationError();
41407 showPending();
41408 if (entropyChangeTimeoutEvent != null) {
41409 clearTimeout(entropyChangeTimeoutEvent);
41410 }
41411 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
41412 }
41413
41414 function entropyChanged() {
41415 // If blank entropy, clear mnemonic, addresses, errors
41416 if (DOM.entropy.val().trim().length == 0) {
41417 clearDisplay();
41418 clearEntropyFeedback();
41419 DOM.phrase.val("");
41420 showValidationError("Blank entropy");
41421 return;
41422 }
41423 // Get the current phrase to detect changes
41424 var phrase = DOM.phrase.val();
41425 // Set the phrase from the entropy
41426 setMnemonicFromEntropy();
41427 // Recalc addresses if the phrase has changed
41428 var newPhrase = DOM.phrase.val();
41429 if (newPhrase != phrase) {
41430 if (newPhrase.length == 0) {
41431 clearDisplay();
41432 }
41433 else {
41434 phraseChanged();
41435 }
41436 }
41437 else {
41438 hidePending();
41439 }
41440 }
41441
41442 function delayedRootKeyChanged() {
41443 // Warn if there is an existing mnemonic or passphrase.
41444 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
41445 if (!confirm("This will clear existing mnemonic and passphrase")) {
41446 DOM.rootKey.val(bip32RootKey);
41447 return
41448 }
41449 }
41450 hideValidationError();
41451 showPending();
41452 // Clear existing mnemonic and passphrase
41453 DOM.phrase.val("");
41454 DOM.passphrase.val("");
41455 seed = null;
41456 if (rootKeyChangedTimeoutEvent != null) {
41457 clearTimeout(rootKeyChangedTimeoutEvent);
41458 }
41459 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
41460 }
41461
41462 function rootKeyChanged() {
41463 showPending();
41464 hideValidationError();
41465 // Validate the root key TODO
41466 var rootKeyBase58 = DOM.rootKey.val();
41467 var errorText = validateRootKey(rootKeyBase58);
41468 if (errorText) {
41469 showValidationError(errorText);
41470 return;
41471 }
41472 // Calculate and display
41473 calcBip32RootKeyFromBase58(rootKeyBase58);
41474 calcForDerivationPath();
41475 }
41476
41477 function calcForDerivationPath() {
41478 showPending();
41479 clearAddressesList();
41480 hideValidationError();
41481 // Get the derivation path
41482 var derivationPath = getDerivationPath();
41483 var errorText = findDerivationPathErrors(derivationPath);
41484 if (errorText) {
41485 showValidationError(errorText);
41486 return;
41487 }
41488 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
41489 if (bip44TabSelected()) {
41490 displayBip44Info();
41491 }
41492 displayBip32Info();
41493 hidePending();
41494 }
41495
41496 function generateClicked() {
41497 if (isUsingOwnEntropy()) {
41498 return;
41499 }
41500 clearDisplay();
41501 showPending();
41502 setTimeout(function() {
41503 setMnemonicLanguage();
41504 var phrase = generateRandomPhrase();
41505 if (!phrase) {
41506 return;
41507 }
41508 phraseChanged();
41509 }, 50);
41510 }
41511
41512 function languageChanged() {
41513 setTimeout(function() {
41514 setMnemonicLanguage();
41515 if (DOM.phrase.val().length > 0) {
41516 var newPhrase = convertPhraseToNewLanguage();
41517 DOM.phrase.val(newPhrase);
41518 phraseChanged();
41519 }
41520 else {
41521 DOM.generate.trigger("click");
41522 }
41523 }, 50);
41524 }
41525
41526 function toggleIndexes() {
41527 showIndex = !showIndex;
41528 $("td.index span").toggleClass("invisible");
41529 }
41530
41531 function toggleAddresses() {
41532 showAddress = !showAddress;
41533 $("td.address span").toggleClass("invisible");
41534 }
41535
41536 function togglePublicKeys() {
41537 showPubKey = !showPubKey;
41538 $("td.pubkey span").toggleClass("invisible");
41539 }
41540
41541 function togglePrivateKeys() {
41542 showPrivKey = !showPrivKey;
41543 $("td.privkey span").toggleClass("invisible");
41544 }
41545
41546 // Private methods
41547
41548 function generateRandomPhrase() {
41549 if (!hasStrongRandom()) {
41550 var errorText = "This browser does not support strong randomness";
41551 showValidationError(errorText);
41552 return;
41553 }
41554 var numWords = parseInt(DOM.generatedStrength.val());
41555 var strength = numWords / 3 * 32;
41556 var words = mnemonic.generate(strength);
41557 DOM.phrase.val(words);
41558 return words;
41559 }
41560
41561 function calcBip32RootKeyFromSeed(phrase, passphrase) {
41562 seed = mnemonic.toSeed(phrase, passphrase);
41563 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
41564 }
41565
41566 function calcBip32RootKeyFromBase58(rootKeyBase58) {
41567 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
41568 }
41569
41570 function calcBip32ExtendedKey(path) {
41571 // Check there's a root key to derive from
41572 if (!bip32RootKey) {
41573 return bip32RootKey;
41574 }
41575 var extendedKey = bip32RootKey;
41576 // Derive the key from the path
41577 var pathBits = path.split("/");
41578 for (var i=0; i<pathBits.length; i++) {
41579 var bit = pathBits[i];
41580 var index = parseInt(bit);
41581 if (isNaN(index)) {
41582 continue;
41583 }
41584 var hardened = bit[bit.length-1] == "'";
41585 var isPriv = "privKey" in extendedKey;
41586 var invalidDerivationPath = hardened && !isPriv;
41587 if (invalidDerivationPath) {
41588 extendedKey = null;
41589 }
41590 else if (hardened) {
41591 extendedKey = extendedKey.deriveHardened(index);
41592 }
41593 else {
41594 extendedKey = extendedKey.derive(index);
41595 }
41596 }
41597 return extendedKey
41598 }
41599
41600 function showValidationError(errorText) {
41601 DOM.feedback
41602 .text(errorText)
41603 .show();
41604 }
41605
41606 function hideValidationError() {
41607 DOM.feedback
41608 .text("")
41609 .hide();
41610 }
41611
41612 function findPhraseErrors(phrase) {
41613 // Preprocess the words
41614 phrase = mnemonic.normalizeString(phrase);
41615 var words = phraseToWordArray(phrase);
41616 // Detect blank phrase
41617 if (words.length == 0) {
41618 return "Blank mnemonic";
41619 }
41620 // Check each word
41621 for (var i=0; i<words.length; i++) {
41622 var word = words[i];
41623 var language = getLanguage();
41624 if (WORDLISTS[language].indexOf(word) == -1) {
41625 console.log("Finding closest match to " + word);
41626 var nearestWord = findNearestWord(word);
41627 return word + " not in wordlist, did you mean " + nearestWord + "?";
41628 }
41629 }
41630 // Check the words are valid
41631 var properPhrase = wordArrayToPhrase(words);
41632 var isValid = mnemonic.check(properPhrase);
41633 if (!isValid) {
41634 return "Invalid mnemonic";
41635 }
41636 return false;
41637 }
41638
41639 function validateRootKey(rootKeyBase58) {
41640 try {
41641 bitcoin.HDNode.fromBase58(rootKeyBase58);
41642 }
41643 catch (e) {
41644 return "Invalid root key";
41645 }
41646 return "";
41647 }
41648
41649 function getDerivationPath() {
41650 if (bip44TabSelected()) {
41651 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
41652 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
41653 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
41654 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
41655 var path = "m/";
41656 path += purpose + "'/";
41657 path += coin + "'/";
41658 path += account + "'/";
41659 path += change;
41660 DOM.bip44path.val(path);
41661 var derivationPath = DOM.bip44path.val();
41662 console.log("Using derivation path from BIP44 tab: " + derivationPath);
41663 return derivationPath;
41664 }
41665 else if (bip32TabSelected()) {
41666 var derivationPath = DOM.bip32path.val();
41667 console.log("Using derivation path from BIP32 tab: " + derivationPath);
41668 return derivationPath;
41669 }
41670 else {
41671 console.log("Unknown derivation path");
41672 }
41673 }
41674
41675 function findDerivationPathErrors(path) {
41676 // TODO is not perfect but is better than nothing
41677 // Inspired by
41678 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
41679 // and
41680 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
41681 var maxDepth = 255; // TODO verify this!!
41682 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
41683 if (path[0] != "m") {
41684 return "First character must be 'm'";
41685 }
41686 if (path.length > 1) {
41687 if (path[1] != "/") {
41688 return "Separator must be '/'";
41689 }
41690 var indexes = path.split("/");
41691 if (indexes.length > maxDepth) {
41692 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
41693 }
41694 for (var depth = 1; depth<indexes.length; depth++) {
41695 var index = indexes[depth];
41696 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
41697 if (invalidChars.length > 0) {
41698 return "Invalid characters " + invalidChars + " found at depth " + depth;
41699 }
41700 var indexValue = parseInt(index.replace("'", ""));
41701 if (isNaN(depth)) {
41702 return "Invalid number at depth " + depth;
41703 }
41704 if (indexValue > maxIndexValue) {
41705 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
41706 }
41707 }
41708 }
41709 // Check root key exists or else derivation path is useless!
41710 if (!bip32RootKey) {
41711 return "No root key";
41712 }
41713 // Check no hardened derivation path when using xpub keys
41714 var hardened = path.indexOf("'") > -1;
41715 var isXpubkey = !("privKey" in bip32RootKey);
41716 if (hardened && isXpubkey) {
41717 return "Hardened derivation path is invalid with xpub key";
41718 }
41719 return false;
41720 }
41721
41722 function displayBip44Info() {
41723 // Get the derivation path for the account
41724 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
41725 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
41726 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
41727 var path = "m/";
41728 path += purpose + "'/";
41729 path += coin + "'/";
41730 path += account + "'/";
41731 // Calculate the account extended keys
41732 var accountExtendedKey = calcBip32ExtendedKey(path);
41733 var accountXprv = accountExtendedKey.toBase58();
41734 var accountXpub = accountExtendedKey.toBase58(false);
41735 // Display the extended keys
41736 DOM.bip44accountXprv.val(accountXprv);
41737 DOM.bip44accountXpub.val(accountXpub);
41738 }
41739
41740 function displayBip32Info() {
41741 // Display the key
41742 DOM.seed.val(seed);
41743 var rootKey = bip32RootKey.toBase58();
41744 DOM.rootKey.val(rootKey);
41745 var xprvkeyB58 = "NA";
41746 if (bip32ExtendedKey.privKey) {
41747 xprvkeyB58 = bip32ExtendedKey.toBase58();
41748 }
41749 var extendedPrivKey = xprvkeyB58;
41750 DOM.extendedPrivKey.val(extendedPrivKey);
41751 var extendedPubKey = bip32ExtendedKey.toBase58(false);
41752 DOM.extendedPubKey.val(extendedPubKey);
41753 // Display the addresses and privkeys
41754 clearAddressesList();
41755 displayAddresses(0, 20);
41756 }
41757
41758 function displayAddresses(start, total) {
41759 generationProcesses.push(new (function() {
41760
41761 var rows = [];
41762
41763 this.stop = function() {
41764 for (var i=0; i<rows.length; i++) {
41765 rows[i].shouldGenerate = false;
41766 }
41767 }
41768
41769 for (var i=0; i<total; i++) {
41770 var index = i + start;
41771 rows.push(new TableRow(index));
41772 }
41773
41774 })());
41775 }
41776
41777 function TableRow(index) {
41778
41779 var self = this;
41780 this.shouldGenerate = true;
41781 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
41782
41783 function init() {
41784 calculateValues();
41785 }
41786
41787 function calculateValues() {
41788 setTimeout(function() {
41789 if (!self.shouldGenerate) {
41790 return;
41791 }
41792 var key = "";
41793 if (useHardenedAddresses) {
41794 key = bip32ExtendedKey.deriveHardened(index);
41795 }
41796 else {
41797 key = bip32ExtendedKey.derive(index);
41798 }
41799 var address = key.getAddress().toString();
41800 var privkey = "NA";
41801 if (key.privKey) {
41802 privkey = key.privKey.toWIF(network);
41803 }
41804 var pubkey = key.pubKey.toHex();
41805 var indexText = getDerivationPath() + "/" + index;
41806 if (useHardenedAddresses) {
41807 indexText = indexText + "'";
41808 }
41809 // Ethereum values are different
41810 if (networks[DOM.network.val()].name == "Ethereum") {
41811 var privKeyBuffer = key.privKey.d.toBuffer();
41812 privkey = privKeyBuffer.toString('hex');
41813 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
41814 var hexAddress = addressBuffer.toString('hex');
41815 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
41816 address = ethUtil.addHexPrefix(checksumAddress);
41817 }
41818 addAddressToList(indexText, address, pubkey, privkey);
41819 }, 50)
41820 }
41821
41822 init();
41823
41824 }
41825
41826 function showMore() {
41827 var start = DOM.addresses.children().length;
41828 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
41829 if (isNaN(rowsToAdd)) {
41830 rowsToAdd = 20;
41831 DOM.rowsToAdd.val("20");
41832 }
41833 if (rowsToAdd > 200) {
41834 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
41835 msg += "Do you want to continue?";
41836 if (!confirm(msg)) {
41837 return;
41838 }
41839 }
41840 displayAddresses(start, rowsToAdd);
41841 }
41842
41843 function clearDisplay() {
41844 clearAddressesList();
41845 clearKey();
41846 hideValidationError();
41847 }
41848
41849 function clearAddressesList() {
41850 DOM.addresses.empty();
41851 stopGenerating();
41852 }
41853
41854 function stopGenerating() {
41855 while (generationProcesses.length > 0) {
41856 var generation = generationProcesses.shift();
41857 generation.stop();
41858 }
41859 }
41860
41861 function clearKey() {
41862 DOM.rootKey.val("");
41863 DOM.extendedPrivKey.val("");
41864 DOM.extendedPubKey.val("");
41865 }
41866
41867 function addAddressToList(indexText, address, pubkey, privkey) {
41868 var row = $(addressRowTemplate.html());
41869 // Elements
41870 var indexCell = row.find(".index span");
41871 var addressCell = row.find(".address span");
41872 var pubkeyCell = row.find(".pubkey span");
41873 var privkeyCell = row.find(".privkey span");
41874 // Content
41875 indexCell.text(indexText);
41876 addressCell.text(address);
41877 pubkeyCell.text(pubkey);
41878 privkeyCell.text(privkey);
41879 // Visibility
41880 if (!showIndex) {
41881 indexCell.addClass("invisible");
41882 }
41883 if (!showAddress) {
41884 addressCell.addClass("invisible");
41885 }
41886 if (!showPubKey) {
41887 pubkeyCell.addClass("invisible");
41888 }
41889 if (!showPrivKey) {
41890 privkeyCell.addClass("invisible");
41891 }
41892 DOM.addresses.append(row);
41893 var rowShowQrEls = row.find("[data-show-qr]");
41894 setQrEvents(rowShowQrEls);
41895 }
41896
41897 function hasStrongRandom() {
41898 return 'crypto' in window && window['crypto'] !== null;
41899 }
41900
41901 function disableForms() {
41902 $("form").on("submit", function(e) {
41903 e.preventDefault();
41904 });
41905 }
41906
41907 function parseIntNoNaN(val, defaultVal) {
41908 var v = parseInt(val);
41909 if (isNaN(v)) {
41910 return defaultVal;
41911 }
41912 return v;
41913 }
41914
41915 function showPending() {
41916 DOM.feedback
41917 .text("Calculating...")
41918 .show();
41919 }
41920
41921 function findNearestWord(word) {
41922 var language = getLanguage();
41923 var words = WORDLISTS[language];
41924 var minDistance = 99;
41925 var closestWord = words[0];
41926 for (var i=0; i<words.length; i++) {
41927 var comparedTo = words[i];
41928 if (comparedTo.indexOf(word) == 0) {
41929 return comparedTo;
41930 }
41931 var distance = Levenshtein.get(word, comparedTo);
41932 if (distance < minDistance) {
41933 closestWord = comparedTo;
41934 minDistance = distance;
41935 }
41936 }
41937 return closestWord;
41938 }
41939
41940 function hidePending() {
41941 DOM.feedback
41942 .text("")
41943 .hide();
41944 }
41945
41946 function populateNetworkSelect() {
41947 for (var i=0; i<networks.length; i++) {
41948 var network = networks[i];
41949 var option = $("<option>");
41950 option.attr("value", i);
41951 option.text(network.name);
41952 DOM.phraseNetwork.append(option);
41953 }
41954 }
41955
41956 function populateClientSelect() {
41957 for (var i=0; i<clients.length; i++) {
41958 var client = clients[i];
41959 var option = $("<option>");
41960 option.attr("value", i);
41961 option.text(client.name);
41962 DOM.bip32Client.append(option);
41963 }
41964 }
41965
41966 function getLanguage() {
41967 var defaultLanguage = "english";
41968 // Try to get from existing phrase
41969 var language = getLanguageFromPhrase();
41970 // Try to get from url if not from phrase
41971 if (language.length == 0) {
41972 language = getLanguageFromUrl();
41973 }
41974 // Default to English if no other option
41975 if (language.length == 0) {
41976 language = defaultLanguage;
41977 }
41978 return language;
41979 }
41980
41981 function getLanguageFromPhrase(phrase) {
41982 // Check if how many words from existing phrase match a language.
41983 var language = "";
41984 if (!phrase) {
41985 phrase = DOM.phrase.val();
41986 }
41987 if (phrase.length > 0) {
41988 var words = phraseToWordArray(phrase);
41989 var languageMatches = {};
41990 for (l in WORDLISTS) {
41991 // Track how many words match in this language
41992 languageMatches[l] = 0;
41993 for (var i=0; i<words.length; i++) {
41994 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
41995 if (wordInLanguage) {
41996 languageMatches[l]++;
41997 }
41998 }
41999 // Find languages with most word matches.
42000 // This is made difficult due to commonalities between Chinese
42001 // simplified vs traditional.
42002 var mostMatches = 0;
42003 var mostMatchedLanguages = [];
42004 for (var l in languageMatches) {
42005 var numMatches = languageMatches[l];
42006 if (numMatches > mostMatches) {
42007 mostMatches = numMatches;
42008 mostMatchedLanguages = [l];
42009 }
42010 else if (numMatches == mostMatches) {
42011 mostMatchedLanguages.push(l);
42012 }
42013 }
42014 }
42015 if (mostMatchedLanguages.length > 0) {
42016 // Use first language and warn if multiple detected
42017 language = mostMatchedLanguages[0];
42018 if (mostMatchedLanguages.length > 1) {
42019 console.warn("Multiple possible languages");
42020 console.warn(mostMatchedLanguages);
42021 }
42022 }
42023 }
42024 return language;
42025 }
42026
42027 function getLanguageFromUrl() {
42028 for (var language in WORDLISTS) {
42029 if (window.location.hash.indexOf(language) > -1) {
42030 return language;
42031 }
42032 }
42033 return "";
42034 }
42035
42036 function setMnemonicLanguage() {
42037 var language = getLanguage();
42038 // Load the bip39 mnemonic generator for this language if required
42039 if (!(language in mnemonics)) {
42040 mnemonics[language] = new Mnemonic(language);
42041 }
42042 mnemonic = mnemonics[language];
42043 }
42044
42045 function convertPhraseToNewLanguage() {
42046 var oldLanguage = getLanguageFromPhrase();
42047 var newLanguage = getLanguageFromUrl();
42048 var oldPhrase = DOM.phrase.val();
42049 var oldWords = phraseToWordArray(oldPhrase);
42050 var newWords = [];
42051 for (var i=0; i<oldWords.length; i++) {
42052 var oldWord = oldWords[i];
42053 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
42054 var newWord = WORDLISTS[newLanguage][index];
42055 newWords.push(newWord);
42056 }
42057 newPhrase = wordArrayToPhrase(newWords);
42058 return newPhrase;
42059 }
42060
42061 // TODO look at jsbip39 - mnemonic.splitWords
42062 function phraseToWordArray(phrase) {
42063 var words = phrase.split(/\s/g);
42064 var noBlanks = [];
42065 for (var i=0; i<words.length; i++) {
42066 var word = words[i];
42067 if (word.length > 0) {
42068 noBlanks.push(word);
42069 }
42070 }
42071 return noBlanks;
42072 }
42073
42074 // TODO look at jsbip39 - mnemonic.joinWords
42075 function wordArrayToPhrase(words) {
42076 var phrase = words.join(" ");
42077 var language = getLanguageFromPhrase(phrase);
42078 if (language == "japanese") {
42079 phrase = words.join("\u3000");
42080 }
42081 return phrase;
42082 }
42083
42084 function isUsingOwnEntropy() {
42085 return DOM.useEntropy.prop("checked");
42086 }
42087
42088 function setMnemonicFromEntropy() {
42089 clearEntropyFeedback();
42090 // Get entropy value
42091 var entropyStr = DOM.entropy.val();
42092 // Work out minimum base for entropy
42093 var entropy = Entropy.fromString(entropyStr);
42094 if (entropy.binaryStr.length == 0) {
42095 return;
42096 }
42097 // Show entropy details
42098 showEntropyFeedback(entropy);
42099 // Use entropy hash if not using raw entropy
42100 var bits = entropy.binaryStr;
42101 var mnemonicLength = DOM.entropyMnemonicLength.val();
42102 if (mnemonicLength != "raw") {
42103 // Get bits by hashing entropy with SHA256
42104 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
42105 var hex = sjcl.codec.hex.fromBits(hash);
42106 bits = BigInteger.parse(hex, 16).toString(2);
42107 while (bits.length % 256 != 0) {
42108 bits = "0" + bits;
42109 }
42110 // Truncate hash to suit number of words
42111 mnemonicLength = parseInt(mnemonicLength);
42112 var numberOfBits = 32 * mnemonicLength / 3;
42113 bits = bits.substring(0, numberOfBits);
42114 }
42115 // Discard trailing entropy
42116 var bitsToUse = Math.floor(bits.length / 32) * 32;
42117 var start = bits.length - bitsToUse;
42118 var binaryStr = bits.substring(start);
42119 // Convert entropy string to numeric array
42120 var entropyArr = [];
42121 for (var i=0; i<binaryStr.length / 8; i++) {
42122 var byteAsBits = binaryStr.substring(i*8, i*8+8);
42123 var entropyByte = parseInt(byteAsBits, 2);
42124 entropyArr.push(entropyByte)
42125 }
42126 // Convert entropy array to mnemonic
42127 var phrase = mnemonic.toMnemonic(entropyArr);
42128 // Set the mnemonic in the UI
42129 DOM.phrase.val(phrase);
42130 }
42131
42132 function clearEntropyFeedback() {
42133 DOM.entropyStrength.text("...");
42134 DOM.entropyType.text("");
42135 DOM.entropyWordCount.text("0");
42136 DOM.entropyEventCount.text("0");
42137 DOM.entropyBitsPerEvent.text("0");
42138 DOM.entropyBits.text("0");
42139 DOM.entropyFiltered.html("&nbsp;");
42140 DOM.entropyBinary.html("&nbsp;");
42141 }
42142
42143 function showEntropyFeedback(entropy) {
42144 var numberOfBits = entropy.binaryStr.length;
42145 var strength = "extremely weak";
42146 if (numberOfBits >= 64) {
42147 strength = "very weak";
42148 }
42149 if (numberOfBits >= 96) {
42150 strength = "weak";
42151 }
42152 if (numberOfBits >= 128) {
42153 strength = "strong";
42154 }
42155 if (numberOfBits >= 160) {
42156 strength = "very strong";
42157 }
42158 if (numberOfBits >= 192) {
42159 strength = "extremely strong";
42160 }
42161 // If time to crack is less than one day, and password is considered
42162 // strong or better based on the number of bits, rename strength to
42163 // 'easily cracked'.
42164 try {
42165 var z = zxcvbn(entropy.base.parts.join(""));
42166 var timeToCrack = z.crack_times_seconds.offline_fast_hashing_1e10_per_second;
42167 if (timeToCrack < 86400 && entropy.binaryStr.length >= 128) {
42168 strength = "easily cracked";
42169 if (z.feedback.warning != "") {
42170 strength = strength + " - " + z.feedback.warning;
42171 };
42172 }
42173 }
42174 catch (e) {
42175 strength = "unknown";
42176 console.log("Error detecting entropy strength with zxcvbn:");
42177 console.log(e);
42178 }
42179 var entropyTypeStr = getEntropyTypeStr(entropy);
42180 var wordCount = Math.floor(numberOfBits / 32) * 3;
42181 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
42182 DOM.entropyFiltered.html(entropy.cleanHtml);
42183 DOM.entropyType.text(entropyTypeStr);
42184 DOM.entropyStrength.text(strength);
42185 DOM.entropyEventCount.text(entropy.base.ints.length);
42186 DOM.entropyBits.text(numberOfBits);
42187 DOM.entropyWordCount.text(wordCount);
42188 DOM.entropyBinary.text(entropy.binaryStr);
42189 DOM.entropyBitsPerEvent.text(bitsPerEvent);
42190 }
42191
42192 function getEntropyTypeStr(entropy) {
42193 var typeStr = entropy.base.str;
42194 // Add some detail if these are cards
42195 if (entropy.base.asInt == 52) {
42196 var cardDetail = []; // array of message strings
42197 // Detect duplicates
42198 var dupes = [];
42199 var dupeTracker = {};
42200 for (var i=0; i<entropy.base.parts.length; i++) {
42201 var card = entropy.base.parts[i];
42202 var cardUpper = card.toUpperCase();
42203 if (cardUpper in dupeTracker) {
42204 dupes.push(card);
42205 }
42206 dupeTracker[cardUpper] = true;
42207 }
42208 if (dupes.length > 0) {
42209 var dupeWord = "duplicates";
42210 if (dupes.length == 1) {
42211 dupeWord = "duplicate";
42212 }
42213 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
42214 if (dupes.length > 3) {
42215 msg += "...";
42216 }
42217 cardDetail.push(msg);
42218 }
42219 // Detect full deck
42220 var uniqueCards = [];
42221 for (var uniqueCard in dupeTracker) {
42222 uniqueCards.push(uniqueCard);
42223 }
42224 if (uniqueCards.length == 52) {
42225 cardDetail.unshift("full deck");
42226 }
42227 // Detect missing cards
42228 var values = "A23456789TJQK";
42229 var suits = "CDHS";
42230 var missingCards = [];
42231 for (var i=0; i<suits.length; i++) {
42232 for (var j=0; j<values.length; j++) {
42233 var card = values[j] + suits[i];
42234 if (!(card in dupeTracker)) {
42235 missingCards.push(card);
42236 }
42237 }
42238 }
42239 // Display missing cards if six or less, ie clearly going for full deck
42240 if (missingCards.length > 0 && missingCards.length <= 6) {
42241 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
42242 if (missingCards.length > 3) {
42243 msg += "...";
42244 }
42245 cardDetail.push(msg);
42246 }
42247 // Add card details to typeStr
42248 if (cardDetail.length > 0) {
42249 typeStr += " (" + cardDetail.join(", ") + ")";
42250 }
42251 }
42252 return typeStr;
42253 }
42254
42255 function setQrEvents(els) {
42256 els.on("mouseenter", createQr);
42257 els.on("mouseleave", destroyQr);
42258 els.on("click", toggleQr);
42259 }
42260
42261 function createQr(e) {
42262 var content = e.target.textContent || e.target.value;
42263 if (content) {
42264 var size = 130;
42265 DOM.qrImage.qrcode({width: size, height: size, text: content});
42266 if (!showQr) {
42267 DOM.qrHider.addClass("hidden");
42268 }
42269 else {
42270 DOM.qrHider.removeClass("hidden");
42271 }
42272 DOM.qrContainer.removeClass("hidden");
42273 }
42274 }
42275
42276 function destroyQr() {
42277 DOM.qrImage.text("");
42278 DOM.qrContainer.addClass("hidden");
42279 }
42280
42281 function toggleQr() {
42282 showQr = !showQr;
42283 DOM.qrHider.toggleClass("hidden");
42284 DOM.qrHint.toggleClass("hidden");
42285 }
42286
42287 function bip44TabSelected() {
42288 return DOM.bip44tab.hasClass("active");
42289 }
42290
42291 function bip32TabSelected() {
42292 return DOM.bip32tab.hasClass("active");
42293 }
42294
42295 var networks = [
42296 {
42297 name: "Bitcoin",
42298 onSelect: function() {
42299 network = bitcoin.networks.bitcoin;
42300 DOM.bip44coin.val(0);
42301 },
42302 },
42303 {
42304 name: "Bitcoin Testnet",
42305 onSelect: function() {
42306 network = bitcoin.networks.testnet;
42307 DOM.bip44coin.val(1);
42308 },
42309 },
42310 {
42311 name: "Litecoin",
42312 onSelect: function() {
42313 network = bitcoin.networks.litecoin;
42314 DOM.bip44coin.val(2);
42315 },
42316 },
42317 {
42318 name: "Dogecoin",
42319 onSelect: function() {
42320 network = bitcoin.networks.dogecoin;
42321 DOM.bip44coin.val(3);
42322 },
42323 },
42324 {
42325 name: "ShadowCash",
42326 onSelect: function() {
42327 network = bitcoin.networks.shadow;
42328 DOM.bip44coin.val(35);
42329 },
42330 },
42331 {
42332 name: "ShadowCash Testnet",
42333 onSelect: function() {
42334 network = bitcoin.networks.shadowtn;
42335 DOM.bip44coin.val(1);
42336 },
42337 },
42338 {
42339 name: "Viacoin",
42340 onSelect: function() {
42341 network = bitcoin.networks.viacoin;
42342 DOM.bip44coin.val(14);
42343 },
42344 },
42345 {
42346 name: "Viacoin Testnet",
42347 onSelect: function() {
42348 network = bitcoin.networks.viacointestnet;
42349 DOM.bip44coin.val(1);
42350 },
42351 },
42352 {
42353 name: "Jumbucks",
42354 onSelect: function() {
42355 network = bitcoin.networks.jumbucks;
42356 DOM.bip44coin.val(26);
42357 },
42358 },
42359 {
42360 name: "CLAM",
42361 onSelect: function() {
42362 network = bitcoin.networks.clam;
42363 DOM.bip44coin.val(23);
42364 },
42365 },
42366 {
42367 name: "DASH",
42368 onSelect: function() {
42369 network = bitcoin.networks.dash;
42370 DOM.bip44coin.val(5);
42371 },
42372 },
42373 {
42374 name: "Namecoin",
42375 onSelect: function() {
42376 network = bitcoin.networks.namecoin;
42377 DOM.bip44coin.val(7);
42378 },
42379 },
42380 {
42381 name: "Peercoin",
42382 onSelect: function() {
42383 network = bitcoin.networks.peercoin;
42384 DOM.bip44coin.val(6);
42385 },
42386 },
42387 {
42388 name: "Ethereum",
42389 onSelect: function() {
42390 network = bitcoin.networks.bitcoin;
42391 DOM.bip44coin.val(60);
42392 },
42393 },
42394 ]
42395
42396 var clients = [
42397 {
42398 name: "Bitcoin Core",
42399 onSelect: function() {
42400 DOM.bip32path.val("m/0'/0'");
42401 DOM.hardenedAddresses.prop('checked', true);
42402 },
42403 },
42404 {
42405 name: "blockchain.info",
42406 onSelect: function() {
42407 DOM.bip32path.val("m/44'/0'/0'");
42408 DOM.hardenedAddresses.prop('checked', false);
42409 },
42410 },
42411 {
42412 name: "MultiBit HD",
42413 onSelect: function() {
42414 DOM.bip32path.val("m/0'/0");
42415 DOM.hardenedAddresses.prop('checked', false);
42416 },
42417 }
42418 ]
42419
42420 init();
42421
42422 })();
42423 </script>
42424 </body>
42425 </html>